2014年5月15日 星期四

第一個Android NDK(Java call C)

最近因為要在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 !"了。

參考


沒有留言:

張貼留言