最近的每天都在做着選擇,每天都是一個轉折點。
形形色色、錯綜複雜。
在項目開發中經常的遇到這樣的問題,公司已經對一些模塊已經集成好了,而我們只需要根據用戶需求進行定製。只需要重新編寫界面佈局代碼,然後再去調用相應模塊就行。
總的來說就是多渠道開發
1、多渠道打包
對生成的apk包進行定製,使用:productFlavors
productFlavors {//多渠道打包
xiaomi {
applicationId 'com.wuxiaolong.gradle4android1'
}
googlepaly {
applicationId 'com.wuxiaolong.gradle4android2'
}
}
2、生成自定義的apk文件名
applicationVariants.all { variant ->
if (variant.buildType.name.equals('release')) {
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
def fileName = "gradle4android_v${defaultConfig.versionName}_${releaseTime()}_${variant.flavorName}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
輸出apk名字:gradle4android_v1.0_2016-03-23_xiaomi.apk
3、佔位符
首先要 理解一下什麼是佔位符號:最熟悉的就是:System.out("我是帥哥%d"號,“1”),這裏的%d就是整型佔位符。瞭解更多:點擊
在配置對應的AndroidManifest.xml中配置渠道號,或者appid等信息的時候。
AndroidManifest.xml:
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
這是友盟的渠道號配置。${UMENG_CHANNEL_VALUE}就是佔位符。使用了佔位符,可以動態的給UMENG_CHANNEL_VALUE賦值。
例如:在Build.gradle中
defaultConfig {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: 'dev']
}
這裏會將dev賦值給UMENG_CHANNEL_VALUE
如果渠道太多,使用productFlavors
productFlavors.all { flavor ->
manifestPlaceholders.put("UMENG_CHANNEL_VALUE",name)
}
渠道打包完整代碼:
android {
//省略部分代碼
buildTypes {
release {
minifyEnabled false//是否啓動混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
applicationVariants.all { variant ->
if (variant.buildType.name.equals('release')) {
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
def fileName = "gradleTest_v${defaultConfig.versionName}_${releaseTime()}_${variant.flavorName}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
//針對很多渠道
//productFlavors.all { flavor ->
// manifestPlaceholders.put("UMENG_CHANNEL_VALUE",name)
// }
}
}
productFlavors {//多渠道打包
xiaomi {
applicationId 'com.wuxiaolong.gradle4android1'
manifestPlaceholders.put("UMENG_CHANNEL_VALUE", 'xiaomi')
}
googlepaly {
applicationId 'com.wuxiaolong.gradle4android2'
manifestPlaceholders.put("UMENG_CHANNEL_VALUE", 'googlepaly')
}
}
//省略部分代碼
def releaseTime() {
return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}