天天看點

NDK入門項目實戰

  目标:利用NDK 生成 SO 庫,使用 SO 庫進行 JNI 調用,在 Android sdcard 建立檔案并寫入資料。

  工具:NDK1.5 R1, android SDK1.5 R1, SDCARD, Eclipse , ADT 0.9, Eclipse Galileo for C/C++, Cygwin 1.5。工具比較多,我是在Windows XP 進行操作的,如果在 Ubuntu 或者其他的 Linux系統下進行操作直接進入步驟 2 即可。請看步驟:

  1. 安裝Cygwin

  關于Cygwin 的安裝請自行百度或者 google ,因為網速原因,建議大家使用本地安裝包進行下載下傳: http://www.gougou.com/search?search=cygwin&id=2  下載下傳一個 38.2M  即可,我用的就是這個版本。

  2. 安裝NDK

  進入正題安裝NDK ,首先打開 cygwin ,然後使用 cd 指令進入你的 NDK 根目錄,(不會用 linux指令?? Google 去),然後運作: build/host-setup.sh

NDK入門項目實戰

  如果出現以上的資訊,說明安裝正确,如果出現GCC 為找到,請輸入 gcc 指令檢視,如果出現 toolchain 未找到的資訊,請試着修改 build/host-setup.sh 檔案第一行代碼,将:#!/bin/sh 改成#!/bin/bash ,在 Ubuntu 上這個是需要修改的。

  安裝成後,我們使用make 指令試試編譯自帶的程式,輸入 make APP=hello-jni,hello-jni 為 apps 下 hello-jni 檔案夾的名稱,這個指令會先找到 apps\hello-jni 下地 Application.mk 檔案,然後找到 source\samples\hello-jni 這個目錄,然後找到 Android.mk 這個檔案中的配置資訊進行編譯。

  因為我的已經編譯過了,使用使用 make APP=hello-jni -B 進行重新編譯。看圖:

NDK入門項目實戰

  出現上面的資訊,說明編譯成功,so 檔案在 apps/hello-jni/project/libs/armeabi 檔案夾下。

  3. 書寫java native接口

  下面我們進入實戰的階段,寫代碼。

  建立一個android1.5 的項目,NDK 不支援 1.5 以下的版本:

NDK入門項目實戰

  JNI.java的代碼:

NDK入門項目實戰

  JniTest.java的代碼:

NDK入門項目實戰

  4.生成JNI頭檔案

  下面生成JNI 頭檔案啦,使用 javah 指令,對 JNI..java 這個檔案生成,别搞錯啦!

  使用cmd 進入 android 項目的 bin 目錄中,然後執行  javah -classpath .  -jni cc.androidos.jni.JNI 這個指令。别忘記包名!( ^_^ )

NDK入門項目實戰

  生成了一個cc_androidos_jni_JNI.h,打開看看:

NDK入門項目實戰

  裡面都是c 語言的頭檔案聲明。

  5.書寫C代碼,寫入資料

  下面進行c 語言代碼的階段,不會 C 的,可以去學習一下。我這裡使用eclipse for c/c++的進行開發,簡單的代碼大家可以使用記事本。工程如下:

NDK入門項目實戰

  cc_androidos_jni_JNI.h内容不變,cc_androidos_jni_JNI.c的内容:

NDK入門項目實戰

  在這裡的代碼會在運作的時候向sdcard 寫入 androidos.cc.txt 檔案。然後寫入 aaaa 資料。

  6.編譯SO檔案

  進行編譯so 檔案,在NDK 的 apps 目錄下面建立一個 myjni 檔案夾,在 myjni 檔案夾中建立一個 Application.mk 檔案,檔案的内容為:

NDK入門項目實戰

  在NDKsources 目錄下建立 myjni 檔案夾,在 myjni 檔案中建立一個 Android.mk 檔案,然後将 cc_androidos_jni_JNI.h 和 cc_androidos_jni_JNI.c 檔案 copy進來:

NDK入門項目實戰

  Android.mk中的内容如下:

NDK入門項目實戰

  裡面内容的關鍵字含義請自行檢視docs\OVERVIEW.TXT 檔案,編譯:

NDK入門項目實戰

  7. 加入到Android項目中進行運作

  将apps\myjni\libs 整個檔案夾 copy到 android 項目下:

NDK入門項目實戰

  運作android 項目使用 adb shell 進行檢視:

NDK入門項目實戰

  進入sdcard 檢視資料。

  注意:sdcard 具有 system 的權限,如果你的目錄是 root 權限的,那麼是不能寫成功的,除非是真機越權,模拟器是不成功的,并且在 Eclipse logcat 下會有 DEBUG 資訊出現。