Android NKD初探

Android NKD初探。

Android NDK 是在SDK前面又加上瞭“原生”二字,即Native Development Kit,因此又被Google稱為“NDK”。

截圖中是最新版本

如果需要下載歷史版本,點擊 Revision History

NDK:android-ndk-r14b-windows-x86_64.zip

解壓生成:android-ndk-r14b文件夾

windows-Preferences-Android-NDK

NDK Location 設置路徑

選擇ndk目錄時提示“Not a valid NDK directory”, 在你安裝的ndk的主目錄下創建一個ndk-build空文件,然後重新打開對話框選擇就可以瞭。

簡單JNI調用

1、創建一個Android工程,名為firstjni;

2、在com.example.firstjni包下新建一個Jni接口類FirstInterface,這個類不需要繼承java的接口類;

3、編譯這個接口類,為c端調用的頭文件。

工程目錄:

命令窗口:運行cmd,cd進入到eclipse工作空間中firstjni工程目錄,
輸入javah-classpath bin/classes -d jni com.example.firstjni.FirstInterface編譯接口類

編譯完成後,刷新工程,就可以看到工程中自動創建瞭jni文件夾,其中包含編譯好的.h頭文件

4, 右鍵firstni工程選擇Androidtools下Add Native Support選項,library name使用默認的工程名;

完成後,會在jni文件夾中添加一個Android.mk文件和firstjni.cpp文件;

5、然後給工程新建並配置一個Builder,能夠自動生成so庫在Android端代碼進行調用。

①右鍵工程-Properties-Builders-New,在彈出對話框中點擊Program。

②在Edit Configuration對話框中的Main選項卡中,添加路徑;

Location中選擇到NDK安裝目錄下的ndk-build.cmd;

WorkingDirectory中選擇到firstjni工程目錄。

點擊Browser File System按鈕選擇。

③選擇Refresh選項卡,在其中勾選如下

④在Build Options選項卡中勾選如下

點擊上圖中SpecifyResource,配置到firstni工程的jni目錄即可。

到此點擊ok,配置完成瞭,相比通過命令行編譯的方法,至少方便很多。
完成後,會在firstjni工程libs文件下自動創建armeabi文件夾並包含編譯好的libfirstni.so庫文件,當工程有所改變的時候,就會自動編譯so文件;

6、下面來填充firstjni.cpp,相信學過C++的朋友會覺得很熟悉,在這個cpp文件裡面寫接口的具體實現。

這裡會出現JNICALL等類型無法識別等報錯,需要導入一個NDK的include頭文件庫:

①鍵工程,選擇Properties -> C/C++ General -> Path and Symbols 中點擊include選項卡,添加NDK安裝目錄下的include文件夾E:\android-ndk-r14b\platforms\android-23\arch-arm\usr\include

導入完畢之後就不會報錯瞭。

7、首先將頭文件Include進來,但是要遵循方法的命名規則:Java_(固定開頭)com_example_firstjni(用"_"連接的包名)_ FirstInterface (類名)_ getHello (函數名) 再從接口.h頭文件中把getHello方法復制過來,並修改參數,簡單的返回一個字符串。

8、然後修改MainActivity.java代碼,添加一個TextView並設置其文本為getHello()方法的返回值;添加static代碼塊,載入so庫,之前右鍵工程add native Support的library名稱就是在這裡調用。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *