- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用新的应用程序包格式 (aab) 发布应用程序。该应用程序包含一些 armeabi-v7a 的 native 库。当我通过 Google Play 在 arm64-v8a 架构上安装该应用程序时,它不包含没有 arm64-v8a so 文件的 native 库。
根据这个https://stackoverflow.com/a/39622499/534471 , armeabi-v7a 库应该在 arm64-v8a 设备上运行(通过 adb 安装时它工作正常,所以它确实工作)。
Google Play 控制台按架构、屏幕密度等显示不同的 apk。从 apk 大小我可以清楚地分辨出哪些不包含 native 库。我还使用 native 库监视器应用程序来分析已安装的 apk,它显然不包括我需要的 native 库(如果应用程序具有 arm64-v8a so 文件,则它包括 arm64-v8a native 库,但如果只有 armeabi 则不包括-v7a 版本)。
我的 gradle 构建文件包含这一小段用于 bundle 配置的代码:
bundle {
language {
enableSplit = false
}
density {
enableSplit = true
}
abi {
enableSplit = true
// include 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
}
现在这是我的问题:有没有办法告诉构建工具在每个 apk 中包含“下一个最佳” native 库,下一个最佳是可以在特定架构上运行的最接近的版本?
PS:如果我为 abi 设置 enableSplit = false 那么它将包含 native 库(如预期的那样)但不幸的是对于包括 x86 在内的所有平台,它本身就有 20MB 大...
最佳答案
无需告诉工具提供次佳服务,这应该是自动完成的。如果设备报告也支持 armeabi-v7a,它应该会收到包含它的 APK。
编辑:
根据您的屏幕截图,您的应用似乎为 arm64-v8a
提供了 native 库架构,所以arm64-v8a
图书馆将提供服务,而不是 armeabi-v7a
另请注意,一台设备无法为同一应用程序从不同架构加载库,即您不能指望某些库以 64 位加载,而另一些则以 32 位加载。即使使用包含所有 ABI 的“胖”APK,Android 平台也只会在安装您的应用程序时选择一个 ABI 并丢弃所有其他文件,因此从您为 arm64-v8a
提供至少一个库的那一刻起, 没有一个 armeabi-v7a
库将永远加载到 arm64-v8a
上设备。
编辑:
如果您无法为该架构提供所需的 native 库,则应考虑从您的应用中排除某些 ABI。这可以使用 abiFilters
来实现在 gradle 配置中阻止:
ndk { abiFilters 'armeabi-v7a', 'x86' }
关于Android 应用程序包 -> apk 不包含必需的 native 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51092745/
我目前正在将Java与Play框架一起使用。我已经进行了JUnit测试,并且尝试使用IntelliJ CoverageRunner测量覆盖率。 不幸的是,游戏会生成一些垃圾分类,而IntelliJ会将
有人告诉我,当您在 Oracle 中创建过程时,您应该创建一个包含过程的包。这是真的吗? MS 中的程序与 Oracle 中的程序相同吗? 最佳答案 您不必将过程和函数放在包中,但通常认为这是最佳做法
我有一个 Django 项目,我想使用 manage.py runserver 在端口 80 上运行。在我的项目中,我使用 Wand库,我已经使用 Homebrew 软件安装了 freetype 和
我正在阅读 OCA Java SE 7 学习指南和包。但是,我在 Eclipse 中输入了与书中相同的代码,但出现了此错误。错误是 Exception in thread "main" java.la
我在 Windows 10 的 Powershell 中安装 Az 模块时遇到错误消息。有什么想法吗? 使用的命令: Install-Module Az -AllowClobber 错误消息: Pac
有没有办法为 .net 核心应用程序获取 WinAPI(user32.dll 部分)绑定(bind)(例如包含方法/枚举/结构声明的 nuget 包)。 Or 是 PInvoke 我需要手动调用的每个
我正在使用 expo 构建一个 React Native 项目。我在 Windows 上,所以我启用了 WSL 并从微软商店安装了 ubuntu。接下来我运行 expo build:android。我
我的 C# 应用程序使用我编写的 C++ WinRT 组件来获取使用 Direct X 的系统字体列表。 这是基于这个例子: http://msdn.microsoft.com/en-us/libra
我是一名优秀的程序员,十分优秀!