本案例主要介紹如何利用NDK工具在Android上進行C/C++相關開發,通過生成的JNI接口,編寫C/C++函數,編譯生成so庫,並調用so庫,在Android應用層上實現int型加法操作,字符串顯示操作和往/sdcard中文件yao.txt寫入數據操作。
1:案例分析
在進行Android本地項目開發時,我們需要用到自己的底層函數(.c或.cpp文件)和相關so庫,Google提供的NDK開發工具可以幫助我們解決這個問題,按照相關開發流程,我們可以在Android開發項目中調用本地的so庫,實現本地開發模塊。
2:開發環境
a:Eclipse (Galileo版本)
b:Android sdk 2.2 (注:NDK開發要求sdk 1.5以上版本)
c:jdk1.6
d:Android-ndk-r17b(注:這是最新版本ndk,這個版本是不需要用到cygwin工具,推薦使用此版本
(注:2、3和4都需要配置環境變量,這個特別提醒一下。配置好以後可以在cmd輸入相關命令測試一下環境變量是否配置成功。)
3:新建Android工程
這個比較簡單,按照步驟一步一步就可以,這裡需要繼承Activity (底層的操作要在Activity上顯示)。
4:編寫native方法
這裡編寫三個native方法,第一個用於int型加法操作,第二個用於字符串操作,第三個用於向/sdcard的yao.txt文件中寫入數據。
publicclass NDKTest {
//加法native方法
publicnativeint jniAdd(int a,int b);
//文本顯示native方法
publicnative String jniGetString();
//向/sdcard中寫入文件native方法
publicnativevoid jniWrite();
//三種方法通過libNDKDev-jni.so庫文件來實現
static
{
System.loadLibrary("NDKDev-jni");
}
}
5:生成.h文件
在cmd模式下,進入工程下的bin文件目錄,執行javah命令,如下圖所示
從上圖可以看到,生成了org_yao_ndk_NDKTest.h文件,進入此文件看看生成了哪些JNI接口,如下圖所示:
從上圖可以看到,生成了3個相應的JNI接口,注意其命名方式,Java_org_yao_NDKTest_Method。
6:編寫.c文件
按照要求,編寫相應的.c文件(.cpp文件也是可以的)注.c文件不需要同.h文件名字一樣,而且上面生成的.h文件到此已經沒有什麼價值了,可以直接刪掉。不過.c文件裡面需要#include <jni.h>頭文件。
7:編寫Android.mk配置文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NDKDev-jni
LOCAL_SRC_FILES := NDKTest.c
include $(BUILD_SHARED_LIBRARY)