JNI基础

2023-11-18

问题1:JNI是什么?

答:JNI是Java语言的机制。Java可以通过JNI调用C/C++代码,C/C++代码也可以通过JNI调用Java代码。

 

问题2:NDK是什么?

答:NDK是代码库,功能有两个:

(1) 将.c/.cpp文件转换成.so文件

(2) 将.so文件和Android应用一起打包成apk

 

问题3:我们要做什么?

答:做以下五个步骤

(1) 创建.cpp / .c文件

(2) 使用NDK将.cpp / .c文件转化成.so文件

(3) 使用JNI在Java中调用.so文件中的C/C++的函数

(4) 使用NDK将.so文件打包成.apk

(5) 在手机上运行

 

问题4:CMake方式和ndk-build方式是什么?

答:当我们想将.cpp /.c转化成.so文件时, Android Studio提供了两种方式:

第一种是通过ndk-build工具,此时我们需要编辑Android.mk文件。

第二种是通过CMake方式,此时我们需要编辑CMakeLists.txt文件

CMake方式更加先进,但是需要Android Studio 2.2 及以上版本的支持。

 

问题5:本文中介绍什么呢?

答:两个都介绍,但是先介绍先进的CMake,再介绍落后一点的ndk-build,如果同学们学会了CMake,ndk-build可以先不用看了。但是由于在某种意义上,ndk-build的适用性更广,所以大家在CMake不管用的时候,可以去尝试ndk-build的方式。

 

三、 实践:CMake方式

1. 新建Android Studio工程,不用勾选include C++ support

2. 打开SDK Manager,保证NDK已经安装

3. 创建JNI文件夹

4. 在创建出来的cpp文件夹中建立C/C++ Source File,起名为hello_world.cpp 

