NDK开发入门篇

来源:互联网 发布:mysql打开文件 编辑:程序博客网 时间:2024/05/17 22:11

第一次编辑,排版很稀烂,不过附件有源代码和讲解文档,可以下载浏览。自从google引入了JNI技术,不论是android正向开发还是逆向,对于本地层更加的关注,因为越来越多的重要代码都会放到本地层,这次就简单的介绍一下一个入门的NDK开发。

首先对于NDK的下载以及环境变量配置网上都有,也很简单,自己百度一下就ok了。

下面进入正题:

步骤:

1.     新建一个Android工程:


2.     新建一个.java文件调用本地代码以及方法定义


这块注意:明显可以看出来是调用叫做“soJni”的本地代码,其中这个本地方法里面有一个重要的方法名字叫做soHello(),前面有一个关键字native,这在静态分析中很关键,一般核心代码或核心的逻辑都会写在这个里面。

3.     创建JNI本地函数原型,以供Java虚拟机识别

其实这一步就是生成一个.c的头文件供具体的本地函数编写时进行引入


在dos下面进入到工程的根目录下面:


这里就要用到javah来进行生成头文件,命令是:

javah–classpath bin/classes –d jni com.example.jnitest.CallSo


可以看到我们这个成功了没问题,生成了头文件,可以看一下头文件里面是具体的怎么写的?


可以看到就是对之前那个.java文件里面重要方法的一些声明,声明成能够用JNI过度的形式,在这里读着可能对这个命令有点好奇:

javah–classpath bin/classes –d jni com.example.jnitest.CallSo

在这里做一个简单的介绍:–classpath bin/classes,因为在eclipse中我们编写代码时它会自动的编译成.class形式,


这里生成头文件就是依据这些.class; –d jnicom.example.jnitest.CallSo,意思是生成的头文件放到当前目录的jni目录下面,ok,了解到这就可以了。。我们继续

4.     编写本地代码

最为重要的一步就是编写本地代码,可以参考上面的.h头文件

在jni下面新建一个.c文件(注意名字必须与前面的对应)


这一步参照上一步形成的.h头文件:具体的代码形式为:


至于为什么是这种格式?这是JNI自定义的一种代码编写格式,一般在定义具体的数据类型时,会在签名加上j,比如上面的jstring,具体的资料网上有很多,可以查阅来看

5.     编写Android.mk文件

Android.mk文件是工程的编译脚本,描写了编译原生程序所需的编译选项,头文件,源文件以及依赖库,这个基本上是固定的。


生成so文件:

直接进去工程根目录:

ndk-build


生成共享库SO文件。

6.     补充完android调用代码


7.     运行结果为:


这里有点问题就是上面输出时:不能显示汉字,就是上面第四步。所以改成英文的,可能跟这个编码有关吧!

Ok,今天就到这里,这个编辑器用的好累,over!

工程项目下载以及文档讲解为:

http://download.csdn.net/detail/feibabeibei_beibei/9509222


0 0
原创粉丝点击