深入理解Android (套装全3册)
《深入理解Android:卷1》
第1章 阅读前的准备工作
1.1 系统架构
1.1.1 Android系统架构
1.1.2 本书的架构
1.2 搭建开发环境
1.2.1 下载源码
1.2.2 编译源码
1.3 工具介绍
1.3.1 Source Insight介绍
查看完整
第1章 阅读前的准备工作
1.1 系统架构
1.1.1 Android系统架构
1.1.2 本书的架构
1.2 搭建开发环境
1.2.1 下载源码
1.2.2 编译源码
1.3 工具介绍
1.3.1 Source Insight介绍
查看完整
邓凡平,资深Android开发工程师,热衷于Android源代码的研究,对Android的架构设计和实现原理有非常深刻的认识和理解,应用开发经验也十分丰富。目前就职于国内一家领先的Android企业,负责Framework的开发和维护。乐于分享,活跃于CSDN等专业社区,撰写的Android Framework源码的系列文章深受读者欢迎。此外,他对Linux内核、C/C++/Python相关的技术,以及高性能网络服务器和多核并行开发等也有一定的研究。
《深入理解Android:卷1》:
是一本以情景方式对Android的源代码进行深入分析的书。内容广泛,以对Framework层的分析为主,兼顾Native层和Application层;分析深入,每一部分源代码的分析都力求透彻;针对性强,注重实际应用开发需求,书中所涵盖的知识点都是Android应用开发者和系统开发者需要重点掌握的。
《深入理解Android(卷1)》共10章,第1章介绍了阅读本书所需要做的准备工作,主要包括对Android系统架构和源码阅读方法的介绍;第2章通过对Android系统中的MediaScanner进行分析,详细讲解了Android中十分重要的JNI技术;第3章分析了init进程,揭示了通过解析init.rc来启动Zygote以及属性服务的工作原理;第4章分析了Zygote、SystemServer等进程的工作机制,同时…
查看完整
是一本以情景方式对Android的源代码进行深入分析的书。内容广泛,以对Framework层的分析为主,兼顾Native层和Application层;分析深入,每一部分源代码的分析都力求透彻;针对性强,注重实际应用开发需求,书中所涵盖的知识点都是Android应用开发者和系统开发者需要重点掌握的。
《深入理解Android(卷1)》共10章,第1章介绍了阅读本书所需要做的准备工作,主要包括对Android系统架构和源码阅读方法的介绍;第2章通过对Android系统中的MediaScanner进行分析,详细讲解了Android中十分重要的JNI技术;第3章分析了init进程,揭示了通过解析init.rc来启动Zygote以及属性服务的工作原理;第4章分析了Zygote、SystemServer等进程的工作机制,同时…
查看完整
《深入理解Android:卷1》
第1章 阅读前的准备工作
1.1 系统架构
1.1.1 Android系统架构
1.1.2 本书的架构
1.2 搭建开发环境
1.2.1 下载源码
1.2.2 编译源码
1.3 工具介绍
1.3.1 Source Insight介绍
1.3.3 Busybox的使用
1.4 本章小结
第2章 深入理解JNI
2.1 JNI概述
2.2 学习JNI的实例:MediaScanner
2.3 Java层的MediaScanner分析
2.3.1 加载JNI库
2.3.2 Java的native函数和总结
2.4 JNI层MediaScanner的分析
2.4.1 注册JNI函数
2.4.2 数据类型转换
2.4.3 JNIEnv介绍
2.4.4 通过JNIEnv操作jobject
2.4.5 jstring介绍
2.4.6 JNI类型签名介绍
2.4.7 垃圾回收
2.4.8 JNI中的异常处理
2.5 本章小结
第3章 深入理解init
3.1 概述
3.2 init分析
3.2.1 解析配置文件
3.2.2 解析service
3.2.3 init控制service
3.2.4 属性服务
3.3 本章小结
第4章 深入理解zygote
4.1 概述
4.2 zygote分析
4.2.1 AppRuntime分析
4.2.2 Welcome to Java World
4.2.3 关于zygote的总结
4.3 SystemServer分析
4.3.1 SystemServer的诞生
4.3.2 SystemServer的重要使命
4.3.3 关于 SystemServer的总结
4.4 zygote的分裂
4.4.1 ActivityManagerService发送请求
4.4.2 有求必应之响应请求
4.4.3 关于zygote分裂的总结
4.5 拓展思考
4.5.1 虚拟机heapsize的限制
4.5.2 开机速度优化
4.5.3 Watchdog分析
4.6 本章小结
第5章 深入理解常见类
5.1 概述
5.2 以“三板斧”揭秘RefBase、sp和wp
5.2.1 第一板斧--初识影子对象
5.2.2 第二板斧--由弱生强
5.2.3 第三板斧--破解生死魔咒
5.2.4 轻量级的引用计数控制类LightRefBase
5.2.5 题外话-三板斧的来历
5.3 Thread类及常用同步类分析
5.3.1 一个变量引发的思考
5.3.2 常用同步类
5.4 Looper和Handler类分析
5.4.1 Looper类分析
5.4.2 Handler分析
5.4.3 Looper和Handler的同步关系
5.4.4 HandlerThread介绍
5.5 本章小结
第6章 深入理解Binder
6.1 概述
6.2 庖丁解MediaServer
6.2.1 MediaServer的入口函数
6.2.2 独一无二的ProcessState
6.2.3 时空穿越魔术-defaultServiceManager
6.2.4 注册MediaPlayerService
6.2.5 秋风扫落叶-StartThread Pool和join Thread Pool分析
6.2.6 你彻底明白了吗
6.3 服务总管ServiceManager
6.3.1 ServiceManager的原理
6.3.2 服务的注册
6.3.3 ServiceManager存在的意义
6.4 MediaPlayerService和它的Client
6.4.1 查询ServiceManager
6.4.2 子承父业
6.5 拓展思考
6.5.1 Binder和线程的关系
6.5.2 有人情味的讣告
6.5.3 匿名Service
6.6 学以致用
6.6.1 纯Native的Service
6.6.2 扶得起的“阿斗”(aidl)
6.7 本章小结
第7章 深入理解Audio系统
7.1 概述
7.2 AudioTrack的破解
7.2.1 用例介绍
7.2.2 AudioTrack(Java空间)分析
7.2.3 AudioTrack(Native空间)分析
7.2.4 关于AudioTrack的总结
7.3 AudioFlinger的破解
7.3.1 AudioFlinger的诞生
7.3.2 通过流程分析AudioFlinger
7.3.3 audio_track_cblk_t分析
7.3.4 关于AudioFlinger的总结
7.4 AudioPolicyService的破解
7.4.1 AudioPolicyService的创建
7.4.2 重回AudioTrack
7.4.3 声音路由切换实例分析
7.4.4 关于AudioPolicy的总结
7.5 拓展思考
7.5.1 DuplicatingThread破解
7.5.2 题外话
7.6 本章小结
第8章 深入理解Surface系统
8.1 概述
8.2 一个Activity的显示
8.2.1 Activity的创建
8.2.2 Activity的UI绘制
8.2.3 关于Activity的总结
8.3 初识Surface
8.3.1 和Surface有关的流程总结
8.3.2 Surface之乾坤大挪移
8.3.3 乾坤大挪移的JNI层分析
8.3.4 Surface和画图
8.3.5 初识Surface小结
8.4 深入分析Surface
8.4.1 与Surface相关的基础知识介绍
8.4.2 SurfaceComposerClient分析
8.4.3 SurfaceControl分析
8.4.4 writeToParcel和Surface对象的创建
8.4.5 lockCanvas和unlockCanvasAndPost分析
8.4.6 GraphicBuffer介绍
8.4.7 深入分析Surface的总结
8.5 SurfaceFlinger分析
8.5.1 SurfaceFlinger的诞生
8.5.2 SF工作线程分析
8.5.3 Transaction分析
8.5.4 关于SurfaceFlinger的总结
8.6 拓展思考
8.6.1 Surface系统的CB对象分析
8.6.2 ViewRoot的你问我答
8.6.3 LayerBuffer分析
8.7 本章小结
第9章 深入理解Vold和Rild
9.1 概述
9.2 Vold的原理与机制分析
9.2.1 Netlink和Uevent介绍
9.2.2 初识Vold
9.2.3 NetlinkManager模块分析
9.2.4 VolumeManager模块分析
9.2.5 CommandListener模块分析
9.2.6 Vold实例分析
9.2.7 关于Vold的总结
9.3 Rild的原理与机制分析
9.3.1 初识Rild
9.3.2 RIL_startEventLoop分析
9.3.3 RIL_Init分析
9.3.4 RIL_register分析
9.3.5 关于Rild main函数的总结
9.3.6 Rild实例分析
9.3.7 关于Rild的总结
9.4 拓展思考
9.4.1 嵌入式系统的存储知识介绍
9.4.2 Rild和Phone的改进探讨
9.5 本章小结
第10章 深入理解MediaScanner
10.1 概述
10.2 android.process.media分析
10.2.1 MSR模块分析
10.2.2 MSS模块分析
10.2.3 android.process.media媒体扫描工作的流程总结
10.3 MediaScanner分析
10.3.1 Java层分析
10.3.2 JNI层分析
10.3.3 PVMediaScanner分析
10.3.4 关于MediaScanner的总结
10.4 拓展思考
10.4.1 MediaScannerConnection介绍
10.4.2 我问你答
10.5 本章小结
《深入理解Android:卷2》
^ 收 起
第1章 阅读前的准备工作
1.1 系统架构
1.1.1 Android系统架构
1.1.2 本书的架构
1.2 搭建开发环境
1.2.1 下载源码
1.2.2 编译源码
1.3 工具介绍
1.3.1 Source Insight介绍
1.3.3 Busybox的使用
1.4 本章小结
第2章 深入理解JNI
2.1 JNI概述
2.2 学习JNI的实例:MediaScanner
2.3 Java层的MediaScanner分析
2.3.1 加载JNI库
2.3.2 Java的native函数和总结
2.4 JNI层MediaScanner的分析
2.4.1 注册JNI函数
2.4.2 数据类型转换
2.4.3 JNIEnv介绍
2.4.4 通过JNIEnv操作jobject
2.4.5 jstring介绍
2.4.6 JNI类型签名介绍
2.4.7 垃圾回收
2.4.8 JNI中的异常处理
2.5 本章小结
第3章 深入理解init
3.1 概述
3.2 init分析
3.2.1 解析配置文件
3.2.2 解析service
3.2.3 init控制service
3.2.4 属性服务
3.3 本章小结
第4章 深入理解zygote
4.1 概述
4.2 zygote分析
4.2.1 AppRuntime分析
4.2.2 Welcome to Java World
4.2.3 关于zygote的总结
4.3 SystemServer分析
4.3.1 SystemServer的诞生
4.3.2 SystemServer的重要使命
4.3.3 关于 SystemServer的总结
4.4 zygote的分裂
4.4.1 ActivityManagerService发送请求
4.4.2 有求必应之响应请求
4.4.3 关于zygote分裂的总结
4.5 拓展思考
4.5.1 虚拟机heapsize的限制
4.5.2 开机速度优化
4.5.3 Watchdog分析
4.6 本章小结
第5章 深入理解常见类
5.1 概述
5.2 以“三板斧”揭秘RefBase、sp和wp
5.2.1 第一板斧--初识影子对象
5.2.2 第二板斧--由弱生强
5.2.3 第三板斧--破解生死魔咒
5.2.4 轻量级的引用计数控制类LightRefBase
5.2.5 题外话-三板斧的来历
5.3 Thread类及常用同步类分析
5.3.1 一个变量引发的思考
5.3.2 常用同步类
5.4 Looper和Handler类分析
5.4.1 Looper类分析
5.4.2 Handler分析
5.4.3 Looper和Handler的同步关系
5.4.4 HandlerThread介绍
5.5 本章小结
第6章 深入理解Binder
6.1 概述
6.2 庖丁解MediaServer
6.2.1 MediaServer的入口函数
6.2.2 独一无二的ProcessState
6.2.3 时空穿越魔术-defaultServiceManager
6.2.4 注册MediaPlayerService
6.2.5 秋风扫落叶-StartThread Pool和join Thread Pool分析
6.2.6 你彻底明白了吗
6.3 服务总管ServiceManager
6.3.1 ServiceManager的原理
6.3.2 服务的注册
6.3.3 ServiceManager存在的意义
6.4 MediaPlayerService和它的Client
6.4.1 查询ServiceManager
6.4.2 子承父业
6.5 拓展思考
6.5.1 Binder和线程的关系
6.5.2 有人情味的讣告
6.5.3 匿名Service
6.6 学以致用
6.6.1 纯Native的Service
6.6.2 扶得起的“阿斗”(aidl)
6.7 本章小结
第7章 深入理解Audio系统
7.1 概述
7.2 AudioTrack的破解
7.2.1 用例介绍
7.2.2 AudioTrack(Java空间)分析
7.2.3 AudioTrack(Native空间)分析
7.2.4 关于AudioTrack的总结
7.3 AudioFlinger的破解
7.3.1 AudioFlinger的诞生
7.3.2 通过流程分析AudioFlinger
7.3.3 audio_track_cblk_t分析
7.3.4 关于AudioFlinger的总结
7.4 AudioPolicyService的破解
7.4.1 AudioPolicyService的创建
7.4.2 重回AudioTrack
7.4.3 声音路由切换实例分析
7.4.4 关于AudioPolicy的总结
7.5 拓展思考
7.5.1 DuplicatingThread破解
7.5.2 题外话
7.6 本章小结
第8章 深入理解Surface系统
8.1 概述
8.2 一个Activity的显示
8.2.1 Activity的创建
8.2.2 Activity的UI绘制
8.2.3 关于Activity的总结
8.3 初识Surface
8.3.1 和Surface有关的流程总结
8.3.2 Surface之乾坤大挪移
8.3.3 乾坤大挪移的JNI层分析
8.3.4 Surface和画图
8.3.5 初识Surface小结
8.4 深入分析Surface
8.4.1 与Surface相关的基础知识介绍
8.4.2 SurfaceComposerClient分析
8.4.3 SurfaceControl分析
8.4.4 writeToParcel和Surface对象的创建
8.4.5 lockCanvas和unlockCanvasAndPost分析
8.4.6 GraphicBuffer介绍
8.4.7 深入分析Surface的总结
8.5 SurfaceFlinger分析
8.5.1 SurfaceFlinger的诞生
8.5.2 SF工作线程分析
8.5.3 Transaction分析
8.5.4 关于SurfaceFlinger的总结
8.6 拓展思考
8.6.1 Surface系统的CB对象分析
8.6.2 ViewRoot的你问我答
8.6.3 LayerBuffer分析
8.7 本章小结
第9章 深入理解Vold和Rild
9.1 概述
9.2 Vold的原理与机制分析
9.2.1 Netlink和Uevent介绍
9.2.2 初识Vold
9.2.3 NetlinkManager模块分析
9.2.4 VolumeManager模块分析
9.2.5 CommandListener模块分析
9.2.6 Vold实例分析
9.2.7 关于Vold的总结
9.3 Rild的原理与机制分析
9.3.1 初识Rild
9.3.2 RIL_startEventLoop分析
9.3.3 RIL_Init分析
9.3.4 RIL_register分析
9.3.5 关于Rild main函数的总结
9.3.6 Rild实例分析
9.3.7 关于Rild的总结
9.4 拓展思考
9.4.1 嵌入式系统的存储知识介绍
9.4.2 Rild和Phone的改进探讨
9.5 本章小结
第10章 深入理解MediaScanner
10.1 概述
10.2 android.process.media分析
10.2.1 MSR模块分析
10.2.2 MSS模块分析
10.2.3 android.process.media媒体扫描工作的流程总结
10.3 MediaScanner分析
10.3.1 Java层分析
10.3.2 JNI层分析
10.3.3 PVMediaScanner分析
10.3.4 关于MediaScanner的总结
10.4 拓展思考
10.4.1 MediaScannerConnection介绍
10.4.2 我问你答
10.5 本章小结
《深入理解Android:卷2》
^ 收 起
邓凡平,资深Android开发工程师,热衷于Android源代码的研究,对Android的架构设计和实现原理有非常深刻的认识和理解,应用开发经验也十分丰富。目前就职于国内一家领先的Android企业,负责Framework的开发和维护。乐于分享,活跃于CSDN等专业社区,撰写的Android Framework源码的系列文章深受读者欢迎。此外,他对Linux内核、C/C++/Python相关的技术,以及高性能网络服务器和多核并行开发等也有一定的研究。
《深入理解Android:卷1》:
是一本以情景方式对Android的源代码进行深入分析的书。内容广泛,以对Framework层的分析为主,兼顾Native层和Application层;分析深入,每一部分源代码的分析都力求透彻;针对性强,注重实际应用开发需求,书中所涵盖的知识点都是Android应用开发者和系统开发者需要重点掌握的。
《深入理解Android(卷1)》共10章,第1章介绍了阅读本书所需要做的准备工作,主要包括对Android系统架构和源码阅读方法的介绍;第2章通过对Android系统中的MediaScanner进行分析,详细讲解了Android中十分重要的JNI技术;第3章分析了init进程,揭示了通过解析init.rc来启动Zygote以及属性服务的工作原理;第4章分析了Zygote、SystemServer等进程的工作机制,同时还讨论了Android的启动速度、虚拟机HeapSize的大小调整、Watchdog工作原理等问题;第5章讲解了Android系统中常用的类,包括sp、wp、RefBase、Thread等类,同步类,以及Java中的Handler类和Looper类,掌握这些类的知识后方能在后续的代码分析中做到游刃有余;第6章以MediaServer为切入点,对Android中极为重要的Binder进行了较为全面的分析,深刻揭示了其本质。第7章对Audio系统进行了深入的分析,尤其是AudioTrack、AudioFlinger和AudioPolicyService等的工作原理。第8章深入讲解了Surface系统的实现原理,分析了Surface与Activity之间以及Surface与SurfaceFlinger之间的关系、SurfaceFlinger的工作原理、Surface系统中的帧数据传输以及LayerBuffer的工作流程。第9章对Vold和Rild的原理和机制进行了深入的分析,同时还探讨了Phone设计优化的问题;第10章分析了多媒体系统中MediaScanner的工作原理。
《深入理解Android(卷1)》适合有一定基础的Android应用开发工程师和系统工程师阅读。通过对本书的学习,大家将能更深刻地理解Android系统,从而自如应对实际开发中遇到的难题。
《深入理解Android:卷2》:
是“深入理解Android”系列的第2本,第1本书上市后获得广大读者高度评价,在Android开发者社群内口口相传。本书不仅继承了第1本书的优点并改正了其在细微处存在的一些不足,而且还在写作的总体思想上进行了创新,更强调从系统设计者的角度去分析Android系统中各个模块内部的实现原理和工作机制。从具体内容上讲,本书的重点是Android Framework的Java层,对Java层涉及的核心模块和服务进行了深入而细致的分析。通过本书,读者不仅能对Android系统本身有更深入的理解,而且还能掌握分析大型复杂源代码的能力。
《深入理解Android:卷2》一共8章:第1章介绍了阅读本书所需要做的准备工作,包括Android 4.0源码的下载和编译、Eclipse环境的搭建,以及Android系统进程(system_process)的调试等;第2章对Java Binder和MessageQueue的实现进行了深入分析;第3章仔细剖析了SystemServer的工作原理,这些服务包括EntropyService、DropboxManagerService、DiskStatsService、DeviceStorageMonitorService、SamplingProfilerService和ClipboardService;第4章对系统中负责Package信息查询和APK安装、卸载、更新等工作的服务PackageManagerService进行了详细分析;第5章则对Android系统中负责电源管理的核心服务 PowerManagerService的原理进行了一番深入的分析;第6章以ActivityManagerService为分析重点,它的启动、Activity的创建和启动、BroadcastReceiver的工作原理、Android中的进程管理等内容展开了较为深入的研究;第7章对ContentProvider的创建和启动、SQLite、Cursor query和close的实现等进行了深入分析;第8章以ContentService和AccountManagerService为分析对象,介绍了数据更新通知机制的实现,以及账户管理和数据同步等相关知识。
《UNIX到Linux的移植》:
本书讲述怎样把应用程序移植到Linux环境上运行,是一本综合的开发和解决问题的参考手册。内容包括:理解Linux环境,GNU二进制工具,Java环境、shell、打包工具等;揭示并确定项目的未知因素、可变因素及其他风险,处理具体平台的区别,标准、编译器、链接器、版本化、系列/库调用、线程等;使用GNU调试器及Linux内存泄露和性能跟踪工具测试和调试移植后的应用程序,UNIX和Linux上API、编译器和连接器选项的快速索引,以及IBM POWER结构特有的移植问题。
^ 收 起
是一本以情景方式对Android的源代码进行深入分析的书。内容广泛,以对Framework层的分析为主,兼顾Native层和Application层;分析深入,每一部分源代码的分析都力求透彻;针对性强,注重实际应用开发需求,书中所涵盖的知识点都是Android应用开发者和系统开发者需要重点掌握的。
《深入理解Android(卷1)》共10章,第1章介绍了阅读本书所需要做的准备工作,主要包括对Android系统架构和源码阅读方法的介绍;第2章通过对Android系统中的MediaScanner进行分析,详细讲解了Android中十分重要的JNI技术;第3章分析了init进程,揭示了通过解析init.rc来启动Zygote以及属性服务的工作原理;第4章分析了Zygote、SystemServer等进程的工作机制,同时还讨论了Android的启动速度、虚拟机HeapSize的大小调整、Watchdog工作原理等问题;第5章讲解了Android系统中常用的类,包括sp、wp、RefBase、Thread等类,同步类,以及Java中的Handler类和Looper类,掌握这些类的知识后方能在后续的代码分析中做到游刃有余;第6章以MediaServer为切入点,对Android中极为重要的Binder进行了较为全面的分析,深刻揭示了其本质。第7章对Audio系统进行了深入的分析,尤其是AudioTrack、AudioFlinger和AudioPolicyService等的工作原理。第8章深入讲解了Surface系统的实现原理,分析了Surface与Activity之间以及Surface与SurfaceFlinger之间的关系、SurfaceFlinger的工作原理、Surface系统中的帧数据传输以及LayerBuffer的工作流程。第9章对Vold和Rild的原理和机制进行了深入的分析,同时还探讨了Phone设计优化的问题;第10章分析了多媒体系统中MediaScanner的工作原理。
《深入理解Android(卷1)》适合有一定基础的Android应用开发工程师和系统工程师阅读。通过对本书的学习,大家将能更深刻地理解Android系统,从而自如应对实际开发中遇到的难题。
《深入理解Android:卷2》:
是“深入理解Android”系列的第2本,第1本书上市后获得广大读者高度评价,在Android开发者社群内口口相传。本书不仅继承了第1本书的优点并改正了其在细微处存在的一些不足,而且还在写作的总体思想上进行了创新,更强调从系统设计者的角度去分析Android系统中各个模块内部的实现原理和工作机制。从具体内容上讲,本书的重点是Android Framework的Java层,对Java层涉及的核心模块和服务进行了深入而细致的分析。通过本书,读者不仅能对Android系统本身有更深入的理解,而且还能掌握分析大型复杂源代码的能力。
《深入理解Android:卷2》一共8章:第1章介绍了阅读本书所需要做的准备工作,包括Android 4.0源码的下载和编译、Eclipse环境的搭建,以及Android系统进程(system_process)的调试等;第2章对Java Binder和MessageQueue的实现进行了深入分析;第3章仔细剖析了SystemServer的工作原理,这些服务包括EntropyService、DropboxManagerService、DiskStatsService、DeviceStorageMonitorService、SamplingProfilerService和ClipboardService;第4章对系统中负责Package信息查询和APK安装、卸载、更新等工作的服务PackageManagerService进行了详细分析;第5章则对Android系统中负责电源管理的核心服务 PowerManagerService的原理进行了一番深入的分析;第6章以ActivityManagerService为分析重点,它的启动、Activity的创建和启动、BroadcastReceiver的工作原理、Android中的进程管理等内容展开了较为深入的研究;第7章对ContentProvider的创建和启动、SQLite、Cursor query和close的实现等进行了深入分析;第8章以ContentService和AccountManagerService为分析对象,介绍了数据更新通知机制的实现,以及账户管理和数据同步等相关知识。
《UNIX到Linux的移植》:
本书讲述怎样把应用程序移植到Linux环境上运行,是一本综合的开发和解决问题的参考手册。内容包括:理解Linux环境,GNU二进制工具,Java环境、shell、打包工具等;揭示并确定项目的未知因素、可变因素及其他风险,处理具体平台的区别,标准、编译器、链接器、版本化、系列/库调用、线程等;使用GNU调试器及Linux内存泄露和性能跟踪工具测试和调试移植后的应用程序,UNIX和Linux上API、编译器和连接器选项的快速索引,以及IBM POWER结构特有的移植问题。
^ 收 起
比价列表
1人想要
公众号、微信群
缺书网
微信公众号
微信公众号
扫码进群
实时获取购书优惠
实时获取购书优惠