eclipse中的Jni開發流程(一)——基本開發

1.eclipse中的Jni開發流程(一)
2.eclipse中的Jni開發流程(二)
3.Android Studio配置CMake開發NDK

1、聲明java的本地方法,使用native關鍵字 本地方法不用去實現


public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void HelloWord(View view){
        Toast.makeText(this, hellofromC(), 0).show();
    }
    public native String hellofromC();
}

2、在項目的根目錄創建jni文件夾

3、在jni文件夾下創建xxxx.c文件(導入三個必要的頭文件《stdlib.h、stdio.h、jni.h》)

①本地函數命名規則: Java_包名類名本地方法名(可以使用javah命令去生成)
②JNIENV* env JNIEnv 是JniNativeInterface這個結構體的一級指針
③JniNativeInterface這個結構體定義了大量的函數指針
④env 就是結構體JniNativeInterface這個結構體的二級指針
⑤(*env)->調用結構體中的函數指針
⑥第二個參數jobject 調用本地函數的java對象就是這個jobject

#include<stdlib.h>
#include<stdio.h>
#include<jni.h>
JNIEXPORT jstring JNICALL Java_com_example_hellojni_MainActivity_hellofromC
  (JNIEnv * env, jobject  jo){
    char* hello="Hello World From JNI !";
    return (*env)->NewStringUTF(env, hello);
}

4、在jni文件夾下創建Android.mk文件 makefile 告訴編譯器.c的源文件在什麼地方,要生成的編譯對象的名字是什麼

Android.mk的文件內容(複製即可)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello #指定了生成的動態鏈接庫的名字,加載的時候就是它的名字 
LOCAL_SRC_FILES := hello.c #指定了C的源文件叫什麼名字
include $(BUILD_SHARED_LIBRARY)

5、在項目的根目錄下調用ndk-build命令編譯C代碼,生成動態鏈接庫libxxx.so文件 文件的位置 lib->armeabi->libxxxx.so

6、在Java代碼需要調用的地方的類中使用static代碼塊加載動態鏈接庫( System.loadlibrary(“動態鏈接庫的名字”); Android.mk的LOCAL_MODULE所指定的名字)

在MainActivity中
static{
        System.loadLibrary("hello");
    }

至此,就可以將我們的程序跑起來了,你會了嗎?下一篇我會講Jni在eclipse中簡便開發流程,歡迎繼續關注!

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