Android Studio为Java程序添加JNI本地代码

    传统地,在Android Studio上为Java程序添加JNI本地代码的方法主要是:

在build.gradle(Module: app)中的defaultConfig添加:

ndk {
moduleName "native-lib"//so库名
ldLibs "log", "z", "m"
abiFilters "armeabi", "armeabi-v7a", "x86"
}


在gradle.properties中添加:

android.useDeprecatedNdk=true 

    随着Android Studio的不断更新,该方法似乎已经失效。android.useDeprecatedNdk=true产生提示使用:android.deprecatedNdkCompileLease=1524619220074,又产生错误“Process 'command ……' finished with non-zero exit value 2”。网上教程又说在build.gradle(Module: app)的android{}中添加:

sourceSets.main {

        jni.srcDirs = []

    }

但这又导致无法生成库文件。各种曲折方法都试过,现在直接呈上最新解决方案。

1. 新建类JNI.java,声明native方法;
public class JNI {
static {
System.loadLibrary("native-lib);//加载so库,实现native方法
}

public static native String sayHello();//声明native方法
}


2. 使用android studio终端编译JNI.java,生成JNI.class;

javac JNI.java

3. 在类包名的上一级使用javah生成.h头文件;
javah -jni com.example.xxx.xxx.JNI

4. 在app/src/main下建立jni文件夹,新建native-lib.cpp并实现上一步生成的头文件中的函数;

5. 在build.gradle(Module: app)的defaultConfig{}中添加:

externalNativeBuild {

    cmake {
        cppFlags ""
    }
}

6. 在build.gradle(Module: app)的android{}中添加:
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}


7. 在app\下新建CMakeLists.txt文件,并添加如下内容:

cmake_minimum_required(VERSION 3.4.1)

add_library(
             native-lib#库名
             SHARED
             src/main/jni/native-lib.cpp )#本地文件路径

find_library(
              log-lib

              log )

target_link_libraries( 、
                       native-lib#库名

                       ${log-lib} )

8. rebuild后在app\build\intermediates\cmake\debug\obj下生成.so库

Android Studio为Java程序添加JNI本地代码
有图有真相!