第1篇 android编译篇

第1章 android系统简单介绍 2
  1.1 android系统发展历程 2
  1.2 android系统特点 4
  1.3 android系统框架 8
第2章 android源代码下载及编译 10
  2.1 android源代码下载指南 10
  2.1.1 基于repo和git的版本号管理 10
  2.1.2 android源代码下载流程 11
  2.2 原生态系统编译指南 12
    2.2.1 建立编译环境 13
    2.2.2 编译流程 15
  2.3 定制产品的编译与烧录 17
    2.3.1 定制新产品 17
    2.3.2 linux内核编译 21
    2.3.3 烧录 22
  2.4 android系统映像文件 23
    2.4.1 boot.img 23
    2.4.2 ramdisk.img 25
    2.4.3 system.img 26
  2.5 ota系统升级 26
    2.5.1 生成升级包 27
    2.5.2 获取升级包 28
    2.5.3 ota升级-recoverymode 29
  2.6 android反编译 31
第3章 android编译系统 34
  3.1 makefile入门 34
  3.2 android编译系统 35
    3.2.1 makefile依赖树的概念 36
    3.2.2 树根节点droid 36
    3.2.3 main.mk解析 38
    3.2.4 droidcore节点 39
    3.2.5 dist_files 41
    3.2.6 android.mk的编写规则 42
第2篇 android原理篇
第4章 操作系统基础 48
  4.1 计算机体系结构(computer architecture) 48
    4.1.1 冯·诺依曼结构 48
    4.1.2 哈佛结构 48
  4.2 什么是操作系统 49
  4.3 进程间通信的经典实现 51
    4.3.1 共享内存(shared memory) 52
    4.3.2 管道(pipe) 54
    4.3.3 unix domain socket 55
    4.3.4 rpc(remoteprocedure calls) 58
  4.4 同步机制的经典实现 58
    4.4.1 信号量(semaphore) 58
    4.4.2 mutex 59
    4.4.3 管程(monitor) 59
    4.4.4 同步范例 60
  4.5 android中的同步机制 61
    4.5.1 进程间同步——mutex 61
    4.5.2 条件推断——condition 62
    4.5.3 “栅栏、障碍”——barrier 64
    4.5.4 加解锁的自己主动化操作——autolock 66
  4.6 操作系统内存管理基础 66
    4.6.1 虚拟内存(virtual memory) 66
    4.6.2 内存保护(memory protection) 69
    4.6.3 内存分配与回收 69
    4.6.4 进程间通信——mmap 70
  4.7 android中的low memory killer 71
  4.8 android匿名共享内存(anonymous shared memory) 74
    4.8.1 ashmem设备 74
    4.8.2 ashmem应用实例 78
  4.9 jni 83
    4.9.1 java函数的本地实现 83
    4.9.2 本地代码訪问jvm 86
  4.10 学习android系统的两条线索 88
第5章 android进程/线程管理 89
  5.1 android进程和线程 89
  5.2 handler, messagequeue,runnable与looper 95
  5.3 ui主线程——activitythread 102
  5.4 thread类 105
    5.4.1 thread类的内部原理 105
    5.4.2 thread休眠和唤醒 106
    5.4.3 thread实例 110
  5.5 android应用程序的典型启动流程 112
第6章 进程间通信——binder 114
  6.1 智能指针 117
    6.1.1 智能指针的设计理念 117
    6.1.2 强指针sp 120
    6.1.3 弱指针wp 121
  6.2 进程间的数据传递载体——parcel 128
  6.3 binder驱动与协议 135
    6.3.1 打开binder驱动——binder_open 136
    6.3.2 binder_mmap 137
    6.3.3 binder_ioctl 140
  6.4 “dns”服务器——servicemanager(binder server) 141
    6.4.1 servicemanager的启动 141
    6.4.2 servicemanager的构建 142
    6.4.3 获取servicemanager服务——设计思考 147
    6.4.4 servicemanagerproxy 151
    6.4.5 ibinder和bpbinder 153
    6.4.6 processstate和ipcthreadstate 155
  6.5 binder客户端——binder client 185
  6.6 android接口描写叙述语言——aidl 190
  6.7 匿名binder server 202
