在为arm64 Android手机构建应用程序包时,在ApplicationInfo.nativeLibraryDir中找不到本机库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在为arm64 Android手机构建应用程序包时,在ApplicationInfo.nativeLibraryDir中找不到本机库相关的知识,希望对你有一定的参考价值。

我正在尝试将我的应用程序从单片APK迁移到应用程序包格式。我需要为LD_LIBRARY_PATH调用设置exec()环境变量,因此我需要我的本机库的位置。使用原始的APK,我会打电话给getApplicationInfo().nativeLibDir,图书馆就在那里。

使用应用程序包,他们不是。我可以看到安装了正确的abi split APK,但由于某种原因,未提取库。

我尝试使用bundletool和Google Play安装,

试图运行'ls -alR',我可以清楚地看到目录存在以及拆分apk,但是库根本就没有提取。我想我可以手动提取它们作为解决方法,但这似乎是不必要的..?

这是ls父文件夹中nativeLibPath的输出

genLibraryPath: Dir Contents: /data/app/com.unseenonline-raAFLhJMQpjqWkVdG1Vocg==:
        total 16704
        drwxr-xr-x   4 system system      4096 2019-06-11 12:41 .
        drwxrwx--x 114 system system     12288 2019-06-11 12:41 ..
        -rw-r--r--   1 system system   5688352 2019-06-11 12:41 base.apk
        drwxr-xr-x   3 system system      4096 2019-06-11 12:41 lib
        drwxrwx--x   3 system install     4096 2019-06-11 12:41 oat
        -rw-r--r--   1 system system  11226112 2019-06-11 12:41 split_config.arm64_v8a.apk
        -rw-r--r--   1 system system     35636 2019-06-11 12:41 split_config.en.apk
        -rw-r--r--   1 system system     90443 2019-06-11 12:41 split_config.xxhdpi.apk

        /data/app/com.unseenonline-raAFLhJMQpjqWkVdG1Vocg==/lib:
        total 24
        drwxr-xr-x 3 system system 4096 2019-06-11 12:41 .
        drwxr-xr-x 4 system system 4096 2019-06-11 12:41 ..
        drwxr-xr-x 2 system system 4096 2019-06-11 12:41 arm64

        /data/app/com.unseenonline-raAFLhJMQpjqWkVdG1Vocg==/lib/arm64:
        total 16
        drwxr-xr-x 2 system system 4096 2019-06-11 12:41 .
        drwxr-xr-x 3 system system 4096 2019-06-11 12:41 ..

正如您所看到的那样,拆分apks存在,但未提取库。

应该将库提取到与原始apk相同的位置

答案

默认情况下,从android App Bundle生成的APK会在Android M +上的设备上解压缩本机库。这不仅会降低下载大小,而且还会大大减少设备上应用的大小,因为Android平台可以直接从APK读取本机库,而不必将它们提取到单独的位置。最后I / O上有一篇关于如何减小应用程序大小以及它如何影响安装数量的讨论,如果你有兴趣更好地理解这一点,他们会详细介绍它的工作原理。

因此,既然您知道Google Play为何会这样做,那么您有以下选择:

  • 您可以选择恢复原始的APK行为,这可以通过在gradle.properties文件中添加标志android.bundle.enableUncompressedNativeLibs=false来完成。这将有效地禁用此优化,从而为M +上的所有用户带来更大的应用尺寸。
  • 您可以确保Android平台加载本机库(例如使用System.loadLibrary),或者如果您出于某种原因直接自己阅读库,也可以直接从APK中读取它。

如果本机库由您依赖的第三方库加载,请考虑为它们提交错误以解决此问题,以便它们遵循与平台相同的逻辑。

希望有所帮助,

以上是关于在为arm64 Android手机构建应用程序包时,在ApplicationInfo.nativeLibraryDir中找不到本机库的主要内容,如果未能解决你的问题,请参考以下文章

为 iOS 构建,但在为 iOS 模拟器构建的目标文件中链接,用于架构 arm64

为 iOS 模拟器构建,但在为 iOS 构建的目标文件中链接,用于架构 arm64

构建 libetpan 项目期间的 ARM64 构建错误

部分开源项目着手支持macOS ARM64

如何为 arm64 构建 zlib

ARM64有性能优势吗