Android 知識體系
一、平臺架構
Google Android 平臺架構
Google Android 架構


??Android 是一個針對多種不同設備型別打造的開放源代碼軟體堆疊,Android 的主要目的是為運營商、OEM 和開發者打造一個開放的軟體平臺,使他們能夠將創新理念變為現實,并推出能夠卓有成效地改善用戶移動體驗的真實產品,
??Android 平臺的設計可確保不存在一個集中瓶頸,即沒有任何行業參與者可一手限制或控制其他參與者的創新,這樣,我們不但可以打造功能完善的高品質消費類產品,而且可以完全開放源代碼,供第三方自由定制和移植,
??System Apps是個人接觸最快的,APP可實際撰寫除錯;其他都在手機廠商系統OEM定制,
1.1 Linux Kernel
Android 平臺的基礎是 Linux 內核,例如,Android Runtime (ART) 依靠 Linux 內核來執行底層功能,例如執行緒和低層記憶體管理,
使用 Linux 內核可讓 Android 利用主要安全功能,并且允許設備制造商為著名的內核開發硬體驅動程式,
1.2 硬體抽象層 (HAL)
硬體抽象層 (HAL) 提供標準界面,向更高級別的 Java API 框架顯示設備硬體功能,HAL 包含多個庫模塊,其中每個模塊都為特定型別的硬體組件實作一個界面,例如相機或藍牙模塊,當框架 API 要求訪問設備硬體時,Android 系統將為該硬體組件加載庫模塊,
1.3 Android Runtime
對于運行 Android 5.0(API 級別 21)或更高版本的設備,每個應用都在其自己的行程中運行,并且有其自己的 Android Runtime (ART) 實體,ART 撰寫為通過執行 DEX 檔案在低記憶體設備上運行多個虛擬機,DEX 檔案是一種專為 Android 設計的位元組碼格式,經過優化,使用的記憶體很少,編譯工具鏈(例如 Jack)將 Java 源代碼編譯為 DEX 位元組碼,使其可在 Android 平臺上運行,
ART 的部分主要功能包括:
- 預先 (AOT) 和即時 (JIT) 編譯
- 優化的垃圾回收 (GC)
- 在 Android 9(API 級別 28)及更高版本的系統中,支持將應用軟體包中的 Dalvik Executable 格式 (DEX) 檔案轉換為更緊湊的機器代碼,
- 更好的除錯支持,包括專用采樣分析器、詳細的診斷例外和崩潰報告,并且能夠設定觀察點以監控特定欄位
在 Android 版本 5.0(API 級別 21)之前,Dalvik 是 Android Runtime,如果您的應用在 ART 上運行效果很好,那么它應該也可在 Dalvik >上運行,但反過來不一定,
Android 還包含一套核心運行時庫,可提供 Java API 框架所使用的 Java 編程語言中的大部分功能,包括一些 Java 8 語言功能,
1.4 Native C/C++ Library
許多核心 Android 系統組件和服務(例如 ART 和 HAL)構建自原生代碼,需要以 C 和 C++ 撰寫的原生庫,Android 平臺提供 Java 框架 API 以向應用顯示其中部分原生庫的功能,例如,您可以通過 Android 框架的 Java OpenGL API 訪問 OpenGL ES,以支持在應用中繪制和操作 2D 和 3D 圖形,
如果開發的是需要 C 或 C++ 代碼的應用,可以使用 Android NDK 直接從原生代碼訪問某些原生平臺庫,
1.5 Java API Framework
您可通過以 Java 語言撰寫的 API 使用 Android OS 的整個功能集,這些 API 形成創建 Android 應用所需的構建塊,它們可簡化核心模塊化系統組件和服務的重復使用,包括以下組件和服務:
- 豐富、可擴展的視圖系統,可用以構建應用的 UI,包括串列、網格、文本框、按鈕甚至可嵌入的網路瀏覽器
- 資源管理器,用于訪問非代碼資源,例如本地化的字串、圖形和布局檔案
- 通知管理器,可讓所有應用在狀態欄中顯示自定義提醒
- Activity 管理器,用于管理應用的生命周期,提供常見的導航回傳堆疊
- 內容提供程式,可讓應用訪問其他應用(例如“聯系人”應用)中的資料或者共享其自己的資料
開發者可以完全訪問 Android 系統應用使用的框架 API,
1.6 System Apps
Android 隨附一套用于電子郵件、短信、日歷、互聯網瀏覽和聯系人等的核心應用,平臺隨附的應用與用戶可以選擇安裝的應用一樣,沒有特殊狀態,因此第三方應用可成為用戶的默認網路瀏覽器、短信 Messenger 甚至默認鍵盤(有一些例外,例如系統的“設定”應用),
系統應用可用作用戶的應用,以及提供開發者可從其自己的應用訪問的主要功能,例如,如果您的應用要發短信,您無需自己構建該功能,可以改為呼叫已安裝的短信應用向您指定的接收者發送訊息,
二、AOSP : Android原始碼下載
| 編號 | 概念 | 備注 |
|---|---|---|
| 1 | 代號、標記和 Build 號 | Android 版本(串列) |
| 2 | Android 開發者 Codelab | |
| 3 | Android 平臺術語表 | |
| 4 | 搭建構建環境 | |
| 5 | 源代碼控制工具 | git、repo |
| 6 | 下載源代碼 | AOSP : Android原始碼下載 |
| 7 | Soong 構建系統 | |
| 8 | 搭建編譯環境、 編譯 Android | |
| 9 | 使用AS查看Android原始碼 | sourceinsight 改用 AndroidStudio 查看 Android 原始碼 |
| 10 | 同步國內AOSP代碼相關錯誤 |
屬性值
| prop屬性 | android.os.SystemProperties 屬性 |
| settings屬性 | settings屬性 |
| Feature屬性 | pm list features |
adb 命令
| 命令 | 功能 | 相關文章 |
|---|---|---|
| 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相關dump |
Events
Event日志關鍵字:EventLogTags.logtags
三、Android 通信機制
Android系統基于Linux kernel,IPC(Inter-Process Communication, 行程間通信)方式在Linux中有
管道pipe、訊息佇列message queue、共享記憶體share memory、套接字socket、信號signal等IPC機制,
Android中還有BinderIPC機制,Android系統中的Zygote行程的IPC采用的是Socket機制,在Framework與App之間更多的是采用Binder IPC方式完成跨行程間的通信,
對于Android上層架構中,在同一個行程的執行緒之間相互通信往往采用的Handler訊息機制,
3.1 Binder
Linux Kernel是開源系統,所開放源代碼許可協議GPL保護,
Binder Driver運行在Linux Kernel是GPL協議,用戶空間采用Apache-2.0協議,內核空間與用戶空間(即在GPL協議與Apache-2.0協議)之間的Lib庫中采用BSD證授權方法,GPL協議限定在Linux Kernel,有效隔斷了GPL的傳染性,仍有較大爭議,開源與商業化共存的一個成功典范,Binder 是基于開源的OpenBinder實作的,而OpenBinder的作者在Google作業,直接采用 Binder 作為核心的IPC機制,

