稀酷客

 找回密码
 加入稀酷客

只需一步,快速开始

只需一步,快速开始

[电子资料] 《深入解析Android 5.0系统》.(刘超).[PDF]@ckook

[推广链接]
立即下载
by : hwei | QQ | 发表于 2018-3-16 12:58:04 | 查看: 225|回复: 1
《深入解析Android 5.0系统》.(刘超).[PDF]@ckook Android
《深入解析Android 5.0系统》详细剖析了最新Android 5.0 系统主要框架的原理和具体实现。本书共24章,覆盖了Android 5.0 系统中、下层重要的模块,对于每个模块都详细介绍了它们的架构、原理及代码实现等各个方面,尽量让读者知其然,又知其所以然,达到学以致用的目的。主要内容为:
Android Build系统核心、Android的Bionic、系统调用的实现方法、Android的Binder、Binder应用层的核心类、Android 的JNI、Android的同步和消息机制、进程间的消息传递、Android的Init进程、Android的Zygote进程、Android的资源管理、Android的SystemServer进程、Android的应用管理、Android的组件管理、Android的多用户模式、Android的图形显示系统、Android的窗口系统、Android 的输入管理、Android的电源管理、Android的存储系统、Android的网络管理框架、Android的音频系统、Android的SELinux模块、Dalvik和ART虚拟机、Android的Recovery模块、Android的调试方法、内存泄露的分析、Android的自动化测试等系统的核心知识。
在书中尽可能详细地给出了代码的注释、各种属性和常量的解释,以及各种系统中使用的文件格式的介绍,希望读者能通过本书,获得对Android 5.0系统进行二次开发的能力,本书是进行系统开发人员的案头必备书。
《深入解析Android 5.0系统》面向的读者主要是进行系统开发的工程师,包括应用开发工程师、ROM开发工程师和各种使用Android作为开发平台的TV和可穿戴式设备(Wear)的开发工程师。本书也可以作为大专院校相关专业师生的学习用书及培训学校教材。
作译者
刘超,资深Android专家,系统架构师。曾任职于四通利方,Motorola,小米TV等多家著名公司。国内最早的Android系统开发者之一,研究Android内核多年。主持研发过天语W606,酷派W711,华为T8301等多款Android手机。

