Android Studio Gradle多渠道打包

6
回复
702
查看
[复制链接]

4

主题

44

帖子

85

安币

程序猿

Rank: 2

QQ达人

发表于 2016-8-11 11:22:44 | 显示全部楼层 |阅读模式
第一步:配置AndroidManifest.xml
<meta-data android:name="UMENG_CHANNEL" android:value="umeng" />

如果没有多渠道打包的话,我们需要每次修改android:value="umeng",然后一次次的重新打包。
如果使用Gradle多渠道打包的话,我们需要把 value 的值设置成:
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}"/>
其中${UMENG_CHANNEL_VALUE}中的值就是你在gradle中自定义配置的值。
第二步:在build.gradle设置productFlavors
productFlavors {       wandoujia {            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]       }       xiaomi{            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]       }       qq {            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qq"]       }       _360 {            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "360"]       }  }
其中[UMENG_CHANNEL_VALUE: “wandoujia”]就是对应${UMENG_CHANNEL_VALUE}的值
可以将代码简化成:
android {       productFlavors {          wandoujia{}          xiaomi{}          qq{}          _360 {}      }       productFlavors.all {           flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]           }  }
其中name的值对相对应各个productFlavors的选项值,这样就达到自动替换渠道值的目的了。
这样生成apk时,选择相应的Flavors来生成指定渠道的包就可以了,而且生成的apk会自动帮你加上相应渠道的后缀,非常方便和直观。大家可以自己反编译验证。
第三步: 生成渠道包
Android Studio中的下方底栏中有个命令行工具Terminal,你也可以直接打开,输入命令:
gradle assembleRelease
也可以使用CMD命令,进入到项目所在的目录,直接输入命令(注意 :需要配置gradle 的环境变量)
第四步: 在 build.gradle 进行签名配置
//签名  signingConfigs{       release {            storeFile file("keystore路径")            storePassword "keystore密码"            keyAlias "别名"            keyPassword "别名密码"       }  }  buildTypes {          release {              runProguard false              proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'              signingConfig signingConfigs.release          }      }
第五步:修改导出包的APK名称
当我们的渠道包多起来以后为了方便运营人员查看和投放市场,所以我们需要根据渠道自定义apk的名称:
android {       buildTypes {          release {              runProguard false              proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'              signingConfig signingConfigs.release              //输出文件格式              applicationVariants.all { variant ->                  variant.outputs.each { output ->                      def outputFile = output.outputFile                      def fileName = outputFile.name.replace("app", readApkName() + "-" + defaultConfig.versionName + "-" + releaseTime())                      def file = new File(outputFile.parent, fileName)                      if (file.exists()) {                          file = new File(outputFile.parent, fileName.replace("-release", "2-release"))                      }                      output.outputFile = file                  }              }          }  }
最后打包完成之后,apk文件就会生成在项目的build\outputs\apk下。
最后:完整的Gradle 代码
android {   signingConfigs{       release {            storeFile file("keystore路径")            storePassword "keystore密码"            keyAlias "别名"            keyPassword "别名密码"       }  }   buildTypes {          release {              runProguard false              proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'              signingConfig signingConfigs.release              //输出文件格式              applicationVariants.all { variant ->                  variant.outputs.each { output ->                      def outputFile = output.outputFile                      def fileName = outputFile.name.replace("app", readApkName() + "-" + defaultConfig.versionName + "-" + releaseTime())                      def file = new File(outputFile.parent, fileName)                      if (file.exists()) {                          file = new File(outputFile.parent, fileName.replace("-release", "2-release"))                      }                      output.outputFile = file                  }              }          }   productFlavors {          wandoujia {}          xiaomi {}          yingyongbao {}          360 {}      }       productFlavors.all {           flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]           }  }
比较古老的打包方式了,还有更新,快的打包方式,请关注我的公众号, 或者 简书。
原文链接:http://www.jianshu.com/p/5cb424d9e301
最后,喜欢的同学可以关注我的微信公众号,我会不定期的写一些相关的文章,吹一些牛逼、砍一些大山、来一些心灵鸡汤、搞一些不为人知的故事

↑↑↑↑↑识别二维码就行↑↑↑↑↑

4

主题

44

帖子

85

安币

程序猿

Rank: 2

QQ达人

 楼主| 发表于 2016-8-11 11:23:26 | 显示全部楼层
代码都花了。。 。。。。

8

主题

9360

帖子

3543

安币

码皇(巴士元老)

Rank: 8Rank: 8

发表于 2016-8-11 11:25:31 | 显示全部楼层
不错不错,楼主辛苦了。。。

62

主题

9832

帖子

899

安币

代码手工艺人

学海无涯

Rank: 4

QQ达人

发表于 2016-8-11 11:26:01 | 显示全部楼层
好好 学习了 确实不错

0

主题

9448

帖子

2402

安币

Android大神

Rank: 6Rank: 6

发表于 2016-8-11 11:32:11 | 显示全部楼层
膜拜大神~

4

主题

9730

帖子

791

安币

代码手工艺人

Rank: 4

发表于 2016-8-11 11:32:51 | 显示全部楼层
写的真的很不错

0

主题

9366

帖子

2881

安币

Android大神

Rank: 6Rank: 6

发表于 2016-8-11 11:34:31 | 显示全部楼层
学习...学习...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )