Android Studio多渠道打包
优点是:一次就能批量打包,非常方便多渠道推广的需求。
缺点是:打包速度很慢。
废话少说,直接 说一下思路:
1.在AndroidManifest.xml中配置参数。
<!--友盟key-->
<meta-data
android:name="UMENG_APPKEY"
android:value="${CHANNEL_KEY}">
</meta-data>
<meta-data
android:name="UMENG_CHANNEL"
android:value="${CHANNEL_VALUE}"/>
其中${CHANNEL_KEY}和${CHANNEL_VALUE}都是一个占位变量,可在外面进行动态设置该值。
2.在app的build.gradle的文件中的android{}中添加以下内容。
android {
//设置签名
signingConfigs {
signconfig {
keyAlias 'XXXXXXX'
keyPassword 'XXXXXXX'
storeFile file('XXXXXXX.jks')
storePassword 'XXXXXXX'
}
debug {
keyAlias 'XXXXXXX'
keyPassword 'XXXXXXX'
storeFile file('XXXXXXX.jks')
storePassword 'XXXXXXX'
}
}
//配置渠道名称
flavorDimensions "default"
productFlavors {
BXIN {}
BD {}
TX {}
GF {}
}
productFlavors.all {
//flavor -> flavor.manifestPlaceholders = [CHANNEL_VALUE: name, JPUSH_CHANNEL: name]
flavor -> flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
}
}
//设置调试模式或者发布模式
buildTypes {
release {
buildConfigField "boolean", "LOG_DEBUG", "false"
resValue "string", "app_name", config.appName
minifyEnabled false
crunchPngs false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.signconfig
}
debug {
buildConfigField "boolean", "LOG_DEBUG", "true"
resValue "string", "app_name", config.appName
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.signconfig
}
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
//自定义APK名称,多渠道打包
android.applicationVariants.all { variant ->
variant.outputs.all { output ->
variant.productFlavors.each { flavor ->
def project = "cpm"
def separator = "_"
def buildType = variant.variantData.variantConfiguration.buildType.name
def versionName = variant.versionName
def versionCode = variant.versionCode
def date = new Date()
def formattedDate = date.format('yyyyMMdd')
def apkName = project + separator + "v" + versionName + separator + versionCode + separator + buildType + separator + flavor.name + ".apk"
if (buildType == "release") {
apkName = project + separator + "v" + versionName + separator + versionCode + separator + buildType + separator + flavor.name + separator + formattedDate + ".apk"
}
output.outputFileName = apkName
}
}
}
}
3.完成上述之后就能打包了。