主頁 > 移動端開發 > Android 知識體系

Android 知識體系

2022-08-16 08:52:25 移動端開發

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中還有Binder IPC機制,Android系統中的Zygote行程的IPC采用的是Socket機制,在Framework與App之間更多的是采用Binder IPC方式完成跨行程間的通信,
對于Android上層架構中,在同一個行程的執行緒之間相互通信往往采用的Handler訊息機制


3.1 Binder

  1. Linux Kernel是開源系統,所開放源代碼許可協議GPL保護,Binder Driver運行在Linux Kernel是GPL協議,用戶空間采用Apache-2.0協議,內核空間與用戶空間(即在GPL協議與Apache-2.0協議)之間的Lib庫中采用BSD證授權方法,GPL協議限定在Linux Kernel,有效隔斷了GPL的傳染性,仍有較大爭議,開源與商業化共存的一個成功典范,

  2. Binder 是基于開源的OpenBinder實作的,而OpenBinder的作者在Google作業,直接采用 Binder 作為核心的IPC機制,

    ![在這里插入圖片描述](https://img-blog.csdnimg.cn/affc241df7f74f639a0ff580f747af2e.png =600x)


序號 文章名 概述
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 的子系統使用,
![在這里插入圖片描述](https://img-blog.csdnimg.cn/274ae919419b45068cafa2f5045b1573.png =550x)
適用于 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 基礎知識
![在這里插入圖片描述](https://img-blog.csdnimg.cn/20210714004543379.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIzNDUyMzg1,size_16,color_FFFFFF,t_70 =350x)
性能工具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 自定義圓形取色盤

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more