0
点赞
收藏
分享

微信扫一扫

Gradle多渠道打包

静鸡鸡的JC 2021-09-19 阅读 57
Java

一、前提

从程序员角度来说,一个程序一个包不香么,可是运营打包推一波CPL渠道。每个包里的内容都是一样的,只是一个渠道标识不同。

二、分析

gradle有多渠道打包的productFlavors配置,然后我们可以在AndroidManifest.xml添加一个meta-data变量存储渠道值,通过productFlavors配置打不同包时把不同的参数传过去就行了,最后在java中读取对应的渠道值。

三、步骤

1、修改AndroidManifest.xml配置

打开工程目录的AndroidManifest.xml配置,在<application>标签内添加 CHANNEL属性。


<application
android:allowBackup="true"
android:label="@string/app_name"
android:usesCleartextTraffic="true"
android:icon="@mipmap/ic_launcher"
android:networkSecurityConfig="@xml/network_security_config"
android:extractNativeLibs="true"
tools:targetApi="n">


<meta-data android:name="android.app.lib_name"
android:value="cocos2djs" />


<meta-data android:name="CHANNEL"
android:value="${CHANNEL_VALUE}" />


...
</application>

2. 配置gradle

找开主工程中的build.gradle(cocos creator工程是app目录下的build.gradle)。在android {}添加productFlavors属性。最后将属性设置到AndroidManifest.xml中的CHANNEL_VALUE变量中。

android {
...
productFlavors{
common{} // 官包
xianwan{} // 闲玩
xiaozhuo{} // 小啄
zhuanke{} // 赚客
...
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
}
...
}

3. java中读取meta-data

加一个读取applicationmeta-data的方法

     /**
* 获取app当前的渠道号或application中指定的meta-data * *
* @return 如果没有获取成功(没有对应值,或者异常),则返回值为空
*/

public static String getAppMetaData(Context context, String key) {
if (context == null || TextUtils.isEmpty(key)) {
return null;
}
String value= null;
try {
PackageManager packageManager = context.getPackageManager();
if (packageManager != null) {
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo != null) {
if (applicationInfo.metaData != null) {
value= applicationInfo.metaData.getString(key);
}
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return value;
}

在需要用到的时候。

getAppMetaData(appActivity,"CHANNEL")

4. 打包

可以直接用gradlew直接打包所有渠道的包

gradlew clean :assembleRelease
举报

相关推荐

0 条评论