当前位置: 首页 > news >正文

JNI 基础

一、JNI 涉及的名词概念

1.1、 JNI:Java Native Interface
  • 它是Java平台的一个特性(并不是Android系统特有的)。实现Java代码调用C/C++的代码,C/C++的代码也可以调用Java的代码.
1.2、 二进制库分类 : 静态库,动态库.
  • 静态库
系统静态库文件
Windows.lib
Linux.a
MacOS/IOS.a

.a 静态库就是好多个 .o 合并到一块的集合,经常在编译C 库的时候会看到很多.o,这个.o 就是目标文件 由 .c + .h 编译出来的。.c 相当于 .java, .hC 库对外开放的接口声明。对外开放的接口 .h.c 需要一一对应,如果没有一一对应,外部模块调用了接口,编译的时候会提示找不到方法。

.a 存在的意义可以看成 Android aar 存在的意义,方便代码不用重复编译, 最终为了生成 .so (apk)

 

  • 动态库
系统动态库文件
Windows.dll
Linux.so
MacOS/IOS.dylib

动态库 ,在 Android 环境下就是 .so ,可以直接被java 代码调用的库.

1.3、 CPU 架构(ABI):armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64 

各个平台架构的区别就是指令集不一样,浮点运算能力不一样,按照上面排列的顺序,浮点运算能力运行从低到高。

  • armeabi:这是相当老旧的一个版本,缺少对浮点数计算的硬件支持,在需要大量计算时有性能瓶颈 (微信)
  • armeabi-v7aARM v7 目前主流版本,兼容 armeabi (facebook app)
  • arm64-v8a64 位支持 兼容 armeabi-v7a armeabi
  • mips/mips64: 极少用于手机可以忽略
  • x86/x86_64x86 架构一般用于 TV 电视机 ,兼容 armeabi
  • 建议 android apk 为了减少包体大小只接入 armeabi-v7a 即可

 1.4、 Android 特有的文件 :Android.mk Application.mk

 Android.mk:在 Android 上编译需要的配置文件,相当于 build.gradle,详细细节后面会讲到。
Application.mk:上代码

APP_PLATFORM := android-14 //指定 android 系统
APP_ABI := armeabi-v7a // 指定生成哪个架构的 so
1.5、 NDK :Android 平台上用来编译 C/C++库的工具

二、JNI 在 Android Studio 搭建

(1)调用了System.loadLibrary("helloworld");这句代码代表着,使用这个类之前都会去加载libhelloworld.so 这个动态库。

(2)public native String nativeGetString()//或者external fun stringFromJNI(): String这个方法的实现在 c 层。所以接下来我们要构建 c 层的代码。

(3) 自动生成一个 helloworld_android.c文件

http://www.lryc.cn/news/170939.html

相关文章:

  • 用户参数(zabbix-agent)
  • 期权策略篇: 实现买方狂欢,让卖方稳赚不赔的策略
  • 关于包,类名,方法名的命名规范
  • 1.1 安装配置CentOS
  • go初识iris框架(七) - 实战资源导入和项目框架搭建
  • 甲胎蛋白AFP抗体——博迈伦
  • junit.Test误踩坑,识别不到@Test注解,无法运行测试方法
  • 一加Ace2V/Ace竞速版刷入氧OS13系统-谷歌服务套件-全球语言-国际版体验
  • Java 华为真题-猴子爬山
  • Axios笔记
  • 如何使用try-except语句处理Python中的异常
  • 学Python的漫画漫步进阶 -- 第十一步.常用的内置模块
  • 发现无尽的创意可能性——Photo Image Editor Pixelstyle for Mac
  • Smart Community(1)之设计规范
  • 爬虫工作者必备:使用爬虫IP轻松获得最强辅助
  • 工作比读研简单多了
  • 【音视频】H264视频压缩格式
  • Windows【工具 04】WinSW官网使用说明及实例分享(将exe和jar注册成服务)实现服务器重启后的服务自动重启
  • 【C++面向对象侯捷】3.构造函数
  • GE WESDAC D20ME 模拟输入电子模块
  • GE WES5302-150 数字量控制模块
  • Redis-渐进式遍历scan的使用
  • 数据结构——查找
  • 设计模式六大原则
  • Docker 安装
  • 国外发达国家码农是真混得好么?
  • 构造函数不能做为虚函数
  • 持续集成实战 —— Jenkins自动化测试环境搭建
  • ajax上传文件
  • 使用jib-maven-plugin插件构建镜像并推送至私服Harbor