- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将我的应用程序从单片 APK 迁移到应用程序包格式。我需要为 exec()
调用设置 LD_LIBRARY_PATH
环境变量,因此我需要本地库的位置。对于原始 APK,我会调用 getApplicationInfo().nativeLibDir
,库就在那里。
对于应用程序包,它们不是。 我可以看到安装了正确的 abi split APK,但由于某些原因没有提取库。
我已经尝试使用 bundletool
和通过 Google Play 安装,
尝试运行 'ls -alR'
,我可以清楚地看到该目录以及拆分的 apk 都存在,但根本没有提取库。我想我可以手动提取它们作为解决方法,但这似乎没有必要......?
这是 nativeLibPath
ls
的输出
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/
我正在尝试将我的应用程序从单片 APK 迁移到应用程序包格式。我需要为 exec() 调用设置 LD_LIBRARY_PATH 环境变量,因此我需要本地库的位置。对于原始 APK,我会调用 getAp
我正在尝试将我的应用程序从单片 APK 迁移到应用程序包格式。我需要为 exec() 调用设置 LD_LIBRARY_PATH 环境变量,因此我需要本地库的位置。对于原始 APK,我会调用 getAp
在将 Gradle 从 5.4.1 更新到 5.6.4 并将 Android Studio 从 3.5.3 更新到 3.6.1 之后,我的库似乎不再存在于 nativeLibraryDir 中。我当前
我是一名优秀的程序员,十分优秀!