第7章 android启动过程简析 205
  7.1 第一个系统进程(init) 205
    7.1.1 init.rc语法 205
    7.1.2 init.rc实例分析 208
  7.2 系统关键服务的启动简析 209
    7.2.1 android的“dns服务器”——servicemanager 209
    7.2.2 “孕育”新的线程和进程——zygote 209
    7.2.3 android的“系统服务”——systemserver 211
第8章 管理activity和组件执行状态的系统进程——activity managerservice (ams) 213
  8.1 ams功能概述 213
  8.2 管理当前系统中activity状态——activity stack 215
  8.3 startactivity流程 217
  8.4 完毕同一任务的“集合”——activity task 224
    8.4.1 “后进先出”——last in,first out 225
    8.4.2 管理activity task 226
第9章 gui系统之surfaceflinger 229
  9.1 opengl es与egl 229
  9.2 android的硬件接口——hal 231
  9.3 android终端显示设备的“化身”——gralloc与framebuffer 233
  9.4 android中的本地窗体 237
    9.4.1 framebuffernativewindow 239
    9.4.2 应用程序端的本地窗体——surface 245
  9.5 bufferqueue具体解释 249
    9.5.1 bufferqueue的内部原理 249
    9.5.2 bufferqueue中的缓冲区分配 252
    9.5.3 应用程序的典型画图流程 258
    9.5.4 应用程序与bufferqueue的关系 263
  9.6 surfaceflinger 267
    9.6.1 “黄油计划”——project butter 267
    9.6.2 surfaceflinger的启动 271
    9.6.3 接口的服务端——client 275
  9.7 vsync的产生和处理 279
    9.7.1 vsync信号的产生和分发 279
    9.7.2 vsync信号的处理 285
    9.7.3 handlemessagetransaction 287
    9.7.4 “界面已经过时/无效,须要又一次绘制”——handlemessageinvalidate 291
    9.7.5 合成前的准备工作——precomposition 293
    9.7.6 可见区域——rebuildlayerstacks 295
    9.7.7 为“composition”搭建好开发环境——setuphwcomposer 299
    9.7.8 dodebugflashregions 301
    9.7.9 docomposition 302
第10章 gui系统之“窗体管理员”——wms 309
  10.1 “窗体管理员”——wms综述 310
    10.1.1 wms的启动 312
    10.1.2 wms的基础功能 312
    10.1.3 wms的工作方式 313
    10.1.4 wms,ams与activity间的联系 314
  10.2 窗体属性 316
    10.2.1 窗体类型与层级 316
    10.2.2 窗体策略(window policy) 320
    10.2.3 窗体属性(layoutparams) 322
  10.3 窗体的加入过程 324
    10.3.1 系统窗体的加入过程 324
    10.3.2 activity窗体的加入过程 333
    10.3.3 窗体加入实例 337
  10.4 surface管理 340
    10.4.1 surface申请流程(relayout) 341
    10.4.2 surface的跨进程传递 344
    10.4.3 surface的业务操作 347
  10.5 performlayoutandplacesurfaceslockedinner 347
  10.6 窗体大小的计算过程 349
  10.7 启动窗体的加入与销毁 358
    10.7.1 启动窗体的加入 358
    10.7.2 启动窗体的销毁 362
  10.8 窗体动画 363
    10.8.1 窗体动画类型 364
    10.8.2 动画流程跟踪——windowstateanimator 365
    10.8.3 appwindowanimator 368
    10.8.4 动画的执行过程 370
