簡體   English   中英

Android應用程序包 - > apk不包含必需的本機庫

[英]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大...

對於那些沒有看過Google Play如何將應用程序包拆分為apks的人,這里有一個截圖: 在此輸入圖像描述

沒有必要告訴工具提供下一個最好的工具,應該自動完成。 如果設備報告也支持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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM