![](/img/trans.png)
[英]React Native Android: Generating Signed APK through Android Studio doesn't include JS Bundle
[英]Android app bundle -> apk doesn't include required native library
我正在使用新的應用包格式(aab)發布應用。 該應用程序包括一些armeabi-v7a的本機庫。 當我在arm64-v8a架構上通過Google Play安裝應用程序時,它不包含沒有arm64-v8a so文件的本機庫。
根據這個https://stackoverflow.com/a/39622499/534471,armeabi-v7a庫應該在arm64-v8a設備上運行(當通過adb安裝時它可以正常工作,所以它確實可以正常工作)。
Google Play控制台按體系結構,屏幕密度等顯示不同的apks。從apk大小我可以清楚地知道哪些不包含本機庫。 我還使用本機libs監視器應用程序來分析已安裝的apk,它顯然不包括我需要的本機庫(如果應用程序有arm64-v8a so文件,它包括arm64-v8a本機庫,但如果只有armeabi則不包括-v7a版)。
我的gradle構建文件包含用於bundle配置的這一小段代碼:
bundle {
language {
enableSplit = false
}
density {
enableSplit = true
}
abi {
enableSplit = true
// include 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
}
現在這里是我的問題:有沒有辦法告訴構建工具在每個apk中包含“次佳”本機庫,其次最好是在特定架構上運行的最接近的版本?
PS:如果我為abi設置了enableSplit = false,那么它將包含本機庫(正如預期的那樣),但遺憾的是包括x86在內的所有平台都是20MB大...
沒有必要告訴工具提供下一個最好的工具,應該自動完成。 如果設備報告也支持armeabi-v7a,它應該會收到包含它的APK。
編輯:
鑒於您的屏幕截圖,您的應用程序似乎為arm64-v8a
架構提供了本機庫,因此將提供arm64-v8a
庫,而不是armeabi-v7a
。
另請注意,一個設備無法為同一個應用程序加載來自不同體系結構的庫,即您不能指望某些庫以64位加載,而其他一些庫則以32位加載。 即使使用包含所有ABI的“胖”APK,Android平台也只會在安裝您的應用程序時選擇一個ABI並丟棄所有其他文件,因此從您為arm64-v8a
提供至少一個庫的那一刻起,沒有任何armeabi-v7a
庫將被加載到arm64-v8a
設備上。
編輯 :
如果無法為該體系結構提供所需的本機庫,則應考慮從應用程序中排除某些ABI。 這可以使用gradle配置中的abiFilters
塊來實現:
ndk { abiFilters 'armeabi-v7a', 'x86' }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.