如何将.so文件添加到Android Studio 1.5项目?

时间:2016-02-01 14:52:34

标签: java android android-studio gradle native

这似乎是Android的一个流行问题:我有一个预编译的.so文件,我想通过JNI访问,但我不能让Android Studio(在我的情况下为1.5版)以某种方式构建项目这使得这个文件可以访问。就像其他人提出这个问题一样,我在调用System.loadLibrary()时遇到了UnsatisfiedLinkError:

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

在StackOverflow上有几个像这样的问题,解决方案似乎集中在两种技术上,这两种技术都不适用于我:

  1. Creating a main/jniLibs directory:有人说,如果您创建一个名为/app/src/main/jniLibs的文件夹,并在其中包含目标文件夹(我尝试了所有armeabi,{{1} }和armeabi-v7),Android Studio将找到该库。另请参阅This question.如果我这样做,我的java代码中的本机调用仍然以红色突出显示工具提示文本,“无法解析相应的JNI函数Java_my_function_etc”。工具提示引用与我使用javah实用程序生成的方法调用相同。

  2. Modifying build.gradle另一个建议的解决方案是通过修改build.gradle来指向.so文件的位置。就我而言,我尝试将jniLibs.srcDirs设置为arm64-v8a和'jniLibs',而有问题的.so文件位于/src/main/jniLibs/app/src/main/jniLibs/armeabi/app/src/main/jniLibs/armeabi-v7a。我的gradle文件:

    /app/src/main/jniLibs/arm64-v8a
  3. 2013年Google Groups发布的第三种技术似乎是将.so文件打包到jar中,并在项目中包含jar文件。我解压缩了我的APK文件,发现.so文件包含在apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "com.my.application" minSdkVersion 21 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main { jniLibs.srcDirs = ['jniLibs'] } } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.android.support:design:23.1.1' compile files('libs/commons-lang3-3.1.jar') } ./lib/armeabi./lib/armeabli-v7a中。我没有尝试这种技术,因为它似乎过时了,因为我的.so文件正在进入APK,所以不必要。

    我没有尝试的事情。是否还有其他技术可以在Android Studio项目中包含原生.so?在上述两种技巧中,我有什么可以忽略的吗?自链接问题得到解答后,Android Studio是否以某种关键方式发生了变化?

0 个答案:

没有答案