Android Studio 編寫jni 實例

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文件

    可通過下面鏈接直接下載源碼:

    下載源碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章