Android M API 23加载lib .so文件时出错

时间:2016-04-15 10:46:42

标签: android android-studio shared-libraries android-6.0-marshmallow aac

大家好,我的应用程序中有aac解码器

当我在API级别22时,它工作得很好。

但是当我使用API​​级别23时...我的应用程序崩溃并且给我一个无法解析文件的错误

java.lang.UnsatisfiedLinkError: dlopen failed:

我搜索了很多页面,但没有任何帮助。 问题只出现在最新版本的android ..应用程序在旧版本的android中运行得很好..

这是我的libs

aacdecoder-android-libs-0.8.zip

| --- SRC      | ---主            | --- jniLibs

              > aacdecoder-android-0.8.jar
                > armeabi
                   > libaacdecoder.so
              > armeabi-v7a
                   > libaacdecoder.so
              > mips
                  > libaacdecoder.so
              > x86
                > libaacdecoder.so

我如何在最新版本的Android M中加载lib

我也试过

 System.loadLibrary("src/main/amn/armeabi/libaacdecoder.so");
        System.loadLibrary("src/main/amn/armeabi-v7a/libaacdecoder.so");
        System.loadLibrary("src/main/amn/mips/libaacdecoder.so");
        System.loadLibrary("src/main/amn/x86/libaacdecoder.so");
        System.loadLibrary("src/main/amn/aacdecoder-android-0.8.jar");

但nothings有效:(

提前谢谢..我在等待

1 个答案:

答案 0 :(得分:0)

我已针对api 26解决了此问题,

1-您需要实现这个新库:       https://github.com/hichemcesar24/AACDecoder

2-您需要在此代码下方更改我正在使用的gradle:

android {
compileSdkVersion 26
buildToolsVersion '26.0.1'

defaultConfig {
    minSdkVersion 15
    targetSdkVersion 26
    versionCode 1
    versionName "0.8"
    group = 'com.spoledge.aacdecoder'
    version = '0.8-SNAPSHOT'
    ndk { stl "gnustl_static" }
}

sourceSets.main {
    jniLibs.srcDir 'src/main/libs'
    jni.srcDirs = []
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}

task ndkBuild(type: Exec) {
   // def ndkDir =plugins.getPlugin('com.android.library').sdkHandler.getNdkFolder()
   def ndkDir = project.android.ndkDirectory.absolutePath


    if (Os.isFamily(Os.FAMILY_WINDOWS)) {
        commandLine "$ndkDir/ndk-build.cmd", '-C', file('src/main/jni').absolutePath
    } else {
        commandLine "$ndkDir/ndk-build", '-C', file('src/main/jni').absolutePath
    }
}

tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn ndkBuild
}
}

3-将构建gradle的类路径更改为:

 classpath 'com.android.tools.build:gradle:2.2.2'

4-如果gradle有问题,那么您需要删除:

 def ndkDir = project.android.ndkDirectory.absolutePath

并对此进行了更改:

 def ndkDir =plugins.getPlugin('com.android.library').sdkHandler.getNdkFolder()