目录
第1章 建立Android系统开发环境        1
1.1 安装操作系统        1
1.1.1 安装方式的选择        1
1.1.2 下载和安装Ubuntu        1
1.1.3 使用Ubuntu遇到的问题        2
1.2 安装开发包        3
1.2.1 安装JDK 1.6        3
1.2.2 安装OpenJDK 1.7        4
1.2.3 安装编译需要的开发包        4
1.3 安装一些有用的工具        4
1.3.1 安装Android SDK        4
1.3.2 安装Android Studio        4
1.3.3 安装Source Insight        5
1.3.4 安装比较工具Meld        5
1.4 下载源码        5
1.4.1 Git and Repo简介        5
1.4.2 源码版本历史        6
1.4.3 下载Android源码        7
1.4.4 下载Kernel源码        8
第2章 Android的编译环境——
Build系统        10
2.1 Android Build系统核心        10
2.1.1 编译环境的建立        11
2.1.2 Build相关的环境变量        14
2.1.3 Build系统的层次关系        15
2.1.4 分析main.mk文件        17
2.1.5 Build系统的编译目标
介绍        20
2.1.6 分析config.mk文件        22
2.1.7 分析product_config.mk
文件        24
2.1.8 Android 5.0中的64位
编译        26
2.2 Android的产品配置文件        27
2.2.1 分析hammerhead的配置
文件        27
2.2.2 编译类型eng、user和
userdebug        31
2.2.3 产品的Image文件        32
2.2.4 如何加快编译速度        33
2.2.5 如何编译Android的
模拟器        34
2.3 编译Android的模块        34
2.3.1 模块编译变量简介        35
2.3.2 常用模块定义实例        36
2.3.3 预编译模块的目标定义        37
2.3.4 常用“LOCAL_”变量        39
2.4 Android中的签名        40
2.4.1 Android应用签名方法        41
2.4.2 Android系统签名介绍        43
2.4.3 Android签名漏洞分析        44
第3章 连接Android和Linu内核的
桥梁——Android的Bionic        46
3.1 Bionic简介        46
3.1.1 Bionic的特性        46
3.1.2 Bionic中的模块简介        49
3.2 Bionic C库中的系统调用        50
3.2.1 系统调用简介        50
3.2.2 系统调用的实现方法        51
3.3 Bionic中的内存管理函数        52
3.3.1 系统调用brk和mmap        52
3.3.2 内存分配器——dlmalloc
简介        53
3.3.3 dlmalloc函数用法指南        54
3.4 管道        57
3.4.1 匿名管道PIPE和命名
管道FIFO        57
3.4.2 匿名管道的使用方法        58
3.5 Bionic中的线程管理函数        59
3.5.1 Bionic线程函数的特性        59
3.5.2 创建线程和线程的属性        59
3.5.3 退出线程的方法        61
3.5.4 线程本地存储TLS        62
3.5.5 线程的互斥量(Mutex)
函数        63
3.5.6 线程的条件量(Condition)
函数        65
3.6 Futex同步机制        66
3.6.1 Futex的系统调用        66
3.6.2 Futex的用户态操作        67
3.6.3 Mutex类使用Futex
实现同步        68
3.7 Android的 Log模块        68
3.7.1 Android Log系统的架构        69
3.7.2 Log系统的接口和用法        70
3.7.3 Log系统的实现分析        71
3.8 可执行文件格式分析        75
3.8.1 ELF格式简介        75
3.8.2 ELF文件头格式        76
3.8.3 程序头部表        77
3.8.4 与重定位相关的“节区”的
信息——DYNAMIC段        79
3.8.5 函数的重定位过程        81
3.9 Bionic中的Linker模块        84
3.9.1 可执行程序的装载        84
3.9.2 可执行程序的初始化        85
3.9.3 Linker装载动态库        87
3.10 调试器——Ptrace和Hook API        91
3.10.1 ptrace函数简介        91
3.10.2 Hook API的原理        92
3.10.3 利用ptrace实现
Hook API        93
第4章 进程间通信——Android
的Binder        98
4.1 Binder简介        98
4.1.1 Binder对象定义        98
4.1.2 Binder的架构        99
4.1.3 组件Service和匿名
Binder服务        100
4.1.4 Binder的层次        101
4.2 如何使用Binder        102
4.2.1 使用Binder服务        102
4.2.2 Binder的混合调用        102
4.2.3 用Jave开发Binder服务        103
4.2.4 用C++开发Binder服务        104
4.3 Binder应用层的核心类        106
4.3.1 IInterface中的两个宏        106
4.3.2 Binder核心类的关系        107
4.3.3 函数asInterface的奥秘        109
4.3.4 Binder的“死亡通知”        110
4.3.5 Jave层的Binder类        111
4.4 Binder的实现原理        115
4.4.1 Binder的线程模型        115
4.4.2 Binder对象的传递        119
4.4.3 分析IPCThreadState类        122
4.5 Binder驱动        126
4.5.1 应用层和驱动的消息
协议        126
4.5.2 Binder驱动分析        129
4.5.3 Binder的内存共享机制        130
4.5.4 驱动的ioctl操作        131
4.5.5 Binder调用过程        133
4.5.6 处理传递的Binder对象        138
4.6 解析名称的模块——
ServiceManager的作用        140
4.6.1 ServiceManager的架构        141
4.6.2 ServiceManger提供
的服务        143
4.7 匿名共享内存ashmem        146
4.7.1 ashmem的作用和用法        146
4.7.2 ashmem驱动的实现原理        148
4.7.3 ashemem驱动的代码
分析        149
4.7.4 进程间传递文件描述符        152
第5章 连接Java和C/C++层的
关键——Android的JNI        154
5.1 JNI的作用        154
5.2 JNI用法介绍        154
5.2.1 从Java到C/C++        154
5.2.2 从C/C++到Java的调用        158
5.3 JNI环境        160
5.3.1 结构体JNIEnv        160
5.3.2 JNIEnv的创建和初始化        162
5.3.3 JNI中的异常处理        163
5.3.4 JNI中的引用        164
5.3.5 指明错误位置——
“CheckJNI”的作用        165
5.4 ART带来的JNI变化        165
5.4.1 垃圾回收的影响        165
5.4.2 错误处理的变化        166
5.4.3 堆栈可能引发的问题        166
第6章 Android的同步和消息机制        167
6.1 原子操作        167
6.1.1 Android的原子操作函数        167
6.1.2 原子操作的实现原理        168
6.1.3 内存屏障和编译屏障        169
6.2 Android native层的同步方法        171
6.2.1 互斥体Mutex和自动锁
Autolock        171
6.2.2 解决线程同步——条件
类Condition        173
6.3 Android Java层的同步机制        174
6.3.1 同步关键字synchronized        174
6.3.2 Object类在同步中
的作用        175
6.4 Android的消息机制        176
6.4.1 消息模型        177
6.4.2 理解Looper类        178
6.4.3 理解Handler类        180
6.4.4 消息的同步——Message
类的setAsynchronous()
方法        181
6.4.5 分析MessageQueue类        182
6.5 进程间的消息传递        186
6.5.1 理解Messenger类        187
6.5.2 建立通信通道——
AsyncChannel类的作用        187
第7章 第一个用户进程——Android
的Init进程        192
7.1 Init进程的初始化过程        194
7.1.1 main函数的流程        194
7.1.2 启动Service进程        199
7.2 解析启动脚本init.rc        202
7.2.1 init.rc文件格式介绍        202
7.2.2 Init脚本的关键字定义        203
7.2.3 脚本文件的解析过程        205
7.2.4 Init中启动的守护进程        210
7.3 Init进程对信号的处理        212
7.3.1 “僵尸”(Zombie)
进程介绍        212
7.3.2 初始化SIGCHLD信号        212
7.3.3 响应子进程死亡事件        213
7.4 属性系统        215
7.4.1 属性系统介绍        216
7.4.2 创建属性系统的
共享空间        218
7.4.3 初始化属性系统的值        219
7.4.4 用户进程初始化属性
系统        220
7.4.5 响应修改属性的请求        221
7.5 守护进程ueventd介绍        222
7.5.1 ueventd的初始化        223
7.5.2 内核和用户空间交换
信息——Netlink Socket
简介        224
7.5.3 创建设备节点文件        225
7.6 “看门狗”——watchdogd介绍        227
第8章 支撑Android世界的一极——
Zygote进程        229
8.1 Zygote简介        229
8.2 Zygote进程的初始化        229
8.2.1 app_porcess的main函数        230
8.2.2 启动虚拟机——AndroidRuntime类        233
8.2.3 启动虚拟机        234
8.2.4 初始化工作——
ZygoteInit类        236
8.3 Zygote启动应用程序        237
8.3.1 注册Zygote的socket        237
8.3.2 请求启动应用        238
8.3.3 处理启动应用的请求        239
8.3.4 Fork应用进程        240
8.3.5 子进程的初始化        241
8.4 预加载系统类和资源        244
8.4.1 预加载Java类        244
8.4.2 preload-classes文件        245
8.4.3 预加载系统资源        247
8.4.4 预加载共享库        247
第9章 精确地控制资源的
使用——Android的资源管理        248
9.1 资源系统简介        248
9.1.1 缺省资源和候选资源        248
9.1.2 常用术语和单位        248
9.1.3 资源类型        249
9.1.4 系统资源定义        250
9.2 Android资源的制作        252
9.2.1 资源的存储目录        252
9.2.2 候选资源目录的命名
规则        253
9.2.3 资源匹配算法        255
9.3 Android资源的使用        256
9.3.1 常规的资源使用方法        256
9.3.2 使用公开和非公开资源        257
9.3.3 图片资源的缩放问题        258
9.4 Android资源管理的实现原理        260
9.4.1 Resources类的作用        260
9.4.2 AssetManager类的作用        263
9.4.3 理解AssetManager
的设计        265
9.5 全新的设计语言——Android 5.0
的Material Design        270
9.5.1 Material Design的设计
原则        271
9.5.2 Material主题        271
9.5.3 View的阴影        272
第10章 Android系统的核心之一——
SystemServer进程        274
10.1 SystemServer的创建过程        274
10.1.1 创建SystemServer进程        274
10.1.2 SystemServer初始化        276
10.1.3 SystemServer的服务
大全        279
10.2 SystemServer中的Watchdog        281
10.2.1 启动Watchdog        281
10.2.2 Watchdog监控的服务
和线程        282
10.2.3 Watchdog监控的原理        283
第11章 APK包的安装、卸载和优化——
Android的应用管理        287
11.1 了解PackageManagerService        288
11.1.1 理解Packages.xml和
Settings类        289
11.1.2 服务的初始化过程        291
11.1.3 处理permission文件        298
11.1.4 扫描应用目录的过程        300
11.1.5 解析APK文件        304
11.2 安装应用        306
11.2.1 管理“安装会话”——
PackageManagerInstaller
Service        306
11.2.2 应用安装第一阶段:
复制文件        307
11.2.3 应用安装第二阶段:
装载应用        313
11.3 系统运行时的应用管理        316
11.3.1 卸载应用        316
11.3.2 通过Intent查询组件        318
11.4 守护进程installd        320
11.4.1 installd的初始化        320
11.4.2 变更installd进程的
权限        321
11.4.3 installd中支持的命令        322
11.4.4 分析install(安装)
命令        323
11.4.5 分析patchoat(优化)
命令        324
11.4.6 分析movefiles(移动)
命令        326
第12章 Android的组件管理        327
12.1 应用进程的组成        327
12.1.1 ApplicationThread
的作用        328
12.1.2 理解应用的Context        329
12.1.3 Application类        330
12.2 Android框架的核心——ActivityManagerService服务        332
12.2.1 ActivityManagerService
的初始化        333
12.2.2 理解setSystemProcess()
方法        334
12.2.3 理解systemReady()方法        335
12.3 Process管理        339
12.3.1 如何启动进程        339
12.3.2 调整进程的位置        341
12.3.3 ProcessList的常量        343
12.3.4 调整进程的oom_adj值        344
12.4 Activity管理        347
12.4.1 Activity的生命周期        347
12.4.2 理解Intent        348
12.4.3 Task和LauncherMode        349
12.5 应用的启动过程        352
12.5.1 启动Activity        352
12.5.2 resumeTopActivities
Locked方法        355
12.5.3 ActivityThread的
main方法        357
12.5.4 AMS的attachApplication
方法        358
12.5.5 应用的handleBind
Application方法        360
12.6 Service管理        361
12.6.1 Service的生命周期        362
12.6.2 理解Service的管理类        363
12.6.3 Service的启动过程        363
12.7 提供数据的访问——
ContentProvider管理        368
12.7.1 理解ContentProvider        368
12.7.2 获取ContentProvider        370
12.7.3 应用中安装Content
Provider        373
12.7.4 发布ContentProvider        375
12.8 广播——BroadcastReceiver
管理        376
12.8.1 理解BroadcastReceiver        377
12.8.2 广播的种类        378
12.8.3 广播的数据结构        378
12.8.4 广播的注册过程        380
12.8.5 广播的发送过程        381
第13章 Android的多用户模式        388
13.1 管理用户的系统服务——UserManagerService服务        388
13.1.1 初始化        388
13.1.2 用户的UserInfo定义        389
13.1.3 用户限制(Restriction)        390
13.1.4 添加用户        391
13.1.5 删除用户        393
13.1.6 Guest用户        395
13.2 PackageManagerService和
多用户        395
13.2.1 创建用户的应用数据        395
13.2.2 删除用户的应用数据        396
13.3 ActivityManagerServier和
多用户        396
13.3.1 用户的状态        397
13.3.2 切换当前用户        397
13.3.3 停止用户运行        401
第14章 Android的图形显示系统        404
14.1 画布——理解Surface        404
14.1.1 应用中Surface的
创建过程        404
14.1.2 WMS中Surface的
创建过程        406
14.1.3 单实例模式——ComposerService的作用        410
14.1.4 SurfaceFlinger中创建
Surface        411
14.1.5 管理图像缓冲区        414
14.1.6 创建GraphicBuffer对象        417
14.2 图像显示原理        421
14.2.1 Project Buffer简介        421
14.2.2 VSync信号的生成        424
14.2.3 Framebuffer的工作原理        426
14.2.4 分配图像缓冲区的内存        429
14.3 SurfaceFlinger服务        433
14.3.1 SurfaceFlinger的
启动过程        433
14.3.2 消息和事件分发——MessageQueue和EventThread        435
14.3.3 显示设备——理解DisplayDevice类        437
14.3.4 VSync信号的分发过程        440
14.4 图像的输出过程        445
14.4.1 图像的输出过程        445
14.4.2 理解handleTransaction
函数        446
14.4.3 理解handlePageFlip
函数        451
14.4.4 理解rebuildLayerStacks
函数        453
14.4.5 更新对象中的图层——
理解setUpHWComposer
函数        455
14.4.6 合成所有层的图像——理解
doComposition函数        457
14.4.7 理解postFramebuffer
函数        458
14.5 总结        459
第15章 Android的窗口系统        460
15.1 应用进程和WMS的联系        460
15.1.1 应用中的Window对象        460
15.1.2 应用中的Window
Manager类        461
15.1.3 建立应用和WMS
的联系        463
15.1.4 WMS中建立和应用
的联系        465
15.1.5 理解DecorView        467
15.2 WindowManagerService服务        468
15.2.1 PhoneWindowManager
对象        468
15.2.2 WindowToken对象        469
15.2.3 窗口类型定义        469
15.2.4 新增窗口的过程        471
15.2.5 确定窗口的Z轴位置        475
15.3 确定窗口尺寸        479
15.3.1 Overscan区域        479
15.3.2 表示窗口尺寸的
数据结构        480
15.3.3 计算窗口的尺寸        481
15.4 窗口动画管理        485
15.4.1 接收VSync信号        485
15.4.2 动画的显示过程        488
15.4.3 窗口的动画对象——
WindowStateAnimator        491
15.4.4 生成动画并显示        493
15.5 总结        494
第16章 Android的输入管理        495
16.1 管理各种输入的服务——
InputManagerService        495
16.1.1 服务的启动过程        495
16.1.2 把消息统一格式——
EventHub的作用        497
16.1.3 读取RawEvent        500
16.1.4 处理RawEvent        501
16.1.5 分发输入消息        505
16.2 应用进程处理Input消息        508
16.2.1 理解InputChannel        508
16.2.2 接收Input消息        511
16.2.3 理解InputStage        515
16.2.4 流水线处理Input消息        518
16.3 总结        523
第17章 Android的电源管理        524
17.1 电源管理服务——
PowerManagerService        524
17.1.1 初始化过程        524
17.1.2 系统准备工作——SystemReady方法        525
17.1.3 报告用户活动——userActivity接口        527
17.1.4 强制系统进入休眠模式——gotoSleep接口        528
17.2 控制系统休眠的机制        529
17.2.1 PMS中WakeLock相关
接口        529
17.2.2 WakeLock的native
层实现        531
17.2.3 理解updatePowerState Locked方法        532
17.2.4 管理显示设备        536
17.3 电池管理服务        539
17.3.1 BatteryService类的
作用        539
17.3.2 Healthd守护进程        541
17.3.3 读取电池的各种参数——BatteryMonitor类        543
第18章 Android的存储系统        545
18.1 管理存储设备——Vold守护
进程        546
18.1.1 Vold的main函数        546
18.1.2 监听驱动发出的
消息——Vold的NetlinkManager对象        547
18.1.3 处理block类型的
uevent        548
18.1.4 处理MountService
的命令        552
18.1.5 VolumeManager的作用——创建实例对象        554
18.2 对存储设备操作——MountService
服务        557
18.2.1 MountService的
启动过程        557
18.2.2 进行Socket通信——NativeDaemonConnector        558
18.2.3 OBB文件系统        561
18.3 其他存储相关的服务        564
18.3.1 监视存储设备大小——DeviceStorageMonitor
Service        564
18.3.2 打印系统分区信息——DiskStatsService        566
第19章 Android的网络管理框架        567
19.1 管理各种网络设备——
Netd守护进程        567
19.1.1 Netd的架构        567
19.1.2 处理net 类型的uevent        569
19.1.3 处理NMS的命令        570
19.1.4 DNS服务代理        571
19.1.5 MDnsSdListener的作用——
与守护进程进行交互        572
19.2 网络管理的中心——
ConnectivityService服务        573
19.2.1 初始化过程        573
19.2.2 网络连接类型        574
19.2.3 NetworkStateTracker
对象的作用——获得
网络连接信息        576
19.3 完成对网络物理接口操作——
NetworkManagementService
服务        578
19.4 总结        581
第20章 Android的音频系统        582
20.1 音频系统简介        582
20.1.1 Linux的音频架构        582
20.1.2 手机中的音频设备        582
20.1.3 Audio系统的架构        583
20.2 AudioPolicyService服务——
输入输出设备的状态        584
20.2.1 服务的创建过程        584
20.2.2 管理音频路由策略        587
20.2.3 管理输入输出设备        591
20.3 音频的核心——AudioFlinger
服务        594
20.3.1 AudioFlinger的创建
过程        594
20.3.2 AudioFlinger中的线程        595
20.3.3 MixerThread线程        597
20.3.4 打开物理设备——OpenOutput函数        599
20.4 一次完整的播放过程        601
20.4.1 创建AudioTrack对象        601
20.4.2 在native层的
AudioTrack        604
20.4.3 开始播放        609
20.4.4 传递音频数据        612
20.4.5 AudioFlinger的播放
线程        616
第21章 让应用更安全——
Android的SELinux模块        619
21.1 安全系统——SELinux简介        619
21.1.1 安全机制——DAC
和MAC        619
21.1.2 安全模块SELinux
的架构        620
21.1.3 安全上下文        621
21.1.4 域的转移        623
21.1.5 常用命令        624
21.2 安全增强型——SEAndroid
简介        625
21.2.1 SEAndroid的组成        625
21.2.2 理解各种策略文件        626
21.3 Android如何使用SELinux        629
21.3.1 Init进程设置SELinux
的Policy        629
21.3.2 Init进程初始化安全
上下文        632
21.3.3 设置守护进程的安全
上下文        635
21.3.4 设置应用进程的安全
上下文        636
21.4 总结        640
第22章 Dalvik和ART虚拟机        641
22.1 Dalvik虚拟机简介        641
22.1.1 Dalvik虚拟机的特点        641
22.1.2 即时编译JIT        642
22.2 Dalvik的启动和初始化        643
22.2.1 启动的流程分析        643
22.2.2 重要的全局变量——
初始化gDvm        643
22.3 Dalvik字节码的执行过程        646
22.3.1 执行流程        646
22.3.2 代码分析        647
22.4 Dalvik的内存管理机制        649
22.4.1 堆的初始化过程        649
22.4.2 Dalvik内存分配机制        656
22.4.3 软引用、弱引用和
虚引用        658
22.4.4 Dalvik的内存回收机制        659
22.5 ART模式简介        667
22.5.1 两种模式的区别        668
22.5.2 ART的初始化        669
22.5.3 ART开始运行        672
第23章 系统升级模块——Android
的Recovery模块        674
23.1 Recovery模块的执行        675
23.1.1 Recovery模块的启动        675
23.1.2 如何传递启动参数        677
23.1.3 执行菜单命令        679
23.2 Recovery的升级过程        681
23.2.1 sideload方式安装        681
23.2.2 升级的入口函数        682
23.3 update-binary模块        685
23.3.1 update-binary的
执行流程        685
23.3.2 update-script的
语法规则        687
第24章 Android的调试方法        689
24.1 获取和分析系统Log        689
24.1.1 Logcat使用说明        689
24.1.2 如何分析Android Log        690
24.1.3 如何分析ANR        694
24.2 内存泄露的分析方法        696
24.2.1 分析内存使用情况——
DDMS的Allocation
Tracker        696
24.2.2 DDMS的DumpHeap
工具        697
24.2.3 使用MAT分析内存泄露        698
24.2.4 使用Valgrind分析内存
泄露        699
24.3 Android的自动化测试        700
24.3.1 Monkey        701
24.3.2 让用户开发控制程序——
Monkeyrunner        702
24.3.3 UI测试工具——
uiAutomator工具        705
参考文献        709

立即下载( 3471.zip )解压密码:已隐藏见下(↓)

游客,本付费内容需要支付 20酷币 才能浏览    如何获取酷币?支付
回复

使用道具 举报

by : yanhaiyang1208 | QQ | 发表于 2018-4-3 12:52:44
感谢楼主的分享!望楼主继续坚持不“泄”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入稀酷客   

本版积分规则

点击这里给我发消息 |Archiver|手机版|小黑屋|稀酷客 ( 冀ICP备14004526号-1 )

GMT+8, 2018-4-24 05:10 , Processed in 1.125000 second(s), 37 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表