最近因為要在Android中使用到C Library,查了一下發現NDK這個工具,它讓Java可以去呼叫C,讓我們在Android的專案中也可以使用C Library。
環境
- Windows 8.1(64bits)
- Android Studio 0.58
- Android NDK Revision 9d
- ASUS Nexus 7-Android 4.4.2(API 19)
目的
我們要利用Java去呼叫C的方法,然後將取到的字串輸出。
步驟
1. 下載NDK
到
https://developer.android.com/tools/sdk/ndk/index.html下載符合自己系統的NDK,這裡我們下載
Windows 64-bit的NDK,目前的版本是9d。
載好之後隨便放一個地方,記得路徑以便等下使用(我的路徑為C:\Android\android-ndk-r9d)。
2. 新增native宣告C的方法
在MainActivity.java中打入上面的程式碼,宣告完native function之後要先build,要不然等下的javah會找不到這個方法導致遺漏。
3. 使用javah
先簡單講解javah的使用方式,它可以幫我們產生C header file以便讓我們可以在.java中找到對應的方法。
開啟Terminal
|
Tools > Open Terminal |
將所在目錄轉到main
鍵入javah的指令產生.h
- -d directory(你要儲存的目錄)
- -classpath path(javah需要的classes(SDK及project的class路徑))
PS:如果找不到javah的話會產生下面的錯誤
在環境變數裡加上javah的路徑就可解決
4. 加入main.c
如果上面的native有被build的話,你的.h中應該會有{your package}_{native function}(我的就是Java_com_hpchen_testndk_app_MainActivity_getStringFromNative)。
PS:如果沒有請clean project,刪掉jni資料夾,rebuild之後再把第3步重做一次。
- 記得include .h
- 將.h中的native function寫好
5. 加入util.c
加入一個空的util.c
6. local.properties中加入ndk路徑
將第1步記下的路徑加入local.properties
7. build.gradle中加入ndk參考
注意:是app中的build.gradle,不是project的。
8. 在MainActivity中load library
執行之後就會看到"Hello JNI !"了。
參考