编程语言
首页 > 编程语言> > Android应用程序包 – > apk不包含必需的本机库

Android应用程序包 – > apk不包含必需的本机库

作者:互联网

我正在使用新的应用包格式(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的人,这里有一个截图:
enter image description here

解决方法:

没有必要告诉工具提供下一个最好的工具,应该自动完成.如果设备报告也支持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′}

标签:android,google-play,android-app-bundle
来源: https://codeday.me/bug/20190910/1801833.html