使用 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 模拟器无法启动

将 Android Studio 项目从 0.8.6 升级到 RC4 时出错

Android Studio 1.0RC1版公布

Android Studio 1.0 RC 4 构建错误

Android Studio 3.0 rc2中的弹出文档