Android Studio - 包含和使用 .so 库

2024-04-15

我需要在我的 android 项目中使用一些本机库(.so)。根据 StackOverflow 中有关此主题的一些答案,我创建了一个jniLibs文件夹中app/src/main并将我的文件放在那里:

armeabi/my_lib.so
armeabi-v7a/my_lib.so
x86/my_lib.so

然后,在我的活动课中我使用:

static {
        System.loadLibrary("my_lib");
    }

但是当我运行该应用程序时,UnsatisfiedLinkError产生异常。如果需要注意这一点,我没有 Android.mk 文件,并且我没有更改任何与此相关的内容gradle文件。所以,我唯一的想法就是复制粘贴我的.so文件在jniLibs并在我的活动中编写上面的代码。那么造成这个问题的原因可能是什么呢?我错过了什么吗?

EDIT

这是我的等级:

apply plugin: 'com.android.application'
android {
    compileSdkVersion 15
    buildToolsVersion "23.0.3"

    compileOptions.encoding = 'ISO-8859-1'

    defaultConfig {
        applicationId "my.package"
        minSdkVersion 4
        targetSdkVersion 4

        ndk {
            moduleName "my_so_lib"
        }
    }

    sourceSets {
        main {
            jni.srcDirs = ["libs"]
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
        debug {
            debuggable true
        }
    }


    splits {
        abi {
            enable true
            reset()
            include 'x86', 'armeabi-v7a', 'mips', 'armeabi'
            universalApk false
        }
    }
}

解决方案1

在“src/main/”内创建文件夹“jniLibs” 将所有 .so 库放入“src/main/jniLibs”文件夹中 文件夹结构如下:

|--app: 
|--|--src: 
|--|--|--main 
|--|--|--|--jniLibs 
|--|--|--|--|--armeabi 
|--|--|--|--|--|--.so Files 

您能确认一下您有这个层次结构吗?

不需要额外的代码,只需同步您的项目并运行您的应用程序。

参考https://github.com/commonsguy/sqlcipher-gradle/tree/master/src/main https://github.com/commonsguy/sqlcipher-gradle/tree/master/src/main

解决方案2

将两个代码片段添加到模块 gradle.build 文件中作为依赖项:

compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')

如何创建这个自定义 jar:

    task nativeLibsToJar(type: Jar, description: 'create a jar archive of the native libs') {
        destinationDir file("$buildDir/native-libs")
        baseName 'native-libs'
        from fileTree(dir: 'libs', include: '**/*.so')
        into 'lib/'
    }

tasks.withType(Compile) {
    compileTask -> compileTask.dependsOn(nativeLibsToJar)
}

source https://stackoverflow.com/questions/16683775/include-so-library-in-apk-in-android-studio?rq=1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Studio - 包含和使用 .so 库 的相关文章

随机推荐