使用這些命令前,請先安裝 Android SDK 命令列工具、平台工具,以及所需的平台或系統映像。將 ANDROID_HOME 設定為 SDK 目錄,並將其 cmdline-tools/latest/bin、platform-tools 和 emulator 目錄加入 PATH。
Android Debug Bridge #
adb 會將主機端用戶端連線到本機 ADB 伺服器,以及裝置端的 adbd 精靈。當有多個裝置或模擬器可用時,請一律使用 -s SERIAL 明確選取目標。
adb devices -l
adb -s SERIAL get-state
adb -s SERIAL shell getprop ro.build.fingerprint
adb -s SERIAL rebootadb devices -l 會將目標回報為 device、offline 或 unauthorized。若要解決 unauthorized,請接受裝置顯示的 RSA 金鑰確認提示;只有在本機伺服器狀態過期時,才使用 adb kill-server,接著執行 adb start-server。在正式版本中,shell 使用者不是 root 使用者。
套件與檔案 #
使用 --replace 安裝 APK 可保留其資料。對於拆分 APK,請使用 install-multiple;對於套件中繼資料和權限管理,請從 shell 使用 pm。
adb -s SERIAL install --replace app.apk
adb -s SERIAL install-multiple base.apk config.arm64_v8a.apk config.en.apk
adb -s SERIAL uninstall com.example.app
adb -s SERIAL shell pm path com.example.app
adb -s SERIAL push local.txt /sdcard/Download/
adb -s SERIAL pull /sdcard/Download/report.txt .adb push 和 pull 會在 shell 可用的權限範圍內運作。分區儲存空間和應用程式私有目錄可能限制存取。僅對可偵錯應用程式使用 run-as PACKAGE。
Shell、記錄與診斷 #
對於二進位或未修改的命令輸出,請使用 exec-out,因為它不會配置虛擬終端機。為避免傳輸無界的記錄串流,請在來源端篩選 Logcat。
adb -s SERIAL shell cmd package list packages
adb -s SERIAL exec-out screencap -p > screenshot.png
adb -s SERIAL logcat -c
adb -s SERIAL logcat -v threadtime MyTag:D '*:S'
adb -s SERIAL bugreport report.zip
adb -s SERIAL shell dumpsys activity activitiesbugreport 會擷取記錄和系統狀態,且可能包含敏感資料。dumpsys 會公開服務專屬的診斷輸出;執行 adb shell dumpsys -l 可列出可用的服務。
網路與無線偵錯 #
forward 會讓裝置服務可透過主機連接埠存取。reverse 會讓模擬器或透過 USB 連線的裝置可存取主機服務。
adb -s SERIAL forward tcp:8080 tcp:8080
adb -s SERIAL reverse tcp:3000 tcp:3000
adb pair HOST:PAIRING_PORT
adb connect HOST:CONNECT_PORT無線偵錯需要 Android 的已驗證配對流程。僅在受信任的網路上使用,完成後使用 adb disconnect HOST:CONNECT_PORT 中斷連線。
Fastboot #
fastboot 會與 bootloader 通訊,而不是與正在執行的 Android 系統通訊。透過裝置 UI 進入 fastboot 模式,或執行 adb reboot bootloader。命令集、可用分割區和解鎖原則因裝置而異。
fastboot devices -l
fastboot getvar product
fastboot getvar current-slot
fastboot reboot fastboot使用 fastboot getvar all 檢查 bootloader 變數,但部分裝置會限制其輸出。A/B 裝置會透過 current-slot 公開插槽;請使用映像套件文件所記載的刷寫程序,而不要推測分割區名稱。
刷寫與復原 #
執行寫入操作前,請確認選取的裝置、映像雜湊、分割區名稱、插槽和 bootloader 原則。
shasum -a 256 boot.img
fastboot flash boot boot.img
fastboot --set-active=a
fastboot reboot解鎖、刷寫關鍵分割區和變更插槽可能會清除資料,或使裝置無法開機。請勿對未知裝置或為其他產品建置的映像使用 fastboot flash。
其他 #
SDK 與虛擬裝置管理 #
sdkmanager 會安裝 SDK 套件,而 avdmanager 會建立 Android Virtual Device(AVD)。
sdkmanager --list
sdkmanager "platform-tools" "platforms;android-35"
sdkmanager "system-images;android-35;google_apis;x86_64"
avdmanager create avd --name api-35 --package "system-images;android-35;google_apis;x86_64"使用 sdkmanager --licenses 接受授權。在 CI 中固定套件修訂版本,因為未限定版本的套件更新可能會改變建置環境。
模擬器 #
emulator -list-avds
emulator -avd api-35 -no-snapshot
emulator -avd api-35 -wipe-data使用 -no-snapshot 進行全新開機;僅在有意重設狀態時使用 -wipe-data。
APK 與 App Bundle 檢查 #
apkanalyzer 無需安裝應用程式即可讀取 APK 中繼資料和位元組碼。
apkanalyzer manifest application-id app.apk
apkanalyzer apk summary app.apk
apkanalyzer dex packages app.apkbundletool 會將 Android App Bundle 轉換為可安裝的 APK 集合,並選取特定裝置的拆分 APK。
java -jar bundletool-all.jar build-apks --bundle=app.aab --output=app.apks
java -jar bundletool-all.jar install-apks --apks=app.apks重現拆分選取時,請在 get-device-spec 中使用 --connected-device。將簽署金鑰和產生的 .apks 封存視為發行構件。
Gradle #
Gradle wrapper 提供可重現的專案本機建置工具。
./gradlew assembleDebug
./gradlew installDebug
./gradlew lintDebug
./gradlew connectedDebugAndroidTest請執行 wrapper,而不是全域安裝的 Gradle 版本。connectedDebugAndroidTest 需要可用的模擬器或透過 USB 連線的裝置。
評論
在 GitHub 上閱讀或評論(發表評論需要登入)