美文网首页
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