Android 知識體系

CSDN xhBruce : Android 知識體系

Android 知識體系

一、平臺架構(gòu)


Google Android 平臺架構(gòu)
Google Android 架構(gòu)
[圖片上傳失敗...(image-6dc0d9-1687315518999)][圖片上傳失敗...(image-d05f9a-1687315519000)]

??Android 是一個針對多種不同設(shè)備類型打造的開放源代碼軟件堆棧设拟。Android 的主要目的是為運營商雳灾、OEM 和開發(fā)者打造一個開放的軟件平臺底哗,使他們能夠?qū)?chuàng)新理念變?yōu)楝F(xiàn)實觅廓,并推出能夠卓有成效地改善用戶移動體驗的真實產(chǎn)品亿卤。

??Android 平臺的設(shè)計可確保不存在一個集中瓶頸生百,即沒有任何行業(yè)參與者可一手限制或控制其他參與者的創(chuàng)新肋坚。這樣,我們不但可以打造功能完善的高品質(zhì)消費類產(chǎn)品几苍,而且可以完全開放源代碼翻屈,供第三方自由定制和移植。

??System Apps是個人接觸最快的妻坝,APP可實際編寫調(diào)試伸眶;其他都在手機廠商系統(tǒng)OEM定制。

1.1 Linux Kernel


Android 平臺的基礎(chǔ)是 Linux 內(nèi)核刽宪。例如厘贼,Android Runtime (ART) 依靠 Linux 內(nèi)核來執(zhí)行底層功能,例如線程和低層內(nèi)存管理圣拄。
使用 Linux 內(nèi)核可讓 Android 利用主要安全功能嘴秸,并且允許設(shè)備制造商為著名的內(nèi)核開發(fā)硬件驅(qū)動程序。

1.2 硬件抽象層 (HAL)


硬件抽象層 (HAL) 提供標(biāo)準界面庇谆,向更高級別的 Java API 框架顯示設(shè)備硬件功能岳掐。HAL 包含多個庫模塊,其中每個模塊都為特定類型的硬件組件實現(xiàn)一個界面饭耳,例如相機藍牙模塊串述。當(dāng)框架 API 要求訪問設(shè)備硬件時,Android 系統(tǒng)將為該硬件組件加載庫模塊哥攘。

1.3 Android Runtime


對于運行 Android 5.0(API 級別 21)或更高版本的設(shè)備剖煌,每個應(yīng)用都在其自己的進程中運行材鹦,并且有其自己的 Android Runtime (ART) 實例逝淹。ART 編寫為通過執(zhí)行 DEX 文件在低內(nèi)存設(shè)備上運行多個虛擬機,DEX 文件是一種專為 Android 設(shè)計的字節(jié)碼格式桶唐,經(jīng)過優(yōu)化栅葡,使用的內(nèi)存很少。編譯工具鏈(例如 Jack)將 Java 源代碼編譯為 DEX 字節(jié)碼尤泽,使其可在 Android 平臺上運行欣簇。

ART 的部分主要功能包括:

  • 預(yù)先 (AOT) 和即時 (JIT) 編譯
  • 優(yōu)化的垃圾回收 (GC)
  • 在 Android 9(API 級別 28)及更高版本的系統(tǒng)中规脸,支持將應(yīng)用軟件包中的 Dalvik Executable 格式 (DEX) 文件轉(zhuǎn)換為更緊湊的機器代碼。
  • 更好的調(diào)試支持熊咽,包括專用采樣分析器莫鸭、詳細的診斷異常和崩潰報告,并且能夠設(shè)置觀察點以監(jiān)控特定字段

在 Android 版本 5.0(API 級別 21)之前横殴,Dalvik 是 Android Runtime被因。如果您的應(yīng)用在 ART 上運行效果很好,那么它應(yīng)該也可在 Dalvik >上運行衫仑,但反過來不一定梨与。


Android 還包含一套核心運行時庫,可提供 Java API 框架所使用的 Java 編程語言中的大部分功能文狱,包括一些 Java 8 語言功能粥鞋。

1.4 Native C/C++ Library


許多核心 Android 系統(tǒng)組件和服務(wù)(例如 ART 和 HAL)構(gòu)建自原生代碼,需要以 C 和 C++ 編寫的原生庫瞄崇。Android 平臺提供 Java 框架 API 以向應(yīng)用顯示其中部分原生庫的功能呻粹。例如,您可以通過 Android 框架的 Java OpenGL API 訪問 OpenGL ES杠袱,以支持在應(yīng)用中繪制和操作 2D 和 3D 圖形尚猿。


如果開發(fā)的是需要 C 或 C++ 代碼的應(yīng)用,可以使用 Android NDK 直接從原生代碼訪問某些原生平臺庫楣富。