第11章 让你的界面炫彩起来的gui系统之view体系 377
 11.1 应用程序中的view框架 377
 11.2 activity中view tree的创建过程 380
 11.3 在wms中注冊窗体 386
 11.4 viewroot的基本工作方式 388
  11.5 view tree的遍历时机 389
  11.6 view tree的遍历流程 393
  11.7 view和viewgroup属性 402
    11.7.1 view的基本属性 402
    11.7.2 viewgroup的属性 408
    11.7.3 view,viewgroup和viewparent 408
    11.7.4 callback接口 408
  11.8 “作画“工具集——canvas 411
    11.8.1 “绘制ui”——skia 412
    11.8.2 数据中介——surface.lockcanvas 413
    11.8.3 解锁并提交结果——unlockcanvasandpost 417
  11.9 draw和ondraw 417
  11.10 view中的消息传递 423
    11.10.1 view中touchevent的投递流程 423
    11.10.2 viewgoup中touchevent的投递流程 427
  11.11 view动画 430
第12章 “问渠哪得清如许,为有源头活水来”——inputmanagerservice与输入事件 436
  12.1 事件的分类 436
  12.2 事件的投递流程 439
    12.2.1 inputmanagerservice 440
    12.2.2 inputreaderthread 441
    12.2.3 inputdispatcherthread 441
    12.2.4 viewrootimpl对事件的派发 445
第13章 应用不再同质化——音频系统 447
  13.1 音频基础 448
    13.1.1 声波 448
    13.1.2 音频的录制、存储与回放 448
    13.1.3 音频採样 449
    13.1.4 nyquist–shannon採样定律 451
    13.1.5 声道和立体声 451
    13.1.6 声音定级——weber–fechner law 452
    13.1.7 音频文件格式 453
  13.2 音频框架 454
    13.2.1 linux中的音频框架 454
    13.2.2 tinyalsa 456
    13.2.3 android系统中的音频框架 457
  13.3 音频系统的核心——audioflinger 459
    13.3.1 audioflinger服务的启动和执行 460
    13.3.2 audioflinger对音频设备的管理 461
    13.3.3 playbackthread的循环主体 468
    13.3.4 audiomixer 473
  13.4 策略的制定者——audiopolicyservice 475
    13.4.1 audiopolicyservice概述 475
    13.4.2 audiopolicyservice的启动过程 477
    13.4.3 audiopolicyservice与音频设备 480
  13.5 音频流的回放——audiotrack 482
    13.5.1 audiotrack应用实例 482
    13.5.2 audiopolicyservice的路由实现 489
  13.6 音频数据流 494
    13.6.1 audiotrack中的音频流 495
    13.6.2 audiotrack和audioflinger间的数据交互 498
    13.6.3 audiomixer中的音频流 504
  13.7 音量控制 506
  13.8 音频系统的上层建筑 510
    13.8.1 从功能入手 510
    13.8.2 mediaplayer 511
    13.8.3 mediarecorder 514
    13.8.4 一个典型的多媒体录制程序 517
    13.8.5 mediarecorder源代码解析 518
    13.8.6 mediaplayerservice简析 520
 13.9 android支持的媒体格式 523
    13.9.1 音频格式 523
    13.9.2 视频格式 523
    13.9.3 图片格式 524
    13.9.4 网络流媒体 524
    13.10 id3信息简述 525
 13.11 android多媒体文件管理 528
    13.11.1 mediastore 529
    13.11.2 多媒体文件信息的存储“仓库”——mediaprovider 530
    13.11.3 多媒体文件管理中的“生产者”——mediascanner 533
第3篇 应用原理篇
第14章 intent的匹配规则 538
  14.1 intent属性 538
  14.2 intent的匹配规则 540
  14.3 intent匹配源代码简析 546
第15章 apk应用程序的资源适配 551
  15.1 资源类型 552
    15.1.1 状态颜色资源 553
    15.1.2 图形资源 554
    15.1.3 布局资源 555
    15.1.4 菜单资源 556
    15.1.5 字符串资源 556
    15.1.6 样式资源 557
    15.1.7 其它资源 558
    15.1.8 属性资源 558
  15.2 提供可选资源 561
  15.3 最佳资源的匹配流程 565
  15.4 屏幕适配 567
    15.4.1 屏幕适配的重要參数 567
    15.4.2 怎样适配多屏幕 569
