Android C++高级编程

Android C++高级编程 pdf epub mobi txt 电子书 下载 2026

出版者:清华大学出版社
作者:辛纳 (Onur Cinar)
出品人:
页数:344
译者:于红
出版时间:2014-1-1
价格:CNY 59.80
装帧:平装
isbn号码:9787302343011
丛书系列:
图书标签:
  • Android
  • NDK
  • c++
  • 计算机
  • android
  • 程序设计
  • 手机开发
  • 音视频
  • Android
  • C++
  • NDK
  • Native
  • 开发
  • 编程
  • 高级
  • 性能优化
  • JNI
  • 内存管理
  • 多线程
想要找书就要到 小哈图书下载中心
立刻按 ctrl+D收藏本页
你会得到大惊喜!!

具体描述

作者简介

Onur Cinar有超过17年的移动和通信领域大规模复杂软件项目的设计、开发和管理经验。他的专业技能包括VoIP、视频通信、移动应用程序、网格计算和不同平台上的网络技术。从Android平台问世他就一直积极从事这方面的工作。他是Apress出版的Android Apps with Eclipse一书的作者。他在美国宾州费城Drexel大学获得计算机科学理学学士学位。现就职于微软Skype分部,任Android平台的Skype客户端高级产品工程经理。

目录信息

第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 实现原生本地Socket 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 Profiler 329
14.1.2 启用Android NDK Profiler 330
14.1.3 使用GNU Profiler分析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
· · · · · · (收起)

读后感

评分

评分

评分

评分

评分

用户评价

评分

从一个更注重代码可维护性和架构设计的角度来看,我更看重这本书如何处理大型C++项目的工程化问题。一个“高级”项目必然涉及到复杂的模块依赖、清晰的接口定义以及健壮的错误处理机制。我希望这本书能超越单个功能点的实现,而是着眼于如何构建一个可扩展的C++库,并将其无缝集成到现有的Android应用工程中。例如,书中是否涵盖了如何使用CMake或Bazel来管理跨平台的C++构建系统,如何有效地集成Google Test进行单元测试,以及如何处理第三方库的依赖管理?更进一步,对于Android系统层面的兼容性,比如处理不同ABI(armeabi-v7a, arm64-v8a, x86)的差异化编译和运行时行为,这本书有没有给出清晰的指导方针?我需要的是一套完整的、可复制的工程实践蓝图,而不仅仅是零散的代码片段。

评分

这本书的封面设计真是让人眼前一亮,那种深邃的蓝色调配上简洁的白色字体,立刻就传达出一种专业、严谨的气质。我是在一个技术论坛上偶然看到有人推荐这本书的,当时正在为我们项目中遇到的一个棘手的内存泄漏问题焦头烂额。这本书的定位是“高级编程”,这对我来说简直是雪中送炭。我期待它能深入剖析C++在Android NDK环境下的内存管理机制,特别是如何有效地利用RAII(资源获取即初始化)模式来避免那些难以追踪的野指针和内存泄漏。我尤其希望看到作者能分享一些企业级应用中才会用到的性能调优技巧,比如如何利用Android Profiler结合C++代码层面的分析,找出那些隐藏在JNI调用栈深处的性能瓶颈。如果它真的能提供一些实战案例,比如如何优化一个复杂的图形渲染引擎或者一个高并发的网络模块,那这本书的价值就不可估量了。我打算立刻入手,希望它能成为我工具箱里那把最锋利的瑞士军刀。

评分

我最近一直在琢磨如何将一些核心算法用C++重写,以期获得比纯Java/Kotlin实现更高的执行效率,特别是在需要处理大量传感器数据或进行机器学习模型推理的场景下。因此,这本书关于“性能优化与底层交互”的部分对我具有致命的吸引力。我非常好奇作者是如何讲解JNI(Java Native Interface)的。很多书籍只是简单介绍了`JNIEnv`和方法签名,但我更想知道的是,如何最小化JNI的开销?有没有什么高级技巧可以批处理数据传输,减少跨语言边界的上下文切换次数?比如,使用直接缓冲区(Direct Buffers)进行大数据集的传递,或者如何设计一个健壮的C++异常处理机制,确保它能被上层Java代码安全捕获,而不是直接导致应用崩溃。如果能看到一些关于如何使用LLVM/Clang编译器优化选项,针对特定ARM架构进行代码生成优化的章节,那简直是意外之喜。

评分

最近,随着Android系统对隐私和安全要求的日益提高,我开始思考如何用C++来实现更安全的敏感数据处理模块。我迫切地希望这本书能够触及“安全性”这个话题。在C++层面如何实现内存混淆(Memory Obfuscation)来对抗逆向工程?书中是否会详细介绍如何安全地存储和加载加密密钥,避免它们在内存转储中暴露?我特别期待看到关于“沙箱化”C++模块的讨论,即如何在NDK层面隔离不信任的代码,以减少潜在的安全风险。如果作者能结合现代加密算法库(如OpenSSL或BoringSSL)在C++中的集成实践,并讨论其在移动端资源受限环境下的性能权衡,那将极大地提升这本书的实用价值。我关注的不是如何写出能运行的代码,而是如何写出既高效又坚不可摧的代码。

评分

说实话,我对市面上很多声称是“高级”的技术书籍持保留态度,它们往往只是将基础概念用更复杂的术语包装一遍,缺乏真正的深度洞察。然而,这本书的目录结构给我带来了一丝希望。我特别关注了其中关于“并发模型与线程同步”的那一章。在移动设备上,线程管理远比桌面环境复杂,不仅要考虑功耗,还要应对系统调度带来的不确定性。我希望能看到作者对C++11/14/17标准库中`<atomic>`和`<mutex>`在Android系统服务中的实际应用案例进行深度剖析,而不是停留在理论层面。例如,如何在高负载下设计一个无锁队列(Lock-Free Queue)来优化IPC通信,或者如何优雅地处理异步任务链,确保数据一致性。如果书中能提供一些基于实际Android系统源码的比较分析,比如ART虚拟机如何处理C++线程与Java线程之间的上下文切换,那就太棒了。我希望它能挑战我的现有知识边界,而不是仅仅提供一个复习手册。

评分

好棒很详细。从JNI开始讲到用libavi这个C解码库来结合surfaceview做播放器。。就差实践一下啦==

评分

比较失望,像技术手册,干货不多,当复习吧

评分

好棒很详细。从JNI开始讲到用libavi这个C解码库来结合surfaceview做播放器。。就差实践一下啦==

评分

好棒很详细。从JNI开始讲到用libavi这个C解码库来结合surfaceview做播放器。。就差实践一下啦==

评分

开始第8章

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2026 qciss.net All Rights Reserved. 小哈图书下载中心 版权所有