Android应用程序包-> APK不包含必需的本机库

Ema*_*lin 7 android google-play android-app-bundle

我正在使用新的应用程序捆绑包格式(aab)发布应用程序。该应用程序包括一些用于armeabi-v7a的本地库。当我在arm64-v8a架构上通过Google Play安装该应用程序时,它不包含没有arm64-v8a so本地文件的本机库。

根据此/sf/answers/2773574961/,armeabi-v7a库应在arm64-v8a设备上运行(并且通过adb安装时工作正常,因此确实可以工作)。

Google Play控制台会根据架构,屏幕密度等显示不同的apk。从apk大小中,我可以清楚地看出哪些不包含本机库。我还使用本机libs Monitor应用程序来分析已安装的apk,并且它显然不包括我需要的本机库(如果该应用程序具有arm64-v8a so文件,则它包括arm64-v8a本机库,但如果只有armeabi,则不包括-v7a版本)。

我的gradle构建文件包括以下用于捆绑包配置的小段代码:

    bundle {
        language {
            enableSplit = false
        }
        density {
            enableSplit = true
        }
        abi {
            enableSplit = true
//            include 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在这是我的问题:是否有办法告诉构建工具在每个apk中都包括“次优”本机库,其次是在特定体系结构上运行的最近版本?

PS:如果我为abi设置enableSplit = false,则它将包括本机库(如预期的那样),但不幸的是,对于包括x86在内的所有平台(仅20MB大)...

对于尚未看过Google Play如何将应用捆绑包拆分为APK的用户,以下是屏幕截图: 在此处输入图片说明

Pie*_*rre 6

无需告知该工具提供次佳的服务,而应该自动完成。如果设备报告还支持armeabi-v7a,则它应该收到包含它的APK。

编辑:

给定您的屏幕快照,您的应用似乎为该arm64-v8a体系结构提供了本机库,因此arm64-v8a将提供库,而不是库armeabi-v7a

还要注意,一台设备无法为同一应用加载来自不同体系结构的库,也就是说,您不能期望某些库以64位加载而另一些库以32位加载。即使使用包含所有ABI的“胖” APK,Android平台也只会在安装应用后选择一个ABI并丢弃所有其他文件,因此从您提供至少一个库开始arm64-v8a,没有一个armeabi-v7a库会成为加载到arm64-v8a设备上。

编辑

如果您无法为该架构提供所需的本机库,则应考虑从应用程序中排除某些ABI。这可以使用abiFiltersgradle配置中的代码块来实现:

ndk { abiFilters 'armeabi-v7a', 'x86' }