第16章 android字符编码格式 572
  16.1 字符编码格式背景 572
  16.2 iso/iec 8859 573
  16.3 iso/iec 10646 573
  16.4 unicode 574
  16.5 string类型 577
    16.5.1 构建string 578
    16.5.2 string对多种编码的兼容 579
第17章 android和opengl es 583
  17.1 3d图形学基础 584
    17.1.1 计算机3d图形 584
    17.1.2 图形管线 585
  17.2 android中的opengl es简单介绍 587
  17.3 图形渲染api—egl 588
    17.3.1 egl与opengl es 588
    17.3.2 egl.cfg 588
    17.3.3 egl接口解析 590
    17.3.4 egl实例 593
  17.4 简化opengl es开发——glsurfaceview 593
第18章 “系统的ui”——systemui 601
  18.1 systemui的组成元素 601
  18.2 systemui的实现 603
  18.3 android壁纸资源——wallpaperservice 610
    18.3.1 wallpapermanagerservice 611
    18.3.2 imagewallpaper 613
第19章 android经常使用的工具“小插件”——widget机制 616
  19.1 “功能的提供者”——appwidgetprovider 616
  19.2 appwidgethost 618
第20章 android应用程序的编译和打包 624
  20.1 “另辟蹊径”採用第三方工具——ant 624
  20.2 通过命令行编译和打包apk 625
  20.3 apk编译过程具体解释 626
  20.4 信息安全基础概述 628
  20.5 应用程序签名 633
  20.6 应用程序签名源代码简析 636
第4篇 android系统工具
第21章 软件版本号管理 642
  21.1 版本号管理简述 642
  21.2 git的安装 643
    21.2.1 linux环境下安装git 643
    21.2.2 windows环境下安装git 644
  21.3 git的使用 644
    21.3.1 基础配置 644
    21.3.2 新建仓库 646
    21.3.3 文件状态 647
    21.3.4 忽略某些文件 649
    21.3.5 提交更新 649
    21.3.6 其它命令 650
  21.4 git原理简析 650
    21.4.1 分布式版本号系统的特点 651
    21.4.2 安全散列算法——sha-1 652
    21.4.3 四个重要对象 653
    21.4.4 三个区域 657
    21.4.5 分支的概念与实例 658
第22章 系统调试辅助工具 662
  22.1 万能模拟器——emulator 662
    22.1.1 qemu 662
    22.1.2 android工程中的qemu 667
    22.1.3 模拟器控制台(emulator console) 670
    22.1.4 实例:为android模拟器加入串口功能 672
  22.2 此android非彼android 674
  22.3 高速建立与模拟器或真机的通信渠道——adb 676
    22.3.1 adb的用法 676
    22.3.2 adb的组成元素 678
    22.3.3 adb源代码解析 679
    22.3.4 adb protocol 684

