手把手教你用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 文件路径如下

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

相关推荐
独行soc27 分钟前
2026年渗透测试面试题总结-20(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
常利兵40 分钟前
2026年,Android开发已死?不,它正迎来黄金时代!
android
Risehuxyc1 小时前
备份三个PHP程序
android·开发语言·php
Doro再努力11 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
Daniel李华11 小时前
echarts使用案例
android·javascript·echarts
做人不要太理性12 小时前
CANN Runtime 运行时组件深度解析:任务调度机制、存储管理策略与维测体系构建逻辑
android·运维·魔珐星云
我命由我1234512 小时前
Android 广播 - 静态注册与动态注册对广播接收器实例创建的影响
android·java·开发语言·java-ee·android studio·android-studio·android runtime
朗迹 - 张伟13 小时前
Tauri2 导出 Android 详细教程
android
lpruoyu13 小时前
【Android第一行代码学习笔记】Android架构_四大组件_权限_持久化_通知_异步_服务
android·笔记·学习
独自破碎E14 小时前
【BISHI15】小红的夹吃棋
android·java·开发语言