| 序號 | 文章名 | 概述 |
|---|---|---|
| 0 | 為什么 Android 要采用 Binder 作為 IPC 機制? | 【Android,在爭議中逃離 Linux 內核的 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呼叫到Native |
| 4 | Binder 域 | 關注/dev/vndbinder與/dev/binder共用一套libbinder,defaultServiceManager()獲取前需要切換 |
3.2 Socket
Android中IPC行程間通信使用最多的是Binder,其次是socket,
這里socket是Unix domain Socket,不同于Network Socket基于TCP/IP協議堆疊
Socket通信方式也是C/S架構
| 實體 | 描述 |
|---|---|
| Zygote用于fork行程 | system_server創建行程是通過socket向zygote行程發起請求 |
3.3 Handler訊息機制
Handler訊息機制用于同行程的執行緒間通信,Handler訊息機制是由一組MessageQueue、Message、Looper、Handler共同組成的,
Handler訊息機制-FWK層
Handler訊息機制-Native層
3.4 Android 介面定義語言 AIDL\HIDL
Android 介面定義語言 (AIDL) ?? Android 介面定義語言 (AIDL) 是一款可供用戶用來抽象化 IPC 的工具,以在 .aidl 檔案中指定的介面為例,各種構建系統都會使用 aidl 二進制檔案構造 C++ 或 Java 系結,以便跨行程使用該介面,
Android 介面定義語言 (HIDL) ?? Android 8.0 重新設計了 Android 作業系統框架(在一個名為“Treble”的專案中),以便讓制造商能夠以更低的成本更輕松、更快速地將設備更新到新版 Android 系統,在這種新架構中,HAL 介面定義語言(HIDL,發音為“hide-l”)指定了 HAL 和其用戶之間的介面,讓用戶無需重新構建 HAL,就能替換 Android 框架,在 Android 10 中,HIDL 功能已整合到 AIDL 中,此后,HIDL 就被廢棄了,并且僅供尚未轉換為 AIDL 的子系統使用,

