新聞中心
本文我們一起聊一聊如何利用利用NDK生成SO庫(kù),使用SO庫(kù)進(jìn)行JNI調(diào)用,在Android sdcard創(chuàng)建文件并寫(xiě)入數(shù)據(jù)。

工具:
NDK1.5 R1, android SDK1.5 R1, SDCARD, Eclipse , ADT 0.9, Eclipse Galileo for C/C++, Cygwin 1.5。
工具比較多,我是在Windows XP進(jìn)行操作的,如果在Ubuntu或者其他的Linux系統(tǒng)下進(jìn)行操作直接進(jìn)入步驟2即可。請(qǐng)看步驟:
1. 安裝Cygwin
關(guān)于Cygwin的安裝請(qǐng)自行百度或者google,因?yàn)榫W(wǎng)速原因,建議大家使用本地安裝包進(jìn)行下載:http://www.gougou.com/search?search=cygwin&id=2 下載一個(gè)38.2M 即可,我用的就是這個(gè)版本。
2. 安裝NDK
進(jìn)入正題安裝NDK,首先打開(kāi)cygwin,然后使用cd命令進(jìn)入你的NDK根目錄,(不會(huì)用linux命令??Google去),然后運(yùn)行:build/host-setup.sh
如果出現(xiàn)以上的信息,說(shuō)明安裝正確,如果出現(xiàn)GCC為找到,請(qǐng)輸入gcc命令查看,如果出現(xiàn)toolchain未找到的信息,請(qǐng)?jiān)囍薷腷uild/host-setup.sh文件第一行代碼,將:#!/bin/sh 改成#!/bin/bash, 在Ubuntu上這個(gè)是需要修改的
安裝成后,我們使用make命令試試編譯自帶的程序,輸入make APP=hello-jni,hello-jni為apps下hello-jni文件夾的名稱(chēng),這個(gè)命令會(huì)先找到apps\hello-jni下地 Application.mk文件,然后找到source\samples\hello-jni這個(gè)目錄,然后找到Android.mk這個(gè)文件中的配置 信息進(jìn)行編譯??磮D:
因?yàn)槲业囊呀?jīng)編譯過(guò)了,使用 make APP=hello-jni -B進(jìn)行重新編譯
出現(xiàn)上面的信息,說(shuō)明編譯成功,so文件在apps/hello-jni/project/libs/armeabi文件夾下。
3. 書(shū)寫(xiě)java native接口
下面我們進(jìn)入實(shí)戰(zhàn)的階段,寫(xiě)代碼。
建立一個(gè)android1.5的項(xiàng)目,NDK不支持1.5以下的版本
JNI.java的代碼:
JniTest.java的代碼:
4. 生成JNI 頭文件
下面生成JNI頭文件啦,使用javah命令,對(duì)JNI..java這個(gè)文件生成,別搞錯(cuò)啦!
使用cmd進(jìn)入android項(xiàng)目的bin目錄中,然后執(zhí)行 javah -classpath . -jni cc.androidos.jni.JNI這個(gè)命令。別忘記包名?。╚_^)
生成了一個(gè)cc_androidos_jni_JNI.h
打開(kāi)看看:
里面都是c語(yǔ)言的頭文件聲明
#p#
5. 書(shū)寫(xiě)C代碼,寫(xiě)入數(shù)據(jù)
下面進(jìn)行c語(yǔ)言代碼的階段,不會(huì)C的,可以去學(xué)習(xí)一下。
我這里使用eclipse for c/c++的進(jìn)行開(kāi)發(fā),簡(jiǎn)單的代碼大家可以使用記事本。
工程如下:
cc_androidos_jni_JNI.h內(nèi)容不變
cc_androidos_jni_JNI.c的內(nèi)容:
在這里的代碼會(huì)在運(yùn)行的時(shí)候向sdcard寫(xiě)入androidos.cc.txt文件。然后寫(xiě)入aaaa數(shù)據(jù)。
6. 編譯SO文件
進(jìn)行編譯so文件:
在NDK的apps目錄下面創(chuàng)建一個(gè)myjni文件夾,在myjni文件夾中創(chuàng)建一個(gè)Application.mk文件,文件的內(nèi)容為:
在NDKsources目錄下創(chuàng)建myjni文件夾,在myjni文件中創(chuàng)建一個(gè)Android.mk文件,然后將cc_androidos_jni_JNI.h和cc_androidos_jni_JNI.c文件copy進(jìn)來(lái):
Android.mk中的內(nèi)容如下:
里面內(nèi)容的關(guān)鍵字含義請(qǐng)自行查看docs\OVERVIEW.TXT文件
編譯:
7. 加入到Android項(xiàng)目中進(jìn)行運(yùn)行
將apps\myjni\libs整個(gè)文件夾copy到android項(xiàng)目下:
運(yùn)行android項(xiàng)目使用adb shell進(jìn)行查看:
進(jìn)入sdcard查看數(shù)據(jù)。
注意:sdcard具有system的權(quán)限,如果你的目錄是root權(quán)限的,那么是不能寫(xiě)成功的,除非是真機(jī)越權(quán),模擬器是不成功的,并且在Eclipse logcat下會(huì)有DEBUG信息出現(xiàn)。
網(wǎng)站標(biāo)題:Android開(kāi)發(fā)者都需要的NDK入門(mén)項(xiàng)目實(shí)戰(zhàn)
本文地址:http://www.5511xx.com/article/cdpcieg.html


咨詢(xún)
建站咨詢(xún)