1.5 Java API Framework


您可通過以 Java 語言編寫的 API 使用 Android OS 的整個功能集凿掂。這些 API 形成創(chuàng)建 Android 應(yīng)用所需的構(gòu)建塊,它們可簡化核心模塊化系統(tǒng)組件和服務(wù)的重復(fù)使用纹蝴,包括以下組件和服務(wù):

  • 豐富庄萎、可擴展的視圖系統(tǒng),可用以構(gòu)建應(yīng)用的 UI塘安,包括列表糠涛、網(wǎng)格、文本框兼犯、按鈕甚至可嵌入的網(wǎng)絡(luò)瀏覽器
  • 資源管理器忍捡,用于訪問非代碼資源,例如本地化的字符串切黔、圖形和布局文件
  • 通知管理器砸脊,可讓所有應(yīng)用在狀態(tài)欄中顯示自定義提醒
  • Activity 管理器,用于管理應(yīng)用的生命周期纬霞,提供常見的導(dǎo)航返回棧
  • 內(nèi)容提供程序凌埂,可讓應(yīng)用訪問其他應(yīng)用(例如“聯(lián)系人”應(yīng)用)中的數(shù)據(jù)或者共享其自己的數(shù)據(jù)

開發(fā)者可以完全訪問 Android 系統(tǒng)應(yīng)用使用的框架 API

1.6 System Apps


Android 隨附一套用于電子郵件诗芜、短信瞳抓、日歷埃疫、互聯(lián)網(wǎng)瀏覽和聯(lián)系人等的核心應(yīng)用。平臺隨附的應(yīng)用與用戶可以選擇安裝的應(yīng)用一樣孩哑,沒有特殊狀態(tài)栓霜。因此第三方應(yīng)用可成為用戶的默認網(wǎng)絡(luò)瀏覽器、短信 Messenger 甚至默認鍵盤(有一些例外横蜒,例如系統(tǒng)的“設(shè)置”應(yīng)用)叙淌。

系統(tǒng)應(yīng)用可用作用戶的應(yīng)用,以及提供開發(fā)者可從其自己的應(yīng)用訪問的主要功能愁铺。例如鹰霍,如果您的應(yīng)用要發(fā)短信,您無需自己構(gòu)建該功能茵乱,可以改為調(diào)用已安裝的短信應(yīng)用向您指定的接收者發(fā)送消息茂洒。

二、AOSP : Android源碼下載

編號 概念 備注
1 代號瓶竭、標(biāo)記和 Build 號 Android 版本(列表)
2 Android 開發(fā)者 Codelab
3 Android 平臺術(shù)語表
4 搭建構(gòu)建環(huán)境
5 源代碼控制工具 git督勺、repo
6 下載源代碼 AOSP : Android源碼下載
7 Soong 構(gòu)建系統(tǒng)
8 搭建編譯環(huán)境編譯 Android
9 使用AS查看Android源碼 sourceinsight 改用 AndroidStudio 查看 Android 源碼
10 同步國內(nèi)AOSP代碼相關(guān)錯誤

屬性值

prop屬性 android.os.SystemProperties 屬性
SystemProperties屬性加載
重啟Android后SystemProperties屬性變化
SystemProperties屬性變化監(jiān)聽 - 需要設(shè)置屬性的地方主動觸發(fā)
settings屬性 settings屬性
Feature屬性 pm list features

adb 命令

Android 調(diào)試橋 (adb)

命令 功能 相關(guān)文章
adb shell screencap -p /sdcard/01.png 截屏 使用adb命令對手機屏幕截圖
adb shell screenrecord /sdcard/demo.mp4 錄制手機屏幕,默認錄制時間為180s Android4.4屏幕錄制命令screenrecord
adb bugreport > bugreport.txt bugreport 日志
adb shell dmesg > dmesg.txt dmesg 日志
adb logcat -d -v time -b "main" > main.txt main 日志
adb logcat -d -v time -b "system" > system.txt system日志
adb logcat -d -v time -b "events" > events.txt events 日志
adb shell dumpsys sensorservice 查看Sensorservice信息 sensorservice相關(guān)dump

2.1 Android關(guān)鍵日志信息

Android 系統(tǒng)日志關(guān)鍵字

Events

Event日志關(guān)鍵字:EventLogTags.logtags

三斤贰、Android 通信機制

Android系統(tǒng)基于Linux kernel智哀,IPC(Inter-Process Communication, 進程間通信)方式在Linux中有管道pipe揣苏、消息隊列message queue娘摔、共享內(nèi)存share memory、套接字socket楞陷、信號signal等IPC機制送巡。
Android中還有Binder IPC機制摹菠,Android系統(tǒng)中的Zygote進程的IPC采用的是Socket機制,在Framework與App之間更多的是采用Binder IPC方式完成跨進程間的通信骗爆。
對于Android上層架構(gòu)中次氨,在同一個進程的線程之間相互通信往往采用的Handler消息機制


3.1 Binder

  1. Linux Kernel是開源系統(tǒng)摘投,所開放源代碼許可協(xié)議GPL保護煮寡,Binder Driver運行在Linux Kernel是GPL協(xié)議。用戶空間采用Apache-2.0協(xié)議犀呼,內(nèi)核空間與用戶空間(即在GPL協(xié)議與Apache-2.0協(xié)議)之間的Lib庫中采用BSD證授權(quán)方法幸撕,GPL協(xié)議限定在Linux Kernel,有效隔斷了GPL的傳染性圆凰,仍有較大爭議杈帐。開源與商業(yè)化共存的一個成功典范体箕。

  2. Binder 是基于開源的OpenBinder實現(xiàn)的专钉,而OpenBinder的作者在Google工作挑童,直接采用 Binder 作為核心的IPC機制。

    [圖片上傳失敗...(image-2b9051-1687315519000)]


序號 文章名 概述
0 為什么 Android 要采用 Binder 作為 IPC 機制跃须? 【Android站叼,在爭議中逃離 Linux 內(nèi)核的 GPL 約束】
0 使用 Binder IPC 多個 Binder 域:/dev/binder/dev/hwbinder菇民、/dev/vndbinder
1 Binder系列1-Binder Driver /dev/binder運行在Linux kernel
2 Binder系列2-ServiceManager SM啟動尽楔,添加/獲取Service
3 Binder系列3-framework層 Zygote啟動時AndroidRuntime::startReg中register_jni_procs(),JNI調(diào)用到Native
4 Binder 域 關(guān)注/dev/vndbinder與/dev/binder共用一套libbinder第练,defaultServiceManager()獲取前需要切換
5 Binder相關(guān)問題

3.2 Socket

Android中IPC進程間通信使用最多的是Binder阔馋,其次是socket。這里socket是Unix domain Socket娇掏。不同于Network Socket基于TCP/IP協(xié)議棧
Socket通信方式也是C/S架構(gòu)

實例 描述
Zygote用于fork進程 system_server創(chuàng)建進程是通過socket向zygote進程發(fā)起請求

3.3 Handler消息機制

Handler消息機制用于同進程的線程間通信呕寝,Handler消息機制是由一組MessageQueue、Message婴梧、Looper下梢、Handler共同組成的。

Handler消息機制-FWK層

Handler消息機制-Native層

Handler相關(guān)問題


3.4 Android 接口定義語言 ==AIDL\HIDL==

Android 接口定義語言 (AIDL) ?? Android 接口定義語言 (AIDL) 是一款可供用戶用來抽象化 IPC 的工具塞蹭。以在 .aidl 文件中指定的接口為例孽江,各種構(gòu)建系統(tǒng)都會使用 aidl 二進制文件構(gòu)造 C++ 或 Java 綁定,以便跨進程使用該接口番电。

Android 接口定義語言 (HIDL) ?? Android 8.0 重新設(shè)計了 Android 操作系統(tǒng)框架(在一個名為“Treble”的項目中)岗屏,以便讓制造商能夠以更低的成本更輕松、更快速地將設(shè)備更新到新版 Android 系統(tǒng)漱办。在這種新架構(gòu)中担汤,HAL 接口定義語言(HIDL,發(fā)音為“hide-l”)指定了 HAL 和其用戶之間的接口洼冻,讓用戶無需重新構(gòu)建 HAL崭歧,就能替換 Android 框架。在 Android 10 中撞牢,HIDL 功能已整合到 AIDL 中率碾。此后,HIDL 就被廢棄了屋彪,并且僅供尚未轉(zhuǎn)換為 AIDL 的子系統(tǒng)使用所宰。
[圖片上傳失敗...(image-5d1e01-1687315519000)][圖片上傳失敗...(image-596f1c-1687315519000)]

適用于 HAL 的 AIDL

四、Android核心


4.1 系統(tǒng)啟動


??Android 設(shè)備啟動必須經(jīng)歷3個階段畜挥,即 Boot Loader仔粥、Linux Kernel 和 Android系統(tǒng)服務(wù)。嚴格來說,Android系統(tǒng)實際上是運行于Linux內(nèi)核上的一系列 “服務(wù)進程”躯泰,并不算一個完整意義上的“操作系統(tǒng)”谭羔。這些進程維持設(shè)備正常運行,而他們的 “老祖宗” 就是 init麦向。通過解析 init.rc 腳本來構(gòu)建出系統(tǒng)的初始形態(tài)瘟裸。
[圖片上傳失敗...(image-b4fd33-1687315519000)]

