图书目录

  

  

  

  

       

教学课件(PPT)    本书源码??????

  

基  础  篇

第1章  NDK入门基础( 60min) 3

1.1  NDK的概念 3

1.1.1  JNI的基础概念 3

1.1.2  NDK的使用场景 4

1.1.3  NDK的学习方法 4

1.1.4  开发资料 5

1.2  编译概念 5

1.2.1  动态库 5

1.2.2  静态库 18

1.2.3  静态库和动态库的使用场景 21

1.2.4  交叉编译 21

1.2.5  预编译库 22

1.2.6  预编译库和源码编译库的区别 23

1.3  CPU指令集和ABI 24

1.3.1  CPU指令集 25

1.3.2  ABI 25

1.4  CMake概念 27

1.4.1  CMake介绍 27

1.4.2  选择CMake的原因 28

1.5  NDK目录介绍 29

1.6  本章小结 31

第2章  环境搭建( 41min) 32

2.1  Ubuntu环境搭建 32

2.1.1  Ubuntu虚拟机安装 32

2.1.2  独立NDK环境配置 48

2.2  集成NDK环境搭建之Android Studio 52

2.3  本章小结 56

第3章  NDK开发场景( 57min) 57

3.1  NDK开发实际集成源码的场景 57

3.1.1  使用Android Studio源码直接集成 57

3.1.2  使用命令编译出符合平台相关的预编译库 65

3.1.3  使用Android Studio 直接集成预编译库 70

3.1.4  使用开源代码原始的方式交叉编译FFmpeg 77

3.1.5  Neon 86

3.2  本章小结 88

第4章  CMake开发基础( 72min) 89

4.1  CMake的基础使用 89

4.1.1  日志打印方法 89

4.1.2  流程控制 90

4.1.3  目标生成与链接 95

4.1.4  CMake设置库的输出路径 96

4.1.5  CMake如何包含头文件 97

4.1.6  CMake如何包含源文件列表及包含所有源文件语法 98

4.2  CMake多模块场景 99

4.2.1  多CMake应用场景 99

4.2.2  多CMake的实际使用案例 100

4.3  本章小结 104

第5章  NDK开发常用的数据类型及使用方法( 67min) 105

5.1  基础类型说明 105

5.2  引用类型说明 106

5.2.1  C语言下的引用类型 106

5.2.2  C++语言下的引用类型 107

5.3  UTF-8和UTF-16字符串 108

5.4  常用数据类型操作函数的使用 109

5.4.1  String字符串的使用 109

5.4.2  数组操作 111

5.5  本章小结 116

第6章  NDK开发核心知识点( 51min) 117

6.1  JavaVM 117

6.2  JNIEnv 119

6.3  全局引用和局部引用 120

6.3.1  局部引用 120

6.3.2  全局引用 122

6.3.3  弱全局引用 124

6.3.4  JNI_OnLoad 126

6.3.5  JNI_OnUnload 127

第7章  NDK开发关键函数( 163min) 128

7.1  函数操作基础 128

7.1.1  函数签名 128

7.1.2  jclass 133

7.1.3  jmethodID 135

7.2  调用Java端的函数 136

7.2.1  Native调用Java端成员函数 137

7.2.2  Native调用Java端的静态函数 140

7.3  Linux线程使用方法 141

7.3.1  线程的创建函数pthread_create 141

7.3.2  获取线程ID函数pthread_self 142

7.3.3  线程退出函数pthread_exit 143

7.3.4  线程资源回收函数pthread_join 147

7.3.5  线程终止函数pthread_cancel 149

7.3.6  线程分离函数pthread_detach 153

7.3.7  线程属性pthread_attr_t 155

7.3.8  小结 158

7.4  原生线程中获取JNIEnv 158

7.5  本章小结 162

第8章  NDK开发函数注册方式( 32min) 163

8.1  函数的静态注册方式 163

8.2  函数的动态注册方式 164

8.2.1  JNINativeMethod 164

8.2.2  RegisterNatives和UnregisterNatives函数 165

8.2.3  示例 165

8.3  静态注册和动态注册的优缺点及使用场景 167

8.3.1  静态注册的优缺点及使用场景 167

8.3.2  动态注册的优缺点和使用场景 168

8.3.3  小结 168

8.4  本章小结 168

实  战  篇

第9章  NDK开发之大量数据传输( 79min) 171

9.1  DirectByteBuffer简单介绍 171

9.2  DirectByteBuffer的使用方法 172

9.2.1  创建DirectByteBuffer 172

9.2.2  DirectByteBuffer API使用 172

9.3  DirectByteBuffer的使用场景 177

9.3.1  大数据量的IO密集型操作 177

9.3.2  长期使用的数据 177

9.3.3  对内存管理有特殊要求的场景 177

9.3.4  需要直接访问操作系统内存资源的场景 177

9.4  DirectByteBuffer的使用案例 177

第10章  NDK开发之opus开源库开发案例( 70min) 181

10.1  开源库opus源码封装 182

10.1.1  opus预编译库的编译与集成 183

10.1.2  opus库的基本使用 187

10.1.3  opus库的封装 190

10.2  使用opus开发PTT语音通话案例 192

10.2.1  UI开发 192

10.2.2  编解码及网络接口封装 198

10.2.3  录音功能实现 207

10.2.4  播放功能实现 210

10.3  本章小结 212

第11章  NDK开发调试( 80min) 213

11.1  使用Android Studio调试Native代码 213

11.1.1  启用调试功能 213

11.1.2  开始调试 214

11.2  问题跟踪 225

11.2.1  Native函数返回值崩溃 225

11.2.2  动态库Debug版本和Release版本的区别 226

11.2.3  如何快速定位Native崩溃 227

11.3  本章小结 231

第12章  线上崩溃Log捕获( 31min) 232

12.1  使用谷歌开源库捕获崩溃信息 232

12.1.1  转储文件 232

12.1.2  平台支持 233

12.1.3  工作过程 233

12.1.4  Breakpad封装 233

12.2  线上崩溃信息捕获的注意事项 243

第13章  NDK开发推荐做法( 14min) 245

13.1  数据传递 245

13.1.1  减少跨层传递次数 245

13.1.2  减少数据转换 245

13.1.3  设计高效接口 246

13.1.4  综合考虑性能和资源管理 246

13.1.5  尽量避免跨层异步通信 246

13.2  JNI线程使用时的注意事项 246

13.3  JNI接口开发建议 246

13.4  动态库瘦身 247

参考文献 248

  

VI

VII