以下内容Sinfrancis版权所有,专注请注明来自 http://mdev.cc/dev

目标:

利用NDK 生成 SO 库,使用 SO 库进行 JNI 调用,在 Androidsdcard 创建文件并写入数据。

工具:

NDK1.5R1,androidSDK1.5R1,SDCARD,Eclipse,ADT0.9,EclipseGalileoforC/C++,Cygwin1.5

工具比较多,我是在WindowsXP 进行操作的,如果在 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入门项目实战_第1张图片

如果出现以上的信息,说明安装正确,如果出现GCC 为找到,请输入 gcc 命令查看,如果出现 toolchain 未找到的信息,请试着修改 build/host-setup.sh 文件第一行代码,将: #!/bin/sh改成 #!/bin/bash ,在 Ubuntu 上这个是需要修改的

安装成后,我们使用make 命令试试编译自带的程序,输入 makeAPP=hello-jni,hello-jni apps hello-jni 文件夹的名称,这个命令会先找到 apps\hello-jni 下地 Application.mk 文件,然后找到 source\samples\hello-jni 这个目录,然后找到 Android.mk 这个文件中的配置信息进行编译。看图:

因为我的已经编译过了,使用使用makeAPP=hello-jni-B 进行重新编译


史上最强NDK入门项目实战_第2张图片

出现上面的信息,说明编译成功,so 文件在 apps/hello-jni/project/libs/armeabi 文件夹下。

3. 书写javanative 接口

下面我们进入实战的阶段,写代码。

建立一个android1.5 的项目, NDK 不支持 1.5 以下的版本


史上最强NDK入门项目实战_第3张图片

JNI.java的代码:


史上最强NDK入门项目实战_第4张图片


JniTest.java的代码:


史上最强NDK入门项目实战_第5张图片

4. 生成JNI 头文件

下面生成JNI 头文件啦,使用 javah 命令,对 JNI..java 这个文件生成,别搞错啦!

使用cmd 进入 android 项目的 bin 目录中,然后执行 javah-classpath.-jnicc.androidos.jni.JNI 这个命令。别忘记包名!( ^_^


史上最强NDK入门项目实战_第6张图片

生成了一个cc_androidos_jni_JNI.h

打开看看:


史上最强NDK入门项目实战_第7张图片

里面都是c 语言的头文件声明

5. 书写C 代码,写入数据

下面进行c 语言代码的阶段,不会 C 的,可以去学习一下。

我这里使用eclipseforc/c++ 的进行开发,简单的代码大家可以使用记事本。

工程如下:


史上最强NDK入门项目实战_第8张图片

cc_androidos_jni_JNI.h内容不变

cc_androidos_jni_JNI.c的内容:


史上最强NDK入门项目实战_第9张图片

在这里的代码会在运行的时候向sdcard 写入 androidos.cc.txt 文件。然后写入 aaaa 数据。

6. 编译SO 文件

进行编译so 文件:

NDK apps 目录下面创建一个 myjni 文件夹,在 myjni 文件夹中创建一个 Application.mk 文件,文件的内容为:


史上最强NDK入门项目实战_第10张图片

NDKsources 目录下创建 myjni 文件夹,在 myjni 文件中创建一个 Android.mk 文件,然后将 cc_androidos_jni_JNI.h cc_androidos_jni_JNI.c 文件 copy 进来:


史上最强NDK入门项目实战_第11张图片

Android.mk中的内容如下:


史上最强NDK入门项目实战_第12张图片

里面内容的关键字含义请自行查看docs\OVERVIEW.TXT 文件

编译:


史上最强NDK入门项目实战_第13张图片

7. 加入到Android 项目中进行运行

apps\myjni\libs 整个文件夹 copy android 项目下:


史上最强NDK入门项目实战_第14张图片

运行android 项目使用 adbshell 进行查看:


史上最强NDK入门项目实战_第15张图片

进入sdcard 查看数据。

注意:sdcard 具有 system 的权限,如果你的目录是 root 权限的,那么是不能写成功的,除非是真机越权,模拟器是不成功的,并且在 Eclipselogcat 下会有 DEBUG 信息出现。

更多相关文章

  1. React Native for Android 实战(一):配置和起步
  2. Github开源Android资源整理(十一)优秀项目
  3. android Parcelable项目中的应用
  4. [置顶] Android开发实战记录(三)---HelloWorld
  5. Android引入项目作为依赖(module)
  6. Android - 实训项目总结
  7. Android 项目快速更改包名的方法

随机推荐

  1. php函数 什么时候使用fflush函数
  2. 60分钟精通正则表达式
  3. 在提交注册表单时使用jQuery显示错误
  4. PHP 导出 万级别数据 时间测试
  5. PHP面试题集PHP面试题集
  6. 添加到数据库后,保持在同一页面而不刷新它
  7. 使用jQuery或Javascript重定向到具有值的
  8. 在Web Page中包含PHP代码
  9. 求助,Xdebug的配置,缓存问题。
  10. PHP实现接口方法时出现致命错误