带有2个带jniLibs库的Android应用程序 - 使应用程序崩溃

Joo*_*lah 3 java-native-interface android gradle android-ndk android-studio

在我的Android应用程序中,我使用两个库,每个库都有自己的jniLibs.

库1 - https://github.com/tekinarslan/AndroidPdfViewer

图书馆2 - 自定义视频播放器sdk

该应用程序将编译和构建正常.

两个库都将jniLibs放在正确的位置.

似乎只有一个库可以工作,在本例中是pdfView.库2被称为.它打破了,日志说它无法为它加载jniLibs.

有没有人遇到过它?谢谢

chaeyoungx反馈后更新代码:

App Build.gradle:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

defaultConfig {
    applicationId "com.my.app"
    minSdkVersion 17
    targetSdkVersion 22
    versionCode 14
    versionName "1.0"

    ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "mips" }
}
   ....
Run Code Online (Sandbox Code Playgroud)

我在两个文件中尝试了以下代码:gradle.properties(Project and Global)

android.useDeprecatedNdk=true
Run Code Online (Sandbox Code Playgroud)

还是有同样的问题.

小智 6

我还尝试为我的应用程序导入2个库并出现相同的错误.

我在网上找到了解决方案,这就是我解决问题的方法:

  1. 转到gradle.properties并添加android.useDeprecatedNdk = true

  2. 然后打开你的app文件夹中的build.gradle然后输入

    ndk {
        abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
    }
    
    Run Code Online (Sandbox Code Playgroud)

    在defaultconfig {中

在此之后,我只是清理并重建项目并且没有错误地工作.

我希望这适合你.


use*_*837 5

确保您已为每个abi构建了库.看看你最后的apk文件.在文件夹库中,您将找到每个abi具有库的文件夹.每个应该有相同的库.如果你没有足够的:

  1. 为其他abis构建您的库
  2. 排除这些文件夹,即

    armeabi
        lib1.so
        lib2.so
        lib3.so
    armeabi-v7a
        lib1.so
        lib2.so
        lib3.so
    arm64-v8a
        lib1.so
    
    Run Code Online (Sandbox Code Playgroud)

在这种情况下,arm64设备将转到arm64-v8a文件夹并尝试查找lib2,lib3,并且无法找到它们.因此在java应用程序的gradle文件中排除arm64-v8a文件夹,因此arm64设备可以使用armeabi文件夹.