安卓系統與ADB詳解

2020-10-18 20:00:40

一、android系統

1. android系統的結構

  1. Linux核心層
    Android系統基於Linux2.6核心,這一層為Android裝置各種硬體提供了底層驅動,如顯示驅動,音訊驅動,照相機驅動,藍芽驅動,WIFI驅動,電源管理等

  2. 系統執行庫層
    程式庫:
    Android包含一些C/C++庫,這些庫能被Android系統中不同的元件使用。他們通過Android應用程式框架為開發者提供服務

    Android執行庫:
    Android包括了一個核心庫,該核心庫提供了Java程式語言核心庫的大多數功能。

  3. 應用框架層

    這一層主要提供構建應用程式是可能用到的各種API,Android自帶的一些核心應用就是使用這些API完成的,開發者也可以通過使用API來構建自己的應用程式
    活動管理者(Activity Manager):控制應用程式生命週期和活動棧的所有方面
    內容提供器(Content Providers):允許程式之間釋出和分享資料。
    資源管理器(Resource Manager):提供對非程式碼嵌入資源的存取,如字串、顏色設定和使用者介面佈局。
    通知管理器(Notification Manager):允許應用程式顯示對話方塊或者通知給使用者
    檢視系統(View System):一個可拓展的檢視集合,用於建立應用程式使用者介面

  4. 應用程式
    頂層中有所有的Android應用程式,包括通訊錄、瀏覽器等,你寫的應用程式也被安裝在這層;所有的的應用程式都是使用Java語言編寫的。

2. Android應用的構成

  1. Android四大元件(活動,服務,內容提供者,廣播接收器)
    1. 活動(Activity)
      Activity從字面上的意思理解是活動行動的意思
      在Android中,activity指與使用者互動的介面,從你開啟一個android應用所見到的第一個頁面,就是一個Activity。
      Activity作為一個可見的介面,給使用者以良好的體驗很重要,所以佈局的漂亮與否決定一個應用使用者體驗
      activity的生命週期:即「產生、執行、銷燬」,但是這其中會呼叫許多方法
      onCreate(建立)
      onStart(啟用)
      onResume(恢復)
      onPause(暫停)
      onStop(停止)
      onDestroy(銷燬)
      onRestart(重新啟動)
    2. 服務(Service)
      Android下的服務是在後臺執行,也是沒有介面,一旦啟動就會在後臺執行,直到手機關機為止。
      比如:使用者可以使用QQ音樂在後臺進行音樂播放,雖然退出了操作介面但是還在正常執行。
      Service承擔著大部分的資料處理工作。
    3. 內容提供者( ContentProvider )
      Android 平臺提供了Content Provider 使一個程式的指定資料集提供給其他應用程式。
      可以理解為是一個特殊的「資料庫」,主要是用來存取資料。
    4. 廣播接收器( BroadcastReceiver )
      主要用於接收系統或者app傳送的廣播事件
      廣播:傳送訊息和接收訊息

3. Android應用測試的常用術語

  1. 系統碎片化:通俗的講亦是指整個安卓平臺的差異化越來越大。
  2. 螢幕尺寸:螢幕對角線的長度。(英寸)
  3. 解析度:解析度(螢幕解析度)是螢幕影象的精密度,是指顯示器所能顯示的畫素有多少。
    由於螢幕上的點、線和麵都是由畫素組成的,顯示器可顯示的畫素越多,畫面就越精細,同樣的螢幕區域內能顯示的資訊也越多,所以解析度是個非常重要的效能指標之一。
  4. 畫素:畫素是指由影象的小方格組成的,這些小方塊都有一個明確的位置和被分配的色彩數值,小方格顏色和位置就決定該影象所呈現出來的樣子。
    可以將畫素視為整個影象中不可分割的單位或者是元素
  5. 網路制式:手機網路制式主要包括GSM、CDMA、3G、4G四種。

4. Android環境搭建介紹

  1. 真機測試環境
  2. 第三方模擬器測試
  3. Android自帶的模擬器測試(需要搭建Android開發環境)

5. 真機環境的搭建

真機環境的搭建(將真機連線在pc上,通過pc上操作來控制手機裝置的app)

  • Android手機用usb傳輸線連線到pc的usb口上
  • 開啟手機的開發者模式(預設沒開啟):設定->關於手機->版本號10.0.0.162,連續點五次以上,會提示已經開啟開發者模式
  • 在設定的最上端,搜尋「開發人員選項」,點進去
  • 勾選其中的USB偵錯,彈出的提示框,要點確定確認
  • 勾選僅充電模式下允許ADB偵錯
  • 在螢幕的通知欄(螢幕從上往下劃),其中usb連線的通知,點進去,都選傳輸檔案mtp
  • 在cmd->adb devices,如果能夠列出裝置的序列號就說明環境搭建成功

6. 第三方模擬器

  • 夜神
  • iTools

7. Android開發環境

  1. jdk環境搭建
  2. adt環境搭建
    設定Android環境。使得其可以使用adb命令。
    設定變數「ANDROID_SDK_HOME」
    使用者名稱:ANDROID_SDK_HOME
    變數值:D:\alsp\java_android\adt-bundle-windows-x86_64_20140101\sdk
    修改Path。
    在path的變數值的最後加上:
    .;%ANDROID_SDK_HOME%\platform-tools;%ANDROID_SDK_HOME%\tools;
    開啟cmd,輸入adb進行驗證

二、ADB

1. ADB簡介

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裝置之間上傳/下載檔案

2. ADB指令的用法

  1. 關閉和啟動adb服務 —ok

    adb kill-server    關閉ADB服務
    adb start-server     啟動ADB服務
    
  2. 檢視裝置連線情況

    adb devices
    

    檢視當前連線的裝置, 連線到計算機的android裝置或者模擬器將會列表顯示
    輸出資訊格式為:

    [serialNumber] [state]
    

    例如:
    在這裡插入圖片描述

  3. 安裝和解除安裝APK

    adb install <apk檔案路徑> ---將指定的apk檔案安裝到裝置上 
    adb uninstall <軟體名> ---解除安裝裝置上的指定程式 這個軟體名是手機上的程式包,如com.tencent.mm
    adb uninstall -k <軟體名> --解除安裝程式但是保留其設定和快取檔案
    com.tencent.mobileqq --qq的包名
    
  4. 指定裝置進行操作
    當有多個裝置連線時,可以用下面的命令來直接選擇執行命令的裝置

    adb [-d|-e|-s <serial Number>] <command>
    d:真機(多個裝置中只有一個真機時適用)
    e:模擬器(多個裝置中只有一個模擬器時適用)
    s:序列號
    

    例如:
    adb -d install helloWorld.apk
    adb -s emulator-5556 install helloWorld.apk

  5. 列出當前裝置上的程式包

    adb shell pm list packages
    

    刪除微信APP

    adb uninstall com.tencent.mm
    
  6. 上傳和下載檔案

    1. adb push <本地路徑> <遠端路徑>
      例如,把pc上的檔案或資料夾上傳到裝置
      adb push foo.txt    /sdcard/foo.txt
      
    2. adb pull <遠端路徑> <本地路徑>
      例如,把裝置上的檔案或資料夾下載到pc
      adb pull system/app  D:\apps`
      
      演示步驟:
      1.開啟cmd,輸入adb shell,然後進入cd data/app
      2.可以看到字尾為.apk的檔案
      3.新開啟一個cmd,輸入adb pull /data/app/com.tencent.mobileqq-1.apk E:
      4.在E槽上可以看到字尾為.apk的檔案
  7. 紀錄檔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
    
  8. 其他命令

    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名