《Android C++高级编程 使用NDK》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:(美)辛纳著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2014
  • ISBN:9787302343011
  • 页数:344 页
图书介绍:本书介绍了在主流操作系统安装Android本地开发环境;使用Eclipse IDE开发本地代码;使用JNI将本地代码连接到Java环境;使用SWIG自动生成JNI代码;使用POSIX和Java县城开发多线程本地应用;使用POSIX Socket开发联网本地应用;通过Logging、GDB和Eclipse Debugger调试本地代码;通过Valgrind分析内存问题;通过GProf度量应用性能;通过SIMD/NEON优化本地代码。

第1章 Android平台上的C+入门 1

1.1 Microsoft Windows 1

1.1.1在Windows平台上下载并安装JDK开发包 2

1.1.2在Windows平台上下载并安装Apache ANT 5

1.1.3在Windows平台上下载并安装Android SDK 7

1.1.4在Windows平台上下载并安装Cygwin 8

1.1.5在Windows平台上下载并 安装Android NDK 11

1.1.6在Windows平台上下载并安装Eclipse 13

1.2 Apple Mac OS X 14

1.2.1在Mac平台上安装Xcode 14

1.2.2验证Mac平台的Java开发包 15

1.2.3验证Mac平台上的Apache ANT 15

1.2.4验证GNU Make 16

1.2.5在Mac平台上下载并安装Android SDK 16

1.2.6在Mac平台上下载并安装Android NDK 18

1.2.7在Mac平台上下载并安装Eclipse 19

1.3 Ubuntu Linux 20

1.3.1检查GNU C库版本 20

1.3.2激活在64位系统上支持32位的功能 21

1.3.3在Linux平台上下载并安装Java开发工具包(JDK) 21

1.3.4在Linux平台上下载并安装Apache ANT 22

1.3.5在Linux平台上下载并安装GNU Make 22

1.3.6在Linux平台上下载并安装Android SDK 23

1.3.7在Linux平台上下载并安装Android NDK 24

1.3.8在Linux平台上下载并安装Eclipse 25

1.4下载并安装ADT 26

1.4.1安装Android平台包 29

1.4.2配置模拟器 30

1.5小结 33

第2章 深入了解Android NDK 35

2.1 Android NDK提供的组件 35

2.2 Android NDK的结构 36

2.3以一个示例开始 36

2.3.1指定Android NDK的位置 37

2.3.2导入示例项目 37

2.3.3向项目中添加原生支持 39

2.3.4运行项目 40

2.3.5用命令行对项目进行构建 41

2.3.6检测Android NDK项目的结构 42

2.4构建系统 42

2.4.1 Android.mk 43

2.4.2 Application.mk 53

2.5使用NDK-Build脚本 54

2.6排除构建系统故障 55

2.7小结 56

第3章用JNI实现与原生代码通信 57

3.1什么是JNI 57

3.2以一个示例开始 57

3.2.1原生方法的声明 58

3.2.2加载共享库 58

3.2.3实现原生方法 59

3.3数据类型 64

3.3.1基本数据类型 64

3.3.2引用类型 64

3.4对引用数据类型的操作 65

3.4.1字符串操作 65

3.4.2数组操作 67

3.4.3 NIO操作 68

3.4.4访问域 69

3.4.5调用方法 71

3.4.6域和方法描述符 72

3.5异常处理 75

3.5.1捕获异常 75

3.5.2抛出异常 75

3.6局部和全局引用 76

3.6.1局部引用 76

3.6.2全局引用 76

3.6.3弱全局引用 77

3.7线程 78

3.7.1同步 78

3.7.2原生线程 79

3.8小结 79

第4章 使用SWIG自动生成JNI代码 81

4.1什么是SWIG 81

4.2安装 82

4.2.1 Windows平台上SWIG的安装 82

4.2.2在Mac OS X下安装 83

4.2.3在Ubuntu Linux下安装 85

4.3通过示例程序试用SWIG 86

4.3.1接口文件 86

4.3.2在命令行方式下调用SWIG 89

4.3.3将SWIG集成到Android构建过程中 90

4.3.4更新Activity 92

4.3.5执行应用程序 93

4.3.6剖析生成的代码 93

4.4封装C语言代码 94

4.4.1全局变量 94

4.4.2常量 95

4.4.3只读变量 96

4.4.4枚举 97

4.4.5结构体 100

4.4.6指针 101

4.5封装C++代码 101

4.5.1指针、引用和值 102

4.5.2默认参数 103

4.5.3重载函数 104

4.5.4类 104

4.6异常处理 106

4.7内存管理 107

4.8从原生代码中调用Java 108

4.8.1异步通信 108

4.8.2启用Directors 109

4.8.3启用RTTI 109

4.8.4重写回调方法 109

4.8.5更新HelloJni Activity 110

4.9小结 110

第5章 日志、调试及故障处理 111

5.1日志 111

5.1.1框架 111

5.1.2原生日志API 112

5.1.3受控制的日志 114

5.1.4控制台日志 118

5.2调试 119

5.2.1预备知识 119

5.2.2调试会话建立 120

5.2.3建立调试示例 121

5.2.4启动调试器 121

5.3故障处理 126

5.3.1堆栈跟踪分析 127

5.3.2对JNI的扩展检查 128

5.3.3内存问题 130

5.3.4 strace 133

5.4小结 134

第6章 Bionic API入门 135

6.1回顾标准库 135

6.2还有另一个C库 136

6.2.1二进制兼容性 136

6.2.2提供了什么 136

6.2.3缺什么 137

6.3内存管理 137

6.3.1内存分配 137

6.3.2 C语言的动态内存管理 138

6.3.3 C+++的动态内存管理 139

6.4标准文件I/O 141

6.4.1标准流 141

6.4.2使用流I/O 141

6.4.3打开流 142

6.4.4写入流 143

6.4.5流的读取 145

6.4.6搜索位置 148

6.4.7错误检查 149

6.4.8关闭流 149

6.5与进程交互 150

6.5.1执行shell命令 150

6.5.2与子进程通信 150

6.6系统配置 151

6.6.1通过名称获取系统属性值 152

6.6.2通过名称获取系统属性 152

6.7用户和组 153

6.7.1获取应用程序用户和组ID 153

6.7.2获取应用程序用户名 154

6.8进程间通信 154

6.9小结 154

第7章 原生线程 155

7.1创建线程示例项目 155

7.1.1创建Android项目 155

7.1.2添加原生支持 157

7.1.3声明字符串资源 157

7.1.4创建简单的用户界面 157

7.1.5实现Main Activity 159

7.1.6生成C/C+++头文件 162

7.1.7实现原生函数 163

7.1.8更新Android.mk构建脚本 165

7.2 Java线程 165

7.2.1修改示例应用程序使之能够使用Java线程 165

7.2.2执行Java Threads示例 166

7.2.3原生代码使用Java线程的优缺点 167

7.3 POSIX线程 168

7.3.1在原生代码中使用POSIX线程 168

7.3.2用pthread_create创建线程 168

7.3.3更新示例应用程序以使用POSIX线程 169

7.3.4执行POSIX线程示例 174

7.4从POSIX线程返回结果 174

7.5 POSIX线程同步 176

7.5.1用互斥锁同步POSIX线程 176

7.5.2使用信号量同步POSIX线程 180

7.6 POSIX线程的优先级和调度策略 180

7.6.1 POSIX的线程调度策略 181

7.6.2 POSIX Thread优先级 181

7.7小结 181

第8章 POSIX Socket API:面向连接的通信 183

8.1 Echo Socket示例应用 183

8.1.1 Echo Android应用项目 184

8.1.2抽象echo activity 184

8.1.3 echo应用程序字符串资源 188

8.1.4原生echo模块 188

8.2用TCP sockets实现面向连接的通信 191

8.2.1 Echo Server Activity的布局 192

8.2.2 Echo Server Activity 193

8.2.3实现原生TCP Server 194

8.2.4 Echo客户端Activity布局 206

8.2.5 Echo客户端Activity 208

8.2.6实现原生TCP客户端 210

8.2.7更新Android Manifest 213

8.2.8运行TCP Sockets示例 214

8.3小结 217

