android使用JNI呼叫C,C++程式

陳洪波發表於2014-07-01
版權宣告:您好,轉載請留下本人部落格的地址,謝謝 https://blog.csdn.net/hongbochen1223/article/details/36191023

(接著上一篇講)

裡面定義的函式基本上看名字就可以知道他們的用處,這裡就不再羅嗦。

(2)、jstring為JNI中的String型別

(3)、Java_com_example_jnitest_MainActivity_HelloJni

JNI中原生程式碼函式名的命名規則

Java_包名_呼叫該方法的類名_函式名

(4)、引數 JNIEnv *env,jobject obj

— JNIEnv引數 : 代表的是Java環境, 通過這個環境可以呼叫Java裡面的方法;

— jobject引數 : 呼叫C語言方法的物件, thiz物件表示當前的物件, 即呼叫JNI方法所在的類;


4:在jni資料夾下建立Android.mk檔案

程式碼如下

LOCAL_PATH := $(call my-dir)        

include $(CLEAR_VARS)

LOCAL_MODULE    := hello

LOCAL_SRC_FILES := hello.c

include $(BUILD_SHARED_LIBRARY)

備註:

LOCAL_PATH : 代表mk檔案所在的目錄

include $(CLEAR_VARS):編譯工具函式,可以進行一些初始化工作

LOCAL_MODULE :編譯後生成的字尾為.so的檔案的名字

LOCAL_SRC_FILES :原始檔的名字

include $(BUILD_SHARED_LIBRARY):告訴編譯器生成動態庫


5:開啟cygwin應用程式

依次切換到cygdrive->剛剛jni的目錄下

6:使用/android-ndk-r9d/ndk-build命令進行編譯(android-ndk-r9d該資料夾複製到cygwin的根目錄下

7:編譯成功後,重新整理android程式,會在目錄下生成obj資料夾

觀察字尾名為.so的檔案, 其名字為lib+hello+.so

8:在MainActivity下進行呼叫C程式碼

static{

    System.loadLibrary(“hello”);//括號中放的是字尾名為.so的檔案去掉lib和去掉.so之後的字串

}

定義native函式

public native String HelloJni();  //該函式名和C語言中的函式名中最後的一節是一樣的

最後 該方法就能在android呼叫了。


相關文章