root 文件系统目录或文件功能解释acctacct cgroup（control group）的挂载点apexAndroid 10 模块化了一些Android系统组件，使其能在 Android 大版本升级之外进行独立升级，即系统组件模块化（Modular System Components）。这些模块化的系统组件打包到一起，可以通过 OTA 方式推送给终端用户进行升级。cache缓存的大小被限制为这个分区的大小。d/sys/kernel/debug 的一个符号链接。data存放用户安装的软件以及各种数据。default.prop其中记录的是编译时 /build/core/main.mk 中 ADDITIONAL_DEFAULT_PROPERTIES 变量中的值， init 将根据它（的内容）去加载其他系统范围内的属性文件（property）。加载只读的属性文件有利于强制执行安全保护devtmpfs 文件系统的挂载点，定义了应用程序可用的设备。/dev/cpuctl 目录是 cpuctl 控制组的挂载点，使用 cgroup 伪文件系统。etc/system/etc 的一个符号链接。与 Linux 功能一致，存放配置文件init处理 init.rc 文件的一个二进制程序。init.rc 文件引入其他 init.*.rc 文件。Android 启动时，内核会在启动进程的最后运行 init 程序。init.rc 文件值得一读，它告诉我们一些 Android 设备配置的事情。由于 Android 不支持 /etc/sysctl.conf，所以 /proc/sys/kernel 参数的更新就成为了 init.rc 文件的一部分。除非你对 Linux 内核的内部工作机制有一个好的理解，最好不要修改这些参数。对 /dev/cpuctl 的参数也是一样的道理。mnt除了挂载内部和外部SD卡，这个目录还是其他文件系统的挂载点。/mnt/asec 目录是一个 tmpfs 文件系统的挂载点，它是 Android 安全机制的一部分。/mnt/obb 目录是一个 tmpfs 文件系统的挂载点，它用来存储应用程序文件超出 50MB 后的扩展文件。/mnt/secure 目录是 Android 安全机制的另外一个组件。你也可以看到一个或多个 USB 设备的挂载点。procprocfs 文件系统的挂载点，用来提供对内核数据结构的访问。sbin比标准 Linux 发行版中的 /sbin 目录小很多，但它确实包含了几个重要守护进程的二进制文件。sdcard/mnt/sdcard 的一个符号链接。storage外部SD卡所在目录syssysfs 伪文件系统的挂载点，sysfs 伪文件系统是内核的设备对象结构的反映。这个目录下有很多信息，但它需要理解内核设备模型。简而言之，这些目录表示内核对象，而文件是这些对象的属性。system这个目录下就是你通常在标准 Linux 发行版中 root 目录下看到的目录。这些目录包括 bin、etc、lib、usr和xbin。ueventd.rc这些文件定义了/dev目录的配置规则。vendor/system/vendor 的一个符号链接。init.rc系统初始化脚本。同样里面会引用 init.*.rc 文件。/system 文件系统存放所有谷歌或厂商提供的 Android 组件的地方，该文件系统是以只读方式 mount 的，主要是考虑了稳定性和安全性。目录或文件功能解释app存放系统应用，一般是系统或厂商自带应用。apexAndroid 10 模块化了一些Android系统组件，使其能在 Android 大版本升级之外进行独立升级，即系统组件模块化（Modular System Components）。这些模块化的系统组件打包到一起，可以通过 OTA 方式推送给终端用户进行升级。bin存放二进制可执行文件 ： 其中既有多个守护进程的二进制可执行文件，也有一些命令行 shell 的二进制可执行文件。一般是系统自带的。（大多数指向 looIbox)etc各种系统组件的配置文件fonts存放各种字体文件framework存放 Android 的框架（framework ） ， 各个 framework 会被存放在各自对应的 .jar 文件中lib存放运行时库文件，也就是原生的 .so (ELF shared object），在 Android 中，这个目录扮演了和正常 Linux 系统中的 /lib 目录一样的角色。media存放铃声、系统提示声的文件夹。xbin存放用途特殊的、正常操作过程不需要使用的二进制文件，一般是系统管理工具。build.prop编译过程中生成的属性配置文件。priv-app存放特权的 Appusr支持文件，比如 unicode 映射文件，设备和键血的键盘布局文件等vendor专门存放第三方厂商提供的文件，但是一般厂商都是直接放到 /system 目录下的 /bin、/lib 当中。lost+ found在对 /system 进行 fsck 操作时自动生成的目录 。 通常是空的（除非系统曾经崩渍过）。新版本 Android 不存在这个目录了。/system/bin 文件系统/system/bin 目录中含有 Android 使用的各种原生可执行文件，此外，它也是存放各种调试工具的地方。具体来说，这些二进制可执行文件可以被分成 5 类。用来提供服务的二进制可执行文件： 这类二进制可执行文件都是在系统运行过程中由 /init 调用的， 它们的调用路径会被写进 /init 使用的 rc 文件中。调试工具： 被归入这一类 的是一些用于调试的原生二进制可执行文件。UNIX 命令： 为了让 shell 用户也能在 Android 上玩 ， UNIX 命令部被封装在一个单独的二进制可执行文件 /system/bin/toolbox 中。busybox 是嵌入式系统中常见的多合一工具集，而 toolbox 则是它在 Android 中的定制版。调用 Dalvik 的脚本（upcall script）：这些调用 Dalvik 的脚本让用户通过 shell 与 Dalvik 运行时框架交互，这多半是为了进行调试。厂商定制的二进制可执行文件：从本质上讲，这类二进制可执行文件可以完全由厂商控制，但是这类二进制可执行文件通常都是些提供服务的程序或调试工具。/system/bin 用来提供服务的二进制可执行文件目录或文件功能解释app_process用户 App 的宿主进程， Zygote〔及其他所有用户 App）都是这个二进制可执行文件的实例，app_process 它是由 DalvikVM /ART 初始化的。applypatch在 OTA 升级的过程中使用 根据脚本来应用补丁bootanirnation当图形界面子系统（surfaceflinger）加载时，播放 Android 的启动动画。clatd1Pv4-1Pv6 地址的转换器dalvikvrn用于启动一个 Dalvik 虚拟机的实例debuggerd在系统崩溃时产生 tombstone， 也可以和一个远程 GDB 相连接dnnserver第二方数字版权管理（ DRM, Digital Rights Management ）模块的宿主地程clnsmasq伪 DNS 服务：在设备对外提供 Wi-Fi 热点服务时，提供 DNS 代理服务hostapdWi-Fi 热点守护进程的二进制可执行文件：在设备对外提供 Wi-Fi 热点服务时提供一个热点keystoreAndroid 的密码存储和管迎服务linkerAndroid 的运行时链接器。mdnsd组描 DNS (multicast DNS）的守护进程mecliaserver音频、视频的录制、回放mtpd用以支持 PPP/L2TPnetd用来管理网卡、防火墙等pppd点对点协议的守护进程，在使用 VPN 时才需要使用它racoon提供对 VPN 支持rlid无线界面层（Radio Interface Layer）守护进程：主管一切与电话相关的服务sdcardSDCard 守护进程，实现了 SD 卡文件系统，通过 FUSE 模拟多用户权限设置sensorserv1ceSensor hub：并发读取各个传感器servicemanager提供了服务的注册和查找功能surfaceflinger它的功能是画出图形界丽的样子，并把它们加载到 framebuffer 中voldVolume 守护进程：用来 mount/unmount 文件系统，也有文件，系统的解密功能uncrypt解密文件系统（在 recovery 前使用）wpa_supplicantwpa_supplicant 适配层（wireless protected access supplicant）：提供 Wi-Fi 和 Wi-Fi P2P 的客户端支持sqlite3数据库功能dexdumpDEX 文件 dump 工具，也能 dump 文件头和字节码tcpdump网络抓包工具。抓取到的数据文件可以用 Wireshark 打开strace系统调用 trace 工具。使用 Linux ptrace(2)系统调用 。 强大的 trace 和逆向工程工具，往往能给你带来惊喜showmap显示进程内存分配情况（数据取自 /proc/pid/maps)procrank该程序的功能与 librank 互补 ， 它会逐个进程地给出各个进程中 VSS/RSS/PSS/USS 的使用情况统计信息procmem显示进程内存使用情况统计信息（数据取自 /proc/pid/status )ncNetcat ， 分析 TCP 和 UDP 时的瑞士军刀librank逐个给出各个共享内存区域在各个进程中的使用情况，主要给出 VSS/RSS/PSS/USS 信息/system/bin 调试工具目录或文件功能解释adbAndroid 调试桥（客户端）asanwrapperAddress Sanitizer：内存淄出检测工具，它是个第三方调试工具atraceAndroid tracetool：使用 Linux 的 ftrace 来调试和跟踪程序的执行过程bdtBlueDroid ( Android 中的蓝牙）测试 Appblkid用来显示各个分区的 GUIDdex2oatDEX 到 ART 的转换工具，用于取代 dexopt。dexoptDEX 优化工具。dumpstate能与其他几个有用的工具（ps、dumpsys 等〕一起使用的元工具，用于抓取系统状态的调试快照。Dumpsys服务转储工具：它能去连接 Android 的各个服务，请求调用服务中的 Dump() 方法，以提供大量的调试信息e2fsckF2FS 文件系统的文件系统完整性检测工具。fsck_msdosvFAT 文件系统的文件系统完整性检测工具。fsck.f2fsExt2/3/4 文件系统的文件系统完整性检测工具。gdbserverGDB 服务端：启动它之后，电脑上的 GDB 客户瑞就能通过 TCP/IP 协议连上当前设备，并调试相关的进程。ip[6]tables通过命令行，管理内核中的 IPTable (防火墙和流量限制）keystore_cli命令行实用程序，用于与 keystore（密钥存储）服务交互logcat把系统日志打印到标准输出上去，它也支持一些过滤选项。ndc与网络管理（Network Management）守护进程交互的命令行程序perf异常强大的性能分析（profiling）工具，它使用了内核中支持性能分析的一些功能ping[6]封包网络探针（Packet Internet Grouper), ICMP 协议的 echo 请求/响应包radiooptions用来模拟无线接口层（Radio Interface Layer）事件的测试程序run-as能用指定的 AID 权限运行某个应用程序screencap把帧缓存（framebuffer）抓取到标准输出或一个 PNG 文件中（供 ADB 使用）screenrecord视频录屏工具，录制 .mp4 格式的视频screenshot与 screencap 功能一致service与 service manager 交互的命令行实用程序toolboxAndroid 提供多种命令的二进制可执行文件vdc与 vold (Volume 守护进程）交互的命令行实用程序wpa_cli与 wpa_supplicant 适配层交互的命令行实用程序/system/bin 调用 Dalvik 的脚本这些调用 Dalvik 的脚本让用户通过 shell 与 Dalvik运行时框架交互，这多半是为了进行调试 。这些脚本调用 /system/bin/app_process ，用它们在 /system/framework 目录中的同名 JAR 框架，加载 Dalvik 类，在使用时，脚本会把用户传给它的参数直接传递给 Dalvik 类。app_process 脚本功能解释am与 ActivityManager 进行交互、启动 activity 发起 intent 等bmgr备份管理（Backup Manager）接口bu启动备份content与 Android content provider 交互的接口ime控制输入法编辑器（ Input-Method-Editors)input与 InputManager 进行交互，注入输入事件media控制当前的媒体播放器（播放/暂停等）monkey用随机生成的输入时间运行一个 APKpm与包管理器（PackageManager）进行交互，可以用来列出、安装、删除包（ package ）以及列出权限等requestsync同步账号settings获取、设置系统设置svc控制电源、数据、Wi-Fi 和 USB 服务utautomator进行 UI 自动化测试，测试 dump view 之间的层次关系等wm与窗口管理器（WindowManager）进行交互、修改显示的尺寸/分辨率等/system/bin 厂商定制的二进制可执行文件（例如）这类二进制可执行文件可以完全由厂商控制，但是这类二进制可执行文件通常都是些提供服务的程序或调试工具。目录或文件功能解释mm-qcamera-daemon高通内置摄像头的守护进程mpdecisionMulti-Processor Decision：管理 CPU 主频的专用工具。它与 CPU governor 进行交互，能在系统忙时，加快主频或激活其他处理器（core），也能在系统空闲时，降低主频或让一部分处理器休眠qmuxd高通基带访问多路转接器（baseband access multiplexer)qseecomd高通安全执行环境通信器（Secure Execution Environment Communicator)thermal-engine-hhthermal 守护进程，负责监视设备的温度，防止设备过热/system/xbin 文件系统/system/xbin 目录类似于 UNIX 中的 /sbin 目录，其中含有管理员会觉得非常有用的二进制可执行文件。当然这个目录一般是被厂商删除的，一般 root 就是在这个目录放一个 su 文件。目录或文件功能解释su切换用户为（root 或者其他用户）add-property-tag向系统的 .prop 文件中添加属性check-lost+found在 fsck 操作完成之后，检查 lost+found 目录cpueater用于消耗 100% CPU 资源的死循环cpustats显示 CPU 和处理器调节然（用于控制主频）的统计信息/system/lib 文件系统/system/lib（在 64 位系统中则是 /system/lib64）目录中含有供 /system/bin 和 /systern/xbin 目录中的二进制可执行文件使用的共享库。/system/lib 中有多个子目录，其中的一些是根据设备的不同而不同的。目录或文件功能解释/drm提供 DRM 引擎。比如，实现了 forward-locking 专利代码包的 libfwdlockengine.so/eglAndroid 版的 OpenGLES/hw各个 HAL 模块/ssl/engines含有 libkeystore.so，该共享库使得 OpenSSL 能使用 Android 的 Keystore 机制/system/etc 文件系统就像它在 UNIX 系统中的同名目录一样， Android 的 /system/etc 目录中也存放着各种配置文件之类的东西。目录或文件功能解释NOTICE.html.gz无数个 Android 沂源组件的法律告知l书 ， 说明各种晦涩难懂的许可授权和法定事宜。audio_effects.conf会被 Android 的音频 HAL 使用audio_policy.conf会被 Android 的音频 HAL 使用apns-conf.xmlTelephony provider 的配置文件，其中列出了设备所支持的所有运营商（它会被 com.android.providers.telephony.TelephonyProvider 使用asound.conf设备 ALSA ( Advanced Linux Sound Architecture ）的配置文件，它会在某些设备上被使用bluetooth/BlueDroid 的配置文件clatd.confCLATd（实现 IPv4 over IPv6 ）的配置文件event-log-tags各个不同 Android 系统组件的日志 tag（被 android.util.EventLog 使用）fallback_fonts.xml列出了在加载 system_fonts.xml 中没有指定的 font-family 时所能选用的 fallback font。它会被 Android 中的 layoutlib 的 FontLoader 所使用gps.confGPS 配置文件hosts主机－IP 对应关系表，为了兼容起见，其中也记上了 localhost (127.0.0.1)media_codecs.xml列出了 Stage Fright 所支持的所有 codec（编码/译码器）media_profiles.xml列出了 LibMedia 所支持的所有 profileppp/存放了启动/停止 VPN 和 PPP 连接活动的二进制可执行文件permissions/存放了多个 XML 文件，每个 XML 文件规定了个内置应用（不论是 AOSP 的还是厂商提供的〕的权限，它会被 PackageManager 使用security/这个目录中含有存放着设备中硬编码写死的各个认证证书的目录（ cacerts/）。 OTA 升级的证书（otacerts.zip）以及经过签名验证的 APK 的 SELinux 标签（label）system_fonts.xml按照字体（font〕所属的 family 和 nameset，列出了系统字体（font），并把字体样式（font style) 和 /system/fonts 中的各个 TTF 文件一一对应起来，它会被 Android 中的 layoutlib 的 FontLoader 所使用wifi/WPA supplicant 适配层的配置目录，用于控制 Wi-Fi 和 Wi-Fi P2P 连接活动*acdb(高通芯片组) 各种声音校附数据库文件，在高通设备中会被 libacdbloader.so 使用snd_msm/(高通芯片组)存放高通 MSM Soc 音频设备的 ALSA 文件thermal*.conf(高通芯片组)监视设备温度的 thennald 守护进程的配置文件/data 文件系统/data 分区是所有用户个人数据的存放地点。目录或文件功能解释anrdumpstate 用来记录失去响应的 Android 应用的函数调用校当前状态的地方。app用户自己安装的应用，下载下来的 .apk 文件都可以在这里被找到app-asec存放 asec 容器， 当一个应用使用了 asec 保护技术时，它就会被加密起来app-lib应用（不论是系统应用还是用户自己安装的应用)的 JNI 库都可以在这里被找到app-private提供应用私有存储空间，已经很少使用backup供备份服务使用bugreportsbugreport 专用，用来存放生成的报告，每份报告中均含有一个文本文件和一张屏幕截图dalvik-cache用于存放优化过的系统应用手日用户安装的应用的 classes.dex 。每个应用的 dex 文件名都是它 apk 包的存放路径，并用“＠”替换掉了路径分隔符data各个己安装应用的数据目录drm供 Android 的数字版权管理器〔Digital Rights Management）使用local供 uid shell 使用的一个可读/可写的临时目录lost+found对 /data 分区执行 fsck 操作时自动生成的目录。media供 sdcard 服务把 SD 卡 mount 到这个 mount 点上mediadrm供 Media DRM 服务使用misc供各个组件存放“各式各样的”数据和配置文件的目录nfc存储 NFC 参数property存放持久性属性resource-cache供 AssetManager 使用的资源缓存secunty通常为空ssh供那些提供 ssh (Secure Shell）服务的设备使用system存放了大量系统配置文件tombstones用于存放由 debuggerd 生成的应用崩溃报告。user不同的用户会把各自的数据和应用存储/安装在 /data/user/用户号/（用户号从 0 开始顺序编号，0 ,1...）下的各个目录中，系统运行时，把 /data/data 下的对应目录做符号链接，使之指向 /data/user/用户号/ 下的对应目录，以这种方式让 Android 系统能支持“多用户”。在一个单用户系统中, /data/data 会被直接指向 /data/user/0/data/data 文件系统/data/data 目录是所有应用（不论是系统应用还是用户安装的应用〕存储它们的信息的地方。每个应用都可以访问属于自己的文件夹而不用申请权限，其他的应用都有权限列出 /data/data 的子目录，但是不能访问。/data/misc 文件系统/data/misc 目录中含有各个 Android 子系统的各种五花八门的（miscellaneous）数据和配置目录。目录或文件功能解释adb存储可信的允许进行 ADB 连接的电脑的公钥bluetoothBlueZ [<4.2 的 bluetooth（蓝牙〕子系统的配置文件bluedroidBluetooth（蓝牙）子系统（>4.2）的配置文件dhcp存储实现 dhcp 的 ctdent 守护进程的 PID 文件，以及所有当前活跃的地址租用记录keychain存放 Android 内置证书 pin 码（certificate pin）和黑名单keystore存储每个用户的 keystore 数据sensors用于存储传感器调试数据sms存储短信(sms) codes 数据库systemkeys用来存储打开 ASEC 容器的密钥（AppsOnSD.sks)vpn用于存储 VPN 状态自己置文件wifi用于存储 Wi-Fi 子系统的配置文件（比如：wpa_supptdcant.conf）和套接字（socket)/data/system 文件系统/data/system 目录中含有对维护设备状态非常重要的文件。访问该目录需要 root 权限。目录或文件功能解释appops.xml供控制应用权限的 AppOps 服务使用batterystats.bin供统计各个应用电量使用情况的 BatteryStats 服务使用called_pre_boots.dat供 ActivityManager 记录每个 boot broadcast receiverdevice_policies.xmlDevicePolicyManagerService 使用的配置文件dropbox/供 DropBox 服务使用的目录entropy.dat系统熵存储器（system entropy store），供 EntropyMixer 生成随机数使用，随机数生成在一个计算机系统中是个难题，必须要有一个不能重复的熵，所以使用系统运行的各种操作记录、硬件运行记录来作为随机数的熵。gesture.key锁屏图案的 Hashframework_atlas.config供负责将预加载的 bitmap 组装成纹理贴图的 AssetAtlasService 使用ifw/Intent 防火墙规则库locksettings.db*锁屏设置：其中记录了设备的锁屏策略netpolicy.xml供 NetworkPolicyManagerService 使用的配置文件netstats/用来记录 NetworkStatsService 按 device、uid 或 xt 得到的网络传输数据统计的目录。packages.listPackageManager 列出的所有安装在系统中的包（APK)packages.xmlPackageManager 在此记录了所有己安装包的元数据password.key锁屏 PIN 码/口令的 hashprocstats/供 ProcessStats 服务存储文件的目录registered_services/供 android.content.pm.RegisteredServicesCache 使用的目录usagestats/供 UsageStats 服务存储文件，特别是 usage-history.xml 文件的目录users/Android 的“多用户”支持/cache 文件系统Android 是在系统升级的过程中使用 /cache 分区的。系统升级包会被下载到这里，启动管理器（boot manager）特别是在 recovery/ 升级模式下启动时，会要使用这个分区。但除此之外，在正常情况下，这个分区是空的。宏定义目录或文件功能解释CACHE_LOG_DIR/recovery二进制可执行文件 recovery 的专用目录LAST_LOG_FILE/recovery/last_log上一次 recovery/ 到级操作的日志LOG_FILE/recovery/log当前 recovery/ 升级操作的日志COMMAND_FILE/recovery/command传递给 recovery 的命令行参数INTENT_FILE/recovery/intentrecovery 完成之后要发出 的 intentLAST_INSTALL_FILE/recovery/last_install最近一次安装日志LAST_LOCALE_FILE/recovery/last_locale存放再次启动时使用的语言设置/vendor 目录目录是用来存储厂商对 Android 系统的修改的。组件名目录或文件Package Manager/vendor/appFonts/vendor/etc/fallback_fonts.xmlShared Libraries/vendor/libDRM libraries/vendor/lib/drm /vendor/lib/mediadrmeGL libraries/vendor/lib/eglFrameworks/vendor/overlay/frameworkFirmware/vendor/finnwareAudio Effects/vendor/etc/audio_effects.conf/dev/usb-ffs/adb 目录 functionfs在 Android 系统中，USB 的功能经常会需要根据用户的选择（即 ， 是以 USB 调试、大容量存储介质还是 以其他方式连接设备，用户的这一选择将通过 init 传递进来）动态地进行重新配置，它是由一个特定的 “gadget” 驱动进行控制的 。/proc 目录procfs 文件系统名副其实一一它提供了一个基于目录的观察系统中运行的进程的方式。使之能提供大量关于进程、线程以及其他全方位的系统诊断信息。许多 Linux 实用程序（如 top、netstat、lsof 和 ifconfig）以及许多 Android 工具（如 procrank、librank）都把它作为诊断信息的来源，没有它就不能运行 。/sys 目录sysfs 是在 Linux 内核版本 2.6 中作为对 procfs 的补充而被引入的，为了能把 /proc 里的东西整理得井井有条些，把与硬件和模块相关的配置文件移到一个单独的目录中去，并让目录的层次也更清晰些 。目录作用block存放块 I/O 层 (Block I/O Layer）的控制文件。每个块设备都有自己的子目录，其中记录了其所属的 I/O 调度程序等参数bus设备，按连接它的总线类型分类存放，每种总线类型（比如 i2c/、mmcl、soc/）一个子目录class设备，按设备类型分类存放，每种设备类型（比如 input/、sound/）一个子目录dev设备，按设备读写方式分类存放，每种读写方式（比如 block/、char/） 一个子目录devices设备，按设备在设备树（device-tree）上的分类类型存放frimware供有固件升级功能的设备使用fs供文件系统驱动使用。kernel由各个（内核）子系统提供的一些内核参数，其中的 debug/是 debugfs 的 mount 点module每个极块一个子目录，含有极块的统计信息以及模块参数power电源管理（power management）的统计信息和设置，Android 的 WakeLocks 就是在这里（通过 wake_lock 和 wake_unlock 〕实现的/sys/kernel/debug 目录 debugfsdebugfs 文件系统是用于（输出）内核级的调试信息的。驱动以及类似的子系统可以自由地把驱动的调试信息转储到这个文件系统中。目录作用binder提供通过 Android IPC （进程间通信）机制中的 binder 方式传递的大量数据tracing好用到难以置信，提供由 Linux 内核的 flrace 机制产生的海量的调试和跟踪信息wakeup-sources内核级的定时器，用在 Android 系统或驱动程序防止设备休眠时/sys/fs/pstore 目录 pstorepstore 机制是 Linux 的一个内核特性（在 3.5 版时引入），它允许内核把部分物理内存(RAM)单独划为 persistent store 区 。 它对于一种特定的应用抓取内核崩愤（panic）时的数据，非常有用。/sys/fs/selinux 目录 selinuxfs和 debugfs 一样，SELinuxFS 传统上也是 mount 在 /sys 下，但却不是 sysfs 文件系统的一部分。这个文件系统是专供 SELinux 使用的，其中存储了与安装策略（installed policy）相关的文件。参考资料部分来源于网络 XDA 论坛部分来源于《最强 Android 书：架构大剖析》