適用于 HAL 的 AIDL
四、Android核心
4.1 系統啟動
??Android 設備啟動必須經歷3個階段,即 Boot Loader、Linux Kernel 和 Android系統服務,嚴格來說,Android系統實際上是運行于Linux內核上的一系列 “服務行程”,并不算一個完整意義上的“作業系統”,這些行程維持設備正常運行,而他們的 “老祖宗” 就是 init,通過決議 init.rc 腳本來構建出系統的初始形態,

Android系統啟動程序從下往上,由
Boot Loader引導開機,然后依次進入 ->Linux Kernel->Native->Framework->App
| 階段 | 啟動 | 描述 |
|---|---|---|
| Loader | Boot Rom | 當電源按下,引導芯片代碼開始從預定義的地方(固化在ROM)開始執行,加載引導程式到RAM,然后執行, |
| Boot Loader | 引導程式是在Android作業系統開始運行前的一個小程式,它不是Android作業系統的一部分,引導程式是OEM廠商或者運營商加鎖和限制的地方,引導程式分兩個階段執行,第一個階段,檢測外部的RAM以及加載對第二階段有用的程式;第二階段,引導程式設定網路、記憶體等等, | |
| Linux Kernel | swapper | 0號行程是linux啟動的第一個行程,它的task_struct的comm欄位為"swapper",所以也成為swpper行程,當系統中所有的行程起來后,0號行程也就蛻化為idle行程,當一個core上沒有任務可運行時就會去運行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 系統啟動流程
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系統啟動 | Android機器啟動關鍵行程啟動流程,Launcher在R上又差異 |
| 1 | Android Init Language : init.rc | init.rc語法,查看system\core\init\README.md檔案說明 |
| 2 | init行程 | 粗略梳理init行程啟動后相關初始作業 |
| 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應用行程 | 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 | |
| 5 | adbd |
4.1.3 Syscall && JNI
- Native與Kernel之間紐帶SysCall
- Java層與Native(C/C++)層之間紐帶JNI:Android JNI原理
4.2 系統服務
? ? Android 中有大量的服務,都是基于Binder來互動的(Android 中的絕大部分 Service 都會繼承BinderService類,BinderService 是 Android Service 框架的主要類,是個模板類,它提供了 Service 的生命周期管理、行程間通信、請求回應處理等功能),
? ? 系統范訓System Server行程后,由System Server負責啟動和管理整個Java framework中服務,在 SystemServer.java 的 startBootstrapServices、startCoreServices、startOtherServices 方法中啟動
| 簡稱 | 服務 | 描述 |
|---|---|---|
| AMS | ActivityManagerService | 四大組件管理控制 |
| WMS | WindowManagerService | Window視窗圖形管理 |
| PKMS | PackageManagerService | apk安裝卸載 |
| PMS | PowerManagerService | 電源管理服務 |
| IMS | InputManagerService | 主要負責觸摸事件的采集 |
| IMMS/IME | InputMethodManagerService | 用于控制顯示或隱藏輸入法面板的類 |
| SensorService | SensorService | 傳感器上報,軟體或硬體實作 |
| JobSchedulerService | JobSchedulerService | 滿足網路、電量、時間等一定預定條件而觸發的任務 |
| NMS | NotificationManagerService | 通知處理 |
ActivityManagerService
| 序號 | 文章名 | 概述 |
|---|---|---|
| 1 | ActivityManagerService啟動-android12 | AMS啟動,初始化,systemReady |
| 2 | AMS:startActivity桌面啟動應用 | 四大組件中Activity冷啟動;更多關注4.3 四大組件 |
WindowManagerService
PackageManagerService
| 序號 | 文章名 | 概述 |
|---|---|---|
| 1 | PackageManagerService啟動 | PackageManagerService(簡稱PKMS) 管理著所有跟package相關的作業,常見的比如安裝、卸載應用, |
PowerManagerService
InputManagerService
| 序號 | Android11 | Android12 | 概述 |
|---|---|---|---|
| 1 | ANR InputDispatching TimeOut超時判斷 | InputDispatching TimeOut | |
| 2 | IMS:InputManagerService啟動簡要 | InputManagerService啟動-Android12 | IMS啟動概要,溫故知新 |
| 3 | IMS:InputReader執行緒獲取輸入事件 | InputReader執行緒獲取輸入事件-Android12 | EventHub獲取處理,轉遞給InputDispatcher |
| 4 | IMS:InputDispatcher執行緒分發事件 | InputDispatcher執行緒分發事件-Android12 | 主要走一遍InputDispatcher執行緒正常分發流程,關注mInboundQueue、outboundQueue |
| InputChannel通道建立-Android12 | InputChannel \ InputEventReceiver | ||
| 5 | IMS:InputChannel通過socket發送Input給App | InputChannel發送Input給App-Android12 | InputChannel通過socket發送,InputStage 責任鏈處理 |
| 6 | IMS:InputDispatcher 接收反饋進行下一次發送 | InputStage 責任鏈分發最后都會有個完成 finishInputEvent 反饋 | |
| 7 | IMS:injectInputEvent注入Input事件 | 注入 Input 事件直接加入到mInboundQueue由InputDispatcher分發,沒有經過InputReader | |
| 8 | 導航鍵或手勢導航注入事件 | 查看injectInputEvent呼叫 | |
| 9 | IMS:開發者選項Touch點顯示 | 顯示 TouchInputMapper 事件 | |
| 10 | IMS:開發者選項中指標位置 | 繪制 TouchInputMapper 事件十字畫線 | |
| 11 | IMS:鍵盤滑鼠接入判斷 | EventHub添加外界設備,查看sources資訊 | |
| 12 | IMS:鍵盤滑鼠事件 | 滑鼠CursorInputMapper事件處理 | |
| 13 | IMS:EventHub 設備添加和InputDevice轉化 | IMS的設備Device獲取并轉化為InputDevice | |
| 14 | IMS:EventHub設備底層上報Input事件物件處理 | 底層上報input_event到通知InputDispatcher |
|
| 15 | IMS:Input事件可攔截位置 | Input事件特殊攔截功能的地方 | |
| 16 | IMS:AccessibilityService輔助服務攔截注入Input事件 | AccessibilityInputFilter攔截Input事件 | |
| 17 | IMS:InputDispatcher的焦點設定 | 了解Input中FocusedWindow從WMS設定 | |
| 18 | 案例:Input事件有焦點App無焦點視窗 | BUG案例 | |
| 19 | Android 12關于Input觸摸事件的行為變更 | 不受信任的觸摸事件被屏蔽 | |
| 20 | Android12特性“不受信任的觸摸事件被屏蔽”其他細節 | 熟悉相關屬性,了解不攔截情況 | |
| 21 | Drag and drop拖放框架 | APP和ViewRootImpl、View之間拖放 | |
| 22 | IMS:InputManagerService小結 | IMS小結 | |
| 23 | IMS:MotionEvent 坐標點(上) | ||
| 24 | 案例:Android12上“顯示重繪頻率“點擊無效 | BUG案例 |
InputMethodManagerService
SensorService
| 序號 | Android11 | Android12 | 概述 |
|---|---|---|---|
| 1 | Android Sensor 概覽 | SensorService大致流程梳理 | |
| 2 | SensorService啟動 | SensorService啟動-Android12 | SensorService啟動知識點 |
| 3 | SensorService資料傳遞給APK | SensorService資料傳遞給APP-Android12 | Sensor資料傳遞流程 |
| 4 | 計步傳感器TYPE_STEP_COUNTER | 計步傳感器相關了解 | |
| 5 | Android獲取這顆Sensor物件 | APP獲取Sensor物件-Android12 | 獲取sensor硬體sensor_t流程 |
| 6 | Android應用監聽Sensor獲取的SensorEvent物件 | APP注冊SensorEventListener-Android12 | Android應用監聽Sensor獲取的SensorEvent物件sensors_event_t |
| 7 | Sensor相關Google認證 | 記錄Sensor相關CTS問題 | |
| 8 | sensorservice相關dump | dump查看sensorservice資訊 | |
| 9 | SensorService開機啟動耗時探討 | connectHidlService() | |
| 10 | SensorService小結 | 小結一下 |
NotificationManagerService
| 序號 | 文章名 | 概述 |
|---|---|---|
| 1 | Notifications 通知 | NotificationManagerService通知流程梳理 |
| 2 | NotificationManagerService啟動(“Notifications 通知”拆解) | NMS服務啟動 |
| 3 | APP請求系統通知(“Notifications 通知”拆解) | Notification通知流程及其部分Event日志 |
| 4 | Notifications通知到SystemUI(“Notifications 通知”拆解) | Notification與SystemUI之間橋梁 |
CameraService
| 序號 | 文章名 | 概述 |
|---|---|---|
| 0 | Camera概覽 | 相機架構 |
| 1 | CameraService啟動-Android12 | |
| 2 | CameraProvider行程-Android12 | |
| 3 | CameraServiceProxy啟動-Android12 | |
| 4 | APP使用相機CameraX | CameraX簡要使用,關注預覽用例preview、捕獲用例imageCapture和分析用例imageAnalyzer |
4.3 四大組件
Android應用的四大組件Activity,Service,BroadcastReceiver, ContentProvider
| 四大組件 | 文章 | 概要 |
|---|---|---|
| Activity | ||
| 應用內部啟動startActivity-Android12 | 相關查看 AMS:startActivity桌面啟動應用 ActivityManagerService啟動-android12 ActivityThread應用行程 |
|
| Activity相關初始化-Android12 | ActivityThread、Instrumentation、Application、Activity | |
| 四大組件:Activity生命周期-Android12 | Android P Basic lifecycle transaction containers |
|
| Service | ||
| startService啟動程序-Android12 | ||
| bindService啟動程序-Android12 | ||
| unbindService流程-Android12 | unbindService() 關閉連接,當所有系結全部取消后,系統即會銷毀該服務, | |
| ANR service TimeOut 超時判斷 | ||
| BroadcastReceiver | ||
| BroadcastReceiver機制-Android12 | ||
| ANR Broadcast TimeOut 超時判斷 | ||
| ContentProvider | ||
| ContentProvider簡要說明 | 了解應用場景和簡單使用 |
4.4 圖形界面SurfaceFlinger、WMS
Android 螢屏重繪機制
Android Choreographer 原始碼分析
android螢屏重繪顯示機制
通俗易懂的Android螢屏重繪機制
“終于懂了” 系列:Android螢屏重繪機制—VSync、Choreographer 全面理解!
Android圖形系統綜述(干貨篇)
| 序號 | 文章名 | 說明 |
|---|---|---|
| 1 | Android 圖形組件簡介 | 看看有什么東西就行 |
| 2 | Android 顯示重繪頻率 | 開發者選項->顯示重繪頻率 |
4.5 穩定性
Stability問題現象: 死機重啟、自動關機、無法開機、凍屏、黑屏以及閃退、無回應等情況; 基本都是整機問題,用戶不能使用,穩定性指標至關重要,從技術層面來劃分無外乎兩大類: 長時間無法執行完成(Timeout) 以及例外崩潰(crash).
| 序號 | 文章名 | 概述 |
|---|---|---|
| 1 | 穩定性Log——ANR | ANR極簡描述 |
| 2 | ANR Service TimeOut 超時判斷 | service TimeOut |
| 3 | ANR Broadcast TimeOut 超時判斷 | Broadcast TimeOut |
| 4 | ANR InputDispatching TimeOut超時判斷 | Input TimeOut |
| 0 | 開關機流程 | 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 | 關機流程 | 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案例 | https://www.jianshu.com/p/9ea6d9baad97 |
| 0 | FD LEAK案例 | https://www.jianshu.com/p/befd4b86cc42 |
| 0 | GLOBAL REFERENCE TABLE OVERFLOW 案例 | https://blog.csdn.net/pxy139/article/details/79780603 |
| 0 | COREDUMP除錯案例 | https://www.jianshu.com/p/819aa02fa7a8 |
| 0 | RAMDUMP除錯案例 | https://www.jianshu.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 性能概覽
測驗記憶體、cpu、fps、頁面加載時間等性能指標
系統跟蹤概覽
“系統跟蹤”就是記錄短時間內的設備活動,系統跟蹤會生成跟蹤檔案,該檔案可用于生成系統報告,此報告可幫助您了解如何最有效地提升應用或游戲的性能,
Systrace系列
Android Systrace 基礎知識

