在 64 位 android 设备上找不到 .so 文件

Can not find .so file on 64 bit android device

使用 aviary android sdk 使用 android 工作室和 gradle 构建。 生成的应用程序 运行 在具有 32 位架构的所有设备上都正常。

同一应用在 64 位设备中出现以下错误 [例如。索尼C4]

    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file 
"/data/app/com.myapp/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libaviary_moalite.so"

gredle.build部分

dependencies {
    ...
    compile 'com.android.support:multidex:1.0.0'
    compile 'com.facebook.fresco:fresco:0.8.1+'
    compile 'com.facebook.fresco:imagepipeline-okhttp:0.8.1+'
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile 'com.adobe.creativesdk:image:4.0.0'
}

参考无效

Can't find ARM64 NDK native lib using Android Studio (1.3 RC)

如果使用任何已使用的解决方案,都会出现同样的错误。

出现类似

的错误
Error:(16, 0) Error: NDK integration is deprecated in the current plugin.  Consider trying the new experimental plugin.  For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental.  Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration.

我不确定我做错了什么或者根本不支持它。

您使用的某些软件包似乎带有 64 位库,但有些则没有。为了让您的 APK 仅保持 32 位,我使用

android {
    splits {
        abi {
            enable true
            reset()
            include 'armeabi-v7a'
        }
    }
}

如果相关,您也可以玩 include 'armeabi'

我已经通过以下步骤解决了这个问题:

  1. 我已经移动了 armeabi 和 x86 文件夹 来自:\src\main\jniLibs 至:\libs

    请确保将所有文件也移动到这些文件夹下:*.so 文件应该位于那里。

  2. 我已将以下内容添加到我的 build.gradle:

    sourceSets.main {
      jniLibs.srcDir 'src/main/libs'
    }
    
  3. 清理 + 重建项目

    *如果您使用的是 multidex,请确认这些行已添加到 build.gradle:

    defaultConfig {
      multiDexEnabled true
    }
    
    dexOptions {
      preDexLibraries false
      javaMaxHeapSize "4g"
    }
    

此外,这应该添加到您的清单文件中:

<application
    android:name="android.support.multidex.MultiDexApplication">
/application>

希望对您有所帮助。