Android系統(tǒng)啟動過程從下往上,由Boot Loader引導(dǎo)開機诵竭,然后依次進入 -> Linux Kernel-> Native-> Framework-> App

階段 啟動 描述
Loader Boot Rom 當(dāng)電源按下话告,引導(dǎo)芯片代碼開始從預(yù)定義的地方(固化在ROM)開始執(zhí)行。加載引導(dǎo)程序到RAM卵慰,然后執(zhí)行沙郭。
Boot Loader 引導(dǎo)程序是在Android操作系統(tǒng)開始運行前的一個小程序。它不是Android操作系統(tǒng)的一部分裳朋。引導(dǎo)程序是OEM廠商或者運營商加鎖和限制的地方棠绘。引導(dǎo)程序分兩個階段執(zhí)行。第一個階段再扭,檢測外部的RAM以及加載對第二階段有用的程序氧苍;第二階段,引導(dǎo)程序設(shè)置網(wǎng)絡(luò)泛范、內(nèi)存等等让虐。
Linux Kernel swapper 0號進程是linux啟動的第一個進程,它的task_struct的comm字段為"swapper",所以也成為swpper進程罢荡。當(dāng)系統(tǒng)中所有的進程起來后赡突,0號進程也就蛻化為idle進程,當(dāng)一個core上沒有任務(wù)可運行時就會去運行idle進程区赵。一旦運行idle進程則此core就可以進入低功耗模式了惭缰,在ARM上就是WFI。==pid=1笼才,init進程;pid=2漱受,kthreadd進程==
Native C/C++Library init 解析 init.rc 文件
Zygote Zygote進程是由init進程通過解析 init.rc 文件后 fork 生成
Java API Framework SystemServer System Server進程,是由Zygote進程fork而來骡送,System Server是Zygote孵化的第一個進程

4.1.1 系統(tǒng)啟動流程

https://elinux.org/Android_Booting
https://elinux.org/Android_Zygote_Startup
http://www.androidenea.com/2009/07/system-server-in-android.html
https://elinux.org/Android_Logging_System

序號 概述 簡要
0 Android系統(tǒng)啟動 Android機器啟動關(guān)鍵進程啟動流程昂羡,Launcher在R上又差異
1 Android Init Language : init.rc init.rc語法,查看system\core\init\README.md文件說明
2 init進程 粗略梳理init進程啟動后相關(guān)初始工作
3 init進程——從kernel Log查看 從kernel Log對照查看
4 ap日志查看Android啟動流程 Events日志查看啟動
5 Zygote進程
6 SystemServer進程 Zygote fork出進程system_server
7 Launcher啟動過程 system_server fork出進程launcher
8 ActivityThread應(yīng)用進程 fork摔踱;ActivityThread

4.1.2 守護進程

序號 守護進程daemons 簡要
1 debuggerd
2 installd installd守護進程
3 lmkd system/memory/lmkd/lmkd.rc
system/memory/lmkd/lmkd.cpp
4 logd logd守護進程
5 adbd

4.1.3 Syscall && JNI

  • Native與Kernel之間紐帶SysCall
  • Java層與Native(C/C++)層之間紐帶JNI:Android JNI原理

4.2 系統(tǒng)服務(wù)


? ? Android 中有大量的服務(wù)虐先,都是基于Binder來交互的(Android 中的絕大部分 Service 都會繼承BinderService類,BinderService 是 Android Service 框架的主要類派敷,是個模板類蛹批,它提供了 Service 的生命周期管理撰洗、進程間通信、請求響應(yīng)處理等功能)腐芍。
? ? 系統(tǒng)孵化System Server進程后差导,由System Server負責(zé)啟動和管理整個Java framework中服務(wù),在 SystemServer.java 的 startBootstrapServices甸赃、startCoreServices、startOtherServices 方法中啟動

簡稱 服務(wù) 描述
AMS ActivityManagerService 四大組件管理控制
WMS WindowManagerService Window窗口圖形管理
PKMS PackageManagerService apk安裝卸載
PMS PowerManagerService 電源管理服務(wù)
IMS InputManagerService 主要負責(zé)觸摸事件的采集
IMMS/IME InputMethodManagerService 用于控制顯示或隱藏輸入法面板的類
SensorService SensorService 傳感器上報冗酿,軟件或硬件實現(xiàn)
JobSchedulerService JobSchedulerService 滿足網(wǎng)絡(luò)埠对、電量、時間等一定預(yù)定條件而觸發(fā)的任務(wù)
NMS NotificationManagerService 通知處理

ActivityManagerService


