03 Andorid NDK
Android NDK详解,包括:C、C++、JNI、Linux、音视频(FFmpeg、WebRTC)、OpenCV、OpenGL等
傅晨明
毕业于杭州电子科技大学
展开
-
FFmpeg和RTMP结合编译
参考:FFmpeg下载librtmp的github新建MyFFmpeg4目录mkdir MyFFmpeg4下载 ffmpeg-4.2.2wget https://ffmpeg.org/releases/ffmpeg-4.2.2.tar.bz2解压缩tar -xvf ffmpeg-4.2.2.tar.bz2原创 2020-04-12 22:56:15 · 1513 阅读 · 1 评论 -
Android ndk cmake学习
文章目录创建Native C++项目添加过滤cmake打印日志添加动态库添加静态库参考:安卓项目中so库选择(ndk abiFilters设置,armeabi,armeabi-v7a,arm64-v8a)Android Studio 中的 CMake message 输出位置在哪里?Android Studio之动态库路径重定向cmake之 ADD_LIBRARY()Android C...原创 2020-04-12 01:13:43 · 196 阅读 · 0 评论 -
FFmpeg的编译详解
help参数,进行必要性说明:[root@VM_0_4_centos ffmpeg-4.2.1]# ./configure --helpUsage: configure [options]Options: [defaults in brackets after descriptions]Help options: --help print thi...原创 2020-03-31 23:39:13 · 1066 阅读 · 0 评论 -
Android mk方式使用动态库和静态库
centos ndk下载和编译动态库 静态库Mac使用iTerm2 rz sz和腾讯云互传文件将libget.a 和 libget.so 添加到ndkdir目录中,并创建Android.mk文件配置build.gradle externalNativeBuild { ndkBuild { abiFilters 'armeabi-...原创 2020-03-31 22:00:25 · 3623 阅读 · 0 评论 -
Mac使用iTerm2 rz sz和腾讯云互传文件
参考:Mac osx 下安装iTerm2,并使用rz sz上传下载(附homebrew配置)解决在Mac下iTerm2终端使用sz和rz命令报错问题在Mac 连接腾讯云中我们实现了使用iTerm2连接腾讯云服务器,接下来使用iTerm2实现腾讯云和本地mac互传文件。安装iTerm2建议去官网下载 http://www.iterm2.com/如果下载不了也可以百度云链接下载,链接:ht...原创 2020-03-30 10:41:08 · 1008 阅读 · 0 评论 -
centos ndk下载和编译动态库 静态库
vim get.h#include<stdio.h>int get();vim get.c#include"get.h"int get(){ return 9587;}export NDK_GCC_arm="/root/ndk/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linu...原创 2020-03-29 17:38:40 · 545 阅读 · 0 评论 -
Android JNI线程操作
线程简单实现void *customThread(void *pVoid) { for (int i = 0; i < 30; ++i) { __android_log_print(ANDROID_LOG_DEBUG, "hongx", "%d : ", i); }}extern "C"JNIEXPORT void JNICALLJava_co...原创 2020-03-27 16:00:53 · 252 阅读 · 0 评论 -
Android JNI动态注册
// 下面是动态注册JavaVM * jvm;void register01(JNIEnv * env, jobject instance, jstring text) { const char * textValue = env->GetStringUTFChars(text, NULL); __android_log_print(ANDROID_LOG_DEBU...原创 2020-03-26 22:40:14 · 154 阅读 · 0 评论 -
Android JNI Java构造方法的实例化和引用类型
首先Dog类,添加构造方法,使构造方法被C++中直接实例化添加两个按钮在MainActivity中定义两个native方法testDog和testUnDog,两个按钮点击分别调用这两个方法全局引用 和 构造方法实例化:使用NewGlobalRef来定义dogClass为全局引用。如果不设置为全局引用,会隐式释放 dogClass , dogClass不为NULL 但 悬空,所以再...原创 2020-03-26 21:18:30 · 375 阅读 · 0 评论 -
Android JNI对象的深入
Android JNI使用入门中实现了C++中操作Java的Student对象,接下来再看一个操作对象的示例。上面代码中,我们没有传入Person和Student对象,而是通过反射的方式获取这两个对象。输出日志如下:testObject的完整代码如下:extern "C"JNIEXPORT void JNICALLJava_com_hongx_jni_MainActivity_...原创 2020-03-26 14:17:54 · 155 阅读 · 0 评论 -
Android JNI使用入门
文章目录Java调用C++C++调用Javajavap -s 获取方法签名参考:Java与CC++交互JNI编程AndroidStudio使用JNI实现Log日志 中我们实现了一个简单的 Java调用C++的方法 的示例,接下里实现较复杂的Java与C++的交互。Java调用C++在MainActivity.java中定义了native方法addTest01,并调用该方法传入对应的值,如下...原创 2020-03-26 11:31:56 · 415 阅读 · 0 评论 -
AndroidStudio使用JNI实现Log日志
参考:C 语言 define 变参__VA_ARGS__使用AndroidStudio创建JNI方法实现了AndroidStudio创建JNI方法,接下来要实现Log日志打印功能。然后在MainActivity中调用native方法test01:运行后打印:__android_log_print 和 ANDROID_LOG_DEBUG可以进入log.h中查看,如下:...原创 2020-03-25 22:37:18 · 1244 阅读 · 0 评论 -
AndroidStudio创建JNI方法
新建Native C++项目在MainActivity.java 中添加test01方法1 老方式创建jni方法选择java目录,右键-> Open in Terminal在命令行输入以下语句:javah com.hongx.jni.MainActivity查看生成如下文件:2 新方式创建jni方法选中test01方法名,然后使用代码提示 option + ente...原创 2020-03-25 10:19:24 · 1940 阅读 · 0 评论 -
Android NDK AS模拟main入口
新建studyCpp包,然后在CMakeLists.txt中引入studyCpp包下所有文件,如下:file(GLOB sourceFiles studyCpp/*.h studyCpp/*.cpp studyCpp/*.c)#file(GLOB sourceFiles logCpp/*.h logCpp/*.cpp logCpp/*.c)add_library( # Sets the ...原创 2020-03-23 11:40:16 · 285 阅读 · 0 评论 -
Mac下AndroidStduio安装NDK和使用
安装ndk和cmake:安装cmake插件:新建项目,选择Native C++在项目中引入ndk目录原创 2020-03-22 23:36:22 · 3731 阅读 · 0 评论 -
FFmpeg基础知识
基础知识文章目录基础知识为什么需要压缩为什么可以压缩视频编码格式音频编码格式封装格式流媒体协议YUV简介H.264 I,P,B帧和PTS,DTSFFmpeg核心模块为什么需要压缩● 未经压缩的数字视频的数据量巨大● 存储困难● 传输困难为什么可以压缩● 去除冗余信息空间冗余:图像相邻像素之间有较强的相关性时间冗余:视频序列的相邻图像之间内容相似 编码冗余:不同像素值出现的...原创 2019-10-12 13:08:20 · 235 阅读 · 0 评论 -
c指针、函数、预处理器
指针、函数、预处理器文章目录指针、函数、预处理器1、指针解引用指针运算数组和指针const char *, char const *, char * const,char const * const多级指针多级指针的意义2、函数函数的位置函数参数传值调用引用调用可变参数函数指针3、预处理器常用预处理器宏1、指针指针是一个变量,其值为地址。声明指针或者不再使用后都要将其置为0 (NULL)...原创 2019-09-25 17:06:41 · 134 阅读 · 0 评论 -
结构体、共用体与C++基础
结构体、共用体与C++基础文章目录结构体、共用体与C++基础1、结构体字节对齐2、共用体3、C++输出函数符号兼容引用字符串C字符串字符串操作C++ string类命名空间1、结构体结构体是C编程中一种用户自定义的数据类型,类似于Java的JavaBean//Student 相当于类名//student和a 可以不定义,表示结构变量,也就Student类型的变量struct Stu...原创 2019-09-27 10:57:57 · 150 阅读 · 0 评论 -
cpp面向对象编程
面向对象编程文章目录面向对象编程类常量函数友元友元函数友元类静态成员重载函数函数重载操作符重载继承多态虚函数模板函数模板类模板(泛型类)类C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核心特性,用户定义的类型。class Student { int i; //默认 privatepublic: Student(int i,in...原创 2019-09-29 22:08:14 · 348 阅读 · 0 评论 -
C++容器、类型转换、异常与文件流操作
C++容器、类型转换、异常与文件流操作文章目录C++容器、类型转换、异常与文件流操作容器序列式容器/顺序容器向量(vector)列表 (list)双端队列(deque)栈(stack)队列(queue)优先队列(priority_queue )关联式容器集合(set)键值对(map)红黑树类型转换const_caststatic_castdynamic_castreinterpret_castc...原创 2019-10-08 08:41:59 · 287 阅读 · 0 评论 -
C++多线程与智能指针
C++线程与智能指针文章目录C++线程与智能指针线程C++11线程POSIX线程线程属性分离线程调度策略与优先级线程同步条件变量智能指针shared_ptrweak_ptrunique_ptr自定义智能指针部分C++11、14特性nullptr类型推导基于范围的 for 循环Lambda作业(后面FFmpeg直播播放器课程的队列工具类)线程线程,有时被称为轻量进程,是程序执行的最小单元。...原创 2019-10-08 09:12:01 · 1571 阅读 · 0 评论 -
Java与CC++交互JNI编程
JNI编程文章目录JNI编程第一个JNI程序JNI数据类型C/C++反射Java反射方法反射属性JNI引用局部引用全局引用弱引用JNI_OnLoad动态注册native线程调用JavaJNI是一种本地编程接口。它允许运行在JAVA虚拟机中的JAVA代码和用其他编程语言,诸如C语言、C++、汇编,写的应用和库之间的交互操作。第一个JNI程序#引入jni头文件支持include_dire...原创 2019-10-08 13:30:24 · 187 阅读 · 0 评论 -
JNI线程、Linux常用指令、权限、防火墙
Linux 文件权限、VIM、防火墙文章目录Linux 文件权限、VIM、防火墙SSH连接环境变量权限更改文件所属更改文件权限su和sudo包管理器VI/VIMiptables防火墙CentOS vs Ubuntu: Which one is better for a serverhttps://linux.cn/article-8141-1.htmlSSH连接无论是mac还是wi...原创 2019-10-10 08:01:24 · 218 阅读 · 0 评论 -
cc++编译器配置(交叉编译重要参数)与makefile
编译器与Makefile文章目录编译器与Makefilegcc/g++/clangclanggccg++编译器过程Makefile什么是MakefileMakefile规则变量include文件搜索其他预定义变量自动变量条件语句输出信息Android.mkApplication.mkgcc/g++/clang了解c/c++编译器的基本使用,能够在后续移植第三方框架进行交叉编译时,清楚的了解...原创 2019-10-10 08:03:19 · 2071 阅读 · 0 评论 -
Android.mk与Cmake配置
CMake基本配置与注意事项文章目录CMake基本配置与注意事项CMake5.0及以下与6.0及以上的注意事项:Android.mkCMakeCMake 在android studio 2.2及以上,构建原生库的默认工具是 CMake。 CMake是一个跨平台的构建工具,可以用简单的语句来描述所有平台的安装(编译过程)。能够输出各种各样的makefile或者project文件。Cmak...原创 2019-10-10 08:05:12 · 3863 阅读 · 0 评论 -
生成Android可执行文件命令笔记
export CC=/Volumes/Docment/soft/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc export AAA="--sysroot=/Volumes/Docment/soft/android-ndk-r...原创 2019-10-10 13:53:09 · 776 阅读 · 1 评论 -
Shell 脚本
Shell Script文章目录Shell Script变量、字符串、数组与注释传参运算符流程控制函数与输出重定向Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。Shell Script(Shell脚本)是一种为Shell编写的脚本程序。Linux的Shell(程序)种类很多,常见的有:Bourne Shell (/us...原创 2019-10-11 14:51:48 · 95 阅读 · 0 评论 -
FFmpeg交叉编译
FFmpegndk最新的发布版是r17,如果只能找到r16的下载地址,那只要把这个地址中的16改成17就可以了https://baike.baidu.com/item/ffmpeg/2665727?fr=aladdinFFmpeg是一个开源的音视频处理程序,也可以把它看成一个用于处理音视频的库。如果需要在Android中使用这个库,那就需要进行交叉编译。从官网下载FFmpeg的源码:...原创 2019-10-11 14:53:08 · 1107 阅读 · 1 评论 -
c初探:数据类型、数组、内存布局、指针
c初探:数据类型、数组、内存布局、指针windows命令行 (可以不用搭理这里,在Linux玩就行)Windows C/C++编译器: https://sourceforge.net/projects/mingw/files/配置环境变量 PATH: ${MinGW安装目录}/MinGW/binc与c++C语言是一门通用计算机编程语言,广泛应用于底层开发。c语句是面向过程...原创 2019-09-25 13:37:32 · 183 阅读 · 0 评论