手把手教你用Android Studio实现一个JNI demo

一、搭建Android Studio的NDK环境

1.下载NDK

在设置中搜索 sdk ,在as中下载NDK

2.配置NDK路径

选中我们已经下载好的NDK

如果点击ok后出现如下弹窗,原因是NDK版本过高,与当前AS版本不适配。重新下载一个低版本的即可。

3.配置NDK系统环境变量

新建系统环境变量

添加到Path

配置好后,在命令行窗口,输入ndk-build。出现如下信息即为配置成功。

二、测试demo

1.新建Native C++项目

新建的项目默认有完整的示例代码与配置。

2.查看Java代码

在 MainActivity 中,通过下面的代码,加载了 .so 库。

arduino 复制代码
static {
    System.loadLibrary("native-lib");
}

在Java中加载 .so库的方式有两种

  • System.loadLibrary("lib_name")
  • System.load("full path")

示例: 以加载一个 native-lib.so 为例。

arduino 复制代码
//加载的是libnative-lib.so,注意的是这边只需要传入"native-lib"
System.loadLibrary("native-lib");
//传入的是so文件完整的绝对路径
System.load("/data/data/应用包名/lib/libnative-lib.so")

此外,MainActivity 中还有一个方法

arduino 复制代码
public native String stringFromJNI();

这是一个待实现的接口方法,就是给到Native层去实现

3.查看C++代码

下面来解释一下上述代码中,相关参数的含义:

extern "C" 的作用是让编译器以处理 C 语言代码的方式来处理修饰的 C++ 代码, 既可以修饰一句 C++ 代码,也可以修饰一段 C++ 代码。

JNIEXPORT 是固定的标志,必须包含,表示一个函数需要暴露给共享库外部使用。

jstring 是返回值,也可以是其他 jni 支持的数据类型,比如jint,jstring等等。

JNICALL 是调用标记,表示一个函数是 JNI 函数。

Java_com_example_jnidemo_MainActivity_stringFromJNI 是标准的命名方式。格式是

复制代码
Java_包名 _ 类名_方法名(参数) 

JNIEnv* env JNIEnv是一个非常重要的结构体,里面含有大量被封装好的函数,我们在Native层的大部分和Java层的操作都通过它。

jobject 如果方法是非静态的,则表示包含这个方法的已经实例化的类对象;如果是静态的,则表示该类的引用。

4.编译运行

编译工程,生成的 .so 文件路径如下

运行在虚拟机上的效果图如下

相关推荐
非凡ghost6 小时前
JRiver Media Center(媒体管理软件)
android·学习·智能手机·媒体·软件需求
席卷全城6 小时前
Android 推箱子实现(引流文章)
android
齊家治國平天下7 小时前
Android 14 系统中 Tombstone 深度分析与解决指南
android·crash·系统服务·tombstone·android 14
maycho1239 小时前
MATLAB环境下基于双向长短时记忆网络的时间序列预测探索
android
思成不止于此9 小时前
【MySQL 零基础入门】MySQL 函数精讲(二):日期函数与流程控制函数篇
android·数据库·笔记·sql·学习·mysql
brave_zhao9 小时前
达梦数据库(DM8)支持全文索引功能,但并不直接兼容 MySQL 的 FULLTEXT 索引语法
android·adb
sheji34169 小时前
【开题答辩全过程】以 基于Android的网上订餐系统为例,包含答辩的问题和答案
android
easyboot10 小时前
C#使用SqlSugar操作mysql数据库
android·sqlsugar
为码消得人憔悴10 小时前
Android perfetto - Perfetto 新手入门指南
android·性能优化
写代码的Eleven10 小时前
Rk3576 Andorid 14修改默认的通知音量,通话音量,闹钟音量等系统音量大小
android·framework