[Cmake-Android音视频]SDK,NDK基本介绍
[Cmake-Android]音视频总结:
-
[Cmake-Android音视频]SDK,NDK基本介绍
-
[Cmake-Android音视频]NDK-r14b编译ffmpeg3.4支持neon,硬解码
-
[Cmake-Android音视频]创建支持ffmpeg3.4的项目
-
[Cmake-Android音视频]ffmpeg3.4实现解封装
-
[Cmake-Android音视频]ffmpeg3.4软硬解码和多线程解码
-
[Cmake-Android音视频]ffmpeg3.4视频格式转换和显示
-
[Cmake-Android音视频]ffmpeg3.4音频重采样
-
[Cmake-Android音视频]OpenSLES音频播放
SDK常用目录
- platform-tools:该文件夹下存放了Android平台的相关工具,比如adb.exe,sqlite3.exe等。
- platforms:不同版本的SDK
- ndk-bundle:ndk目录
- tools:Android开发,调试的工具,性能监控
- sources:当前版本的源码
NDK
Android NDK是一套允许您使用原生代码语言(例如C,C++)实现部分应用的工具集。在开发某些类型的应用时(比如音视频应用),可以重复使用以这些语言编写的代码库。
NDK常用目录(ndk-bundle)
- platforms:系统依赖库
- toolchains:交叉编译工具, gcc ,ld
交叉编译
交叉编译:就是在一个平台(如PC)上生成另一个平台(Android,Ios或者其他嵌入设备)的可执行 代码。
比如: 在x86的机器上编译出arm上的程序
在linux平台上编译arm上的程序
无论是自行安装PC上的编译器,还是下载其他平台(Android或者iOS)的交叉工具编译链,它们都会提供以下几个工具:CC、AS、AR、LD、NM、GDB。
CC:编译器,对C源文件进行编译处理,生成汇编文件。
AS:将汇编文件生成目标文件(汇编文件使用的是指令助记符,AS将它翻译成机器码)。
AR:打包器,用于库操作,可以通过该工具从一个库中删除或者增加目标代码模块。
LD:链接器,为前面生成的目标代码分配地址空间,将多个目标文件链接成一个库或者是可执行文件。
GDB:调试工具,可以对运行过程中的程序进行代码调试工作。
STRIP:以最终生成的可执行文件或者库文件作为输入,然后消除掉其中的源码。
NM:查看静态库文件中的符号表。
Objdump:查看静态库或者动态库的方法签名。
交叉编译中有两个需要注意的点:
第一:在哪个平台上运行交叉编译工具
第二:编译的程序是在哪个平台上执行
动态库:在编译的时候只把库函数的地址写到执行文件当中,在运行的时候再根据库函数的地址去加载动态链接库
静态库:在编译的时候直接把源码复制到执行文件或者库当中
应用二进制界面(ABI)
- 不同的Android手机使用不同的CPU, 因此支持不同的指令集。
- CPU与指令集的每种组合都有其自己的应用二进制界面,即ABI
ABI包含以下信息:
- CPU指令集
- 内存字节顺序
- 可执行二进制文件的格式
- 解析的各种约定。对齐限制,堆栈使用和调用函数
- 库集
支持的ABI
每个 ABI 支持一个或多个指令集。如下表:
NEON
NEON 提供标量/矢量指令和寄存器(与 FPU 共享,armeabi默认),主要用来进行浮点运算
-mfpu = vfp (浮点协处理器)
-mfpu = neon 指定是否使用neon
-march = armv7-a