使用 Android Studio (1.3 RC) 找不到 ARM64 NDK 本机库
Posted
技术标签:
【中文标题】使用 Android Studio (1.3 RC) 找不到 ARM64 NDK 本机库【英文标题】:Can't find ARM64 NDK native lib using Android Studio (1.3 RC) 【发布时间】:2015-10-17 04:39:34 【问题描述】:致命异常:java.lang.UnsatisfiedLinkError dalvik.system.PathClassLoader[DexPathList[[zip 文件 "/data/app/com.myapp-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp-1/lib/arm64, /vendor/lib64, /system/lib64]]] 找不到“libnative.so”
它只发生在 ARM64 设备上。 我没有在我的 gradle 设置中设置任何自定义 NDK 构建。
看起来 android Studio 不知何故弄乱了正确的文件夹来复制 .so 文件。
这是如何发生的以及如何解决它?
【问题讨论】:
【参考方案1】:也许您正在使用另一个为 arm64-v8a 嵌入 .so 文件的库?以 zip 文件的形式打开您的 APK,然后查看 lib
文件夹,看看是否是这种情况。
然后,要解决您的问题,您可以使用 abiFilters
仅包含您完全支持的架构的 .so 文件:
android
....
defaultConfig
....
ndk
abiFilters "armeabi-v7a", "x86"
【讨论】:
【参考方案2】:基本上我们要做的是,把你的 .so 文件放在一个名为 lib 的文件夹中(注意:它不是 libs,这不是错误)。它应该具有相同的结构,应该在 APK 文件中。
项目:
|--lib:
|--|--armeabi:
|--|--|--.so 文件。
1) 所以我创建了一个 lib 文件夹,并在其中创建了一个 armeabi 文件夹,我在其中插入了所有需要的 .so 文件。
2) 然后我将文件夹压缩成 .zip(zip 文件中的结构现在是 lib/armeabi/*.so)。
3) 然后,我将 .zip 文件重命名为 armeabi.jar。
4) 并且,将行 compile fileTree(dir: 'libs', include: '*.jar') 添加到 gradle 的构建文件中的 dependencies 中。
【讨论】:
确实不推荐通过 jars 包含 .so 文件,这会导致许多错误。例如,abiFilters 可能不起作用。您只需将 .so 文件放在jniLibs/<abi>
文件夹下,它们就会被正确包含。
以上是关于使用 Android Studio (1.3 RC) 找不到 ARM64 NDK 本机库的主要内容,如果未能解决你的问题,请参考以下文章
关于 Square 的 Okio 库参考的 Android-Studio-1.2.RC Proguard 警告
适用于 Android 的 Visual Studio 2015 RC 模拟器无法启动