序號 文章名 概述
1 ActivityManagerService啟動-android12 AMS啟動裁替,初始化项玛,systemReady
2 AMS:startActivity桌面啟動應(yīng)用 四大組件中Activity冷啟動;更多關(guān)注4.3 四大組件

WindowManagerService

查看4.4 圖形界面SurfaceFlinger弱判、WMS

PackageManagerService

序號 文章名 概述
1 PackageManagerService啟動 PackageManagerService(簡稱PKMS) 管理著所有跟package相關(guān)的工作襟沮,常見的比如安裝、卸載應(yīng)用昌腰。

PowerManagerService

序號 文章名 概述
1 PowerManagerService啟動-Android12 負責(zé)管理开伏、協(xié)調(diào)設(shè)備電源管理的系統(tǒng)服務(wù)之一,設(shè)備常見功能如亮滅屏遭商、亮度調(diào)節(jié)固灵、低電量模式、喚醒鎖等

InputManagerService


序號 Android11 Android12 概述
1 ANR InputDispatching TimeOut超時判斷 InputDispatching TimeOut
2 IMS:InputManagerService啟動簡要 InputManagerService啟動-Android12 IMS啟動概要劫流,溫故知新
3 IMS:InputReader線程獲取輸入事件 InputReader線程獲取輸入事件-Android12 EventHub獲取處理巫玻,轉(zhuǎn)遞給InputDispatcher
4 IMS:InputDispatcher線程分發(fā)事件 InputDispatcher線程分發(fā)事件-Android12 主要走一遍InputDispatcher線程正常分發(fā)流程,關(guān)注mInboundQueue祠汇、outboundQueue
InputChannel通道建立-Android12 InputChannel \ InputEventReceiver
5 IMS:InputChannel通過socket發(fā)送Input給App InputChannel發(fā)送Input給App-Android12 InputChannel通過socket發(fā)送仍秤,InputStage 責(zé)任鏈處理
6 IMS:InputDispatcher 接收反饋進行下一次發(fā)送 InputStage 責(zé)任鏈分發(fā)最后都會有個完成 finishInputEvent 反饋
7 IMS:injectInputEvent注入Input事件 注入 Input 事件直接加入到mInboundQueue由InputDispatcher分發(fā),沒有經(jīng)過InputReader
8 導(dǎo)航鍵或手勢導(dǎo)航注入事件 查看injectInputEvent調(diào)用
9 IMS:開發(fā)者選項Touch點顯示 顯示 TouchInputMapper 事件
10 IMS:開發(fā)者選項中指針位置 繪制 TouchInputMapper 事件十字畫線
11 IMS:鍵盤鼠標(biāo)接入判斷 EventHub添加外界設(shè)備可很,查看sources信息
12 IMS:鍵盤鼠標(biāo)事件 鼠標(biāo)CursorInputMapper事件處理
13 IMS:EventHub 設(shè)備添加和InputDevice轉(zhuǎn)化 IMS的設(shè)備Device獲取并轉(zhuǎn)化為InputDevice
14 IMS:EventHub設(shè)備底層上報Input事件對象處理 底層上報input_event到通知InputDispatcher
15 IMS:Input事件可攔截位置 Input事件特殊攔截功能的地方
16 IMS:AccessibilityService輔助服務(wù)攔截注入Input事件 AccessibilityInputFilter攔截Input事件
17 IMS:InputDispatcher的焦點設(shè)置 了解Input中FocusedWindow從WMS設(shè)置
18 案例:Input事件有焦點App無焦點窗口 ==BUG案例==
19 Android 12關(guān)于Input觸摸事件的行為變更 不受信任的觸摸事件被屏蔽
20 Android12特性“不受信任的觸摸事件被屏蔽”其他細節(jié) 熟悉相關(guān)屬性诗力,了解不攔截情況
21 Drag and drop拖放框架 APP和ViewRootImpl、View之間拖放
22 IMS:InputManagerService小結(jié) IMS小結(jié)
23 IMS:MotionEvent 坐標(biāo)點(上)
24 案例:Android12上“顯示刷新頻率“點擊無效 ==BUG案例==
25 InputManagerService實體按鍵及組合按鍵-Android12

InputMethodManagerService

序號 Android12 概述
1 InputMethodManagerService啟動-Android12 IMMS服務(wù)啟動及簡要請求顯示\隱藏輸入法
2 MultiClientInputMethodManagerService啟動-Android12 多客戶端IMMS服務(wù)啟動及簡要請求顯示\隱藏輸入法
3 Android輸入法不使用多客戶端多屏適配-Android12 多屏切換輸入法窗口

SensorService


