贵有恒,何必三更起、五更眠、最无益,只怕一日曝、十日寒。这篇文章主要讲述在为arm64 Android手机构建应用程序包时,在ApplicationInfo.nativeLibraryDir中找不到本机库相关的知识,希望能为你提供帮助。
我正在尝试将我的应用程序从单片APK迁移到应用程序包格式。我需要为LD_LIBRARY_PATH
调用设置exec()
环境变量,因此我需要我的本机库的位置。使用原始的APK,我会打电话给getApplicationInfo().nativeLibDir
,图书馆就在那里。
使用应用程序包,他们不是。我可以看到安装了正确的abi split APK,但由于某种原因,未提取库。
我尝试使用bundletool
和Google Play安装,
试图运行'ls -alR'
,我可以清楚地看到目录存在以及拆分apk,但是库根本就没有提取。我想我可以手动提取它们作为解决方法,但这似乎是不必要的..?
这是ls
父文件夹中nativeLibPath
的输出
genLibraryPath: Dir Contents: /data/app/com.unseenonline-raAFLhJMQpjqWkVdG1Vocg==:
total 16704
drwxr-xr-x4 system system4096 2019-06-11 12:41 .
drwxrwx--x 114 system system12288 2019-06-11 12:41 ..
-rw-r--r--1 system system5688352 2019-06-11 12:41 base.apk
drwxr-xr-x3 system system4096 2019-06-11 12:41 lib
drwxrwx--x3 system install4096 2019-06-11 12:41 oat
-rw-r--r--1 system system11226112 2019-06-11 12:41 split_config.arm64_v8a.apk
-rw-r--r--1 system system35636 2019-06-11 12:41 split_config.en.apk
-rw-r--r--1 system system90443 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 ..
正如您所看到的那样,拆分apks存在,但未提取库。
应该将库提取到与原始apk相同的位置
答案默认情况下,从android App Bundle生成的APK会在Android M +上的设备上解压缩本机库。这不仅会降低下载大小,而且还会大大减少设备上应用的大小,因为Android平台可以直接从APK读取本机库,而不必将它们提取到单独的位置。最后I / O上有一篇关于如何减小应用程序大小以及它如何影响安装数量的讨论,如果你有兴趣更好地理解这一点,他们会详细介绍它的工作原理。
【在为arm64 Android手机构建应用程序包时,在ApplicationInfo.nativeLibraryDir中找不到本机库】因此,既然您知道Google Play为何会这样做,那么您有以下选择:
- 您可以选择恢复原始的APK行为,这可以通过在gradle.properties文件中添加标志
android.bundle.enableUncompressedNativeLibs=false
来完成。这将有效地禁用此优化,从而为M +上的所有用户带来更大的应用尺寸。 - 您可以确保Android平台加载本机库(例如使用
System.loadLibrary
),或者如果您出于某种原因直接自己阅读库,也可以直接从APK中读取它。
希望有所帮助,
推荐阅读
- 找不到模块'./app/server.app.module.ngfactory'
- 尝试使用Android Brother Sdk打印无线时,ERROR_WRONG_LABEL用于标签打印机
- Android 9上的BiometricManager
- 在appkit中禁用右键单击
- 如何在Android中停止可运行线程()
- java.lang.NoClassDefFoundError(部署到Google App Engine时无法初始化类net.sf.cglib.proxy.Enhancer。)
- Jquery在混合android中不起作用,但在网络中起作用
- 如何在Android中设置EditText的最大字符数()
- Android(如何从一组图像制作视频)