我们须要使用一个变量标明该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. Android它SDK Manager无法更新终极解决方案

    前些日子.Google终于发布Android5.0正式版--棒糖.也许你和我一样,,此外,我想在第一时间更新SDK,结果打开SDK Manager,但令人失望,络围墙啊.默默问一句:近期好久没有听到方 ...

  2. 存储管理(一):openfiler介绍及存储理解

    openfiler是一个免费的.开源的基于浏览器的网络存储产品,支持基于文件的的网络连接存储(NAS)和基于块的存储区域网(SAN).支持的协议有smb,cifs,nfs,http/dev和ftp. ...

  3. 流动python - 一个极简主义event制

    event至少该系统的核心,以满足: 1.存储容器事件,可以被添加到事件来删除 2.触发事件fire 守则. class Event(list): def __call__(self, *args, ...

  4. Nagios+pnp4nagios+rrdtool 安装配置为nagios添加自定义插件(三)

    nagios博大精深,可以以shell.perl等语句为nagios写插件,来满足自己监控的需要.本文写mysql中tps.qps的插件,并把收集到的结果以图形形式展现出来,这样输出的结果就有一定的要 ...

  5. wamp mysql 创建主从数据库

    这跟你是不是wmap没有关系的, wamp是一个集成环境,只是一次性帮你创建一个web服务器而已 下面给你些配置 一.登录Master服务器,修改my.ini ,添加如下内容: [wampmysqld ...

  6. 本科非cs菜鸟计算机面试实录

    两年制小硕,本硕期间差不多都打酱油的.本科非cs专业,硕士cs,编程基础一般,专业基础尚可.研究生期间分析分析了pgsql数据库的源码:同时实验室一些杂项目:自己业余为了应试读了些计算机书.自己当时q ...

  7. 【转】C# String.Format数字格式化输出各种转换{0:N2} {0:D2} {0:C2}...

    ; //格式为sring输出 // Label1.Text = string.Format("asdfadsf{0}adsfasdf",a); // Label2.Text = & ...

  8. Linux渗透+SSH内网转发

    http://www.jb51.net/hack/58514.html http://blog.chinaunix.net/uid-756931-id-353243.html http://blog. ...

  9. tarjan+缩点

    B - Popular Cows Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Su ...

  10. 扩展WebBrowser控件,使其支持拖放文件

    public partial class UserControl1 : WebBrowser { private const int WmDropfiles = 0x233; [DllImport(& ...