Android M API 23 加载lib .so 文件时出错
Android M API 23 error to load lib .so files
大家好,我的应用程序中有 aac 解码器
当我在 API 22 级时它工作得很好..
但是当我使用 API 级别 23 时..我的应用程序崩溃并给我一个无法 lib 文件的错误
java.lang.UnsatisfiedLinkError: dlopen failed:
我搜索了很多页面,但没有找到任何帮助..
问题只出现在最新版本的 android .. 应用程序在旧版本的 android 中运行良好 ..
这是我的库
aacdecoder-android-libs-0.8.zip
|---源码
|---主要
|---jniLibs
> aacdecoder-android-0.8.jar
> armeabi
> libaacdecoder.so
> armeabi-v7a
> libaacdecoder.so
> mips
> libaacdecoder.so
> x86
> libaacdecoder.so
如何在最新版本的 android M
中加载库
我也试过
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");
但没有任何效果:(
提前谢谢你..我等着
我已经为 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()
大家好,我的应用程序中有 aac 解码器
当我在 API 22 级时它工作得很好..
但是当我使用 API 级别 23 时..我的应用程序崩溃并给我一个无法 lib 文件的错误
java.lang.UnsatisfiedLinkError: dlopen failed:
我搜索了很多页面,但没有找到任何帮助.. 问题只出现在最新版本的 android .. 应用程序在旧版本的 android 中运行良好 ..
这是我的库
aacdecoder-android-libs-0.8.zip
|---源码 |---主要 |---jniLibs
> aacdecoder-android-0.8.jar
> armeabi
> libaacdecoder.so
> armeabi-v7a
> libaacdecoder.so
> mips
> libaacdecoder.so
> x86
> libaacdecoder.so
如何在最新版本的 android M
中加载库我也试过
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");
但没有任何效果:(
提前谢谢你..我等着
我已经为 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()