本书版权输出到台湾地区,《深入理解Android内核设计思想》诚挚感谢大家一直以来的支持!的更多相关文章

  1. 《深入理解Android内核设计思想》

    <深入理解Android内核设计思想> 基本信息 作者: 林学森 出版社:人民邮电出版社 ISBN:9787115348418 上架时间:2014-4-25 出版日期:2014 年5月 开 ...

  2. 《深入理解Android内核设计思想》已陆续在全国各大书店及网上书店上市,感谢大家一直以来的支持~~

    <深入理解Android内核设计思想>已陆续在全国各大书店上市,电子书店也在陆续上架中(不断添加): 1. China-Pub 2. 京东 3. s=books&ie=UTF8&a ...

  3. 透彻理解Spring事务设计思想之手写实现

    前言 事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败.事务具有4个特性:Atomicity(原子性),Consistency(一致性),Isolation(隔离性),D ...

  4. 透彻理解Spring事务设计思想之手写实现(山东数漫江湖)

    前言 事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败.事务具有4个特性:Atomicity(原子性),Consistency(一致性),Isolation(隔离性),D ...

  5. Day1:了解APICloud平台、理解APICloud应用设计思想、掌握平台使用流程。学习如何对一款APP进行需求分析、功能分解和架构设计等编码之前重要的准备工作

    学习目标 总体上了解一下APICloud平台,重点介绍相关的学习资源,入门资料,常见的FAQ等 明确我们这七天要开发一个什么样的APP,明确功能需求,跟上每天的课程节奏,可以课前预习 梳理出对于一款A ...

  6. 解决初学者学不懂android,不理解android的设计

    最近在忙着搞一个小项目,所以没有来得及写一些原创性的东西,好容易今天中秋节,就趁现在写一些吧,今天仍然看了些老马的视频,尽管这些东西以前都用过,但是感觉仍然学到了不少东西,说给大家听希望大家也要不要不 ...

  7. Big Data 應用:第二季(4~6月)台湾地区Game APP 变动分布趋势图

    图表简介: 该示意图表示了台湾地区第二季内所有Game APP类别的分布情形,经由该图表我们可以快速的了解到在这三个月内,哪类型的APP是很稳定:抑或者哪类型的APP是非常不稳定的. 名词解释: 类别 ...

  8. 《深入理解Spark:核心思想与源码分析》(前言及第1章)

    自己牺牲了7个月的周末和下班空闲时间,通过研究Spark源码和原理,总结整理的<深入理解Spark:核心思想与源码分析>一书现在已经正式出版上市,目前亚马逊.京东.当当.天猫等网站均有销售 ...

  9. 《深入理解Spark:核心思想与源码分析》(第2章)

    <深入理解Spark:核心思想与源码分析>一书前言的内容请看链接<深入理解SPARK:核心思想与源码分析>一书正式出版上市 <深入理解Spark:核心思想与源码分析> ...

随机推荐

  1. VS中C#读取app.config数据库配置字符串的三种方法(转)

    关于VS2008或VS2005中数据库配置字符串的三种取法 VS2008建立Form程序时,如果添加数据源会在配置文件 app.config中自动写入连接字符串,这个字符串将会在你利用DataSet, ...

  2. linux 短信收发

    #include <termios.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h> ...

  3. Oracle拉出在sqlserver建表的语句

    我们将Oracle数据同步到sqlserver时,是先得在sqlserver端建表的. 复杂的字段我们不同步,就仅仅考虑以下四种数据类型. Oracle到SQLServer做的映射: int -> ...

  4. web服务器优化的一些思路

    作为一个新手(并不是菜鸟,而是像我们这样的学生),维护一个网站往往是一个很头疼的问题,尤其是动态网站,更尤其是用java写的网站. 当网站的吞吐量很小的时候你会发现服务器根本不需要维护,因为几乎没有延 ...

  5. Python之修改文件MD5值

    import os def fileAppend(filename): myfile = open(filename,'a') myfile.write("####&&&am ...

  6. php -- 文件操作(创建、复制、移动、删除)

    创建 文件夹 bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $con ...

  7. 关于Bootstrap的理解

    Web开发领域存在大量的反复劳动.以创建一个菜单为例,不同的人或是同一个人在不同的时期去构建一个菜单.他创建出来的菜单格式都会存在差异:随着构件的菜单越来越多,我们会发现假设将构建菜单这件事形成一个框 ...

  8. 分页技巧_测试并继续改进分页用的QueryHelper辅助对象

    分页技巧_测试并继续改进分页用的QueryHelper辅助对象 QueryHelper.java /** * 用于辅助拼接HQL语句 */ public class QueryHelper { pri ...

  9. 编程之美 set 8 区间重合判断

    Leetcode 上有连续的两道题, 一个是 insert interval, 一个是 merge interval, 其中 insert interval 是 merge interval. 其中 ...

  10. iOS开发之-- textview 光标起始位置偏移

    使用textview的时候,会发生光标偏移的情况,其实是因为iOS7里导航栏,状态栏等有个边缘延伸的效果在. 把边缘延伸关掉就好了.代码如下 //取消iOS7的边缘延伸效果(例如导航栏,状态栏等等) ...