so层获取Java层的字段和静态字段
1.java代码定义字段名称以及类型,一个静态一个非静态
二、使用javah生成c的头部文件
1.生成头文件,来到java的源码目录,ADT下来到src目录,AndroidStudio来到蓝色文件夹目录即java执行以下命令:
2.如果报以下错误(错误: 编码GBK的不可映射字符)可尝试加入参数:
4.重命名.h文件并移动到src同级的jni目录(我这里重命名testJni.h)并创建.c文件
三、编写c代码
1.默认创建完的文件是空的,需要引入javah生成的.h文件改名后再头部使用#includ引入,然后把头文件内的方法复制过来,尾部的分号删除,加上花括号{}然后在花括号内写实现代码,这里简单实现获取java层的字段内容
2.编写c代码引入头文件,复制方法到c文件内,开始编写实现代码.方法最后返回的是一个jobject类型的数据,但是不影响在java内接收.
2.1 获取普通字段内容
2.2获取静态字段内容
友情提示:编写代码的时候从我们最终的目的逆向编写代码,先获取字段,然后在获取字段所需的参数比如jclass,jfieldID,等...
四、附上c的最终代码,以及运行结果
1.c文件代码如下:
2.编译(如果使用AndroidStudio配置了jni目录就不需要运行ndk-build否则会报错)打包运行结果如下: