- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试将我的应用程序从单片 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/56551036/
我目前正在将Java与Play框架一起使用。我已经进行了JUnit测试,并且尝试使用IntelliJ CoverageRunner测量覆盖率。 不幸的是,游戏会生成一些垃圾分类,而IntelliJ会将
有人告诉我,当您在 Oracle 中创建过程时,您应该创建一个包含过程的包。这是真的吗? MS 中的程序与 Oracle 中的程序相同吗? 最佳答案 您不必将过程和函数放在包中,但通常认为这是最佳做法
我有一个 Django 项目,我想使用 manage.py runserver 在端口 80 上运行。在我的项目中,我使用 Wand库,我已经使用 Homebrew 软件安装了 freetype 和
我正在阅读 OCA Java SE 7 学习指南和包。但是,我在 Eclipse 中输入了与书中相同的代码,但出现了此错误。错误是 Exception in thread "main" java.la
我在 Windows 10 的 Powershell 中安装 Az 模块时遇到错误消息。有什么想法吗? 使用的命令: Install-Module Az -AllowClobber 错误消息: Pac
有没有办法为 .net 核心应用程序获取 WinAPI(user32.dll 部分)绑定(bind)(例如包含方法/枚举/结构声明的 nuget 包)。 Or 是 PInvoke 我需要手动调用的每个
我正在使用 expo 构建一个 React Native 项目。我在 Windows 上,所以我启用了 WSL 并从微软商店安装了 ubuntu。接下来我运行 expo build:android。我
我的 C# 应用程序使用我编写的 C++ WinRT 组件来获取使用 Direct X 的系统字体列表。 这是基于这个例子: http://msdn.microsoft.com/en-us/libra
我是一名优秀的程序员,十分优秀!