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 命令
命令 | 功能 | 相關(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)鍵日志信息
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
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è)化共存的一個成功典范体箕。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共同組成的。
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)]
四、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
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)用的四大組件Activity
,Service
屿良,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).
4.6 性能
測試內(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
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舊手機功能
八栋荸、手機廠商暗碼
廠商 | 功能 | 暗碼 | 手機型號 |
---|---|---|---|
華為 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)開篇
劉望舒的博客:知識體系