什么是多渠道打包?
同一个项目针对不同应用平台的app包。
为什么要多渠道打包?
公司想统计下哪些应用平台下载app的数量,这时,我们就需要这鬼东西了。
怎么多渠道打包?
1.在build.gradle中配置
说明:这里试着配置了三个渠道信息,wandoujia、baidu、c360。当然这三个的名字是随便由你自己去取的。
applicationId:表示该渠道的包名
UMENG_CHANNEL_VALUE:渠道代表的名称,如果我们想在代码里面获取这个app是哪个应用市场下载的,就可以通过获取这个值来判断,值由你自己随便填
appname :app的名称
app_icon:app的图标
resValue :定义字符串,意思是在 string.xml 中添加一个字符串,appName:表示字符串的名字,所有这里定义的在string.xml中就不能在重复定义相同的了,否则会报错,要用的时候也是使用 R.string.appName
buildConfigField : 修改常量,String:表示类型,ENVIRONMENT:表现名字, 360:表示常量的值,这些都由你自己决定。然后我们就可以随便创建一个类Constants,通过BuildConfig.ENVIRONMENT就可以去应用这边变量
productFlavors {
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia",
appname : "豌豆荚",
app_icon : "@mipmap/ic_launcher"
]
buildConfigField "String", "ENVIRONMENT", '"豌豆荚"'
buildConfigField "boolean", "isrRank", 'true'
resValue "string", "appName", "豌豆荚"
applicationId "com.channel.wandoujia"
}
baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu",
appname : "百度",
app_icon : "@mipmap/ic_launcher1"
]
buildConfigField "String", "ENVIRONMENT", '"百度"'
buildConfigField "boolean", "isrRank", 'true'
resValue "string", "appName", "百度"
applicationId "com.channel.baidu"
}
c360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "c360",
appname : "360",
app_icon : "@mipmap/ic_launcher2"
buildConfigField "String", "ENVIRONMENT", '"360"'
buildConfigField "boolean", "isrRank", 'true'
resValue "string", "appName", "360"
]
applicationId "com.channel.xxxx"
}
}
2.在AndroidManifest.xml中引用你的配置
android:icon="${app_icon}" , app_icon是上面build.gradle中你配置的名称
android:label="${appname}",appname是上面build.gradle中你配置的名称
想在代码中获取渠道信息,1种方式是配置meta-data,如下:
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
<application
android:allowBackup="true"
android:icon="${app_icon}"
android:label="${appname}"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
3.在代码中怎么获取渠道信息
/**
* 获取application中指定的meta-data。本例中,调用方法时key就是UMENG_CHANNEL
* @return 如果没有获取成功(没有对应值,或者异常),则返回值为空
*/
public static String getAppMetaData(Context ctx, String key) {
if (ctx == null || TextUtils.isEmpty(key)) {
return null;
}
String resultData = null;
try {
PackageManager packageManager = ctx.getPackageManager();
if (packageManager != null) {
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo != null) {
if (applicationInfo.metaData != null) {
resultData = applicationInfo.metaData.getString(key);
}
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return resultData;
}
4.打包
配置完所有信息之后,接下来的打包方式就和之前的一个吊样了,选择你的签名就行、
Flavors中的就是你多渠道的名称,记得全部选中才行哦!然后点击 Finish 你就可以去吃饭了。
图片.png 图片.png 图片.png
未完,待续。。。
网友评论