我正在尝试将我的应用程序从单一 APK 迁移到应用程序包格式。我需要设置LD_LIBRARY_PATH
环境变量exec()
调用,因此我需要我的本机库的位置。使用原始 APK 我会调用getApplicationInfo().nativeLibDir
图书馆就在那里。
对于应用程序包来说,它们不是。我可以看到安装了正确的 abi split APK,但由于某种原因,库没有被提取。
我尝试过安装bundletool
并通过 Google Play,
尝试运行'ls -alR'
我可以清楚地看到该目录以及拆分的 apk 都存在,但库根本没有提取。我想我可以手动提取它们作为解决方法,但这似乎没有必要......?
这是输出ls
on the 父文件夹 of 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 ..
正如您所看到的,拆分的 apk 在那里,但库未提取。
库应该解压到与原始 apk 相同的位置
默认情况下,从 Android App Bundle 生成的 APK 在 Android M/API 级别 23 或更高级别的设备上具有未压缩的本机库(source https://developer.android.com/studio/releases/gradle-plugin#3-3-0)。这不仅通常会减少下载大小,而且还会大大减少设备上应用程序的大小,因为 Android 平台可以直接从 APK 读取本机库,而不必将它们提取到单独的位置。上次 I/O 上有一次关于如何减小应用程序大小以及这如何影响安装数量的演讲,如果您有兴趣更好地了解这一点,他们详细介绍了它的工作原理。
现在您已经知道 Google Play 为何这样做,您有以下选择:
您可以选择恢复到原始 APK 行为,这可以通过添加标志来完成android.bundle.enableUncompressedNativeLibs=false
在你的 gradle.properties 文件中。这将有效地禁用此优化,从而导致 M+ 上的所有用户的应用程序尺寸更大。
您可以确保 Android 平台加载本机库(例如使用System.loadLibrary
)或者如果您出于某种原因自己直接阅读该库,也可以直接从 APK 中读取它。
如果本机库由您所依赖的第三方库加载,请考虑为他们提交错误来解决此问题,以便它们遵循与平台相同的逻辑。
希望有帮助,
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)