一、简单概念:

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版本号:

2. 配置path环境变量

1)打开File > Project Structure > SDK Location,选择默认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

Android - JNI环境搭建和简单案例入门相关推荐

  1. boost标准库开发环境搭建boost标准库环境搭建以及简单案例介绍

    1.下载boost相关的库的安装包 网址:http://www.boost.org/ 其中1.55.0版本的下载地址是:http://sourceforge.net/projects/boost/fi ...

  2. Android开发环境搭建与入门Hello World

    一直没机会接触手机开发,很想开发一款手机围棋软件,今天先学习一下环境搭建与Hello World吧. 环境配置对于没入门的很麻烦,谁如果有需要留下QQ邮箱,我发给你.不客气,呵呵. 推荐一本书: Go ...

  3. Android开发环境搭建【超详细-Android初学者入门必看】

    Android开发环境搭建 1.1. JDK下载地址,JDK简述 下载Oracle公司的JDK可以百度"JDK"进入Oracle公司的JDK下载页面,当前下载页面地址为 http: ...

  4. 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第一章:Android开发环境搭建

    第 1 章 Android开发环境搭建 本章介绍了如何在个人电脑上搭建Android开发环境,主要包括:Android开发的发展历史是怎样的.Android Studio的开发环境是如何搭建的.如何创 ...

  5. 【Android入门】1、Android 入门概念、Android Studio 环境搭建并运行首个 App

    文章目录 一.Android 简介 1.1 Android 四大组件 1.2 Android 操作系统架构 1.3 Android 技术栈整体感官 二.Android Studio环境搭建并运行首个A ...

  6. Windows环境下Android NDK环境搭建

    转自:http://blog.csdn.net/pengchua/article/details/7582949 前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只 ...

  7. 【下班后学Android】Android开发环境搭建

    Android开发环境搭建方法: 方法一:百度搜索"Android开发环境搭建":http://jingyan.baidu.com/article/bea41d437a41b6b4 ...

  8. Android 应用开发(29)---android 开发环境搭建

    android 开发环境搭建 分类 Android 基础入门教程 现在主流的Android开发环境有: ①Eclipse + ADT + SDK ②Android Studio + SDK ③Inte ...

  9. Windows下Android开发环境搭建和配置

    关于Windows下Android开发环境搭建.配置方面文章,网上一搜一堆,为方便以后参考,权且做个记录,主要关注安装过程中的注意事项.对新手提醒的是,本文介绍SDK开发Android APK环境搭建 ...

最新文章

  1. QT编译发布程序后报错如缺少dll、“应用程序无法正常启动(0xc000007b)”的可能解决方法
  2. 用Eclipse进行远程Debug代码
  3. Unit testing Cmockery 简单使用
  4. 深度学习与机器学习到底什么关系?
  5. [转载]SQL SERVER 2008 阻止保存要求重新创建表的更改
  6. 无法扩展该卷 因为群集的数量将超过文件系统_浏览器将支持Python项目!Mozilla发布Pyodide...
  7. 【操作系统】笔记6 java基本类型及运算
  8. 计算机网络 间接路由选择与直接路由选择
  9. tp5 linux定时,TP5 用cron实现linux定时任务
  10. tcp/ip网络协议学习
  11. Selenium WebDriver控制操作(Python)
  12. 用iMindMap制作健康生活计划思维导图
  13. 网易云音乐转码MP3
  14. 流程图-时序图-架构图,部署图-拓扑图-ER图-类图-状态图-用例图
  15. 人物志 | 技术十年:美团第一位前端工程师潘魏增
  16. invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix
  17. craftsmanship中文_欢迎访问叶登民简体中文主页!
  18. 美国大学计算机科学专业研究生排名,美国大学计算机科学专业研究生排名介绍...
  19. vue中使用element-ui时单元格内换行的问题
  20. 【第24篇】YOLOR:多任务的统一网络

热门文章

  1. sandboxie游戏不能运行在虚拟环境中如何解决_Sandboxie:这款曾卖一百多的知名沙盘软件,现在免费开源了...
  2. 设计师常用网站,建议收藏
  3. 考心理健康教育教师资格证-初出茅庐
  4. javaScript-力扣-题库-11. 盛最多水的容器
  5. 信息与通信的数学基础——第十三章 行波法
  6. Windows NT
  7. 硬件工程师常用的电路基础公式+换算!
  8. 【暗时间】摘录 - 为什么你应该从现在开始就写博客
  9. 嘘!捡漏啦!1919元=高性能电脑,满额+500京东卡...
  10. ESP32CAM摄像头图像实时传输