序號 Android11 Android12 概述
1 Android Sensor 概覽 SensorService大致流程梳理
2 SensorService啟動 SensorService啟動-Android12 SensorService啟動知識點
3 SensorService數(shù)據(jù)傳遞給APK SensorService數(shù)據(jù)傳遞給APP-Android12 Sensor數(shù)據(jù)傳遞流程
4 計步傳感器TYPE_STEP_COUNTER 計步傳感器相關(guān)了解
5 Android獲取這顆Sensor對象 APP獲取Sensor對象-Android12 獲取sensor硬件sensor_t流程
6 Android應(yīng)用監(jiān)聽Sensor獲取的SensorEvent對象 APP注冊SensorEventListener-Android12 Android應(yīng)用監(jiān)聽Sensor獲取的SensorEvent對象sensors_event_t
7 Sensor相關(guān)Google認證 記錄Sensor相關(guān)CTS問題
8 sensorservice相關(guān)dump dump查看sensorservice信息
9 SensorService開機啟動耗時探討 connectHidlService()
10 SensorService小結(jié) 小結(jié)一下

NotificationManagerService

序號 文章名 概述
1 Notifications 通知 NotificationManagerService通知流程梳理
2 NotificationManagerService啟動(“Notifications 通知”拆解) NMS服務(wù)啟動
3 APP請求系統(tǒng)通知(“Notifications 通知”拆解) Notification通知流程及其部分Event日志
4 Notifications通知到SystemUI(“Notifications 通知”拆解) Notification與SystemUI之間橋梁

CameraService

序號 文章名 概述
0 Camera概覽 相機架構(gòu)
1 CameraService啟動-Android12
2 CameraProvider進程-Android12
3 CameraServiceProxy啟動-Android12
4 APP使用相機CameraX CameraX簡要使用我抠,關(guān)注預(yù)覽用例preview姜骡、捕獲用例imageCapture和分析用例imageAnalyzer

4.3 四大組件


Android應(yīng)用的四大組件ActivityService屿良,BroadcastReceiver圈澈,ContentProvider

四大組件 文章 概要
Activity
應(yīng)用內(nèi)部啟動startActivity-Android12 相關(guān)查看
AMS:startActivity桌面啟動應(yīng)用
ActivityManagerService啟動-android12
ActivityThread應(yīng)用進程
Activity相關(guān)初始化-Android12 ActivityThread、Instrumentation尘惧、Application康栈、Activity
四大組件:Activity生命周期-Android12 Android P Basic lifecycle transaction containers
Service
startService啟動過程-Android12
bindService啟動過程-Android12
unbindService流程-Android12 unbindService() 關(guān)閉連接,當(dāng)所有綁定全部取消后,系統(tǒng)即會銷毀該服務(wù)。
ANR service TimeOut 超時判斷
BroadcastReceiver
BroadcastReceiver機制-Android12
ANR Broadcast TimeOut 超時判斷
ContentProvider
ContentProvider簡要說明 了解應(yīng)用場景和簡單使用

4.4 圖形界面SurfaceFlinger啥么、WMS

Android 屏幕刷新機制
Android Choreographer 源碼分析
android屏幕刷新顯示機制
通俗易懂的Android屏幕刷新機制
“終于懂了” 系列:Android屏幕刷新機制—VSync登舞、Choreographer 全面理解!
Android圖形系統(tǒng)綜述(干貨篇)


AOSP->開發(fā)->圖形
SurfaceFlinger 和 WindowManager

4.4.1 WMS

序號 文章名 說明
1 WMS 概述 -- “窗口管理員“ 了解一下
2 WMS服務(wù)啟動 WMS悬荣、AMS菠秒、IMS、PhoneWindowManager
3 Activity的預(yù)覽窗口StartingWindow添加 APP預(yù)覽窗口
4 Activity窗口的添加過程 主要回調(diào)onResume之后執(zhí)行makeVisible()
5 WMS:系統(tǒng)窗口添加過程 系統(tǒng)服務(wù)啟動完成執(zhí)行 startSystemUi
6 WMS側(cè)添加界面 WMS添加界面小結(jié)一下
7 WindowManager中Surface申請流程 Surface.jav初始化氯迂,及對應(yīng)畫布Layer創(chuàng)建

4.4.2 SurfaceFlinger

序號 文章名 說明
1 Android 圖形組件簡介 看看有什么東西就行
2 Android 顯示刷新頻率 開發(fā)者選項->顯示刷新頻率
3 SurfaceFlinger啟動-Android12 SurfaceFlinger服務(wù)

4.5 穩(wěn)定性


