为 arm64 Android phone 构建应用程序包时 ApplicationInfo.nativeLibraryDir 中未找到本机库

Native libraries not found in ApplicationInfo.nativeLibraryDir when building app bundle for arm64 Android phone

我正在尝试将我的应用程序从单片 APK 迁移到应用程序包格式。我需要为 exec() 调用设置 LD_LIBRARY_PATH 环境变量,因此我需要本地库的位置。对于原始 APK,我会调用 getApplicationInfo().nativeLibDir 并且库在那里。

对于应用程序包,它们不是。 我可以看到安装了正确的 abi split APK,但由于某些原因没有提取库。

我已经尝试使用 bundletool 安装并通过 Google 播放,

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

这是 lsnativeLibPath

父文件夹 上的输出
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 ..

如您所见,拆分的 apk 在那里,但库未提取。

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

默认情况下,从 Android App Bundle 生成的 APK 在具有 Android M / API 23 级或更高级别 (source) 的设备上具有未压缩的本机库.这不仅通常会减少下载大小,而且还会大大减少设备上应用程序的大小,因为 Android 平台可以直接从 APK 中读取本机库,而不必将它们提取到单独的位置。最后 I/O 讨论了如何减小应用程序的大小以及这如何影响安装数量,如果您有兴趣更好地理解它,他们会详细介绍它是如何工作的。

所以,既然您知道 Google Play 这样做的原因,您有以下选择:

  • 您可以选择恢复到原始 APK 行为,这可以通过在 gradle.properties 文件中添加标志 android.bundle.enableUncompressedNativeLibs=false 来完成。这将有效地禁用此优化,从而为 M+ 上的所有用户带来更大的应用程序大小。

  • 您可以确保本机库由 Android 平台加载(例如使用 System.loadLibrary)或者如果您出于某种原因直接自己读取库, 也可以直接从 APK 读取。

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

希望对您有所帮助,