1.保证AS中安装了ndk cmake 等插件 如没有可以通过AS中的Android SDK -> SDK Tools 勾选 在线下载安装
2.创建一个Android 项目Demo项目即可
3.添加Java2CJNI.java 注意此文件的包名类名
public class Java2CJNI {
//static {
// System.loadLibrary("Java2C");
//}
public native String java2C();
}
// System.loadLibrary("Java2C");//}public native String java2C();}注意此文件中的 static {
System.loadLibrary("Java2C");
} 先注释掉 后面在编译生成.so库时再添加
4.生成.h文件
先将Java2CJNI.java 运用javac生成.class 文件再通过javah 命令生成.h
javac F:\AndroidStudio\MyJDK2\app\src\main\java\com\example\revo\myjdk\Java2CJNI.java
javah -classpath D:\androidstudy\app\build\intermediates\classes\debug -jni com.example.revo.myjdk.Java2CJNI
最后在代码目录如果看到com_example_revo_myjdk_Java2CJNI.h文件说明已成功
5.创建jni目录 拷贝com_example_revo_myjdk_Java2CJNI.h 同时创建.c文件
//
// Created by Administrator on 2018/5/24.
//
#include "com_example_revo_myjdk_Java2CJNI.h"
JNIEXPORT jstring JNICALL Java_com_example_revo_myjdk_Java2CJNI_java2C
(JNIEnv *env, jobject instance){
return (*env)->NewStringUTF(env, "I am From Native C");
}
6.build.gradle文件和gradle.properties 的修改
注意build.gradle 文件为app目录下的
defaultConfig {
applicationId "com.example.revo.myjdk"
minSdkVersion 27
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk {
moduleName "Java2C" //生成的库名
abiFilters "armeabi-v7a", "x86" //指定的平台类型,如果不写,则默认会生成全平台的
}
}
gradle.properties文件中增加如下一行android.useDeprecatedNdk=true
点击Rebuild project 如果出现类似android.deprecatedNdkCompileLease=1527128725578等错误请在gradle.properties文件中增加如下一行
添加 android.deprecatedNdkCompileLease=1527128725578 注释掉android.useDeprecatedNdk=true
7.再次Rebuild project 如果成功 在MyJDK2\app\build\intermediates\ndk\debug\lib\armeabi-v7a
和MyJDK2\app\build\intermediates\ndk\debug\lib\x86目录均会出现libJava2C.so文件
为了使用.so库中的函数记得将
public class Java2CJNI {
static {
System.loadLibrary("Java2C");
}
public native String java2C();
}
static {
System.loadLibrary("Java2C");
}注释部分去掉
8.总结如果熟练或者说提高效率 4 5 步骤可以省略不用他们生成.h 直接新建jni文件 添加.c文件
可通过下面链接直接下载源码:
下载源码