【Android Studio探索之路系列】之十:Gradle项目构建系统(四):Android Studio项目多渠道打包
2024-10-20 20:55:43
作者:郭孝星
微博:郭孝星的新浪微博
邮箱:allenwells@163.com
博客:http://blog.csdn.net/allenwells
github:https://github.com/AllenWell
因为国内Android市场渠道众多,为了统计每一个渠道的下载以及数据统计,须要我们针对每一个渠道进行单独打包,而Gradle能够帮助我们完毕自己主动多渠道打包。
一多渠道打包流程
(1) 在AndroidManifest.xml中配置PlaceHolder
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
(2) 在build.gradle中配置producFlavors
android {
productFlavors {
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
_360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"]
}
baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
}
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
}
}
或者批量改动
android {
productFlavors {
xiaomi {}
_360 {}
baidu {}
wandoujia {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
附录
apply plugin: 'com.android.application'
def releaseTime() {
return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}
android {
compileSdkVersion 21
buildToolsVersion '21.1.2'
defaultConfig {
applicationId "com.boohee.*"
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName "1.0"
// dex突破65535的限制
multiDexEnabled true
// 默认是umeng的渠道
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"]
}
lintOptions {
abortOnError false
}
signingConfigs {
debug {
// No debug config
}
release {
storeFile file("../yourapp.keystore")
storePassword "your password"
keyAlias "your alias"
keyPassword "your password"
}
}
buildTypes {
debug {
// 显示Log
buildConfigField "boolean", "LOG_DEBUG", "true"
versionNameSuffix "-debug"
minifyEnabled false
zipAlignEnabled false
shrinkResources false
signingConfig signingConfigs.debug
}
release {
// 不显示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
minifyEnabled true
zipAlignEnabled true
// 移除没用的resource文件
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 输出apk名称为boohee_v1.0_2015-01-15_wandoujia.apk
def fileName = "boohee_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
}
// 友盟多渠道打包
productFlavors {
wandoujia {}
_360 {}
baidu {}
xiaomi {}
tencent {}
taobao {}
...
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:support-v4:21.0.3'
compile 'com.jakewharton:butterknife:6.0.0'
...
}
最新文章
- Hadoop相关日常操作
- MySQL 优化数据库对象
- 前端学PHP之面向对象系列第一篇——类和对象
- git rebase与 git合并(error: failed to push some refs to)解决方法
- HttpWatch的时间分析
- grep sed
- zabbix统一脚本监控方式
- python(1) - 输入和输出
- smartforms初始化
- 输出无名空数组---精android、IOS App应用服务程序开发
- hdu_5919_Sequence II(主席树)
- iOS之多线程NSOperation
- linux 系统状态分析
- idea配置svn
- 2019Java查漏补缺(二)
- Python字节数组【bytes/bytearray】
- a标签下载
- Excel学习笔记:if({1,0})用法
- vue 实现点击图片放大
- 【转】Makefile 中:= ?= += =的区别
热门文章
- 【bzoj1043】[HAOI2008]下落的圆盘 计算几何
- HDU——2093考试排名(string类及其函数的运用以及istringstream)
- 【NOI2017】游戏
- spring中MessageSource的配置使用方法1
- 在vue路由当中使用keep-alive避免多次加载组件,减少消耗
- 你如果知道这些css常用命名,绝对事半功倍!--摘抄
- Linux spi驱动分析(二)----SPI核心(bus、device_driver和device)
- Sublime Text 新文本编辑器(txt3)
- yii使用bootstrap分页样式
- Yii createCommand CURD操作