JNI 与 NDK

JNI

Java Native Interface,即 Java本地接口。JNI 是属于Java的,与Android无直接关系

作用

Java代码和 C、C++ 互相调用

NDK

Native Development Kit,是 Android的一个工具开发包。NDK是属于 Android 的,与Java并无直接关系

作用

通过 NDK在 Android中 使用 JNI与本地代码(如C、C++)交互

NDK项目构建

新建工程,按图选择,然后点Next–>Finish即可

在这里插入图片描述

项目目录结构

项目目录如图所示

在这里插入图片描述
在这里插入图片描述

这些都是AS自动帮我们生成的。仔细观察可以看出来.cpp文件生成的native方法名对应Java_包名_原生的方法名。修改native hello字段"Hello from C++"运行可以看到App上显示的就是我们修改的结果。

参数意义
  • JNIEnv* 是定义任意 native 函数的第一个参数,它是一个指针,通过它可以访问虚拟机内部的各种数据结构,同时它还指向 JVM 函数表的指针,函数表中的每一个入口指向一个 JNI 函数,每个函数用于访问 JVM 中特定的数据结构。通过它可以访问到 Java 虚拟机内部的各种对象。
  • jobject 是 native 函数里的第二个参数类型,但却不是一定的。如果该 native 方法是一个静态 static 方法,那么第二个参数就是 jobject 类型,指的是调用该函数的对象;
    如果是一个实例方法,那么第二个参数就是 jclass 类型,指的是调用该函数的类。

可以打开app目录下的build.gradle文件看下和普通Android项目的差别
在这里插入图片描述

注意箭头位置表示的是CMake的版本,系统默认是3.10.2。这个需要替换成3.6.0,因为我试的3.10.2版本日志打印会有问题。在CMakeLists.txt文件加把最低兼容版本cmake_minimum_required也改一下3.4.1。

CMakeLists

cmake的配置文件,是 CMake 编译系统中软件包的输入。描述如何编译代码、安装。

常用命令

cmake 的最小版本号

cmake_minimum_required(VERSION 3.10.2)

设置项目名称

project("myapplication")

添加依赖

add_library(
        # 设置库的名称。
        myapplication

        # SHARED动态库. STATIC 静态库
        SHARED

        # 提供源文件的相对路径
        native-lib.cpp)

搜索系统库依赖

find_library(
        # Sets the name of the path variable.
        log-lib

        # Specifies the name of the NDK library that
        # you want CMake to locate.
        log)

关联依赖

target_link_libraries( # Specifies the target library.
        myapplication

        # Links the target library to the log library
        # included in the NDK.
        ${log-lib}
        )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值