Stability問題現(xiàn)象: 死機重啟践叠、自動關(guān)機、無法開機嚼蚀、凍屏禁灼、黑屏以及閃退、無響應(yīng)等情況; 基本都是整機問題轿曙,用戶不能使用弄捕,穩(wěn)定性指標(biāo)至關(guān)重要。從技術(shù)層面來劃分無外乎兩大類: 長時間無法執(zhí)行完成(Timeout) 以及異常崩潰(crash).

序號 文章名 概述
1 穩(wěn)定性Log——ANR ANR極簡描述
2 ANR Service TimeOut 超時判斷 service TimeOut
3 ANR Broadcast TimeOut 超時判斷 Broadcast TimeOut
4 ANR InputDispatching TimeOut超時判斷 Input TimeOut
0 開關(guān)機流程 https://blog.csdn.net/marshal_zsx/article/details/80235977
https://blog.csdn.net/marshal_zsx/article/details/80258776
https://blog.csdn.net/marshal_zsx/article/details/80272760
https://blog.csdn.net/marshal_zsx/article/details/80600622
https://blog.csdn.net/marshal_zsx/article/details/80547780
0 關(guān)機流程 https://blog.csdn.net/xiongtiancheng/article/details/78067331
0 AMS流程 https://blog.csdn.net/Luoshengyang/article/details/6685853
https://blog.csdn.net/Luoshengyang/article/details/6689748
https://blog.csdn.net/Luoshengyang/article/details/6703247
https://blog.csdn.net/Luoshengyang/article/details/6714543
https://blog.csdn.net/Luoshengyang/article/details/6720261
0 PMS(POWER)流程 https://blog.csdn.net/FightFightFight/article/details/79532191
https://blog.csdn.net/FightFightFight/article/details/80341728
https://blog.csdn.net/FightFightFight/article/details/79733559
https://blog.csdn.net/FightFightFight/article/details/79808100
https://blog.csdn.net/FightFightFight/article/details/81192495
0 死鎖案例 https://blog.csdn.net/weixin_40107510/article/details/77856004
0 BINDER阻塞 https://blog.csdn.net/forever_2015/artiails/79703739?utm_source=blogxgwz8
0 BINDER耗盡 https://blog.csdn.net/Donald_Zhuang/article/details/106654452
0 高IO案例 https://www.cnblogs.com/wangjie1990/p/11326946.html
0 OOM案例 http://www.reibang.com/p/9ea6d9baad97
0 FD LEAK案例 http://www.reibang.com/p/befd4b86cc42
0 GLOBAL REFERENCE TABLE OVERFLOW 案例 https://blog.csdn.net/pxy139/article/details/79780603
0 COREDUMP調(diào)試案例 http://www.reibang.com/p/819aa02fa7a8
0 RAMDUMP調(diào)試案例 http://www.reibang.com/p/dabaded56e03
0 黑屏案例 https://blog.csdn.net/tkwxty/article/details/103121718
0 凍屏案例 https://blog.csdn.net/tkwxty/article/details/102756703
https://www.cnblogs.com/wangjie1990/p/11326966.html

4.6 性能

Android performance 性能概覽


測試內(nèi)存导帝、cpu守谓、fps、頁面加載時間等性能指標(biāo)

系統(tǒng)跟蹤概覽

“系統(tǒng)跟蹤”就是記錄短時間內(nèi)的設(shè)備活動您单。系統(tǒng)跟蹤會生成跟蹤文件分飞,該文件可用于生成系統(tǒng)報告。此報告可幫助您了解如何最有效地提升應(yīng)用或游戲的性能睹限。

Systrace系列

Android Systrace 基礎(chǔ)知識
[圖片上傳失敗...(image-f615d2-1687315519000)]
性能工具Systrace

序號 文章 簡要
0 系統(tǒng)跟蹤概覽 android developers
0 通過命令行上捕獲系統(tǒng)跟蹤記錄 android developers
0 瀏覽 Systrace 報告 android developers
0 Android Systrace 基礎(chǔ)知識 原文作者:Gracker 或者高爺

五譬猫、APP

Android Jetpack
APK?不AAB:Android App Bundle


5.1 Kotlin

developers KOTLIN
https://kotlinlang.org/
https://play.kotlinlang.org/
Kotlin 教程
https://www.npmjs.com/package/kotlin
在 Android 開發(fā)中優(yōu)先采用 Kotlin


5.1.1 Kotlin 基本語法

序號 概述
1 Kotlin 基本類型
2 學(xué)習(xí) Kotlin 編程語言
3 使用 Kotlin 編寫您的第一個程序
4 repeat 語句
* Android 上的 Kotlin 協(xié)程
* Android 上的 Kotlin 數(shù)據(jù)流

5.1.2 Android Kotlin 使用入門

序號 Android Kotlin 使用入門
1 創(chuàng)建您的首個 Android 應(yīng)用

