Android Jni , 不同 arm 架构 兼容

Jni

jni 是一种 java 调用 c 语言的方式
java 反编译比c容易

参考文献:

https://www.jianshu.com/p/87ce6f565d37

https://blog.csdn.net/carson_ho/article/details/73250163

  • 微信arm
    微信是放在一个包里自动加载的,不是分文件夹

https://blog.csdn.net/shb2058/article/details/71438977

目前Android共支持七种不同类型的CPU架构,分别是:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起)。如果你要完美兼容所有类型的手机,理论上是要在的libs目录下放置各个架构平台的SO文件。

Tip

就目前市场份额而言,绝大部分的设备都已经是armeabi-v7a、arm64-v8a,你也可以考虑只保留armeabi-v7a架构的SO文件,这样能获得更好的性能效果。

  • armabi
    在这里插入图片描述
    在这里插入图片描述

问题

  1. 为什么 v7a flutter 可以打包出去用了?
  • 信息一
    最近项目中遇到了要使用opencv的情况,涉及到了abi兼容的选择。因为如果全部都适配的话,包很大,这样兼容那些用户数极少的cpu就很不划算,所以我只适配了armeabi-v7a这一个。但是今天在x64-v8a的模拟器上看的时候,提示我的library.so文件找不到,我记得这个应该是向下兼容的,但是出现这种情况很奇怪,于是我就在网上找了找答案。

ndk {
abiFilters “armeabi-v7a” // 指定要ndk需要兼容的架构(这样其他依赖包里mips,x86,armeabi,arm-v8之类的so会被过滤掉)
}

  • 先改了 gradle, 再改了 命令:
 flutter build apk --target-platform android-arm64

信息2 , 查看 flutter apk 解压完毕后只有 armv7a 支持

现准备 arm64-v8a(兼容 armeabi-v7a) 测试,以及armeabi(只支持 armeabi),预期结果 arm64-v8a 兼容,armeabi 不兼容。

下一步, 打包 armeabi so 包测试。预期结果两个都兼容,但是速度有一点损失

-> sdk 下载中

  1. 不同的 so 包文件如何发 app包,可有一种兼容方式(编译所有的 so 到一起?)
  2. flutter 再打包测试一下
  3. 再加一个视频
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章