Android-Framework(1)

Android-Framework(1)

Android架構

在這裏插入圖片描述
Android架構主要分爲四部分,從下往上分別爲 LINUX KERNEL(內核層)LIBRARES(共享庫,以及android運行庫)APPLICATION FRAMEWORK(應用框架層)APPLICATION(應用程序)

APPLICATION(應用層)

主要爲系統中的應用,如 桌面、鬧鈴、設置、日曆、電話、短信等系統應用

APPLICATION FRAMEWORK(框架層)

Android的應用程序框架爲應用程序層的開發者提供APIs它實際上是一個應用程序的框架。由於上層的應用程序是以java搭建的,因此本層提供了一下服務:

  • 豐富而又可擴建的視圖(Views),可以用來構建應用程序,它包括列表(lists)、網絡(grids)、文本框(text boxes)、按鈕(buttons),甚至可嵌入的web瀏覽器;
  • 內容提供其(ContentProviders)使得應用程序可以訪問另一個應用程序的數據(比如聯繫人數據庫),或者共享他們自己的數據;
  • 資源管理器(Resource Manager)提供非代碼資源的訪問,比如本地字符串、圖形、和佈局文件(layout files);
  • 通知管理器(Notification Manager)使得應用程序可以在狀態欄中顯示自定義的提示信息;
  • 活動管理器(Activity Manager)用來管理應用程序生命週期並提供常用的導航回退功能
Android Runtime(運行層)

Android包括了一個核心庫,該核心庫提供了JAVA編譯語言核心庫的大多數功能。每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。Dalvik被設計成一個設備可以同時高效地運行多個虛擬系統。Dalvik虛擬機執行(.dex)的Dalvik可執行文件,該格式針對小內存做了優化。同時虛擬機是基於寄存器的,所有的類都經由JAVA編譯器編譯,然後通過SDK中的“dx”工具轉化成 .dex 格式有虛擬機執行。Dalvik虛擬機依賴於Linux內核的一些功能。比如線程機制與底層內存管理機制

Libraries(包層)

Android 包含一些C/C++ 庫,這些庫能被Android系統中不同的組件使用。它們通過Android應用程序框架爲開發者提供服務,以下是一些核心庫:

  • 系統C庫:一個從BSD繼承來的標準C系統函數庫(libc),它是專門基於 embedded linux的設備定製的
  • 媒體庫:基於 PacktVideo OpenCORE。該庫支持各種常用的音頻、視頻格式回放和錄製,同時支持靜態圖像文件。編碼格式包括 MPEG4,H.264,MP3,AAC,AMR,JPG,PNG
  • Surface Manager:對顯示子系統的管理,並且爲多個應用程序提供了2D和3D圖層的無縫融合
  • LibWebCore:一個最新的web瀏覽器引擎用,支持Android瀏覽器和一個可嵌入的web視圖
  • SGL:底層的2D圖形引擎
  • 3D libraties:基於OpenGL ES 1.0 APIs實現,該庫可以使用硬件3D加速(如果可用)或者使用高度優化的3D軟加速。
  • FreeType:位圖(bitmap)和矢量(vector)字體顯示
  • SQLite:一個對於所有應用程序可用,功能強勁的輕型關係型數據庫引擎
Linux Kernel(內核層)

Android 的核心繫統服務依賴於Linux內核,安全性,內存管理,進程管理,網絡協議和驅動模型。Linux內核也同時作爲硬件和軟件棧之間的抽象層

FrameWork簡介

在這裏插入圖片描述

系統服務

SystemServer 是 framework中非常重要的進程,它是在虛擬機啓動後運行的第一個java進程,SystemServer啓動其他系統服務,這些系統服務都是以一個線程的方式存在於SystemServer進程中

a) EntropyService 提供僞隨機數

b) PowerManagerService 電源管理服務

c) ActivityManagerService 最核心的服務之一,管理Activity

d) TelephonyRegistry 通過該服務註冊電話模塊的事件響應,比如重啓、關閉、啓動等

e) PackageManagerService 程序包管理服務

f) AccountManagerService 賬戶管理服務,是指聯繫人賬戶,而不是Linux系統的賬戶

g) ContentService ContentProvider服務,提供跨進程數據交換

h) BatteryService 電池管理服務

i) LightsService 自然光強度感應傳感器服務

j) VibratorService 震動器服務

k) AlarmManagerService 定時器管理服務,提供定時提醒服務

l) WindowManagerService Framework最核心的服務之一,負責窗口管理

m) BluetoothService 藍牙服務

n) DevicePolicyManagerService 提供一些系統級別的設置及屬性

o) StatusBarManagerService 狀態欄管理服務

p) ClipboardService 系統剪切板服務

q) InputMethodManagerService 輸入法管理服務

r) NetStatService 網絡狀態服務

s) NetworkManagementService 網絡管理服務

t) ConnectivityService 網絡連接管理服務

u) AccessibilityManagerService 輔助管理程序截獲所有的用戶輸入,並根據這些輸入給用戶一些額外的反饋,起到輔助的效果

v) MountService 掛載服務,可通過該服務調用Linux層面的mount程序

w) NotificationManagerService 通知欄管理服務,Android中的通知欄和狀態欄在一起,只是界面上前者在左邊,後者在右邊

x) DeviceStorageMonitorService 磁盤空間狀態檢測服務

y) LocationManagerService 地理位置服務

