为什么要有多渠道打包?
答:由于现在应用市场繁多,为了统计各个应用市场用户的下载量、活跃量,还可以分析用户操作习惯,优化我们的APP。
以友盟为例(因为我用的就是它),
需要在
AndroidManifest.xml里面添加:
<meta-data
android:name="UMENG_CHANNEL"
android:value="Channel_ID" />
我们的原理就是用各个渠道的标识来替换“Channel_ID”值。
1、对AndroidManifest.xml中的“Channel_ID”使用placeHolder
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
2、在模块下的build.gradle文件中的defaultConfig中添加下面代码
manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"_default" ]
注意:在Plugin 3.0.0之后有一种自动匹配消耗库的机制,便于debug variant 自动消耗一个库,然后就是必须要所有的flavor 都属于同一个维度。需要多添加一句:flavorDimensions "versionCode"
android {
...
defaultConfig {
...
flavorDimensions "versionCode"
manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"_default" ]
}
}
其中,“_default”是指默认值。
注意:渠道名不能以数字开头
productFlavors {
_default{}
wandoujia{}
_360{}
yingyongbao{}
xiaomi{}
huawei{}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name ]
}
4、这样我们就可以通过图形界面或Terminal进行多渠道打包了
1、使用图形界面的话,按住ctrl点中你想要打的渠道,然后点击Finish开始打包
2、使用Terminal的话,输入 gradlew assembleRelease ,打出所有正式版的包;
如果想单独打某一个渠道的,输入 gradlew assemble_360Release 即可
如果你还没有生成密钥库,打出来的包名中会有“unsigned”的标识,也就是未签名。
不知道如何给应用签名的话,可以看我的上一遍博客:Android项目签名、打包(使用图形界面和Terminal)
3、通过Gradle tasks面板进行打包
打开Android Studio的Gradle tasks面板(右边侧边栏),会发现模块多了很多任务,想打哪个包,就双击哪个。
Gradle常用命令
gradlew代表 gradle wrapper,意思是gradle的一层包装,大家可以理解为在这个项目本地就封装了gradle,即gradle wrapper。
下面列举了几个常见的命令:
gradlew -v:版本号
gradlew clean:把之前打包所产生的所有文件全部清除
gradlew build:检查依赖并编译打包
这里注意的是 gradlew build 命令把debug、release环境的包都打出来
gradlew assembleDebug 编译并打Debug包
gradlew assembleRelease 编译并打Release的包
参考:
http://www.cnblogs.com/shanpow/p/4097320.html