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文件
可通過下面鏈接直接下載源碼: