一.简介
1.相信用过umeng的小伙伴都知道umeng上有个UMENG_CHANNEL这个是用来查看应用的渠道,在打包时我们可能要把apk发布到各个应用市场,为了统计各应用市场的下载情况,我们就要根据不同的应用市场打不同channel值的包,而每次都要修改channel值重新打包也是不太方便的,所以我们今天看看使用gradle多渠道打包。
2.还有就是我们使用第三方的jar时往往要导入第三方的so文件包括,arm64-v8a\armeabi\armeabi-v7a\mips\mips64\x86\x86_64,但是有时会出现一种情况就是有的第三方没有提供arm64-v8a的so有的提供了,这时我们libs目录下有arm64-v8a这个文件夹生成apk时就会包含这个文件夹,但没有相应so的第三方调用在相应的机型上就会出现错误。所以我们必须去掉arm64-v8a这个文件夹。
二实现
1.在androidMamifest中配置如下:
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
2.在gradle里的渠道:
productFlavors {
LDAND001 {
ndk {//这里控制apk要生成的so文件
abiFilters "armeabi-v7a"
abiFilters "armeabi"
abiFilters "x86"
abiFilters "x86_64"
}
}
LDAND002 {
ndk {
abiFilters "armeabi-v7a"
abiFilters "armeabi"
abiFilters "x86"
abiFilters "x86_64"
}
}
LDAND003 {
ndk {
abiFilters "armeabi-v7a"
abiFilters "armeabi"
abiFilters "x86"
abiFilters "x86_64"
}
}
LDAND004 {
ndk {
abiFilters "armeabi-v7a"
abiFilters "armeabi"
abiFilters "x86"
abiFilters "x86_64"
}
}
LDAND005 {
ndk {
abiFilters "armeabi-v7a"
abiFilters "armeabi"
abiFilters "x86"
abiFilters "x86_64"
}
}
LDAND006 {
ndk {
abiFilters "armeabi-v7a"
abiFilters "armeabi"
abiFilters "x86"
abiFilters "x86_64"
}
}
LDAND008 {
ndk {
abiFilters "armeabi-v7a"
abiFilters "armeabi"
abiFilters "x86"
abiFilters "x86_64"
}
}
LDAND009 {
ndk {
abiFilters "armeabi-v7a"
abiFilters "armeabi"
abiFilters "x86"
abiFilters "x86_64"
}
}
LDAND0012 {
ndk {
abiFilters "armeabi-v7a"
abiFilters "armeabi"
abiFilters "x86"
abiFilters "x86_64"
}
}
LDAND0014 {
ndk {
abiFilters "armeabi-v7a"
abiFilters "armeabi"
abiFilters "x86"
abiFilters "x86_64"
}
}
LDAND0018 {
ndk {
abiFilters "armeabi-v7a"
abiFilters "armeabi"
abiFilters "x86"
abiFilters "x86_64"
}
}
LDAND0019 {
ndk {
abiFilters "armeabi-v7a"
abiFilters "armeabi"
abiFilters "x86"
abiFilters "x86_64"
}
}
LDAND0020 {
ndk {
abiFilters "armeabi-v7a"
abiFilters "armeabi"
abiFilters "x86"
abiFilters "x86_64"
}
}
BLKEE_VM {
ndk {
abiFilters "armeabi-v7a"
abiFilters "armeabi"
abiFilters "x86"
abiFilters "x86_64"
}
}
Blkee {
ndk {
abiFilters "armeabi-v7a"
abiFilters "armeabi"
abiFilters "x86"
abiFilters "x86_64"
}
}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
这样写完后打包时如下图:
由于打的包较多可能要等一会,我平时用的时候有时快有时慢,如果大家想测一下打的渠道对不对可以用一下方法测试一下:
try {
PackageManager packageManager = getPackageManager();
ApplicationInfo applicationInfo = packageManager.getApplicationInfo("应用的包名", PackageManager.GET_META_DATA);
if (applicationInfo != null) {
if (applicationInfo.metaData != null) {
String channelName = applicationInfo.metaData.getString("meta-data的name");
Toast.makeText(this,channelName,Toast.LENGTH_SHORT).show();
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}