本文共 3877 字,大约阅读时间需要 12 分钟。
Studio中基于 umeng 统计的多渠道打包。
在AndroidMainfest.xml的<application>标签中添加相关信息:APP_KEY和渠道号。这里渠道号只是一个占位符,在打包的阶段可以动态的替换占位符里的信息。
...
在app
的module
中的build.gradle
添加下列信息:别名、别名密码、签名文件地址和签名密码
signingConfigs { release { keyAlias 'xxx' keyPassword 'xxx' storeFile file('C:/Users/Administrator/Desktop/xxx.jks') storePassword 'xxx' }}
buildTypes
的签名配置因为要打release
包,所以需要设置buildTypes
为release
的签名配置,如下
buildTypes { // 设置debug版本默认渠道设置 debug { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng_channel"] } // 正式版本签名设置 release { zipAlignEnabled true minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release // 加上这句话即可 }}
渠道号是自己定的,比如wandoujia(豌豆荚)等。不要使用数字开头的命名方式,也不要使用 unknow
这样的名字 。build.gradle(Module:app) 设置productFlavors。xml 中的渠道号占位符${UMENG_CHANNEL_VALUE}
,这里就是要动态的替换占位符的内容,配置信息如下:
android { productFlavors { kuan { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "kuan"] } xiaomi { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"] } qh360 { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qh360"] } baidu { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"] } wandoujia { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] } }}
gradlew cleangradlew assembleRelease
3.sycn project一下再打包即可,Build-->Generate signed APK,Flavors中多选,选择需要的渠道
5.完成,注意生成目录
签名信息这种东西属于私密的信息,应该保护起来,最好不要明文写到 build.gradle 里,更不要上传到代码仓库中去。应该放在单独的文件中,在 build.gradle 里去引用这个文件读取签名信息。
清空 signingConfigs
// TODO建议在命令后面加上 --stacktrace
参数,这样万一命令执行失败,可以看到详细的出错信息
gradlew clean --stacktracegradlew assembleRelease --stacktrace
app_版本名称_版本号_日期_渠道号.apk
def packageTime() { return new Date().format("yyyyMMdd-HHmmss", TimeZone.getTimeZone("UTC"))}android { applicationVariants.all { variant -> variant.outputs.each { output -> // 重命名产出的apk文件 def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { File outputDirectory = new File(outputFile.parent); def fileName if (variant.buildType.name == "release") { fileName = "app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${packageTime()}_${variant.productFlavors[0].name}.apk" } else { fileName = "app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${packageTime()}_debug.apk" } output.outputFile = new File(outputDirectory, fileName) } } }}
输出的目录:app/build/outputs/apk
unaligned apk
文件在 app/build/outputs/apk 文件夹中,可以看到一些文件名末尾带有 unaligned 文字的冗余文件,这些文件没有用,可以删掉,只需要在 build.gradle 中添加下列命令就好了
applicationVariants.all { variant -> variant.outputs.each { output -> // 重命名产出的apk文件 def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { File outputDirectory = new File(outputFile.parent); def fileName if (variant.buildType.name == "release") { fileName = "app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${packageTime()}_${variant.productFlavors[0].name}.apk" } else { fileName = "app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${packageTime()}_debug.apk" } output.outputFile = new File(outputDirectory, fileName) } // 删除unaligned apk if (output.zipAlign != null) { output.zipAlign.doLast { output.zipAlign.inputFile.delete() } } }}
转载地址:http://gcdvl.baihongyu.com/