Android开发之Gradle笔记整理2——Gradle常用命令及UMeng多渠道打包实战
一 06 四月 2015
在前一篇博客里我们简单快速的学习了一下Gradle的基本安装和配置,以及解决了其中遇到的一些小的错误,这篇文章里我们来小小的实践一下,本身也是在Android开发中必不可少的技能。
修改build.gradle文件
接着之前的项目继续看,我们修改一下Module中的build.gradle文件,这里也不做过多讲解了,注释都在文件中,慢慢看,还是比较容易懂的:
apply plugin: 'com.android.application'
repositories {
jcenter()
}
android {
compileSdkVersion 19
buildToolsVersion "21.1.1"
defaultConfig {
applicationId "com.aiscot.gradle.test"
minSdkVersion 9
targetSdkVersion 19
versionCode 1
versionName "1.0"
// 修改dex 65536的限制
multiDexEnabled true
// AndroidManifest.xml文件中UMENG_CHANNEL的value为${UMENG_CHANNEL_VALUE}
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "channel_name"]
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
// 签名文件
signingConfigs {
debug {
// debug签名
storeFile file("/path/xx-debug.jks")
storePassword "密码"
keyAlias "别名"
keyPassword "签名密钥的密码"
}
release {
// relase签名
storeFile file("/path/xx-release.jks")
storePassword "密码"
keyAlias "别名"
keyPassword "签名密钥的密码"
}
}
// 构建类型
buildTypes {
debug {
// debug模式下,显示log
buildConfigField("boolean", "LOG_DEBUG", "true")
// 版本名前缀
versionNameSuffix "-debug"
// 不开启混淆
minifyEnabled false
// 不开启ZipAlign优化
zipAlignEnabled false
// 不移除无用的resource文件
shrinkResources false
// 使用debug签名
signingConfig signingConfigs.debug
}
release {
// release模式下,不显示log
buildConfigField("boolean", "LOG_DEBUG", "false")
// 版本名前缀
versionNameSuffix "-relase"
// 开启混淆
minifyEnabled true
// 开启ZipAlign优化
zipAlignEnabled true
// 移除无用的resource文件
shrinkResources true
// 使用release签名
signingConfig signingConfigs.release
// 混淆文件位置
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
// 渠道Flavors,配置不同的渠道
productFlavors {
GooglePaly {}
xiaomi {}
umeng {}
_360 {}
wandoujia {}
yingyongbao {}
whatever {}
}
// 批量配置渠道
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
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)
}
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:19.+'
}
重点需要讲解的地方:
-
signingConfigs
中的debug签名和release签名,都可以写绝对路径,当然,也可以通过指定形如debug{storeFile file("xx-debug.jks")}
这样儿的配置,只不过需要注意,如果使用这样儿的方式,签名文件需要放在项目中 -
UMeng官方的多渠道打包集成文档中指定,如果使用Gradle打包的方式的话,需要在build.gradle文件中的dependencies中添加如下的依赖:
dependencies {
compile 'com.umeng.analytics:analytics:latest.integration'
}
这里我的想法是,build.grade文件中已经包含了libs目录下所有的jar包了
compile fileTree(dir: 'libs', include: ['*.jar'])
所以我们其实可以直接把UMeng的jar包丢到这个目录下即可(写这篇博客的时候,我并不是很确定,写完了之后,测试完了,是正常的,所以这里应该是没有问题的,暂时没有做进一步的研究)
集成UMeng统计
- 配置manifest文件,UMeng的渠道统计需要在manifest文件中添加权限,注意,需要跟应用中已有的全选做下对比,避免重复
<!-- UMeng统计所需权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- UMeng统计所需权限 -->
同时,还需要加入UMeng的AppKey,和Channel ID,需要注意的是,这里的UMENG_CHANNEL的value需要写成 ${UMENG_CHANNEL_VALUE}
,因为我们需要在build.gradle文件中对其进行操作,自动替换的
<!-- UMeng统计的Key和Channel -->
<meta-data android:name=“UMENG_APPKEY” android:value="APPKEY"/>
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}"/>
<!-- UMeng统计的Key和Channel -->
然后需要在每个Activity的onResume方法中调用MobclickAgent.onResume(Context), onPause方法中调用MobclickAgent.onPause(Context)
- 然后看我们在build.gradle文件中的配置:
// 渠道Flavors,配置不同的渠道
productFlavors {
GooglePaly {}
xiaomi {}
umeng {}
_360 {}
wandoujia {}
yingyongbao {}
}
// 批量配置渠道
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
然后关于UMeng的多渠道配置就基本完成了,接下来我们需要做的,就是了解Gradle的常用命令,并且进行打包操作了。
Gradle自动打包
打开终端,cd到Gradle项目所在的目录,啊?等下,我们用的是Idea啊,没必要的啊,来,跟我来,找到Idea项目界面最下方:
看到Terminal的字样了么?点它
自然就已经在项目的根目录下了
这时候,我们只需要执行 ./gradlew assembleRelease
命令,就可以完成release版本的各渠道的打包工作了,这里需要注意的是,如果是第一次执行该命令的话,会自动去下载Gradle。。额,没错儿,是自动去下载,即使是我们已经下载安装过Gradle了。。所以第一次的话,可能时间稍长,当时我测试的情况是6个渠道包,大概耗时3分35秒左右的样子,后面的话就会快很多了,大概耗时10秒左右。
其他的命令还有:
-
./gradlew assembleDebug
—— 打包debug版本 -
./gradlew assembleXiaomiRelease
—— 单独打包小米应用市场渠道的release版本 -
./gradlew assembleXiaomi
—— 单独打包小米应用市场渠道的debug和release版本
关于Gradle多渠道打包的就暂时先写到这里,如果到时候渠道包太多,觉得Gradle速度太慢每次都要构建一次的话,也确实可以参考美团的打包方案,也是可行的。
Category: Android Develop