当前位置: 首页 > 知识库问答 >
问题:

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

单于耘豪
2023-03-14

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

根据https://stackoverflow.com/a/39622499/534471,armeabi-v7a库应该运行在arm64-v8a设备上(通过adb安装时运行良好,因此它确实可以工作)。

Google Play控制台根据体系结构、屏幕密度等显示了不同的apk,从apk大小我可以清楚地看出哪些apk不包括本机库。我还使用一个原生库监视器应用程序来分析安装的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'
        }
    }

现在我的问题是:有没有一种方法告诉构建工具在每个apk中包含“下一个最好的”本机库,下一个最好的是运行在特定架构上的最接近的版本?

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

共有1个答案

戚永福
2023-03-14

没有必要告诉工具要为下一个最好的服务,这应该是自动完成的。如果设备报告也支持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仍然显示“默认应用程序选择对话框”) 更新1:我正在Android8.1上测试。我已经上传了文件。以下是我处理深层链接的活动:

  • 这是关于PlayStore警告调试符号的 我已经成功地构建了Gradle,在添加了一行代码之后。格雷德尔(应用程序) 但是按照说明https://developer.android.com/studio/build/shrink-code当我建立一个应用程序时,我找不到native-debug-symbols.zip文件,所以我的问题是如何获得文件native-debug-symbols.zip文

  • 我已经和这件事斗争了一天多,在SO和其他地方读了很多帖子,但我仍然有问题。 我需要在一个自包含的JavaFX应用程序包中包含我的应用程序图标。我使用的是JDK1.8.0_45及其包含的JavaFX包。我正在使用Maven构建.exe,除了我不能包含我的图标外,它都运行得很好。 下面是我的pom.xml: 使图标出现在标题栏中的是javapackager部署步骤的参数。这一行告诉inno安装程序使用

  • 为了完整起见,我使用Oracle JDK 1.8.0_66 for Mac。

  • 我已经编写了一个混合应用程序,它使用react原生svg在react原生视图中呈现svg图像。一切都很完美。今天,当我为我的应用程序创建release apk并将其部署到模拟器时,它崩溃了,出现了一个错误: 只有当我从proguard规则中注释时,我才会看到这个问题。专业文件。我想混淆我的apk代码(我无法控制)。我使用的proguard文件与本例中显示的类似,https://github.com

  • 按照这里和这里的指示。我使用的是JDK7U9和NetBeans 7.2.1。我所做的是创建相对于我的项目根文件夹的整个路径(C:\users\administrator\desktop\icotest\package\windows\icotest.ico)。我同时尝试了48x48和256x256的大小。下面是我的项目Icotest的树状结构概述: 这就是build.xml的样子: