gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 02:20:48 26 4
gpt4 key购买 nike

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

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

我已经尝试使用 bundletool 和通过 Google Play 安装,

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

这是 nativeLibPath

parent folderls 的输出
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 中读取 native 库,而不必将它们提取到单独的位置。在上次 I/O 大会上有一个关于如何减小应用程序大小以及这如何影响安装数量的演讲,如果您有兴趣更好地理解这一点,他们会详细介绍它是如何工作的。

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

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

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

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

希望对你有帮助,

关于android - 为 arm64 Android 手机构建应用程序包时,在 ApplicationInfo.nativeLibraryDir 中找不到 native 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55876441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com