AndroidStudio多渠道打包,生成不同app

1. 多渠道的概念

  • APP发布到不同的应用平台,监测用户是从哪个平台安装的。

2. 为什么要多渠道打包


  • 统计用户安装APP来源
  • 批量修改生成的apk文件名
  • 可更改包名
  • 生成不同应用名称或图标

有的时候你会在不同平台看到XX-小米版,XX-魅族版等等,或者beta版的图标和正式的不一样,其实代码还是那个代码,无非做点小小的改动


3.多渠道怎么打包呢

  • 一般是通过gradle来实现的
1. 在AndroidManifest.xml中添加占位符

一般都是像友盟,腾讯统计分析SDK中使用的方案,网上友盟的较多,我实际用的是腾讯分析所以就拿腾讯的来说(其实都一样)。
首先,在AndroidManifest.xml的application标签里添加一个meta-data标签定义MTA_CHANNEL占位符,腾讯分析SDK会读取里面的value值传到后台,便于我们日后分析。

<meta-data android:name="MTA_CHANNEL"
            android:value="${MTA_CHANNEL_VALUE}" />
2. 修改app下的build.gradle文件,在android闭包中添加productFlavors属性配置占位符
android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.aimerd.channel"
        minSdkVersion 11
        targetSdkVersion 21
        versionCode 1
        versionName "1.0.0"
        multiDexEnabled true
    }
    buildTypes {
        release {
            // 不显示Log
            buildConfigField "boolean", "LOG_DEBUG", "false"
            //启用混淆代码的功能
            minifyEnabled true
            //压缩对齐生成的apk包
            zipAlignEnabled true
            //指定混淆规则,需要压缩优化的混淆要把proguard-android.txt换成proguard-android.txt
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            //移除无用的资源文件
            shrinkResources true
            //启用multidex的支持
            multiDexEnabled true
        }
    }
    productFlavors 
        baidu {
            manifestPlaceholders = [MTA_CHANNEL_VALUE: "baidu"]
        }
        _91 {
            manifestPlaceholders = [MTA_CHANNEL_VALUE: "91"]
        } 
        wandoujia {
            manifestPlaceholders = [MTA_CHANNEL_VALUE: "wandoujia"]
        }
        xiaomi {
            manifestPlaceholders = [MTA_CHANNEL_VALUE: "xiaomi"]
        }
    }
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def outputFile = output.outputFile
            if (variant.buildType.name.equals('release')) {
                //生成apk名字的格式:Channel1.0.0_2016-06-22_baidu.apk
                //可自定义自己想要生成的格式
                def fileName = "Channel${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
                       output.outputFile = new File(outputFile.parent, fileName)
            }
        }
    }

def releaseTime() {
    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}
  • ps : 如果觉得productFlavors重复代码太多,还可以这样写:
    productFlavors {
    baidu {}
    _91 {}
    wandoujia {}
    xiaomi {}
    }
    //批量处理
    productFlavors.all {
    flavor -> flavor.manifestPlaceholders = [MTA_CHANNEL_VALUE: name]
    }

    注意:像91和360这种数字的是不可以的,我试过”91”虽然可以编译通过,但打包的时候会报错
Error:Execution failed for task ':app:transformClassesWithRetrolambdaFor91Release'.
> java.lang.NullPointerException (no error message)
3. build->Generate Signed APK…打包即可

如何生成不同包的app,更改百度地图等key,sercert、启动页面img、应用图标等文件

  • 1.修改productFlavors 配置即可生成不同包名的app(需要注意Manifest.xml中的依赖于包名的属性同样可以用占位符 ${applicationId})
1. 更改包名
productFlavors {

            changelife_app { //畅E生活 
                applicationId "info.xinfu.o2o"
                versionCode 71
                versionName "3.3.7.1"
            }

            jinchen_app { //金晨物业
                applicationId "cn.jinchen.o2o"
                versionCode 71
                versionName "1.0.0"
            }

        }

${applicationId}如图:
- 例子
这里写图片描述
- 微信
这里写图片描述
- 极光
这种情况需要把string文件拷贝到

2. 如何生成不同应用名称或图标
  • 在app模块,src目录下,新建一个与main目录同级的jinchen_app目录(这里的名字跟productFlavors中定义的渠道名要一致):
    这里写图片描述
  • 把values下strings.xml中的”app_name”改成自己想要的应用名称。
  • 其他的需要更改的资源只需要把对应的资源复制过来,替换即可。
  • 打包时候出现你的渠道选型即成功了:
    这里写图片描述
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值