android ndk开发(2)——基础编程

0x00 基础知识

  • jni 是java native interface,java调用底层C代码所用到的技术
  • ndk 是Android方便jni编程所提供的工具集合
  • 在windows 环境下,需要安装cygwin工具,方便对c代码进行编译

    配置ndk运行环境
    打开cygwin64\etc\profile文件,编辑其中的环境变量,添加ndk位置变量:

    安装cygwin选择163的源,安装bash和make即可。需要更新也是用setup文件。
    参考链接:
    http://pielot.org/2010/12/using-cygwin-with-the-android-ndk-on-windows/
    http://mirrors.163.com/.help/cygwin.html
    http://blog.csdn.net/hu_shengyang/article/details/7828998

0x01 开始编程

1. 创建工程 java部分

  • 新建一个空的Android App程序,添加几个按钮,用于测试调用ndk。

  • 新建DataProvider类,里面用native关键字声明需要调用C的函数。

  • 测试C代码调用

2. 编写C代码

  • 使用javah 帮助生成C头文件

便可生成对应的头文件com_example_huanqi_myapplication_DataProvider.h

  • 使用jni技术,C代码编程
    这里用到了jni.h 头文件进行基础编程和android/log.h文件进行打印日志。这里的C代码需要通过jni中数据转换为java可识别的类型。

data_test.c

log.h 公用log打印函数

until.h 公用数据转换函数

until.c

3. 编译C代码

  • 编写Android.mk 交叉编译
    Android.mk

将C代码编译为可以在arm平台上运行的库文件。这里需要使用cygwin,cd到jni目录中,输入ndk-build命令即可。

  • 将 so 文件放在指定的工程目录下

android studio 对于ndk的支持还只是实验阶段,所以需要在gradle.properties文件中添加:

然后将so文件放在src/main/jniLibs/armeabi目录下,即可被项目找到。

0x02 运行调试

  • 用Genymotion调试运行
    在运行时,记得在使用的地方加载运行库:

    然后点击项目运行,可以测试运行得到:

  • adb shell查看调试
    配置好sdk路径之后,可以使用adb对设备进行调试,权限是root。

  • 编辑log窗口,查看日志
    像eclipse一样,在输出的日志中,进行过滤操作。这里配置标签为System.out.c

0x03 git版本控制

  • 先按照之前初始化的步骤将ssh key添加到github中。 http://www.angelwhu.com/blog/?p=346
  • 在根目录下,在项目文件夹下,根目录初始化

可能需要登录github,先创建android ndk仓库。