z) SearchManagerService 搜索管理服務

aa) DropBoxManagerService 通過該服務訪問Linux層面的Dropbox程序

ab) WallpaperManagerService 牆紙管理服務,牆紙不等同於桌面背景,在View系統內部,牆紙可以作爲任何窗口的背景

ac) AudioService 音頻管理服務

ad) BackupManagerService 系統備份服務

ae) AppWidgetService Widget服務

af) RecognitionManagerService 身份識別服務

ag) DiskStatsService 磁盤統計服務

核心服務介紹

1)ActivityManagerService
ActivityManagerService(以下簡稱:AMS)是android系統的一個系統服務,是應用進程的管理服務端,直接的控制了應用進程的各個行爲,保證了系統中不同的應用程序之間能夠和諧的合理的進行調度運行。
AMS是android上層系統最核心的模塊之一,其主要的工作是對所有的應用進程及其進程中的四大組件進行管理。(當然這裏也涉及了一些window、電源、權限等內容)

對進程的管理包括:進程的創建與銷燬、進程的優先級調整

對組件的管理包括:Activity的調度管理、Service的管理、Broadcast的分發、以及ContentProvider管理

在這裏插入圖片描述

2)WindowManagerService
對系統中所有窗口進行管理、動畫處理、input分發及處理、Display管理(多屏顯示)

3)Android Graphics(繪圖)系統
在這裏插入圖片描述
4)Surfaceflinger
負責Layer合成(composer);創建surface;管理surface

5)PackageManagerService
負責Package管理,應用程序的安裝、卸載、信息查詢等
在這裏插入圖片描述

6)Input系統
android的輸入系統主要完成鍵盤、觸屏、鼠標等輸入設備的時間輸入及向焦點窗口和焦點視圖的事件派發、插入、過濾、攔截等功能。

android支持的輸入設備主要有:鍵盤、鼠標、觸摸屏、軌跡球、遊戲搖桿/手柄、繪圖板

在這裏插入圖片描述

Framework的範圍

Framework負責 APPLICATION FRAMEWORK、ANDROID RUNTIME和LIBRARIES三部分
Framework負責APPLICATION FRAMEWORK、ANDROID RUNTIME和LIBRARIES三部分。

a) 系統Manager和Service相關內容

b) 系統接口和jni相關內容

c) 系統功能相關內容(watchdog、vold、binder等)

d) 虛擬機dalvik、art

e) 系統so庫相關內容

f) CTS、GTS等預分析

g) Monkey預分析

h) 系統穩定性問題(系統ANR、凍屏、重啓、藍屏等)

i) 系統性能問題

FrameWork基礎

語言基礎:java、C++、C
技術基礎:進程間通信、多線程、jni、linux相關知識、binder

Linux入門介紹

Android代碼管理

代碼結構

faramework開發工作方式與應用開發的工作方式喫完全不同的,framework開發是基於Android源代碼進行的開發,版本管理需要使用:git,repo兩種工具。

Android源碼結構:

├── bionic    android上實現的libc庫
├── bootable  存放可啓動項,如recovery、bootloader等
├── build     android編譯系統所用到的make文件及其它工具
├── cts       android兼容性測試
├── dalvik    dalvik虛擬機
├── development  與開發相關的一些東西
├── device    存放需要適配的設備信息
├── external  第三方庫
├── frameworks  framework部分
├── hardware  硬件相關代碼
├── kernel    kernel相關代碼
├── libcore   android上實現的Java基礎庫
├── Makefile
├── ndk
├── out       編譯輸出目錄
├── packages  包含系統應用、壁紙應用、內容提供者、輸入法等
├── prebuilt  預編譯好的工具
├── sdk       sdk相關內容
├── system    操作系統層次的一些可執行程序和配置文件
├── u-boot    用於引導linux啓動的u-boot
└── vendor    存放與廠商相關的信息,也可粗放需要適配的設備信息

而framework開發主要了解的是framework下面的內容。

代碼編譯

當把代碼下載完畢後,需要對源代碼整體進行編譯,具體方法如下:
1、source build/envsetup.sh
讀取各個board的vendorsetup.sh
2、lunch
去選擇要編譯的對象
3、完整系統編譯、輸出到out/target/product/<device/…
make -j4 (j4爲使用四個線程同時編譯)
4、如果要單編譯某個模塊,就是用如下命令來編譯需要的模塊
編譯bootoader —> make bootoader
編譯kernel生成boot.img —> make bootimage
編譯system生成system.img —> make systemimage
編譯userdata生成userdata.img —> make userdataimage
編譯recovery生成recovery.img —> make recoveryimage

當編譯好對應的image後,可以使用fastboot將image燒到手機裏面:
如何進入fastboot:
開機狀態下執行adb reboot bootloader
關機狀態組合鍵:home+power

(1)檢查連接設備 —> Fastboot devices
(2)燒寫system.img —> Fastboot flash system system.img
(3)燒寫boot.img(recovery.img) —> fastboot flash boot boot.img
(4)燒寫bootloader —> Fastboot flash 2ndbl u-boot.bin

常用工具及調試方法

Framework工具及調試方法

Android啓動流程分析

根據上文分析Android分爲四個層次,而系統如何從長按power開機進入系統桌面的呢,系統都進過了哪些流程,framework從中起到了什麼的作用,請參考之前的Android啓動流程系列文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章