节在安装时间内自动提取本机代码指出:
当安装应用程序时,包装管理器服务会扫描APK,并查找表单的任何共享库:
lib/<primary-abi>/lib<name>.so
如果没有找到,您已经定义了次要ABI,则该服务 扫描表格共享库:
lib/<secondary-abi>/lib<name>.so
background:
我的应用程序取决于通过JNI接口访问的外部库,但我只提供了例如。
libLibrary.so
档案架构。我的应用程序还使用另一个支持几个不同架构(例如ARM64-V8A等)的库。因此,在运行时,我会收到这样的错误,因为它找不到libLibrary.so
::
:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[... /system/lib64]]] couldn't find "libLibrary.so"
Edit:
我想知道如果我依靠的其他库中有Armeabi-v7a的文件,但不是Armeabi,那么如果我从Armeabi文件夹中复制
libLibrary.so
我已经测试了我的应用程序,当我在gradle设置时,它使用库没有问题:
ndk.abiFilters "armeabi-v7a"
仅在APK文件中输出ARMEABI-V7A库以使应用仅使用它们。
所以,我想知道那是否很好。我正在使用此处建议的内容:https://medium.com/livefront/native-android-libraries-gone-bad-e7ff63f34bb
正如迈克尔(Michael)写的那样,您无法在部分支持
ARM64-V8AA的情况下部署应用程序。只要您不将应用程序上传到播放商店(例如在开发和测试期间),就应该从APK中剥离64位二进制文件。截至今天,所有设备仍将运行aarmeabi二进制,但我希望未来几年只有64位的设备。 如果您打算通过Google Play商店分发该应用程序,则必须确保您的应用程序在没有32位二进制文件的情况下运行。有时,当没有本机LIB的来源不可用时,在Java/kotlin中复制缺失功能会更容易。
以以下格式找到共享库: