目标: 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信息出现。