Android開發之Gradle筆記整理2-Gradle常用命令及UMeng多渠道打包實戰
Title:Android開發之Gradle筆記整理2——Gradle常用命令及UMeng多渠道打包實戰
Date:2015-04-06 21:54:47
Category:Android Develop
Tag:技術,生活,Android Develop
Author:EricTang
在前一篇部落格裡我們簡單快速的學習了一下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速度太慢每次都要構建一次的話,也確實可以參考美團的打包方案,也是可行的。