Linux核心層
Android系統基於Linux2.6核心,這一層為Android裝置各種硬體提供了底層驅動,如顯示驅動,音訊驅動,照相機驅動,藍芽驅動,WIFI驅動,電源管理等
系統執行庫層
程式庫:
Android包含一些C/C++庫,這些庫能被Android系統中不同的元件使用。他們通過Android應用程式框架為開發者提供服務
Android執行庫:
Android包括了一個核心庫,該核心庫提供了Java程式語言核心庫的大多數功能。
應用框架層
這一層主要提供構建應用程式是可能用到的各種API,Android自帶的一些核心應用就是使用這些API完成的,開發者也可以通過使用API來構建自己的應用程式
活動管理者(Activity Manager):控制應用程式生命週期和活動棧的所有方面
內容提供器(Content Providers):允許程式之間釋出和分享資料。
資源管理器(Resource Manager):提供對非程式碼嵌入資源的存取,如字串、顏色設定和使用者介面佈局。
通知管理器(Notification Manager):允許應用程式顯示對話方塊或者通知給使用者
檢視系統(View System):一個可拓展的檢視集合,用於建立應用程式使用者介面
應用程式
頂層中有所有的Android應用程式,包括通訊錄、瀏覽器等,你寫的應用程式也被安裝在這層;所有的的應用程式都是使用Java語言編寫的。
真機環境的搭建(將真機連線在pc上,通過pc上操作來控制手機裝置的app)
adb的全稱為Android Debug Bridge,就是起到偵錯橋的作用。藉助adb工具,我們可以手機管理裝置或模擬器的狀態。還可以進行很多手機操作,如安裝軟體、系統升級、執行shell命令等等。其實簡而言說,adb就是連線Android手機與PC端的橋樑,可以讓使用者在電腦上對手機進行全面的操作。
APK:APK是Android Package的縮寫,即Android安裝包,APK是類似Symbian Sis或Sisx的檔案格式。通過將APK檔案直接傳到Android模擬器或Android手機中執行即可安裝。把android sdk編譯的工程打包成一個安裝程式檔案,格式為apk。
它就是一個命令列視窗,用於通過電腦端與模擬器或者真實裝置互動。包括三大內容:
電腦上執行的使用者端。
在你用於開發的機器上作為後臺程序執行的伺服器。
一個以後臺程序的形式執行於模擬器或裝置上的守護程式(daemon)。
ADB命令的主要功能
1.執行Android裝置的shell(命令列)
2.管理模擬器或Android裝置的埠對映
3.安裝/解除安裝APK程式
4.計算機和Android裝置之間上傳/下載檔案
關閉和啟動adb服務 —ok
adb kill-server 關閉ADB服務
adb start-server 啟動ADB服務
檢視裝置連線情況
adb devices
檢視當前連線的裝置, 連線到計算機的android裝置或者模擬器將會列表顯示
輸出資訊格式為:
[serialNumber] [state]
例如:
安裝和解除安裝APK
adb install <apk檔案路徑> ---將指定的apk檔案安裝到裝置上
adb uninstall <軟體名> ---解除安裝裝置上的指定程式 這個軟體名是手機上的程式包,如com.tencent.mm
adb uninstall -k <軟體名> --解除安裝程式但是保留其設定和快取檔案
com.tencent.mobileqq --qq的包名
指定裝置進行操作
當有多個裝置連線時,可以用下面的命令來直接選擇執行命令的裝置
adb [-d|-e|-s <serial Number>] <command>
d:真機(多個裝置中只有一個真機時適用)
e:模擬器(多個裝置中只有一個模擬器時適用)
s:序列號
例如:
adb -d install helloWorld.apk
adb -s emulator-5556 install helloWorld.apk
列出當前裝置上的程式包
adb shell pm list packages
刪除微信APP
adb uninstall com.tencent.mm
上傳和下載檔案
adb push foo.txt /sdcard/foo.txt
adb pull system/app D:\apps`
演示步驟:紀錄檔Logcat的操作
adb logcat 在命令列中顯示偵錯資訊
adb logcat > 檔名 將logcat資訊儲存在檔案中
控制紀錄檔格式
紀錄檔訊息在標記和優先順序之外還有很多後設資料欄位,這些欄位可以通過修改輸出格式來控制輸出結果, -v選項加上下面列出的內容可以控制輸出欄位
brief — 顯示優先順序/標記和原始程序的PID (預設格式)
process — 僅顯示程序PID
tag — 僅顯示優先順序/標記
thread — 僅顯示程序:執行緒和優先順序/標記
raw — 顯示原始的紀錄檔資訊,沒有其他的後設資料欄位
time — 顯示日期,呼叫時間,優先順序/標記,PID
long —顯示所有的後設資料欄位並且用空行分隔訊息內容
比如:
adb logcat -v thread
紀錄檔等級
每一條紀錄檔記錄都有一個等級的
V:所有的資訊都列印
D:debug偵錯資訊
I: Information,資訊
W:warning,警告,編譯器認為你可能有問題;實際上可能沒問題
E:error,錯誤
F: fatal,致命的
S:靜默的,啥也不列印到紀錄檔
通過分析,v、s沒啥用,D、I、W對我們測試人員來說用處也不大,需要過濾掉 adb logcat -v time *:W > e:\log1.txt
其他命令
android 啟動SDK管理器
adb bugreport 檢視bug報告
adb get-serialno 獲取裝置的序列號
adb root 獲得Root許可權
adb remount 將system分割區從唯讀變成可讀可寫(需要ROOT許可權)
android list targets 顯示系統內所有的android平臺
android list avd 顯示系統中所有模擬器
ddms 啟動ddms
adb reboot 重新啟動
dmesg 列印出核心的偵錯資訊
adb shell 掛載到Linux的空間 root:
將adb指令掛載到Android的底層Linux下
adb shell top: 獲取linux下執行系統程序
我們會關注其中最後一列:包名 adb shell top -n 1 -d 1 -n 1:表示獲取後臺程序的次數 -d 1:獲取多次的時候,每次之間的時間間隔1秒
adb push <local> <remote>:將原生的檔案推播到遠端裝置上(模擬器或者是真機裝置)
adb pull <remote> <local>:將遠端裝置上檔案拉取到本地(pc)
adb shell dumpsys window | findstr mCurrentFocus :獲取當前焦點的包名及activity名