NDK-JNI开发
文章平均质量分 77
Session__csdn
这个作者很懒,什么都没留下…
展开
-
浅谈C中的malloc和free释放
在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用——就是 malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以写下这篇文章作为一个对知识的总结。这篇文章之所以命名中有个“浅谈”的字眼,也就是这个意思了!希望对大家有一点帮助!转载 2016-08-27 17:38:21 · 2772 阅读 · 0 评论 -
<sys/stat.h>的含义!
stat.h头文件,轻松获取文件属性以前还为了获取文件的长度,费劲从头读取一遍,一个一个字节的算。做webserver时候,发现原来stat函数可以返回一个结构,里面包括文件的全部属性。真是曲折啊。】#i ncludestat.h>int stat(const char *restrict pathname,struct stat *restrict buf);转载 2016-08-25 14:38:28 · 1120 阅读 · 0 评论 -
【重点】深入了解android平台的jni---注册native函数
注册native函数有两种方法:静态注册和动态注册。1、静态注册方法根据函数名找到对应的JNI函数:Java层调用函数时,会从对应的JNI中寻找该函数,如果没有就会报错,如果存在则会建立一个关联联系,以后在调用时会直接使用这个函数,这部分的操作由虚拟机完成。静态方法就是根据函数名来遍历java和jni函数之间的关联,而且要求jni层函数的名字必须遵循特定的格式,其缺转载 2016-08-25 14:48:31 · 929 阅读 · 0 评论 -
JNI注册调用完整过程-安卓4.4
在Android系统中,JNI方法是以C/C++语言来实现的,然后编译在一个so文件里面,以我之前的例子为例Android Studio使用JNI,调用之前要加载到当前应用程序的进程的地址空间中:static{System.loadLibrary("JniTest");}private native int Add(double num1,double num2);priv转载 2016-08-25 15:03:49 · 1341 阅读 · 0 评论 -
android 集成第三方静态库的编译方法
最近为java层将一个静态库通过jni层封装成了一个动态库工他们调用,遇到了一些编译上的疑惑,所以索性将其彻底搞清楚算了,免得以后误事。 下面的图片列出了所有相关文件,可以看到引用静态库的文件是com_xxx.cpp文件,而.a文件是放在lib目录下的libHWRecog.a,而库提供出来的头文件在include下的两个.h文件。转载 2016-08-25 15:48:30 · 1536 阅读 · 0 评论 -
FFMPEG结构体分析:AVCodec
注:写了一系列的结构体的分析的文章,在这里列一个列表:FFMPEG结构体分析:AVFrameFFMPEG结构体分析:AVFormatContextFFMPEG结构体分析:AVCodecContextFFMPEG结构体分析:AVIOContextFFMPEG结构体分析:AVCodecFFMPEG结构体转载 2016-08-25 16:03:06 · 301 阅读 · 0 评论 -
Android NDK之JNI异常处理
处理本机代码中的异常 为了处理以Java代码实现的方法执行中抛出的异常,或者是以本机代码编写的方法抛出的Java异常,JNI提供了Java异常机制的钩子程序。该机制与C/C++中常规函数实现的标准错误处理无关。JNI提供一个函数集来在本机代码中检查、分析和处理Java异常。 (1).如果一个异常已经抛出,下面的函数返回JNI_TRUE,否则返回JNI_FALSE:转载 2016-08-25 16:24:09 · 1015 阅读 · 0 评论 -
JNI官方规范中文版——如何在JNI中抛出Java异常
很多情况下,本地代码做JNI调用后都要检查是否有错误发生,本章讲的就是怎么样检查错误和处理错误。我重点放在JNI函数调用引发的错误上面。如果一个本地方法中调用了一个JNI函数,它必须遵守下面几个步骤来检查和处理这个JNI函数调用时可能引发的错误。至于其它可能的错误,比如本地代码中调用了一个可能引发错误的系统方法,那只需要按照该系统方法的标准文档中规定的来处理就可以了。6.1 概述转载 2016-08-25 16:24:53 · 1011 阅读 · 0 评论 -
JNI官方规范中文版——如何使用JNI中的global reference和local reference
JNI提供了一些实例和数组类型(jobject、jclass、jstring、jarray等)作为不透明的引用供本地代码使用。本地代码永远不会直接操作引用指向的VM内部的数据内容。要进行这些操作,必须通过使用JNI操作一个不引用来间接操作数据内容。因为只操作引用,你不必担心特定JVM中对象的存储方式等信息。这样的话,你有必要了解一下JNI中的几种不同的引用:1、 JNI支持三种引用:局部引转载 2016-08-26 13:50:06 · 565 阅读 · 0 评论 -
C语言union关键字
union 关键字的用法与struct 的用法非常类似。union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址。例子如下:union StateMachine{ char character; int number;转载 2016-08-26 14:16:26 · 494 阅读 · 0 评论 -
android之JNI参数传递 (Java方法调用)
从Java 1.1开始,Java Native Interface (JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计 的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。让我们看一些使用JNI的简单例子吧。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做转载 2016-08-26 14:23:06 · 2621 阅读 · 0 评论 -
Java学习之通过JNI调用C/C++编写的dll链接库(图文教程)
看了网上几个主要的教程,都会导致出现各种错误,对于初学者来说会造成一些困扰。在这里详细记录一下JNI调用过程。本案例的基本配置:Eclipse+VS2015,Win10 64位(1)编写Java Project打开Eclipse,新建一个Java Project,如:LearnJNI。新建包名,如:com.cogito。新建一个类TestNative。编写代码,如下:转载 2016-08-26 14:34:33 · 610 阅读 · 0 评论 -
【JNI】 Android调用JNI的进阶实例(摄像头预览数据转码RGB播放)
前一篇的博文介绍了:Android调用JNI的简单实例(附详细步骤),现在带来一个进阶版的,虽然时间隔得有点久远。这里要说下,尽量不要用Java写编解码的东西,就算你是大神,你写的出来,但那也是不实用的,就像切西瓜一样,拿一把削水果刀去切西瓜,肯定比不上用西瓜刀方便吧,还是老老实实写个JNI调用得了,也不复杂C/C++方便的很,当然,这里不是说Java不行,语言只是工具,做什么事情用什么语转载 2016-08-26 14:58:34 · 4219 阅读 · 0 评论 -
android JNI使用curl库进行文件下载和http请求
1.CURL几个基本函数的说明:1) curl_global_init();这个函数是进行curl库的初始化,这个函数与curl_global_cleanup配套使用,当调用了一次后,在没有调用curl_global_cleanup之前不要再次调用。2) curl_global_cleanup();对curl_global_init进行的一些操作进行清理。转载 2016-08-26 15:27:21 · 1820 阅读 · 0 评论 -
Android开发:安装NDK,移植OpenCV2.3.1,JNI调用OpenCV全过程
开发环境:Fedora14 , 操作中以root权限操作,这年头Android移植上OpenCV就强大了,可以做很多复杂的视频分析、图像处理工作了!如火灾、人脸、视频行为的分析等。欢迎Android OpenCV爱好者,加入OpenCV4Android联盟群:66320324。备注:yanzi一:NDK的安装 首先是安装NDK,安装之前需要安装CDT,具体的转载 2016-08-26 15:48:03 · 509 阅读 · 0 评论 -
fcntl.h头文件和unistd.h头文件
fcntl.h定义了很多宏和open,fcntl函数原型unistd.h定义了更多的函数原型 close(关闭文件)表头文件#include定义函数int close(int fd);函数说明当使用完文件后若已不再需要则可使用close()关闭该文件,二close()会让数据写回磁盘,并释放该文件所占用的资源。参数fd为先前由open()或creat()所返回的文件转载 2016-08-25 14:33:35 · 477 阅读 · 0 评论 -
编写第一个NDK程序
在上一篇文章中搭建好了Eclipse下NDK环境,现在开始NDK的开发:1、打开Eclipse,新建一个Android Project,名字就叫HelloNdk,package:org.android.code2、然后在org.android.code 包里新建一个helloNdk的Class。. 在该类中声明本地调用的方法,如下图:转载 2016-08-25 14:16:12 · 559 阅读 · 0 评论 -
视频播放器底层框架解析
存在问题:说到视频编解码,就得谈谈ffmpeg有人说vlc很强大,但是你它的基础编解码也用ffmpeg。小伙伴们问什么是ffmpeg呀?解决方案:FFmpeg是相当强大的多媒体编解码框架,在深入分析其源代码之前必须要有基本的多媒体基础知识,否则其源代码会非常晦涩难懂。本文将从介绍一些基本的多媒体只是,主要是为研读ffmpeg源代码做准备,比如一些编解码部分,只有原创 2016-08-28 21:10:36 · 1719 阅读 · 0 评论 -
Android NDK环境搭建
在Android上要想开发出高效率的软件,还是需要用到C/C++语言,要想在Java上开发C/C++语言就需要在IDE上安装NDK;在Android的官网上SDK开发环境已经包含了ADT插件,最新的Android开发IDE可以到官网下载:http://developer.android.com/sdk/index.html由于最近Android官网和google在国内经常进不去,我就把下载的放转载 2016-08-28 21:11:27 · 582 阅读 · 0 评论 -
JNI基础知识
JNI是在学习Android HAL时必须要面临一个知识点,如果你不了解它的机制,不了解它的使用方式,你会被本地代码绕的晕头转向,JNI作为一个中间语言的翻译官在运行Java代码的Android中有着重要的意义,这儿的内容比较多,也是最基本的,如果想彻底了解JNI的机制,请查看:http://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/de翻译 2016-08-28 21:20:25 · 2854 阅读 · 0 评论 -
[雷神]最简单的基于FFmpeg的移动端例子:Android 视频转码器
=====================================================最简单的基于FFmpeg的移动端例子系列文章列表:最简单的基于FFmpeg的移动端例子:Android HelloWorld最简单的基于FFmpeg的移动端例子:Android 视频解码器最简单的基于FFmpeg的移动端例子:Android 视频解码器-单个库版最简单的基于转载 2016-09-08 23:32:32 · 1935 阅读 · 0 评论 -
[雷神]图解FFMPEG打开媒体的函数avformat_open_input
=====================================================FFmpeg的库函数源代码分析文章列表:【架构图】FFmpeg源代码结构图 -解码FFmpeg源代码结构图 -编码【通用】FFmpeg源代码简单分析:av_register_all()FFmpeg源代码简单分析:avcodec_register_al转载 2016-09-08 23:33:28 · 1115 阅读 · 0 评论 -
[雷神] =总结=视音频编解码技术零基础学习方法
一直想把视音频编解码技术做一个简单的总结,可是苦于时间不充裕,一直没能完成。今天有着很大的空闲,终于可以总结一个有关视音频技术的入门教程,可以方便更多的人学习从零开始学习视音频技术。需要注意的是,本文所说的视音频技术,指的是理论层面的视音频技术,并不涉及到编程相关的东西。 0. 生活中的视音频技术平时我们打开电脑中自己存电影的目录的话,一般都会如下图所示,一大堆五花转载 2016-09-09 13:48:37 · 1794 阅读 · 1 评论 -
JNI中jstring 和char* 之间的转换方法
在java中由于是unicode编码,无论是英文字母还是汉字每个字符都是占用2个字节。但是在jni中的字符时utf-8编码,每个字符不是等长的。所以在java和jni调用的时候要注意这个问题。 下面是我在网上找到的一些把jstring和char*转换的一些sample代码: jstring to char* char* jstringTostring(JNI原创 2016-08-29 18:04:21 · 6058 阅读 · 2 评论 -
C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而转载 2016-09-11 18:35:07 · 263 阅读 · 0 评论 -
Android Studio + NDK
准备工作操作步骤新建Android工程申明native方法新建jni文件夹设置javah工具新建C源文件新建Androidmk文件新建Applicationmk文件设置ndk-build工具生成so文件修改gradle文件运行结果本文将介绍在Android Studio中使用NDK的一种简便的方法,先给出一些参考:官方文档Android NDK and转载 2016-09-12 10:36:15 · 370 阅读 · 0 评论 -
OpenCV4 --Android 环境配置【详细教程】
要想在Android使用OpenCV,那么首先得搭建好开发环境,其实搭建开发环境并不难,只要理解其中的原理就自然手到擒来。开发环境搭建好后才能大展拳脚!(之前一直是在VS中使用OpenCV,VS中的配置很简单;在Android中配置OpenCV对于刚开始接触Android和java的人来说,确实很麻烦;刚开始配置时参考的是这位大牛的文章:opencv for android 教程(环境转载 2016-09-12 10:40:50 · 1911 阅读 · 1 评论 -
eclipse里配置Android ndk环境,用eclipse编译.so文件
做Android NDK开发时,c代码需要用ndk-build来进行编译,而java代码则需要用Android sdk编译。编译c代码有两种方法:一、写好c代码后,然后用cygwin搭建ndk-build环境,用ndk-build来编译出相关的.so文件(libs目录)之后, 再用eclipse里去编译java程序,从而使用.so文件。该方法在上一篇搭建NDK环境转载 2016-08-25 14:06:21 · 1733 阅读 · 0 评论 -
Android.mk文件
NDK项目一个重要组成是它的make 文件 –android.mk. 下面部分来自网络翻译(省得我再翻译了:-).注:大部分情况只需参考HelloJni 和twoLibs 的android.mk 文件即可,如果你想搞清楚android.mk 中定义变量的具体含义,可以参考下面翻译。Android.mk文件语法详述介绍:————这篇文档是用来描述你的C或C++源文件中An转载 2016-08-25 14:07:43 · 312 阅读 · 0 评论 -
Application.mk
配合android.mk 使用的make 文件还有一个application.mk ,大部分情况无需修改该文件,下面也来自网络翻译Application.mk文件简介:—————————–要将C\C++代码编译为SO文件,光有Android.mk文件还不行,还需要一个Application.mk文件。本文档是描述你的Android应用程序中需要的本地模块的Applica转载 2016-08-25 14:10:41 · 202 阅读 · 0 评论 -
Android NDK 开发教程:调试
开发应用一个关键的步骤是调试,对于NDK的C代码调试有很多种方法,对于和Android平台相关性不大的部分代码,可以单独创建一个C/C++项目,编写测试代码,测试完成后,再编译成NDK动态库或静态库模块。使用NDK-GDB,NDK-GDB的命令行调试方法和GDB类似,网络有很多关于GDB的教程使用Eclipse+CDT+GDB调试android NDK程序 实时调试,不过这种方法设置起转载 2016-08-25 14:13:39 · 305 阅读 · 0 评论 -
ffmpeg常用基本命令
1.分离视频音频流ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流ffmpeg -i input_file -acodec copy -vn output_file_audio //分离音频流2.视频解复用ffmpeg –i test.mp4 –vcodec copy –an –f m4转载 2016-09-08 14:21:54 · 520 阅读 · 0 评论