我们须要使用一个变量标明该app的渠道。通常我们能够在manifest中的application节点下声明。例如以下。

<meta-data
android:name="CHANNEL_NAME"
android:value="${CHANNEL_VALUE}" />

然后将CHANNEL_VALUE的值替换成相应的渠道名。我们能够使用gradle的flavor替我们完毕

        flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
}" data-snippet-id="ext.ce943ea9d51c68f4f0a3339e1de051bc" data-snippet-saved="false" data-csrftoken="Eq6LIWAR-4Cx8Srvsca1PFMG7mGEOwWNPoGc" data-codota-status="done"> productFlavors {
wandoujia {}
qihu360 {}
baidu {}
hiapk {}
shoujizhushou {}
tencent {}
xiaomi {}
anzhi {}
uc {}
appchina {}
wangyi {}
mumayi {}
huawei {}
lenovo {}
flyme {}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
}

当然有时候我们须要配置某些渠道自己主动更新,某些渠道部自己主动更新,这时候须要一个变量来标明。

我们让全部渠道默认支持自己主动更新,让豌豆荚的不进行自己主动更新。

defaultConfig {
buildConfigField "boolean", "AUTO_UPDATES", "true"
}
productFlavors {
wandoujia {
buildConfigField "boolean", "AUTO_UPDATES", "false"
}
}

在程序中能够这样获得该变量

boolean autoUpdate=BuildConfig.AUTO_UPDATES;

甚至有时候须要更改生成的apk的名字,这时候能够自定义生成的名字

        variant.outputs.each { output ->
def oldFile = output.outputFile
def newName = '';
if (variant.buildType.name.equals('release')) {
def releaseApkName = getProductName() + "-v${defaultConfig.versionName}-" + variant.productFlavors[0].name + '-signed.apk'
output.outputFile = new File(oldFile.parent, releaseApkName)
}
if (variant.buildType.name.equals('beta')) {
newName = getProductName() + "-v${defaultConfig.versionName}-" + variant.productFlavors[0].name + "-build" + getDate() + ".apk"
output.outputFile = new File(oldFile.parent, newName)
}
if (variant.buildType.name.equals('debug')) {
newName = getProductName() + "-v${defaultConfig.versionName}-" + variant.productFlavors[0].name + "-debug" + getDate() + ".apk"
output.outputFile = new File(oldFile.parent, newName)
}
}
}
}" data-snippet-id="ext.2d8967d75590fed2f15bdfa52c0825b3" data-snippet-saved="false" data-csrftoken="w6snEJhm-V_o5qFIgYY_rrEhmATollsIqVfA" data-codota-status="done">//获取产品名
def getProductName() {
return "ProductName"
}
//获取时间戳
def getDate() {
def date = new Date()
def formattedDate = date.format('yyyyMMddHHmm')
return formattedDate
}
android {
...
//改动生成的apk名字
applicationVariants.all { variant ->
variant.outputs.each { output ->
def oldFile = output.outputFile
def newName = '';
if (variant.buildType.name.equals('release')) {
def releaseApkName = getProductName() + "-v${defaultConfig.versionName}-" + variant.productFlavors[0].name + '-signed.apk'
output.outputFile = new File(oldFile.parent, releaseApkName)
}
if (variant.buildType.name.equals('beta')) {
newName = getProductName() + "-v${defaultConfig.versionName}-" + variant.productFlavors[0].name + "-build" + getDate() + ".apk"
output.outputFile = new File(oldFile.parent, newName)
}
if (variant.buildType.name.equals('debug')) {
newName = getProductName() + "-v${defaultConfig.versionName}-" + variant.productFlavors[0].name + "-debug" + getDate() + ".apk"
output.outputFile = new File(oldFile.parent, newName)
}
}
}
}

最后我们还须要在程序中获得我们的渠道名进行兴许的一些操作。比方做一些统计之类的工作

        String channel=AppUtil.getMetaValue(this,"CHANNEL_NAME");
Log.d("TAG",channel);

一切完毕之后,我们就能够生成渠道包了

打开终端,输入下面命令回车就生成了全部的渠道包

gradlew assembleRelease

此外还能够点击andorid studio右边悬停的的gradlebutton,弹出的窗体里面有个圆形的execute gradle task的button,command Line里输入assembleRelease点击ok也能够生成全部渠道包

生成全部渠道包须要一点时间,生成完毕后在app/build/outputs/apk文件夹下会有生成的全部的包。将相应的包上传至相应的渠道就可以。

最新文章

  1. useful commands for Kubernetes beginners
  2. 【实战Java高并发程序设计 3】带有时间戳的对象引用:AtomicStampedReference
  3. 记AppStore 被打回的经历
  4. supervisor的配置
  5. open Live Writer配置步骤
  6. dubbo的安装和使用
  7. 解析使用ThinkPHP应该掌握的调试手段
  8. 黄聪:PHP 免费获取手机号码归属地(转)
  9. SQL中的类型转换
  10. 步步为营Hibernate全攻略(四)剪不断理还乱之:复合主键 &amp;&amp; 组合映射
  11. WPF中两条路径渐变的探讨
  12. C#超级实用的一种类型—匿名类型
  13. new Date()浏览器兼容性问题
  14. 牛客练习赛43 Tachibana Kanade Loves Review C(最小生成树Kruskal)
  15. Codeforces 802I Fake News (hard) (SA+单调栈) 或 SAM
  16. Nancy的基本用法
  17. [C#] VS2017中在某些目录下使用不了 .NET Core 2.0 问题的处理办法
  18. 微信小程序实现部分双向数据绑定(为input、picker、textarea编写统一的更新数据逻辑)
  19. java高并发编程(一)
  20. EVIL TWIN AP

热门文章

  1. 重温delphi之控制台程序:Hello World!
  2. OCP读书笔记(19) - 数据库空间管理
  3. POJ 1696 Space Ant(点积的应用)
  4. 将鼠标移到文本弹出一些字幕CSS达到,不及格JS达到
  5. hash在Coreseek 中配置bigint
  6. PHP 字符串正则替换函数preg_replace使用说明
  7. windows phone (17) ManipulationDelta事件
  8. [置顶] Codeforces Round #197 (Div. 2)(完全)
  9. Android学习之 AChartEngine 图表绘制
  10. 【前段开发】行内元素和块级元素总结(HTML CSS)