让APK只包含指定平台的so库(abi)
2017-02-24 11:09
239 查看
相信大家都用过很多第三方的sdk,比如百度地图,支付宝,极光推送等等。如果这个sdk对Android的平台支持全,可能会包含armeabi, armeabi-v7a,x86, arm64-v8a,x86_64五种abi,但是你其他的so库可能只支持其中的几个平台,这样,你编译运行,可能就会Crash。
我试着把QQ和微信的APK解压,发现他们只有armeabi的支持,其他的平台根本不需要,我也就查阅资料,看如何把其他的去掉,开始只想着去删除,后面查询资料发现了更加便捷的方式。
第一种:对每个要生成的渠道包进行分别配置(在app下的build.gradle文件中配置)
第二种:全局配置(这种需求比较多,同样是在app下的build.gradle下配置)
defaultConfig {
ndk {
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a"
}
}
这样生成的所有Apk就最多有armeabi, armeabi-v7a, arm64-v8a这三种平台的so库,当然要它本身就有这三个平台的so库
更多分享请搭载老爷车进入开车啦
我试着把QQ和微信的APK解压,发现他们只有armeabi的支持,其他的平台根本不需要,我也就查阅资料,看如何把其他的去掉,开始只想着去删除,后面查询资料发现了更加便捷的方式。
第一种:对每个要生成的渠道包进行分别配置(在app下的build.gradle文件中配置)
productFlavors { samsungapps{ ndk { abiFilters "armeabi" } } hiapk{ ndk { abiFilters "armeabi-v7a" abiFilters "x86" abiFilters "armeabi" abiFilters "arm64-v8a" abiFilters "x86_64" } } anzhi{ ndk { abiFilters "armeabi-v7a" abiFilters "armeabi" abiFilters "arm64-v8a" } } }像这种就是单独对渠道包配置,对应打出来的包就只包含你所需要的so库。
第二种:全局配置(这种需求比较多,同样是在app下的build.gradle下配置)
defaultConfig {
ndk {
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a"
}
}
这样生成的所有Apk就最多有armeabi, armeabi-v7a, arm64-v8a这三种平台的so库,当然要它本身就有这三个平台的so库
更多分享请搭载老爷车进入开车啦
相关文章推荐
- 让APK只包含指定平台的so库(abi)
- 让APK只包含指定的ABI
- 让APK只包含指定的ABI
- 让APK只包含指定的ABI
- 让apk只包含指定的so
- eclipse编译生成APK如何可以调用平台中的系统函数
- 编写一个Python程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径
- 3 Ant的 location属性专门设计用于以平台无关的方式包含文件系统路径(错误)
- 从文本文件里抽取包含指定字符串的行
- 批量删除文件夹下包含指定字段的文件
- 在java工程所有的.java中找到内容包含指定字符串的.java文件
- range() 函数创建并返回一个包含指定范围的元素的数组
- Vim 删除不包含指定字符串的行及统计匹配个数
- VS2015在x86平台下找不到包含目录的问题
- cocos2d-x3.2 在Windows下打包Android平台APK
- Android中代码运行指定Apk的简单方法
- 把apk文件拖到re-sign.jar运行打开的界面找不到指定文件
- JavaScript判断数组是否包含指定元素的方法
- shell提取指定列并判断提取结果中是否包含指定字符串
- Android——APK 在32bit/64bit平台 动态库问题