最近的每天都在做着选择,每天都是一个转折点。
形形色色、错综复杂。
在项目开发中经常的遇到这样的问题,公司已经对一些模块已经集成好了,而我们只需要根据用户需求进行定制。只需要重新编写界面布局代码,然后再去调用相应模块就行。
总的来说就是多渠道开发
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"))
}