我们须要使用一个变量标明该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文件夹下会有生成的全部的包。将相应的包上传至相应的渠道就可以。

Android应用公布的准备——生成渠道包的更多相关文章

  1. Android自动化之旅—生成渠道包

    美团Android自动化之旅—生成渠道包:http://tech.meituan.com/mt-apk-packaging.html   Android Studio系列教程六--Gradle多渠道打 ...

  2. 下一代Android打包工具,100个渠道包只需要10秒钟 https://github.com/mcxiaoke

    https://github.com/mcxiaoke/packer-ng-plugin https://github.com/Meituan-Dianping/walle https://githu ...

  3. Android应用公布后的统计——百度移动统计的应用

    一个App公布到各个渠道之后,我们须要採集不同渠道的一些信息,比方app在执行过程中产生的一些异常信息,app在各个android版本号的分布,以及各个app版本号的分布,各渠道的用户数,用户忠诚度等 ...

  4. 新一代开源Android渠道包生成工具Walle

    本文转自:http://tech.meituan.com/android-apk-v2-signature-scheme.html 新一代开源Android渠道包生成工具Walle 新的应用签名方案A ...

  5. 使用Gradle构建Android应用的渠道包

    所有做Android App的同志们应该都知道渠道包是什么,得力于Android生态的多样性,我等写Android应用的人类每次发布App都需要面对数十个市场,而为了能够采集到市场的表现数据,就必须为 ...

  6. 美团Android自动化之旅—适配渠道包

    http://tech.meituan.com/mt-apk-adaptation.html 概述 前一篇文章(美团Android自动化之旅-生成渠道包)介绍了Android中几种生成渠道包的方式,基 ...

  7. (转载) android studio library生成jar包和aar的方法总结

    android studio library生成jar包和aar的方法总结 标签: android学习文档jar和aar的使用与生成gradle 2016-11-25 10:39 1782人阅读 评论 ...

  8. (转载) Android studio如何生成aar包

    Android studio如何生成aar包 标签: Android studio如何生成aaAndroid studio aarAndroid 如何生成aar包 2016-12-21 14:42 1 ...

  9. Unity3D研究院之脚本批量打包渠道包研究

    原地址:http://www.xuanyusong.com/archives/2418#comments 最近在研究Unity3D脚本批量打包,比如在Android平台下各种不同分辨率和不同内存大小的 ...

随机推荐

  1. HDU 3830 Checkers

    意甲冠军: 有三件  所有其他棋子可以跳  不能分开的两个跳跃  当被问及状态u为了国家v最低短跳转 思路: 对于一个状态三个棋子的位置能够设为 x y z  (小到大) 仅仅有当y-x=z-y的时候 ...

  2. GDAL切割重采样遥感图像

    一个小测试程序开发全过程实录,完全新手入门级的实例,如果你还在为处理大影像而发愁,来试试这个称手的工具吧. Imagec 开发日记 2013-6-25 需求: 影像数据切割,重采样 数据切割的要求是简 ...

  3. 怎样使用jlink一键烧录整个flash Hi3518 a c e Hi3515 Hi3512

    以jlink烧录3515为例: 1\在jlink安装文件夹"C:\Program Files\SEGGER\JLinkARM_V426b"建立批处理文件"HI3515烧写 ...

  4. winfrom 倒计时控件

    最近在做一个快递柜项目,要求在用户没有操作的时间到了一分钟,自动返回主页,我于是封装了一个倒计时控件,废话少说,直接上代码 public partial class RemainingTimeUC : ...

  5. 从零開始学android&lt;ImageSwitcher图片切换组件.二十六.&gt;

    ImageSwitcher组件的主要功能是完毕图片的切换显示,比如用户在进行图片浏览的时候.能够通过button点击一张张的切换显示的图片,并且使用ImageSwitcher组件在每次切换的时候也能够 ...

  6. 辛星解读为什么PHP须要模板

    近期有个人问我:为什么PHP须要模板呢?整个站点的编写都是我一个人完毕的,从前端到后端,都是这样,我一个人写站点是不是就不须要模板了呢?我当时还真给问住了,也没想好非常合适的回答它的方式,于是就随便说 ...

  7. cocos2D(八)---- CCMenu &amp;&amp; CCMenuItem

    些菜单项让用户開始游戏.暂停\继续游戏.打开\关闭音乐或者是返回到上一个界面,比方以下两张图中用红色线框标记的菜单项     我们能够使用CCMenu和CCMenuItem实现上述的菜单功能,CCMe ...

  8. Memcached FAQ

    这篇FAQ包含了大家普遍关心的问题.非常值得一看. 原文:http://blog.csdn.net/jarfield/archive/2009/07/05/4322953.aspx 最后更新时间 20 ...

  9. Makefile学习(一)[第二版]

    简单介绍 1)make:利用 make 工具能够自己主动完毕编译工作.这些工作包含:假设仅改动了某几个源文件,则仅仅又一次编译这几个源文件[make通过比对对应的.c文件与.o文件的时间];假设某个头 ...

  10. FPGA机器学习之学习的方向

    经过了2个月对机器学习的了解后.我发现了,机器学习的方向多种多样.网页排序.语音识别,图像识别,推荐系统等.算法也多种多样.看见其它的书后,我发现除了讲到的k均值聚类.贝叶斯,神经网络,在线学习等等, ...