自己项目需要分渠道打包,且使用不同资源,所以,在百度之后,总结了一下:
利用友盟分渠道打包,首先在manifest里面加一句:
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" /> <!-- 友盟分渠道打包-结束 -->
然后在build.gradle里加:
defaultConfig{
//友盟分渠道打包 manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"channel_name" ]
}以及加上这个:
// Channels productFlavors { // 自定义偏好设置. //大括号内的 applicationId可以不要,如果加上,便是打包时的包名 google { applicationId "com.broadmobi.channel.google"} wandoujia { applicationId "com.broadmobi.channel.wandoujia" } baidu { applicationId "com.broadmobi.channel.baidu"} qihu360 { applicationId "com.broadmobi.channel.qihu" } } productFlavors.all { flavor -> flavor.manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name ] }
注意:上面productFlavors里的每个,代表你不同的渠道,大括号内的applicationId,是你打包时不同渠道的报名,如果需要包名一致,大括号为空即可。
另外,如果担心打包时生成的apk没办法区分,可以在build.gradle的buildTypes的release里加入如下代码,修改名字:
applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { def fileName = outputFile.name.replace(".apk", "-${defaultConfig.versionName}.apk") output.outputFile = new File(outputFile.parent, "前缀_" + fileName) } } }在fileName前后都可以加修饰符,自己定义就好,别用中文,我上面的只是个提示。
另外,如果需要使用不同的icon或者背景图片等,可以这样操作:
在src里面新建一个项目名,与productFlavors里面的要相同,和main同级,在下面创建你需要的资源文件夹,放入不同的资源文件即可。
比如,我的创建了wandoujia和baidu两个文件夹,因为我需要使用不同的icon和背景图片。
最主要一点,如果要使用不同的icon,一定要在manifest里面加两行代码:
xmlns:tools="http://schemas.android.com/tools"
和:
android:icon="@drawable/ic_launcher" tools:replace="android:icon"android:icon="@drawable/ic_launcher"这个是原本就有的,在它下面加一行tools:repalce="android:icon"
这样,就可以使用不同的icon.
如果要用不同的名字,可以在tools:repalce="android:icon"的里面加一个例如;tools:repalce="android:icon,android:label"
就可以引用不同的APP名称了!
自己项目需要,在网上查了好多,没有一个统一的,就摸索结合了好几个,希望对你们有用,有问题可以问我。