配置
defaultConfig {
...
ndk {
// abiFilters "all"
// x86_64模拟器需要x86,所以测试版打包留着x86
// 现在应用市场都要求有32位和64位
abiFilters "armeabi-v7a", "arm64-v8a", "x86"
}
}
abi 说明
ndk {
// Android中在进行NDK开发的时候,都知道因为机型杂而多的原因,没有一个大的标准,所以很多厂商都会采用不同型号的cpu,
// 那么在编译so文件的时候,就需要进行交叉编译出多个cpu平台版本,现在主流的cpu架构版本:
// armeabi/armeabi-v7a:这个架构是arm类型的,主要用于Android4.0之后的,cpu值32位的
// x86/x86_64:这个架构是x86类型的,有32位和64位,占用的设备比例比较小
// arm64-v8:这个架构是arm类型,主要用于Android5.0之后,cpu是64位的
// 这里可以看到,其中arm类型的是往下兼容策略,比如arm64-v8a肯定兼容armeabi/armeabi-v7a,
// 也就是说armeabi/armeabi-v7a架构的so文件可以用在arm64-v8a的设备中的,而armeabi-v7a也是兼容armeabi的,x86/x86_64不会向下兼容(模拟器情况是这样,真机需要测试)。
// 但是因为cpu型号不同,所以arm体系和x86体系之间是不能相互兼容的。
// todo 另两篇文章参考得出兼容情况:https://blog.csdn.net/xiongya8888/article/details/93938851 , https://blog.csdn.net/rnZuoZuo/article/details/98621400
// todo cpu 主要支持ABI 支持的ABI
// todo -------------------------------------------------------------------------
// todo ARMv5 armeabi armeabi
// todo ARMv7 armeabi-v7a armeabi ,armeabi-v7a
// todo ARMv8 arm64-v8a armeabi ,armeabi-v7a,arm64-v8a
// todo x86 x86 armeabi ,armeabi-v7a ,x86
// todo x86_64 x86_64 armeabi ,x86 ,x86_64
// todo MIPS mips mips
// todo MIPS64 猜测应该是mips64 mips,mips64
// todo 注意x86_64与x86对armeabi-v7a的兼容情况不同:x86_64 -> x86 -> armeabi, x86 -> armeabi-v7a -> armeabi
// todo abi与CPU的关系:http://blog.csdn.net/xx326664162/article/details/51167849
// todo so文件兼容问题:http://www.jianshu.com/p/438c136392ba
// todo 环信没有armeabi-v7a的so包,将环信armeabi中的so包复制了一份到armeabi-v7a
// todo x86_64模拟器需要x86,所以测试版打包留着x86
// todo 根据不同情况,打包含不同abi的包。可以在buildTypes或productFlavors中配置abiFilters
abiFilters "armeabi-v7a", "x86"
// abiFilters "all"
}
网友评论