android gradle多渠道打包和打包选定的so文件夹
一.简介
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(); }
关注订阅号: