android {
...
//gradle3.0以上 配置自定義打包名稱,自定義apk輸出路徑
applicationVariants.all { variant ->
variant.outputs.all {
def releaseTime = new Date().format('yyyy-MM-dd')
// 修改outputFileName字段爲自定義的apk名字 格式爲:變體名稱+版本號+發佈時間+變體類型(release/debug).apk
outputFileName = "${variant.baseName}_V${defaultConfig.versionName}_${releaseTime}_${variant.buildType.name}.apk"
// 修改variant.getPackageApplication().outputDirectory字段爲自定義輸出路徑
variant.getPackageApplication().outputDirectory = new File("../apks")
}
}
...
}
複製代碼
打包結果 html
variant=productFlavors*buildTypesandroid
6=3*2spring
一共6個變體bash
android {
...
flavorDimensions "channel"//3.0以上必須設置一個Dimensions
productFlavors {//3個Flavor
android_baidu { dimension "channel" } // 百度手機助手
android360 { dimension "channel" }// 360手機助手
android_tengxunyingyongbao { dimension "channel" } // 騰訊應用寶
}
buildTypes {//2個類型
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
...
}
複製代碼
多渠道打包,就是這個原理app
<manifest>
...
<application
...
<meta-data
android:name="CHANNEL_ID"
android:value="${CHANNEL_ID_VALUE}" />
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
...
</application>
...
</manifest>
複製代碼
2.gradle裏:遍歷全部變體,給menifest裏的佔位符賦值gradle
productFlavors.all { flavor ->
manifestPlaceholders
= [CHANNEL_ID_VALUE: name, UMENG_CHANNEL_VALUE: name]
}
複製代碼
<meta-data>標籤能夠做爲子標籤,
能夠被包含在<activity>、<application> 、<service>和<receiver>中:
在不一樣位置有不一樣方法來獲取對應的值
複製代碼
更多查看:www.cnblogs.com/spring87/p/…ui
ApplicationInfo appInfo = this.getPackageManager()
.getApplicationInfo(getPackageName(),
PackageManager.GET_META_DATA);
String msg=appInfo.metaData.getString("Data_Name");
複製代碼
至此,定義變體、定義menifest佔位符,在gradle裏在不一樣的變體裏給佔位符賦值,就完成了多渠道打包,而友盟是經過(從AndroidManifest獲取meta-data原理)來獲取對應的渠道名,分類別進行統計this