美文网首页
Java 和 Jni之间的调用

Java 和 Jni之间的调用

作者: 萧关逢候骑11 | 来源:发表于2020-02-02 22:26 被阅读0次

一. 利用在Java文件中创建的Jni接口生成对应的.h文件

有种方式:

第一种方法:找到文件的目录

以JniTest.java为例

图1

C:\self_project\NDK\app\src\main\java

执行命令

javah -classpath . -jni prictise.com.myapplication.model.JniTest,就会在C:\self_project\NDK\app\src\main\java目录下生成相应的.h文件

'javah' 不是内部或外部命令,也不是可运行的程序或批处理文件。

解决方式见我的另一篇文章

配置完成之后,一定要重新打开那个文件所在的目录,然后执行

图2

第二种方法:自动生成法

1. 

Program: javah  

Parameters: -v -jni -d $ModuleFileDir$/src/main/jni $FileClass$  

Working directory: $SourcepathEntry$  

图3

2. $ModuleFileDir$/src/main/jni,可以更改成自己想要的目录

图4

二:生成相应的so文件

1. 配置Android.mk文件,同时生成多个so文件

图5

2. 配置Application.mk文件

图6

3. 生成相应的so库

进入到相应的目录,执行命令

图7

命令:C:\self_progress\ndk-bundle\ndk-build

图8

4. 配置build.gradle, 然后就可以使用啦

图9

后话:

要记得在gradle.properties文件中加入

android.useDeprecatedNdk=true

三:Java和Jni开始互相调用

1. 给函数定义别名

https://www.2cto.com/kf/201307/227148.html

#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG,__VA_ARGS__)

2. 日志的打印

__android_log_print(ANDROID_LOG_DEBUG,"__BING__","sizeof(gMethods[0]) = %lu",sizeof(gMethods[0]));

4. 静态注册和动态注册

https://www.jianshu.com/p/b71aeb4ed13d

5.   调用过程

https://www.cnblogs.com/likwo/archive/2012/05/21/2512400.html

6. 获得类签名的方法

javap -s 类名,-p是显示所有的

相关文章

网友评论

      本文标题:Java 和 Jni之间的调用

      本文链接:https://www.haomeiwen.com/subject/kczcsctx.html