致使這個問題出現的緣由是由於咱們在項目種使用了so庫,或者項目中引用的三方sdk使用了so庫。在引用so庫時須要針對不一樣的cpu架構使用不一樣的.so文件。armeabi,armeabi-v7a,x86,arm64-v8a,你們一般會對這幾個cpu架構進行適配。然而問題就出在如今Flutter在打包Apk時不能同時引入arm32和arm64的libflutter.so
。我門將打好包的Apk安裝到arm64架構(默認打包會引入arm32)的手機上時就出現了couldn't find libflutter.so
這個異常。android
針對arm32和arm64分別打包(flutter 提供了命令來之分別對arm32和arm64分別打包)架構
flutter build apk --target-platform=android-arm32
app
flutter build apk --target-platform=android-arm64
gradle
咱們用flutter build apk --target-platform=android-arm64
打包apk,並在arm64cpu架構的手機安裝運行,很好完美運行。可是當咱們吧apk安裝到32位時問題再次出現,緣由就再也不重複了。很顯然到這裏這個方式並不能解決這個問題,爲了適配arm32和arm64咱們須要分別打包,而國內大部分應用市場不能針對不一樣cpu架構上傳不一樣的apk。ui
不對arm64作適配,打包時排除其餘非arm32架構的so文件spa
這時候有些朋友可能會又疑問,問題不就是由於打包時沒有引入arm64的libflutter的so文件致使在arm64架構手機上出現「兼容」問題的麼。這裏簡單說一點關於引用so庫的一些知識,瞭解的朋友你們直接跳過就能夠。arm64cpu架構是能夠像下兼容的,簡單點就是arm64架構的cpu可使用arm32的.so文件。出現問題真正緣由是咱們在引用so庫時(引用的三方庫中引用了so庫),對arm64作了兼容。這樣就會致使運行時系統誤覺得咱們的應用對全部的so庫作了arm64架構的兼容,可是在打包時libflutter並無引入arm64的版本。這就致使系統去尋找arm64版本的libflutter發現找不到。系統誤會了咱們,我門只能經過gradle在打包時排除其餘非arm32架構的so文件來解除這個誤會。debug
好那如何排除其餘非arm32架構的so文件。在app下的gradle文件加入以下代碼code
buildTypes {
release {
ndk{
//這裏其實我覺能夠直接是用"armeabi-v7a",但國內幾個大哥以前使用的都是"armeabi"
abiFilters "armeabi"
}
}
debug {
ndk {
//這裏要加上,不然debug包會出問題,後面三個爲可選,x86建議加上否則部分模擬器回報錯
abiFilters "armeabi", ,"armeabi-v7a","arm64-v8a", "x86"
}
}
}
複製代碼
這個問題在官方issues已經存在好久了暫時沒有完美的解決方法,有新的方法我會第一時間更新。 後續我會持續更新一些Flutter開發時遇到的問題,以及一些好的文章(可能包含生肉,本人英文能力有限盡可能嘗試炒熟)。但願能幫你們少走一些彎路。有些理解不到位也但願你們指正幫助進步,提早謝過你們。謝謝。orm