其实这些都是Android设备CPU的:
- armeabi: 早期的手机用的比较多,针对普通的或旧的arm v5 cpu,。
- armeabiv-v7a:目前主流版本 2011年以后的生产的大部分设备,针对有浮点运算或高级扩展功能的arm v7 cpu.
- arm64-v8a: 8代、64位ARM处理器,64位支持.
- x86: 我们见到的模拟器大多就是这个。
- x86_64: 64位的平板。
然后特意说一下x86系列的,是兼容arm的,但是性能损失特别大.
Android加载.so的原则
同一目录下要么所有使用jni的项目都给加上.so文件,
要么你就别给这个目录,也就是只要不齐全就都干掉
比如你的lib结构是这样的
libs
-armeabi
-aaa.so
-bbb.so
-arm64-v8a
-aaa.so
其实这种情况就是属于同一目录下,提供的.so文件不全...然而很容易出现,毕竟有些三方啊什么的,提供的.so文件并不齐全,这样的话同一个架构目录下会缺少一个或多个.so文件.
Android在加载某个使用jni的功能时,你并没有提供x86的.so文件,但是你有x86这个目录,那就会去x86目录下去找,没有啊然后就异常了.
Android加载.so的目录
1.我自己用的是
也就是自己在app -> src -> main 下自己建立一个目录: jniLibs
然后放进去即可.
2.就是通常放在libs目录下了
别忘了在build.gradle文件中设置 jniLibs.srcDir
Android排除某架构的.so
android {
...
defaultConfig {
...
ndk {
// 设置支持的 SO 库构架
abiFilters 'armeabi', 'armeabi-v7a' // 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64'
}
}
}
如果编译报
NDK integration is deprecated in the current plugin.
gradle.properties 文件中添加:
android.useDeprecatedNdk=true
应该还有其他方法排除,我也就知道这一种,如果有知道其他方法的,请告知一下,谢谢
网友评论