![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JNI/NDK
文章平均质量分 85
介绍JNI入门基础
FlyerGo
一个渴望蜕变的码农
展开
-
JNI之常见技巧与陷阱
预告后续可能会推更一个FFmpeg系列的入门博客,大概涉及到FFmpeg解封装、FFmpeg编解码、FFmpeg进行音频重采样、使用FFMpeg将mp3转码成aac、使用FFmpeg合并拼接音视频等。另外如果有时间可能也会更新几篇关于ffplay的文章,敬请关注。本文将作为JNI系列的一个结尾,下面是笔者在学习使用JNI的所记录的一些笔记与技巧。JNIEnv的线程限制一个JNIEnv指针仅在其相关联的线程中有效。你不能将这个指针从一个线程中传递给另一个线程,或者在多线程中缓存和使用它。Java虚拟原创 2022-04-16 12:11:56 · 893 阅读 · 0 评论 -
JNI异常处理
前言本文所要介绍的异常处理是指通过JNI调用java层方法时产生的异常处理,并不是指JNI调用Native层函数时产生的异常处理,如果童鞋们想要了解Native层的异常处理可以参考笔者之前的文章《C++之异常处理》按照java的经验,当发生异常而又没有捕获时,异常后面的代码就得不到继续执行的机会,但是在JNI中不同,在JNI中如果调用java层的方法抛出了异常,依然会继续往后执行,但是这些行为往往会带来各种各样的"惊喜"。。。因此我们需要在异常发生时将这些异常及时进行处理。本文主要从捕获java层异常原创 2022-04-16 12:11:13 · 3018 阅读 · 0 评论 -
JNI之缓存与引用
导读在前面《JNI之访问java属性和方法》 一文中我们介绍了在JNI方法中访问java类对象的属性和方法,试想一下如果每次调用JNI方法都经过查找类,查找方法id,最后完成调用,这里是否有性能问题呢?而且FindClass/GetMethodID/GetFieldID这些函数本身就含有一些性能问题,既然如此,那能否将FindClass/GetMethodID/GetFieldID这些函数的调用结果缓存起来,下次再进入时直接使用缓存即可呢?肯定是可以的。JNI引用类型在JNI中包含三种引用类型,它们原创 2022-04-16 12:10:41 · 540 阅读 · 0 评论 -
JNI访问属性和方法
导读在《JNI之动态注册与静态注册》 一文中,我们介绍了JNI函数动态注册的同时也介绍了JNI中的属性描述符和函数描述符。对这两个概念还不熟悉的童鞋们需要再温习一下。在今天的文章中我们主要介绍在JNI中如何访问java层对象的属性以及调用java层对象的成员方法等相关知识。访问java成员属性1、访问普通属性在JNI访问java类属性分为两个步骤,首先是通过FindClass函数找到对应的类,然后通过GetFieldID找到对应的属性,如果需要修改变量的话则通过一系列的SetTypeField函数原创 2022-04-16 12:10:04 · 424 阅读 · 0 评论 -
JNI静态注册与动态注册
导读我们知道通过Java通过JNI可以调用C/C++代码,C/C++也可以通过JNI调用java代码,那么JNI是怎么将Java方法与Native的方法对应起来的呢?JVM查找Native方法有两种方式:1、按照JNI规范的命名规则进行查找,这种方式叫静态注册。2、调用JNI提供的RegisterNatives函数,将本地函数注册到JVM中,这种方式叫动态注册。静态注册所谓静态注册就是按照JNI规范书写函数名:java_类路径_方法名(路径用下划线分隔)当我们使用Android Stud原创 2022-04-16 12:09:24 · 4321 阅读 · 7 评论 -
JNI基础简介
导读在前面的几篇文章中,笔者介绍了C++中的指针、引用、智能指针、多线程、类型转换、异常处理等相关知识点,如果想要熟练掌握,并能在实际项目中运用,光是看肯定是毫无用处,纸上谈兵永远比不上脚踏实地的实在。。。以下是前几篇文章的回顾:C++之RVO返回值优化C++之const关键字C++之指针扫盲C++之智能指针C++之指针与引用C++之右值引用C++之类型转换C++之多线程一C++之多线程二C++之异常处理从今天开始文章的内容将是一系列JNI入门的相关文章。JNIJNI是Java原创 2022-04-16 12:07:47 · 2759 阅读 · 0 评论 -
重温C与C++之结构体大小计算
前言所谓基础不牢,地动山摇。笔者作为一个Android开发者,虽然有些NDK相关的开发经验,但是在写C或C++代码的时候总有一种知其然,不知其所以然的感觉。随着后续可能在项目中使用大量使用C/C++代码,笔者意识到有必要巩固下自己的C/C++的基础,顺道给扫一下以前学习C/C++的时候留下的知识盲区。后续可能会不定期更新一些自己复习C/C++的简要笔记,这些笔记更多的是自己温习的过程中对某个知识点的加上自己的理解,如有误人子弟,恳请各位手下留情。字节对齐对于结构体大小计算这个问题可以说是C/C++原创 2021-05-17 17:12:47 · 643 阅读 · 0 评论 -
WebRTC之Android编译
前言在前面关于WebRTC的相关学习笔记中,笔者记录的多是一些理论相关的知识,比如各种协议之类的。虽说有纸上谈兵、空中阁楼的嫌疑,但笔者觉得更多的是磨刀不误砍菜工,有了部分理论的支撑,才能使我们在后面的实践中走得更远。今天就来点实际点的实践,我们尝试下编译Android版的WebRTC…本文的内容主要来源于官网WebRTC Android Native编译教程 https://webrtc.github.io/webrtc-org/native-code/android/编译环境为了一次性编译成原创 2021-04-29 09:04:11 · 1357 阅读 · 0 评论 -
使用OpenGL预览CameraX摄像头数据
前言CameraX 是一个 Jetpack 支持库,旨在帮助您简化相机应用的开发工作。笔者看了下网上关于CameraX的资料虽然很多,但是很多基本上都是官网资料的翻版,学习的价值很没有直接看官网的高。也有些博客介绍了CameraX结合OpenGL渲染的的例子,但好像都建立在Preview类的setOnPreviewOutputUpdateListener这个方法中进行处理,但是笔者更新CameraX版本之后发现setOnPreviewOutputUpdateListener这个方法直接没了,完犊子了…原创 2021-04-08 09:03:15 · 1323 阅读 · 2 评论 -
NDK编程Java如何保存C或C++对象
前言最近有个想进阶Android,学习NDK编程的小伙伴问我说看了不少网上的视频教程,大多数的主题都是讲JNI的方法签名、JNI线程绑定、JNI调用Java方法等主要的内容。自己在练习的过程中发现如果需要重复利用一个C或者C++的对象时就不知道怎么处理了。其实这就是Java对象如何保存Native对象的一个问题而已。听了这个朋友的疑问,我翻了下网上关于NDK的视频教程,确实是很多教程都没有介绍Java对象如何复用一个Native对象。但是这又是一个在NDK实战中必然会碰到的一个关键点。有道是老师带入原创 2021-03-29 10:03:58 · 292 阅读 · 0 评论