?意義:使用Android?Gradle 是為了對整個項目所有庫的版本號,版本名稱等進行統(tǒng)一管理晾剖。也是為了在測試環(huán)境温亲,灰度環(huán)境,正式發(fā)布環(huán)境時對服務(wù)器地址進行管理匕得,在進行不同環(huán)境打包時不需要手動修改服務(wù)器地址继榆,減少了工作量,提高了工作效率
一汁掠、參考文章?
?1.Android中BuildConfig類
http://www.reibang.com/p/3474ce4609a8
?2.Gradle for Android全局設(shè)置略吨、自定義BuildConfig、混淆
http://wuxiaolong.me/2016/03/31/gradle4android2/
二考阱、設(shè)置全局來統(tǒng)一管理版本號或依賴庫
?1.在project根目錄下的build.gradle中定義版本號翠忠、版本名稱。最小版本號等變量
ext {
? ? def_AarProguardFiles = "proguard-rules.pro"
? ? // Sdk and tools
? ? //localBuildToolsVersion是gradle.properties中的數(shù)據(jù)
? ? def_buildToolsVersion = "26.1.0"
? ? def_compileSdkVersion = 26
? ? def_minSdkVersion = 17
? ? def_targetSdkVersion = 26
? ? def_versionCode = 201800918
? ? def_versionName = "5.01.002"
? ? def_javaVersion = JavaVersion.VERSION_1_8
? ? // App dependencies version
? ? def_supportLibraryVersion = "26.1.0"
? ? def_multidexVersion = "1.0.2"
? ? def_eventbusVersion = "3.0.0"
? ? def_greendaoVersion = "3.2.2"
? ? def_gsonVersion = "2.3.1"
? ? def_okhttp3Version = "3.2.0"
? ? def_okioVersion = "1.7.0"
? ? def_constraintVersion = "1.0.0-alpha3"
? ? //需檢查升級版本
? ? def_annotationProcessor = "1.1.7"
? ? def_routerVersion = "1.2.2"
? ? def_easyRecyclerVersion = "4.4.0"
? ? def_cookieVersion = "v1.0.1"
? ? def_toastyVersion = "1.1.3"
? ? def_swipemenulistview = "1.3.0"
? ? //Module的版本號
? ? def_tztRequestModalVersion= "v1.01.001"
? ? //AAR的Psth
? ? def_AarPath? = "file://C:/AARComp/"
}
?2.在各個module中的gradle中使用之前定義的變量
? ? ?列如在tztRequestModule中:
defaultConfig {
? ? minSdkVersion? rootProject.ext.def_minSdkVersion
? ? targetSdkVersion? rootProject.ext.def_targetSdkVersion
? ? versionCode 1
? ? versionName? rootProject.ext.def_tztRequestModalVersion
}
注意:versionName 在各個module中調(diào)用之前定義的各個moudle不同的
?三乞榨、服務(wù)器地址的與均衡地址的配置?
project根目錄下build.gradle分別定義測試秽之,灰度與正式版本時服務(wù)器地址與均衡地址
ext {
//debug 服務(wù)器地址配置
? ? // 服務(wù)器(測試)
? ? def_tztNewHqHostPort_debug="111111111"
? ? // 服務(wù)器(灰度)
? ? def_tztNewHqHostPort_uat="22222"
// 服務(wù)器(生產(chǎn))
? ? def_tztNewHqHostPort_release="3333"
}
2.在app的gradle中新增加uat?灰度打包的配置
buildTypes {
? ? release {
? ? ? ? minifyEnabled true
? ? ? ? shrinkResources true //資源壓縮
? ? ? ? zipAlignEnabled true//Zipalign優(yōu)化
? ? ? ? proguardFiles 'proguard.cfg'
? ? ? ? signingConfig signingConfigs.release
? ? }
? ? //uat包
? ? uat {
? ? ? ? minifyEnabled true
? ? ? ? shrinkResources true //移除無用資源
? ? ? ? zipAlignEnabled true//Zipalign優(yōu)化
? ? ? ? proguardFiles 'proguard.cfg'
? ? ? ? signingConfig signingConfigs.release
? ? }
? ? debug {
? ? ? ? minifyEnabled false
? ? ? ? shrinkResources false //資源壓縮
? ? ? ? zipAlignEnabled false//Zipalign優(yōu)化
? ? ? ? proguardFiles 'proguard.cfg'
? ? ? ? signingConfig signingConfigs.release
? ? }
}
3.在各個module的gradle中添加uat的配置
buildTypes {
? ? ? ? release {
? ? ? ? ? ? minifyEnabled true
? ? ? ? ? ? zipAlignEnabled true//Zipalign優(yōu)化
? ? ? ? ? ? proguardFiles 'proguard.cfg'
? ? ? ? }
? ? ? ? //uat包
? ? ? ? uat {
? ? ? ? ? ? minifyEnabled true
? ? ? ? ? ? proguardFiles 'proguard.cfg'
? ? ? ? }
? ? ? ? debug {
? ? ? ? ? ? minifyEnabled false
? ? ? ? ? ? zipAlignEnabled false//Zipalign優(yōu)化
? ? ? ? ? ? proguardFiles 'proguard.cfg'
? ? ? ? }
? ? }
4.在tztControl ?module中添加release?蛤育、uat?、debug?環(huán)境下的buildConfigField配置
buildTypes {
? ? release {
? ? ? ? // 服務(wù)器
? ? ? ? buildConfigField 'String', 'API_tztNewHqHostPort', "\"$rootProject.ext.def_tztNewHqHostPort_release\""
? ? }
? ? //uat (User Acceptance Test) 灰度
? ? uat {
? ? ? ? // 服務(wù)器(灰度)
? ? ? ? buildConfigField 'String', 'API_tztNewHqHostPort', "\"$rootProject.ext.def_tztNewHqHostPort_uat\""
? ? }
? ? debug {
? ? ? ? // 服務(wù)器(測試)
? ? ? ? buildConfigField 'String', 'API_tztNewHqHostPort', "\"$rootProject.ext.def_tztNewHqHostPort_debug\""
? ? }
}
5桶错、在需要使用的地方BuildConfig.名稱來調(diào)用需要使用的地址
BuildConfig.API_tztNewHqHostPort
6蚣录、其他
? ?當需要修改服務(wù)器地址時,修改Project的Gradle中的ext下定義的各個環(huán)境下的地址即可
四昂验、打包?
如果有使用leakcanary,打uat環(huán)境的包時,系統(tǒng)會提示找不到leakcanary下的圖片資源申鱼,猜測是因為leakcanary沒有配置uat環(huán)境愤诱。
解決辦法:需在app引用leakcanary的地方將代碼注釋掉,主要是下面三句代碼捐友。然后在Application使用的地方將該部分代碼注釋淫半。打包release和debug時沒有影響,不需要注釋
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.4'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'