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