第9章 POSIX Socket API:无连接的通信 219

9.1将UDP Server方法添加到Echo Server Activity中 219

9.2实现原生UDP Server 220

9.2.1创建UDP Socket: socket 220

9.2.2从Socket接收数据报:recvfrom 221

9.2.3向Socket发送数据报:sendto 223

9.2.4原生UDP Server方法 224

9.3将原生UDP Client方法加入 Echo Client Activity中 225

9.4实现原生UDP Client 226

9.5运行UDP Sockets示例 228

9.5.1连通UDP的模拟器 228

9.5.2启动Echo UDP Client 229

9.6小结 229

第10章 POSIX Socket API:本地通信 231

10.1 Echo Local Activity布局 231

10.2 Echo Local Activity 232

10.3实现原生本地Socketet Server 237

10.3.1创建本地Socket: socket 237

10.3.2将本地socket与Name绑定:bind 238

10.3.3接受本地Socket: accept 240

10.3.4原生本地Socket Server 240

10.4将本地Echo Activity添加到 Manifest中 242

10.5运行本地Sockets示例 243

10.6异步I/O 243

10.7小结 244

第11章 支持C+ 245

11.1支持的C++运行库 245

11.1.1 GAbi+++C+++运行库 246

11.1.2 STLport C+++运行库 246

11.1.3 GNU STL C+++运行库 246

11.2指定C++运行库 246

11.3静态运行库与动态运行库 247

11.4 C++异常支持 247

11.5 C++ RTTI支持 248

11.6 C++标准库入门 249

11.6.1容器 249

11.6.2迭代器 250

11.6.3算法 251

11.7 C++运行库的线程安全 251

11.8 C++运行库调试模式 251

11.8.1 GNU STL调试模式 251

11.8.2 STLport调试模式 252

11.9小结 253

第12章 原生图形API 255

12.1原生图形API的可用性 255

12.2创建一个AVI视频播放器 256

12.2.1将AVILib作为NDK的一个导入模块 256

12.2.2创建AVI播放器Android应用程序 258

12.2.3创建AVI Player的 Main Activity 258

12.2.4创建Abstract Player Activity 262

12.3使用JNI图形API进行渲染 269

12.3.1启用JNI Graphics API 269

12.3.2使用JNI Graphics API 270

12.3.3用Bitmap渲染来更新AVI Player 271

12.3.4运行使用Bitmap渲染的AVI Player 278

12.4使用OpenGL ES渲染 279

12.4.1使用OpenGL ES API 279

12.4.2启用OpenGL ES 1.x API 279

12.4.3启用OpenGL ES 2.0 API 280

12.4.4用OpenGL ES渲染来更新AVI Player 280

12.5使用原生Window API进行渲染 290

12.5.1启用原生Window API 290

12.5.2使用原生Window API 291

12.5.3用原生window渲染器来更新AVI Player 293

12.5.4 EGL图形库 301

12.6小结 301

第13章 原生音频API 303

13.1使用OpenSL ES API 303

13.1.1与OpenSL ES标准的兼容性 304

13.1.2音频许可 304

13.2创建WAVE音频播放器 304

13.2.1将WAVELib作为NDK导入模块 304

13.2.2创建WAVE播放器 Android应用程序 306

13.2.3创建WAVE播放器主Activity 306

13.2.4实现WAVE Aduio播放 310

13.3运行WAVE Audio Player 327

13.4小结 328

第14章 程序概要分析和NEON优化 329

14.1用GNU Profiler度量性能 329

14.1.1安装Android NDK Profrile 329

14.1.2启用Android NDK Profriler 330

14.1.3使用GNU Profriler分析 gmon.out文件 331

14.2使用ARM NEON Intrinsics进行优化 332

14.2.1 ARM NEON技术概述 333

14.2.2给AVI Player添加一个亮度过滤器 333

14.2.3为 AVI播放器启用Android NDK Profiler 336

14.2.4 AVI Player程序概要分析 337

14.2.5使用NEON Intrinsics优化Brightness Filter 338

14.3自动向量化 342

14.3.1启用自动向量化 343

14.3.2自动向量化问题的发现和排除 344

14.4小结 344