性能工具Systrace
| 序號 | 文章 | 簡要 |
|---|---|---|
| 0 | 系統跟蹤概覽 | android developers |
| 0 | 通過命令列上捕獲系統跟蹤記錄 | android developers |
| 0 | 瀏覽 Systrace 報告 | android developers |
| 0 | Android Systrace 基礎知識 | 原文作者:Gracker 或者高爺 |
五、APP
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 開發中優先采用 Kotlin
5.1.1 Kotlin 基本語法
| 序號 | 概述 |
|---|---|
| 1 | Kotlin 基本型別 |
| 2 | 學習 Kotlin 編程語言 |
| 3 | 使用 Kotlin 撰寫您的第一個程式 |
| 4 | repeat 陳述句 |
| * | Android 上的 Kotlin 協程 |
| * | Android 上的 Kotlin 資料流 |
5.1.2 Android Kotlin 使用入門
| 序號 | Android Kotlin 使用入門 |
|---|---|
| 1 | 創建您的首個 Android 應用 |
5.1.3 Kotlin 常見問題
| 序號 | 概述 |
|---|---|
| 1 | Kotlin 有而 Java 沒有的東西 |
5.2 Android Launcher
packages/apps/Launcher3
| 序號 | 概述 |
|---|---|
| 1 | Android launcher -- 除錯運行launcher原始碼 1 |
| 2 | Android launcher -- 除錯運行launcher原始碼 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匯入 |
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 引擎
LGame 游戲引擎 : LGame_百度百科
| 序號 | 概述 |
|---|---|
| 1 | g2048游戲1-android \ g2048游戲2-android \ g2048游戲3-android |
| 2 | Android使用cocos2d-x引擎 |
5.7 APP實踐
六、開源庫
| 開源庫 | 使用說明 | 鏈接 |
|---|---|---|
| Lottie for Android | Lottie是Airbnb開源的一個支持 Android、iOS 以及 ReactNative,利用json檔案的方式快速實作影片效果的庫, | github |
| MLManager | 一個簡單的app管理器 | github |
| Toasty | 一個創建自定義Toast的庫 | github |
七、手機廠商暗碼
| 廠商 | 功能 | 暗碼 | 手機型號 |
|---|---|---|---|
| 華為 EMUI | 工程模式 | *#*#2846579#*#* | P9 Plus |
| 小米 MIUI | 工程模式 | *#*#6484#*#* 、*#*#284#*#*生成Bug報告 | 小米9 |
| OPPO ColorOS | 工程模式 | *#808# | R9S |
| VIVO FuntouchOS | 工程模式 | #558 | |
| 魅族 Flyme | 工程模式 | *#*#3646633#*#* | |
| 聯想 ZUI | 工程模式 | *#808# | |
| 中興 MiFavor | 工程模式 | *#*#2846579#*#* | |
| 三星 oneUI | 工程模式 | *#0000# |
八、感謝
Android開源專案:https://source.android.google.cn
Gityuan:Android系統架構開篇
劉望舒的博客:知識體系
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/501965.html
標籤:其他
上一篇:Android 自定義圓形取色盤
下一篇:Android 自定義圓形取色盤