5.1.3 Kotlin 常見問題

序號 概述
1 Kotlin 有而 Java 沒有的東西

5.2 Android Launcher


packages/apps/Launcher3
序號 概述
1 Android launcher -- 調(diào)試運行l(wèi)auncher源碼 1
2 Android launcher -- 調(diào)試運行l(wèi)auncher源碼 2
3 Android launcher -- launcher源碼修改 1
4 Android launcher -- launcher源碼修改 2
5 Android launcher3 -- launcher3源碼1
6 Android launcher3 -- launcher3源碼2
7 Android launcher3 -- launcher3源碼3
8 Android launcher3 -- launcher3源碼4
9 Android R上Launcher3導(dǎo)入

5.3 Android SystemUI

frameworks\base\packages\SystemUI
序號 概述
1 SystemUI啟動羡疗,及其SystemUIService啟動
2 Notifications通知到SystemUI(“Notifications 通知”拆解)

5.4 Android Settings

5.5 Apk反編譯


apktool 染服、dex2jar、jd-gui ?? JADX ?? Jeb

序號 概述
1 Apk反編譯 -- 記錄

5.6 Android Games


Unity 引擎
cocos2d-x 引擎
<font color=Blue>LGame 游戲引擎</font> : LGame_百度百科

序號 概述
1 g2048游戲1-android \ g2048游戲2-android \ g2048游戲3-android
2 Android使用cocos2d-x引擎

5.7 APP實踐

5.* 開源庫


開源庫 使用說明 鏈接
Lottie for Android Lottie是Airbnb開源的一個支持 Android叨恨、iOS 以及 ReactNative柳刮,利用json文件的方式快速實現(xiàn)動畫效果的庫。 github
MLManager 一個簡單的app管理器 github
Toasty 一個創(chuàng)建自定義Toast的庫 github

六痒钝、Flutter跨平臺

Flutter 是 Google 開源的應(yīng)用開發(fā)框架秉颗,僅通過一套代碼庫,就能構(gòu)建精美的送矩、原生平臺編譯的多平臺應(yīng)用蚕甥。

七、Android舊手機功能

Android手機做為云服務(wù)器實操

八栋荸、手機廠商暗碼


廠商 功能 暗碼 手機型號
華為 EMUI 工程模式 *#*#2846579#*#* P9 Plus
小米 MIUI 工程模式 *#*#6484#*#* 菇怀、*#*#284#*#*生成Bug報告 小米9
OPPO ColorOS 工程模式 *#808# R9S
VIVO FuntouchOS 工程模式 #558
魅族 Flyme 工程模式 *#*#3646633#*#*
聯(lián)想 ZUI 工程模式 *#808#
中興 MiFavor 工程模式 *#*#2846579#*#*
三星 oneUI 工程模式 *#0000#

九凭舶、感謝

Android開源項目https://source.android.google.cn
Gityuan:Android系統(tǒng)架構(gòu)開篇
劉望舒的博客:知識體系

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市爱沟,隨后出現(xiàn)的幾起案子帅霜,更是在濱河造成了極大的恐慌,老刑警劉巖呼伸,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件身冀,死亡現(xiàn)場離奇詭異,居然都是意外死亡括享,警方通過查閱死者的電腦和手機搂根,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奶浦,“玉大人兄墅,你說我怎么就攤上這事踢星“牟妫” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵沐悦,是天一觀的道長成洗。 經(jīng)常有香客問我,道長藏否,這世上最難降的妖魔是什么瓶殃? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮副签,結(jié)果婚禮上遥椿,老公的妹妹穿的比我還像新娘。我一直安慰自己淆储,他們只是感情好冠场,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著本砰,像睡著了一般碴裙。 火紅的嫁衣襯著肌膚如雪沾歪。 梳的紋絲不亂的頭發(fā)上依许,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天符衔,我揣著相機與錄音阅茶,去河邊找鬼蛉幸。 笑死蝶桶,一個胖子當(dāng)著我的面吹牛毅桃,可吹牛的內(nèi)容都是我干的苫费。 我是一名探鬼主播珍手,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼娃肿,長吁一口氣:“原來是場噩夢啊……” “哼咕缎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起料扰,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤凭豪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后晒杈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嫂伞,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年拯钻,在試婚紗的時候發(fā)現(xiàn)自己被綠了帖努。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡粪般,死狀恐怖拼余,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亩歹,我是刑警寧澤匙监,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站小作,受9級特大地震影響亭姥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜顾稀,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一达罗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧静秆,春花似錦粮揉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至塔沃,卻和暖如春蝠引,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蛀柴。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工螃概, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鸽疾。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓吊洼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親制肮。 傳聞我的和親對象是個殘疾皇子冒窍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354