5. 回到MainActivity,声明native方法helloFucker(String name)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JNI基础 的相关文章

  • [问题记录]JNI的整型数组返回出现stack corruption

    问题记录 JNI的整型数组返回出现stack corruption 在项目中编写了一个返回整型数组的JNI代码 xff0c 但是在测试时发现问题 xff0c 会产生stack corruption错误 xff0c debug之后发现是ret
  • 通过示例去看JNI中为什么使用extern “C“

    经验总结 在JNI开发过程中 xff0c 我们使用C 43 43 去写一个动态库 xff0c 由于C 43 43 编译器对于函数的符号的生成需要进行名字修饰处理 xff0c 然后生成的函数符号不再跟源代码中定义的函数名一致 这样导致调用方通
  • eclipse报错:Failed to load the JNI shared library

    电脑自装系统以来 xff0c 好久没有写java代码了 xff0c 所以一直也没用 eclipse IDE xff0c 今天将eclipse打开 xff0c 报了个问题 xff0c Failed to load the JNI shared
  • jni中native通过adb输出

    本文主要实践了如何在jni中打印log xff0c 贴源码 xff1a Android mk主要是巴拉的android源码中的app LOCAL PATH 61 call my dir include CLEAR VARS TARGET P
  • java--通过JNI调用动态链接库(dll、so、dylib)

    公司项目需要用到第三方qt插件 xff0c 由于业务是偏底层的 xff0c 基本上用不到jar包 xff0c 因此只能通过jni的方式调用 没学过c 43 43 xff0c 十多天的摸爬滚打一路过来不容易啊 xff01 今天总算跑通了 网上
  • Android:JNI调用C++自定义类的详细方法

    一般情况下 我们都是用 JNI 调用 C 的某个方法的代码 包括直接使用 android studio 生成的代码也是如此 但有时我们需要新建 或者得到的是 C 的一个自定义类 在调用时就不能像调用 C 方法那样了 查阅了一部分其他人的博客
  • 从零开始编写JNI

    最近项目中用到了JNI 本以为很简单的 没想到花了我一天的时间才搞定 主要是在过程中遇到了一个大坑 下面就详细说说 出现的问题是这样的 代码一运行到System loadLibrary xxx 时 就提示java lang Unsatisf
  • Android底层驱动开发记录:03_HAL

    在上一节基础上增加HAL层代码 1 完成IoctrlJ25 hal c 填充主要结构体hw module t static struct ioctrlj25 device ioctrlj25 dev common close ioctrlj
  • No implementation found for void com.wust.testjni10.CallJava.callPrintString()

    问题描述 当你看到这篇文章的时候 说明你会jni了 并且还在调用 so 库 可问题就出在调用的时候报了这么个错 No implementation found for void com wust testjni10 CallJava cal
  • Android:JNI调用 出错java.lang.UnsatisfiedLinkError: No implementation found for解决办法

    在项目中使用第三方so库 调用JNI时发现了这个错误 java lang UnsatisfiedLinkError No implementation found for 仔细查看了代码 没发现有出错的地方 然后上网查资料 发现这个问题答案
  • Android JNI/NDK开发(2)JNI实现C/C++与Android/JAVA相互调用

    前言 一直觉得无论是从行业形式来看 还是从就业角度说 学习JNI NDK开发是一条必经之路 很多说Android和IOS几乎没有市场了 其实只能说现在开发APP的需求没那么多了 再加上之前培训机构疯狂向市场输出Android IOS开发人员
  • java调用.so文件

    第一步 public class JavaToCTest private native void sayHello 声明本地方法 static System loadLibrary JavaToCTest 需要加载的so库文件的名称 在li
  • Android JNI编程 与 NDK开发(一) 简介,区别,使用场景

    JNI是什么 JNI 全称Java Native Interface 是java与其他语言 主要是c c 交互的接口 是java的一种特性一种协议 开发者可以通过JNI在java中调用c c 代码或在c c 中调用java代码 NDK是什么
  • java中native的用法

    Java开发中会碰到声明为 native的方法 如 public native int hashCode 这是一个native方法 为什么存在native方法呢 Java不是完美的 Java的不足除了体现在运行速度上要比传统的C 慢许多之外
  • Android解决调用JNI报java.lang.UnsatisfiedLinkError: No implementation found for的错误

    最近公司项目需求接入即时通讯功能 现在第三方的即时通讯做的比较完善 接入也很方便 最近在调试语音的时候遇到了一个 so库加载失败的问题 在网上查看都是说由于原有项目的so库和新添加的model的so库数量不一致 具体报错如下 java la
  • JNI线程

    作者 左少华 博客 http blog csdn net shaohuazuo article details 43149193 转载请注明出处 http blog csdn net shaohuazuo 1 Android线程介绍 1 线
  • Android JNI(一):JNI基础概念

    本文讲述 NDK和JNI是什么 JNI的原理 JNI开发流程的步骤 认识JNI相关的代码语法 名称概念 什么是NDK NDK 其中NDK的全拼是 Native Develop Kit Android NDK 就是一套工具集合 允许你使用C
  • jni入门级别教程

    前提条件 笔者假想着 能看到这篇博客的读者 NDK环境 已经配置好了哈 开发步骤 第一步 新建工程 工程建完之后在真机或模拟器上运行一遍 确保工程建的没问题 第二步 配置NDK 第三步 在Java中添加 native 函数 并 调用 我们这
  • C语言基础入门详解二

    前些天发现了一个蛮有意思的人工智能学习网站 8个字形容一下 通俗易懂 风趣幽默 感觉非常有意思 忍不住分享一下给大家 点击跳转到教程 一 C语言多级指针入门 include
  • Android NDK 编译时出现make (e=2): 系统找不到指定的文

    今天编译一个so文件时出现如下错误 C Users xxj Desktop test OpenCamera gt ndk build armeabi v7a Compile SeetafaceSo lt face detection cpp

