Android - JNI环境搭建和简单案例入门

一、简单概念:

JNI:Java Native Interface。实现java 与本地语言(android是linex系统开发的,语言是c/c++) 的相互调用。

NDK:Native Development Kit。用来模拟另一个平台特性进行编译的工具集合,能够快速开发C(或C++)的动态库,能自动将so和java应用一起打包成apk。

在android的JNI中,要先将相应的C/C++语言打包生成.so文件(c++的函数库),然后导入到lib文件夹中供java调用。

需要的工具:
Android 原生开发工具包 (NDK)
CMake:一款外部构建工具,可与 Gradle 搭配使用来构建原生库。

二、AS搭建JNI环境

1. 在SDK 管理器安装NDK和CMake

1)打开 Settings>Appearance&Behavior>System Settings>Android SDK>SDK Tools ,
勾选Show Package Details ,选择版本下载,大概1G内
注:如果选择23.x及以上版本的ndk,toolchains目录下就缺失了aarch64-linux-android-4.9 这个目录,导致工程编译失败报错。所以安装23以下的版本:22.1.7171670(踩坑1)

选择版本下载
2)在app的build.gradle中指定ndk版本号:
指定ndk版本号

2. 配置path环境变量

1)打开File > Project Structure > SDK Location,选择默认NDK的路径并复制。
选择默认NDK的路径并复制
如果此处点击apply提示“NDK does not contain any platforms”表示版本过高,需下载更低版本的NDK。
2)右击我的电脑>属性>高级系统设置>环境变量>新建,添加一个系统变量NDK_HOME,并把刚才复制的ndk-bundle的路径填上去
在这里插入图片描述
3)给Path系统变量(不需要创建),新建一个%NDK_HOME%
在这里插入图片描述

3. 验证是否配置成功

在Terminal/cmd中直接输入 ndk-build,出现如下内容配置成功。未出现请重启电脑(踩坑2)
在这里插入图片描述

其他:如还未配置成功请看是否配置以下两处:

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

三、简单案例,hello JNI

  1. 在HelloJNIActivity .java中创建本地方法,并在调用前加载c会生成的.so文件
	public void hello(View view){
    
    
        //加载c代码生成的.so文件,so库的名称在描述文件中配置
        System.loadLibrary("hellojni");
        //调用处
        ToastUtils.showMessage(helloJNI());
    }

    public native String helloJNI();
  1. 新建cpp目录:app右键->New->Folder->JNI Folder
  2. cpp目录下创建hellojni .c文件,编写java的本地方法对应的本地函数:cpp右键->New->C/C++ Source File,
    在这里插入图片描述
    本地函数名规则:Java_调用类的全类名_本地方法名
#include <stdio.h>
#include <jni.h>
JNIEXPORT jstring JNICALL Java_com_linrabbit_myexampleandutilsproject_test_interview_jnistudy_HelloJNIActivity_helloJNI(JNIEnv *env, jobject thiz){
    
    
        char* str = "hello from c!!";
        return (*env)->NewStringUTF(env,str);
}

  1. cpp目录下创建描述文件:CMakeLists.txt
# 设置构建native library所需的CMake最低版本。
cmake_minimum_required(VERSION 3.4.1)

#创建一个库(多次调用add_library即可创建多个库)
add_library( # 设置库的名称
             hellojni
             # 将库设置为共享库(即so文件)
             SHARED
             # 指定源文件的相对路径
             hellojni.c )
  1. 在app的build.gradle中
android {
...
	externalNativeBuild {
	        cmake {
	            path "src/main/jni/CMakeLists.txt"
	            version "3.6.0"
	        }
	    }
	   

目录结构:
在这里插入图片描述
6. 结束,查看生成的.so文件:
在这里插入图片描述


参考文档:https://blog.csdn.net/u014720022/article/details/92842193

猜你喜欢

转载自blog.csdn.net/czssltt/article/details/126002194