前言
不借助任何工具,直接用 AS实现多渠道打包。
步骤
- 清单文件
<meta-data
android:name="ATMAN_CHANNEL"
android:value="${ATMAN_CHANNEL_VALUE}" />
- 在 module 的 build.gradle 中配置渠道
- 指定渠道
//指定渠道 productFlavors { vivo {} oppo {} huawei {} xiaomi {} wandoujia {} yingyongbao {} qh360 {} baidu {} }
- 获取所有渠道
// 通过脚本获取所有渠道 // 在Terminal控制台输入gradlew assembleRelease开始打包 // 包生成在build-->outputs-->apk文件夹 productFlavors.all { //遍历替换所有渠道 flavor -> flavor.manifestPlaceholders = [ATMAN_CHANNEL_VALUE: name] }
- 可以修改生成的 apk 名字(可选)
//自定义打包时apk名字 // android.applicationVariants.all { variant -> // variant.outputs.all { // // abc_渠道名_版本名.apk 还可以拼接其他app内容: variant.versionCode variant.buildType.name // outputFileName = "GreenVolley_${variant.name}_${variant.versionName}_${new Date().format("yyyy-MM-dd")}.apk" // } // }
- 指定渠道
- 在 module 的 build.gradle 中配置渠道
完整配置:
android {
signingConfigs {
release {
storeFile file('/Users/kiwilss/Desktop/tools/studioTools/key/Lss.jks')
storePassword '123456'
keyAlias = 'lss'
keyPassword '123456'
}
}
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.kiwilss.meituan"
minSdkVersion 19
targetSdkVersion 29
versionCode 1
versionName "1.0"
//必须要保证所有的flavor 都属于同一个维度
flavorDimensions "default"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
//指定渠道
productFlavors {
vivo {}
oppo {}
huawei {}
xiaomi {}
wandoujia {}
yingyongbao {}
qh360 {}
baidu {}
}
// 通过脚本获取所有渠道
// 在Terminal控制台输入gradlew assembleRelease开始打包
// 包生成在build-->outputs-->apk文件夹
productFlavors.all {
//遍历替换所有渠道
flavor -> flavor.manifestPlaceholders = [ATMAN_CHANNEL_VALUE: name]
}
//自定义打包时apk名字
// android.applicationVariants.all { variant ->
// variant.outputs.all {
// // abc_渠道名_版本名.apk 还可以拼接其他app内容:variant.versionCode variant.buildType.name
// outputFileName = "GreenVolley_${variant.name}_${variant.versionName}_${new Date().format("yyyy-MM-dd")}.apk"
// }
// }
}
-
在右侧可以打开,就可以打对应的渠道包了,如下图
iShot2020-06-1316.02.02.png
-
- 获取渠道名称
public static String getChannelName(Context context){
if (context == null) {
return null;
}
String channelName = null;
try {
PackageManager packageManager = context.getPackageManager();
if (packageManager != null) {
//注意此处为ApplicationInfo 而不是 ActivityInfo,因为友盟设置的meta-data是在application标签中,而不是某activity标签中,所以用ApplicationInfo
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(
context.getPackageName(),
PackageManager.GET_META_DATA
);
if (applicationInfo.metaData != null) {
channelName = applicationInfo.metaData.getString("ATMAN_CHANNEL");
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return channelName;
}
demo地址 master版
网友评论