Gradle实现的两种简单的多渠道打包方法
2016-07-13 15:16
399 查看
目前我掌握的方法有两种,都非常简单,用的都是Gradle Android插件里的productFlavors。
以友盟的多渠道打包为例,假设我们需要打包出如下渠道:UMENG, WANDOUJIA, YINGYONGBAO。
第一种方法,是需要创建文件的。
我们在写完我们的代码之后,在app/src下面,分别创建和main同级目录的文件夹umeng, wandoujia, yingyongbao,这三个文件夹里面都各只有一个AndroidManifest.xml文件,文件只需要如下:
[plain] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="your.package.name">
<application>
<meta-data android:name="UMENG_CHANNEL" android:value="UMENG"/>
</application>
</manifest>
注意,上面的value的值要和你的渠道名所对应。比如wandoujia里面要对应为你豌豆荚上的渠道名(如WANDOUJAI)。
然后在你的build.gradle的android{}节点里面,添加productFlavors节点,代码如下:
[plain] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
android {
// 这里是你的其他配置
productFlavors{
umeng{ }
wandoujai { }
yingyongbao{ }
}
// 你的其他配置
}
注意这里的flavors的名字要和你的文件夹的名字对应。这样配置之后,构建的就是多渠道的APK了。
第二种方法,不用创建那些文件,它使用的是Gradle Android插件里的另一个功能,manifestPlaceholders。
在这种方法中,你只需要在AndroidManifest.xml中,对友盟的渠道进行这样配置:
[plain] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
<meta-data
android:name="UMENG_CHANNEL"
android:value="${CHANNEL_NAME}" />
然后同样使用productFlavors,不过这时它的配置是这样的:
[plain] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
android {
// 你的其他配置代码
productFlavors {
yingyongbao {
manifestPlaceholders = [ CHANNEL_NAME:"YINGYONGBAO"]
}
umeng {
manifestPlaceholders = [ CHANNEL_NAME:"UMENG" ]
}
wandoujia {
manifestPlaceholders = [ CHANNEL_NAME:"WANDOUJIA" ]
}
}
// 你的其他配置代码
}
在上面当中,我们也可以指定一个默认的渠道名,如果需要的话。指定默认的值是在defaultConfig节点当中添加如下内容:
[plain] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
manifestPlaceholders = [ CHANNEL_NAME:"Unspecified"]
这里的Unspecified换成你实际上的默认的渠道名。
使用manifestPlaceholders的这种配置,同样适用于manifest的其他配置。比如你需要在不同渠道发布的apk里面,指定不同的启动Activity。比如在豌豆荚里面发布的,启动的Activity显示的是豌豆荚首发的界面,应用宝里面启动的是应用宝首发的界面(哈哈,有点坏),你就可以对你的activity的值使用${activity_name}的方式,然后在productFlavors里面配置这个${activity_name}的值。
本文原创,转载请注明CSDN博客上的出处:
http://blog.csdn.net/maosidiaoxian/article/details/42000913
或作者:Geek_Soleda
以友盟的多渠道打包为例,假设我们需要打包出如下渠道:UMENG, WANDOUJIA, YINGYONGBAO。
第一种方法,是需要创建文件的。
我们在写完我们的代码之后,在app/src下面,分别创建和main同级目录的文件夹umeng, wandoujia, yingyongbao,这三个文件夹里面都各只有一个AndroidManifest.xml文件,文件只需要如下:
[plain] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="your.package.name">
<application>
<meta-data android:name="UMENG_CHANNEL" android:value="UMENG"/>
</application>
</manifest>
注意,上面的value的值要和你的渠道名所对应。比如wandoujia里面要对应为你豌豆荚上的渠道名(如WANDOUJAI)。
然后在你的build.gradle的android{}节点里面,添加productFlavors节点,代码如下:
[plain] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
android {
// 这里是你的其他配置
productFlavors{
umeng{ }
wandoujai { }
yingyongbao{ }
}
// 你的其他配置
}
注意这里的flavors的名字要和你的文件夹的名字对应。这样配置之后,构建的就是多渠道的APK了。
第二种方法,不用创建那些文件,它使用的是Gradle Android插件里的另一个功能,manifestPlaceholders。
在这种方法中,你只需要在AndroidManifest.xml中,对友盟的渠道进行这样配置:
[plain] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
<meta-data
android:name="UMENG_CHANNEL"
android:value="${CHANNEL_NAME}" />
然后同样使用productFlavors,不过这时它的配置是这样的:
[plain] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
android {
// 你的其他配置代码
productFlavors {
yingyongbao {
manifestPlaceholders = [ CHANNEL_NAME:"YINGYONGBAO"]
}
umeng {
manifestPlaceholders = [ CHANNEL_NAME:"UMENG" ]
}
wandoujia {
manifestPlaceholders = [ CHANNEL_NAME:"WANDOUJIA" ]
}
}
// 你的其他配置代码
}
在上面当中,我们也可以指定一个默认的渠道名,如果需要的话。指定默认的值是在defaultConfig节点当中添加如下内容:
[plain] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
manifestPlaceholders = [ CHANNEL_NAME:"Unspecified"]
这里的Unspecified换成你实际上的默认的渠道名。
使用manifestPlaceholders的这种配置,同样适用于manifest的其他配置。比如你需要在不同渠道发布的apk里面,指定不同的启动Activity。比如在豌豆荚里面发布的,启动的Activity显示的是豌豆荚首发的界面,应用宝里面启动的是应用宝首发的界面(哈哈,有点坏),你就可以对你的activity的值使用${activity_name}的方式,然后在productFlavors里面配置这个${activity_name}的值。
本文原创,转载请注明CSDN博客上的出处:
http://blog.csdn.net/maosidiaoxian/article/details/42000913
或作者:Geek_Soleda
相关文章推荐
- 会做饭,对女性来说很重要吗?
- kafka_2.11-0.10.0.0 编程Failed to send messages after 3 tries. 错误解决
- 如何在struts2中使用、配置ajax,json?sx:datetimepicker无法显示日历
- Android M(6.x)使用OkHttp包解析和发送JSON请求的教程
- 关于Fragment与Fragment、Activity通信的三种方式
- Xargs的用法和理解
- Docker容器案例:应用 Mysql
- JavaScript详解
- 心灵可以停停,代码还得敲敲
- linux 中 timeval结构体
- 有一个会做饭的男朋友幸福么?
- 关于HTML5
- 不良资产处置(四):国内外不良资产处置公司的背景特点
- 判定覆盖和条件覆盖
- Block很简单,就像delegate的简化版
- 什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI
- ios字典功能UIReferenceLibraryViewController
- CodeForces 567C Geometric Progression
- 滚动 CSS3 鼠标滚轮滚动插件jQuery Smoove.js
- python 读文件 写文件 字符串操作 LIBSVM格式数据转换