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. 再加一個視頻
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章