這篇主要講怎麼安裝以及使用Android NDK,
Android NDK簡單地說,就是讓您能夠在你的app當中使用C/C++進行implementation,
它可以把您寫的C/C++ build出一個share object檔案 (*.so) 讓Java call!類似windows中的dll檔!
當然你也可以在JNI call Java method,也就是說是雙向的!
而使用NDK的好處是大概有下面兩個(我只能想到這兩個..)
- 效能較好(depends on situation)
- 可以控制到底層的裝置
不過在Android官網也指出
”you should understand that the NDK will not benefit most apps“
所以使用時機要自己斟酌,但我知道蠻多game都是用NDK去implement!
因為需要太多memory,靠自己free效能會較好!
首先先講Android NDK的安裝以及使用方法!
(1) 下載
下載頁面在http://developer.android.com/tools/sdk/ndk/index.html#Downloads
請選擇符合你自己OS的版本!
(如果你使用的是windows!請先下載cygwin,至於cygwin是什麼,前面很多篇文章已經敘述過,這裡不多加敘述)
(2)解壓縮
此篇是用mac,因此就下載osx的版本吧!
下載下來以後就進行解壓縮.
基本上其實就完成了!
在NDK r4之前還需要跑一隻setup script,但之後的就不用了!
其實解壓縮之後裡面就有很多doc可以看!不過都是英文!
(3)建立jni資料夾
在你的$project/底下建立一個jni資料夾!如下:
$project/jni
(4)撰寫C/C++
在$project/jni底下開始寫C/C++的code了!
先建立一個檔案叫做test-jni.c,
內容如下:
5 |
Java_net_kenyang_jni_RunJNI_getText( JNIEnv* env, |
8 |
return (*env)->NewStringUTF(env, "Hello from JNI !" ); |
jstring是return type
而Java_net_kenyang_jni_RunJNI_getText是這個method的命名規則!
這是JNI的規則,所以請遵守!
開頭一律Java_自己的package名稱_Class名稱_method名稱
你可以改成自己的!但記得後面的步驟也要記得改!
(5)建立Android.mk
一樣在$project/jni底下建立Android.mk檔案
Android.mk這個檔案是用來告訴NDK等等要去build哪些resource!
而我們目前只有一隻test-jni.c,所以檔案內容如下:
1 |
LOCAL_PATH := $(call my-dir) |
5 |
LOCAL_MODULE := test-jni |
6 |
LOCAL_SRC_FILES := test-jni.c |
8 |
include $(BUILD_SHARED_LIBRARY) |
(6)開始build *.so檔案
先開啓你的terminate,然後cd到$project/jni底下
直接在該目錄底下用NDK的tool進行build!
這樣就會產生一個.so檔!
這個檔案會放在$project/lib/armeabi底下!
檔名一定會是lib開頭,.so結尾!
也就是說在這個範例build出來的.so檔案名稱為libtest-jni.so
而build指令如下:
(7)開始寫code
在你的android project中直接建立一個activity(名稱為RunJNI),
我們將在這個activity中進行呼叫剛剛用c建立的method,
CODE如下:
01 |
public class RunJNI extends Activity { |
03 |
private native String getText(); |
07 |
System.loadLibrary( "test-jni" ); |
12 |
protected void onCreate(Bundle savedInstanceState) { |
13 |
super .onCreate(savedInstanceState); |
14 |
setContentView(R.layout.run_jni); |
16 |
TextView tv = (TextView) findViewById(R.id.textView1); |
19 |
tv.setText(getText()); |
完成上面7個步驟就完成了!
直接點選run應該就可以看到下面畫面!
http://blog.kenyang.net/2012/10/install-android-ndk-on-mac.html
留言列表