NDK入门项目实战
2011-08-28 23:34 狼人:-) 阅读(193) 评论(0) 编辑 收藏 举报目标:利用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
如果出现以上的信息,说明安装正确,如果出现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 信息出现。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