AndroidStudio开发JNI静态注册调用获取返回数据


一、编写java代码

  1.java代码必须由native关键词修饰,不允许有{}实现,因为实现是在c里面所以不允许有方法体

    public native String getString();

0.png


二、使用javah生成c的头部文件

  1.生成头文件,来到java的源码目录,ADT下来到src目录,AndroidStudio来到蓝色文件夹目录即java执行以下命令:

//javah 包名+类名,会自动生成.h文件包含类里面的所有被native修饰的方法
javah com.example.mypc.myxphook.MainActivity

  2.如果报以下错误(错误: 编码GBK的不可映射字符)可尝试加入参数:

1.png

//javah -encoding UTF-8 包名加类名
javah -encoding UTF-8 com.example.mypc.myxphook.MainActivity

2.png


  3.执行成功会在java目录(如果ADT则在src目录下)下出现.h文件

3.png


  4.重命名.h文件并移动到src同级的jni目录(我这里重命名testJni.h)并创建.c文件

4.png


三、编写c代码

  1.默认创建完的文件是空的,需要引入javah生成的.h文件改名后再头部使用includ引入,然后把头文件内的方法复制过来,尾部的分号删除,加上花括号{}然后在花括号内写实现代码,这里简单实现返回一个字符串

5.png


四、生成so文件,在Android层面调用

  1.在我们的.c的目录使用ndk-build文件夹内需要配置Android.mk和Application.mk两个文件,上一篇文章详细讲了这两个文件的用法不清楚请点击此传送门

6.png


五、编写代码调用该方法得到返回值

  1.Java层编写代码,并调用

7.png

8.png


六、运行结果

9.png


在浏览的同时希望给予作者打赏,来支持作者的服务器维护费用.一分也是爱~