在使用 androidStudio 的時候稍坯,和 Eclipse 對比最大的優(yōu)勢酬荞,就是可以更靈活的配置任何地方,可以定制出更多更復雜的適合我們自己的個性化配置瞧哟,下面我們就來總結下開發(fā)過程中遇到的一些問題混巧。
開發(fā)打包過程中,我們經常會有多個不同渠道的打包需求勤揩,不同渠道的打包可能會遇到替換資源文件的 string 咧党, drawable 以及 applicationId,包名陨亡, 代碼中的各種開關等等傍衡。怎么解決這些問題深员?
問題一: 怎么打包時候動態(tài)替換 applicationId ?
問題二: 怎么打包時候動態(tài)替換 常量蛙埂?如字符串倦畅,log開關等
問題三: 怎么打包時候動態(tài)替換 渠道資源 ?如友盟的渠道信息
先熟悉下 gradle 配置文件的結構, 并將問題的答案寫在代碼中:
apply plugin: com.android.application''
android{
compileSdkVersion 25
buildToolsVersion 25.0.2
defaultConfig{
applicationId "com.xyd.http_demo"
minSdkVersion 16
targetSdkVersion 22
verionCode 1
versionName "1.0.0"
}
// 編譯類型绣的,只能有 release 和 debug 這兩種版本叠赐,可以配置代碼中的開關,靜態(tài)變量等
buildTypes{
debug {
signingConfig signingConfigs.release
//shrinkResources true
//對齊優(yōu)化設置為true屡江,否則找不到該task (默認不寫也是true)
zipAlignEnabled true
buildConfigField "boolean", "LOG_DEBUG", "true"
buildConfigField "boolean", "OPEN_AD", "false"
buildConfigField "boolean", "OPEN_Verify", "false"
}
release {
signingConfig signingConfigs.release
// 不顯示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
buildConfigField "boolean", "OPEN_AD", "true"
buildConfigField "boolean", "OPEN_Verify", "true"
minifyEnabled false //混淆
zipAlignEnabled true //Zipalign優(yōu)化
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
// 簽名文件的配置
signingConfigs{
release {
keyAlias "xyd"
keyPassword "xyd"
storeFile file('.../sss.jks')
storePassword '123456'
}
debug{
}
}
// 配置多渠道芭概, 這里的多渠道名會出現(xiàn)在 gradle -> tasks -> build 下
productFlavors{
// 渠道名是字符串的形式,可以用 "" 包起來惩嘉,如 "baidu" ;或者直接寫罢洲,如 xiaomi
xiaomi {
// 該配置會覆蓋defaultConfig中的配置, 通過此方式可實現(xiàn)不同渠道宏怔,不同包名
applicationId "com.xyd.http_demo1"
// 該配置會覆蓋 manifest 中的渠道變量 channel
// <meta-data android:name="channel" android:value="${channelName}"/>
manifestPlaceholders = [channelName: "xiaomi"]
}
"baidu" {
applicationId "com.xyd.htto_debug"
manifestPlaceholders = [channelName: "baidu"]
}
}
}
多渠道信息的配置也可以采用這樣:
android {
productFlavors {
"xiaomi"{}
"baidu"{}
"wandoujia"{}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [channelName: name]
}
}
問題四: 怎么打包時候,替換 appName 和 drawable 呢畴椰?
這個問題不提現(xiàn)在下面的配置文件中臊诊,想實現(xiàn)替換 appName 和 drawable 這類 resource 常量,需要在 main 同級目錄下斜脂,新建和渠道名同名的目錄抓艳,并建立相同的子路徑,然后以相同的名字命名不同的資源文件帚戳,打包時候會實現(xiàn)自動替換或者合并玷或。如下圖。
例如: 在資源文件目錄 mian\res\mipmap-hdpi\ic_laucher.png 片任,那 baidu 渠道要在 baidu\res\mipmap-hdpi\ic_laucher.png 放置偏友,打包 baidu 渠道的時候,就會自動替換圖片对供。
合并的情況位他,比如在 string.xml 中文件內容是:
<string name="loading">加載中...</string>
<string name="loading_no_more">無更多數(shù)據(jù)</string>
baidu 下面的 string.xml 文件內容是:
<string name="loading">正在加中,不要著急...</string>
打包 baidu 渠道會變成:
<string name="loading">正在加中产场,不要著急...</string>
<string name="loading_no_more">無更多數(shù)據(jù)</string>
采用這種方式鹅髓,main 下所有文件都可以替換或者合并。