史上最強NDK入門項目實戰

目標: java

利用NDK生成SO庫,使用SO庫進行JNI調用,在Android sdcard建立文件並寫入數據。 linux

工具: android

NDK1.5 R1, android SDK1.5 R1, SDCARD, Eclipse , ADT 0.9, Eclipse Galileo for C/C++, Cygwin 1.5。 c++

工具比較多,我是在Windows XP進行操做的,若是在Ubuntu或者其餘的Linux系統下進行操做直接進入步驟2便可。請看步驟: shell

1. 安裝Cygwin bash

關於Cygwin的安裝請自行百度或者google,由於網速緣由,建議你們使用本地安裝包進行下載:http://www.gougou.com/search?search=cygwin&id=2 下載一個38.2M 便可,我用的就是這個版本。 app

2. 安裝NDK eclipse

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

若是出現以上的信息,說明安裝正確,若是出現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進行從新編譯

出現上面的信息,說明編譯成功,so文件在apps/hello-jni/project/libs/armeabi文件夾下。

3. 書寫java native接口

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

創建一個android1.5的項目,NDK不支持1.5如下的版本

JNI.java的代碼:

JniTest.java的代碼:

4. 生成JNI 頭文件

下面生成JNI頭文件啦,使用javah命令,對JNI..java這個文件生成,別搞錯啦!

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

生成了一個cc_androidos_jni_JNI.h

打開看看:

裏面都是c語言的頭文件聲明

5. 書寫C代碼,寫入數據

下面進行c語言代碼的階段,不會C的,能夠去學習一下。

我這裏使用eclipse for c/c++的進行開發,簡單的代碼你們可使用記事本。

工程以下:

cc_androidos_jni_JNI.h內容不變

cc_androidos_jni_JNI.c的內容:

在這裏的代碼會在運行的時候向sdcard寫入androidos.cc.txt文件。而後寫入aaaa數據。

6. 編譯SO文件

進行編譯so文件:

在NDK的apps目錄下面建立一個myjni文件夾,在myjni文件夾中建立一個Application.mk文件,文件的內容爲:

在NDKsources目錄下建立myjni文件夾,在myjni文件中建立一個Android.mk文件,而後將cc_androidos_jni_JNI.h和cc_androidos_jni_JNI.c文件copy進來:

Android.mk中的內容以下:

裏面內容的關鍵字含義請自行查看docs\OVERVIEW.TXT文件

編譯:

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

將apps\myjni\libs整個文件夾copy到android項目下:

運行android項目使用adb shell進行查看:

進入sdcard查看數據。

注意:sdcard具備system的權限,若是你的目錄是root權限的,那麼是不能寫成功的,除非是真機越權,模擬器是不成功的,而且在Eclipse logcat下會有DEBUG信息出現。

相關文章
相關標籤/搜索