AndroidManifest.xml 裏設置動態渠道變量
<!--多渠道打包配置-->
<meta-data
android:name="UMENG_APPKEY"
android:value="" />
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}"/>
在app:gradle中
apply plugin: 'com.android.application'
def getTime(){
return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}
android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
buildToolsVersion rootProject.ext.android["buildToolsVersion"]
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion rootProject.ext.android["minSdkVersion"]
targetSdkVersion rootProject.ext.android["targetSdkVersion"]
versionCode rootProject.ext.android["versionCode"]
versionName rootProject.ext.android["versionName"]
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
/***
* 解決Error:All flavors must now belong to a named flavor dimension. Learn more at
* 多渠道打包緯度統一
*/
flavorDimensions "versionCode"
}
signingConfigs{
config {
keyAlias 'key0'
keyPassword '12205226'
storeFile file('/Users/mac/Desktop/mytest.jks')
storePassword '12205226'
}
}
// 多渠道打包配置
productFlavors{
kuan {}
xiaomi {}
qh360 {}
baidu {}
wandoujia {}
}
productFlavors.all{
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
applicationVariants.all { variant ->
variant.outputs.all {
// 輸出apk名稱爲app_kuan_v1.0_2015.01.15.apk
outputFileName = "app_${variant.productFlavors[0].name}_v${variant.versionName}_${getTime()}.apk"
}
}
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project(':base')
implementation project(':task')
implementation project(':account')
implementation rootProject.ext.dependencies["appcompat"]
testImplementation rootProject.ext.dependencies["junit_junit"]
androidTestImplementation rootProject.ext.dependencies["androidx_junit"]
androidTestImplementation rootProject.ext.dependencies["espresso_core"]
//butterknif 註解處理器
annotationProcessor rootProject.ext.dependencies["butterknife_compiler"]
implementation rootProject.ext.dependencies["constraintlayout"]
}
./gradlew assembleDebug
結果
看到這裏是不是有人覺得爲啥要多渠道打包啊,一個包他不香嗎?
最後來介紹一下多渠道打包的用途,爲什麼要在項目搭建的時候把多渠道打包配置到gradle裏面
詳細說明:https://www.jianshu.com/p/b33139d4596c
多渠道打包的作用:apk--發佈到市場上(渠道就是可以下載apk的地方)
1.0:發佈到不同渠道上的apk,標記不同的渠道,目的是爲了統計該渠道的下載量,留存率等等數據
2.0:瞭解下載量
3.0:針對性打廣告
如果不多渠道打包的話,一個apk包投到數十個市場上,你怎麼知道那個市場上下載量最大----多渠道主要是爲了運營,讓他們根據數據去玩(主要用到了友盟);