Studio中基于 umeng 統計的多管道打包。
1.配置友盟環境
在AndroidMainfest.xml的<application>标簽中添加相關資訊:APP_KEY和管道号。這裡管道号隻是一個占位符,在打包的階段可以動态的替換占位符裡的資訊。
<application
... >
<meta-data
android:name="UMENG_APPKEY"
android:value="@string/UMENG_APPKEY"/>
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}"
/>
...
</application>
2.配置簽名資訊
在
app
的
module
中的
build.gradle
添加下列資訊:别名、别名密碼、簽名檔案位址和簽名密碼
signingConfigs {
release {
keyAlias 'xxx'
keyPassword 'xxx'
storeFile file('C:/Users/Administrator/Desktop/xxx.jks')
storePassword 'xxx'
}
}
3.設定 buildTypes
的簽名配置
buildTypes
因為要打
release
包,是以需要設定
buildTypes
為
release
的簽名配置,如下
buildTypes {
// 設定debug版本預設管道設定
debug {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng_channel"]
}
// 正式版本簽名設定
release {
zipAlignEnabled true
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release // 加上這句話即可
}
}
4.配置管道資訊
管道号是自己定的,比如wandoujia(豌豆莢)等。不要使用數字開頭的命名方式,也不要使用
unknow
這樣的名字 。build.gradle(Module:app) 設定productFlavors。xml 中的管道号占位符
${UMENG_CHANNEL_VALUE}
,這裡就是要動态的替換占位符的内容,配置資訊如下:
android {
productFlavors {
kuan {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "kuan"]
}
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
qh360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qh360"]
}
baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
}
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
}
}
5.執行打包指令
gradlew clean
gradlew assembleRelease
3.sycn project一下再打包即可,Build-->Generate signed APK,Flavors中多選,選擇需要的管道
5.完成,注意生成目錄
6.隐藏簽名資訊
簽名資訊這種東西屬于私密的資訊,應該保護起來,最好不要明文寫到 build.gradle 裡,更不要上傳到代碼倉庫中去。應該放在單獨的檔案中,在 build.gradle 裡去引用這個檔案讀取簽名資訊。
清空 signingConfigs
// TODO
7.跟蹤打包過程
建議在指令後面加上
--stacktrace
參數,這樣萬一指令執行失敗,可以看到詳細的出錯資訊
gradlew clean --stacktrace
gradlew assembleRelease --stacktrace
8.定制 apk 的檔案名: app_版本名稱_版本号_日期_管道号.apk
app_版本名稱_版本号_日期_管道号.apk
def packageTime() {
return new Date().format("yyyyMMdd-HHmmss", TimeZone.getTimeZone("UTC"))
}
android {
applicationVariants.all { variant ->
variant.outputs.each { output ->
// 重命名産出的apk檔案
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
File outputDirectory = new File(outputFile.parent);
def fileName
if (variant.buildType.name == "release") {
fileName = "app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${packageTime()}_${variant.productFlavors[0].name}.apk"
} else {
fileName = "app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${packageTime()}_debug.apk"
}
output.outputFile = new File(outputDirectory, fileName)
}
}
}
}
輸出的目錄:
app/build/outputs/apk
9.删除備援的 unaligned apk
檔案
unaligned apk
在 app/build/outputs/apk 檔案夾中,可以看到一些檔案名末尾帶有 unaligned 文字的備援檔案,這些檔案沒有用,可以删掉,隻需要在 build.gradle 中添加下列指令就好了
applicationVariants.all { variant ->
variant.outputs.each { output ->
// 重命名産出的apk檔案
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
File outputDirectory = new File(outputFile.parent);
def fileName
if (variant.buildType.name == "release") {
fileName = "app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${packageTime()}_${variant.productFlavors[0].name}.apk"
} else {
fileName = "app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${packageTime()}_debug.apk"
}
output.outputFile = new File(outputDirectory, fileName)
}
// 删除unaligned apk
if (output.zipAlign != null) {
output.zipAlign.doLast {
output.zipAlign.inputFile.delete()
}
}
}
}