随机推荐

  • CentOS7安装OpenStack(Liberty)

    1 安装yum源 yum install https buildlogs centos org centos 7 cloud x86 64 openstack liberty centos release openstack liberty
  • 百度智能云千帆大模型三连击:接入LLaMA2等33个模型、上线插件功能和103个Prompt模板

    作为全球首个一站式企业级大模型平台 百度智能云 千帆大模型平台 在提供包括文心一言在内的大模型服务及第三方大模型服务的同时 还提供大模型开发和应用的整套工具链 帮助企业解决大模型从训练到开发过程中的全链条问题 自2023年3月发布以来 千帆
  • 看懂android中的adapter适配器

    首先需要知道一共有4个文件 fragment类 adapter fragment的布局文件 adapter中的item的布局文件 1 首先声明一个控件 RecyclerView 2 然后声明一个adapter类 3 在initView 上
  • python中typeerror_详解python中的TypeError错误解决办法

    新手在学习python时候 会遇到很多的坑 下面来具体说说其中一个 在使用python编写面向对象的程序时 新手可能遇到TypeError this constructor takes no arguments这个错误 例如下面的程序 cl
  • gtest 单元测试工具的基本使用

    gtest 单元测试 gtest 简介 gtest 优点 安装 gtest 测试 demo 总结 gtest 简介 gtest是Google的一套用于编写C 测试的框架 可以运行在很多平台上 包括Linux Mac OS X Windows
  • 获取时间和脸颊、下颚线灯模式

    电流检测的应用 电路检测电路常用于 高压短路保护 电机控制 DC DC换流器 系统功耗管理 二次电池的电流管理 蓄电池管理等电流检测等场景 对于大部分应用 都是通过感测电阻两端的压降测量电流 一般使用电流通过时的压降为数十mV 数百mV的电
  • android动画内存优化,Android 性能优化之内存优化

    定义 内存泄漏 Memory Leak 指 程序在申请内存后 当该内存不需再使用但却无法被释放的现象 内存溢出 OOM 应用程序所需的内存超出了为其分配的内存限额 Android将进程分为5个优先等级 前台进程 可见进程 服务进程 后台进程
  • google.api.http

    Http 定义api服务的http配置 它包含一个httprule列表 每个列表指定一个rpc方法到一个或多个http rest api方法的映射 字段 描述 rules HttpRule 一个适用于各个API方法的http配置规则列表 注
  • 编译优化之 - 向量化优化入门

    1 介绍 2 Intel高级向量扩展 3 GCC中向量化 4 ICC中向量化 5 AOCC LLVM中向量化 1 介绍 什么是自动向量化 自动向量化 automatic vectorization 是自动并行化 automatic para
  • STM32笔记:高精度脉冲宽度计 双输入捕获+DMA方式

    本文介绍如何用STM32F107VC Waveshare Open107V实验板 实现高精度的脉冲宽度计 占空比 开发环境 IDE STM32CubeIDE 1 8 固件库 STM32Cube FW F1 V1 8 4 函数发生 RIGOL
  • 人工智能开源社区论坛----开源助力多领域AI生态发展

    ChinaOSC 2022 人工智能开源社区论坛 开源助力多领域AI生态发展技术论坛将于2022年8月20日13 00 17 00在陕西省西安高新国际会议中心召开 本论坛将围绕 开源社区助力多领域AI生态发展 主题 邀请AI开源领域顶级技术
  • Filco圣手二代键盘蓝牙连接方法

    键盘前面的电源按钮按进去 即打开电源开关 同时按下Ctrl Alt Fn 看到蓝灯和红灯同时亮起 之后剩蓝灯闪烁 按下小键盘中数字键1 4中的一个 一共可以连4台设备 如果你选的数字之前连接过其他设备 可以在第2步做完之后先按两秒清除按钮
  • 托福综合写作套路

    1 文章认定 教授驳斥 2 The reading passage provides three possible functions of the carved stone balls However in the lecture the
  • 决策树算法原理+例题练习

    一 决策树的优缺点 优点 计算复杂度不高 输出结果易于理解 对中间值的缺失值不敏感 可以处理不相关特征数据 缺点 可能会产生过度匹配的问题 使用数据类型 数值型和标称型 二 一个实例 一天 老师问了个问题 只根据头发和声音怎么判断一位同学的
  • LSF的使用方法总结

    一 LSF 基本介绍 LSF Load Sharing Facility 是IBM旗下的一款分布式集群管理系统软件 负责计算资源的管理和批处理作业的调度 它给用户提供统一的集群资源访问接口 让用户透明地访问整个集群资源 同时提供了丰富的功能
  • 5.19 华为算法笔试经验

    华为机试一共三道题 对应的分值分别为100分 200分 300分 下面介绍这次笔试题目 第一题 一共有N个员工围成一个圆圈 分别是1 2 N每一个员工身上有对应数量的令牌 轮流从顺时针以及逆时针进行报数 顺时针报数周期为R 逆时针报数周期为
  • 僵尸进程的多种处理方式-图文详细教程

    问题引起原因 yum更新导致无法使用yum 于是将占用进程kill掉 导致 ps A ostat ppid pid cmd grep e Zz ps ef no headers k8s环境kubelet服务异常 systemd1服务超时 导
  • IP地址和子网掩码详解

    原文链接 IP和子网掩码 我们都知道 是由四段数字组成 在此 我们先来了解一下3类常用的 A类IP段 0 0 0 0 到127 255 255 255 B类IP段 128 0 0 0 到191 255 255 255 C类IP段 192 0
  • Android Studio连接Mysql数据库步骤以及常见错误

    1 先把Mysql给下好 环境变量也配置好 这里我就不说了 2 下载好Navicat for Mysql软件 管理数据库 3 进入Android Studio创建一个类 写好连接数据库的代码 我们采用的是常用的JDBC方法来连接 需要的ja
  • JNI基础

    问题1 JNI是什么 答 JNI是Java语言的机制 Java可以通过JNI调用C C 代码 C C 代码也可以通过JNI调用Java代码 问题2 NDK是什么 答 NDK是代码库 功能有两个 1 将 c cpp文件转换成 so文件 2 将