JNI开发流程

JNI开发,可以实现Java与c/c++互相调用。

1.NDK开发中的静态库、动态库就是Linux中的概念
静态库:所有函数库编进目标代码,如果静态函数库改变类,则整个应用程序需要重新编译,名称对应libxxx.a
动态库:动态库不会编入目标代码,所以动态库改变不影响应用程序,名称对应libxxx.so

2.JNI注册方式有2种:静态注册、动态注册
静态注册:流程繁琐,c源文件中函数名要与java native接口一一对应(下文都是此注册方式);
动态注册:在c源文件中使用JNINativeMethod数组来声明java native与c中函数对应关系,还需要写一个JNI_OnLoad函数(android aosp源码中大量使用此注册方式)

1. Java call C

  1. 在java文件中声明native接口;
  2. 生成头文件(javac -h 命令);

使用此命令生成头文件 javac -h . JNI.java

  1. 拷贝.h文件到jni代码目录,并实现.c源文件;
  2. 配置CMakeLists.txt编译生成动态库(.so)/静态库(.a)。

demo工程如下:

  • JavaCallCJNI.java内定义native接口;
  • src/main/jni目录下进行c代码实现
    在这里插入图片描述
    CMakeList.txt内容如下:
cmake_minimum_required(VERSION 3.4.1)

add_library(
        # 生成的lib名称
        java_call_c
        # 动态库
        SHARED
        # 源文件
        src/main/jni/java_call_c.c)

find_library(

        log-lib

        log )

target_link_libraries(

        java_call_c

        ${
   log-lib})

build.gradle文件中,在android节点下配置cmake内容。

    externalNativeBuild{
   
        cmake{
   
            path "CMakeLists.txt"
        }
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值