Adb大全應用管理

2022-02-02 搜狗測試
應用管理查看應用列表

查看應用列表的基本命令格式是

adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]

即在 adb shell pm list packages 的基礎上可以加一些參數進行過濾查看不同的列表,支持的過濾參數如下:

參數顯示列表無所有應用-f顯示應用關聯的 apk 文件-d只顯示 disabled 的應用-e只顯示 enabled 的應用-s只顯示系統應用-3隻顯示第三方應用-i顯示應用的 installer-u包含已卸載應用<FILTER>包名包含 <FILTER> 字符串所有應用

命令:

adb shell pm list packages

輸出示例:

package:com.android.smoketestpackage:com.example.android.livecubespackage:com.android.providers.telephonypackage:com.google.android.googlequicksearchboxpackage:com.android.providers.calendarpackage:com.android.providers.mediapackage:com.android.protipspackage:com.android.documentsuipackage:com.android.gallerypackage:com.android.externalstorage...// other packages here...

系統應用

命令:

adb shell pm list packages -s

第三方應用

命令:

adb shell pm list packages -3

包名包含某字符串的應用

比如要查看包名包含字符串 mazhuang 的應用列表,命令:

adb shell pm list packages mazhuang

當然也可以使用 grep 來過濾:

adb shell pm list packages | grep mazhuang

安裝 APK

命令格式:

adb install [-lrtsdg] <path_to_apk>

參數:

adb install 後面可以跟一些可選參數來控制安裝 APK 的行為,可用參數及含義如下:

參數含義-l將應用安裝到保護目錄 /mnt/asec-r允許覆蓋安裝-t允許安裝 AndroidManifest.xml 裡 application 指定 android:testOnly="true" 的應用-s將應用安裝到 sdcard-d允許降級覆蓋安裝-g授予所有運行時權限

運行命令後如果見到類似如下輸出(狀態為 Success)代表安裝成功:

[100%] /data/local/tmp/1.apk pkg: /data/local/tmp/1.apkSuccess

上面是當前最新版 v1.0.36 的 adb 的輸出,會顯示 push apk 文件到手機的進度百分比。

使用舊版本 adb 的輸出則是這樣的:

12040 KB/s (22205609 bytes in 1.801s) pkg: /data/local/tmp/SogouInput_android_v8.3_sweb.apkSuccess

而如果狀態為 Failure 則表示安裝失敗,比如:

[100%] /data/local/tmp/map-20160831.apk pkg: /data/local/tmp/map-20160831.apkFailure [INSTALL_FAILED_ALREADY_EXISTS]

常見安裝失敗輸出代碼、含義及可能的解決辦法如下:

輸出含義解決辦法INSTALL_FAILED_ALREADY_EXISTS應用已經存在,或卸載了但沒卸載乾淨adb install 時使用 -r 參數,或者先 adb uninstall <packagename> 再安裝INSTALL_FAILED_INVALID_APK無效的 APK 文件
INSTALL_FAILED_INVALID_URI無效的 APK 文件名確保 APK 文件名裡無中文INSTALL_FAILED_INSUFFICIENT_STORAGE空間不足清理空間INSTALL_FAILED_DUPLICATE_PACKAGE已經存在同名程序
INSTALL_FAILED_NO_SHARED_USER請求的共享用戶不存在
INSTALL_FAILED_UPDATE_INCOMPATIBLE以前安裝過同名應用,但卸載時數據沒有移除先 adb uninstall <packagename> 再安裝INSTALL_FAILED_SHARED_USER_INCOMPATIBLE請求的共享用戶存在但籤名不一致
INSTALL_FAILED_MISSING_SHARED_LIBRARY安裝包使用了設備上不可用的共享庫
INSTALL_FAILED_REPLACE_COULDNT_DELETE替換時無法刪除
INSTALL_FAILED_DEXOPTdex 優化驗證失敗或空間不足
INSTALL_FAILED_OLDER_SDK設備系統版本低於應用要求
INSTALL_FAILED_CONFLICTING_PROVIDER設備裡已經存在與應用裡同名的 content provider
INSTALL_FAILED_NEWER_SDK設備系統版本高於應用要求
INSTALL_FAILED_TEST_ONLY應用是 test-only 的,但安裝時沒有指定 -t 參數
INSTALL_FAILED_CPU_ABI_INCOMPATIBLE包含不兼容設備 CPU 應用程式二進位接口的 native code
INSTALL_FAILED_MISSING_FEATURE應用使用了設備不可用的功能
INSTALL_FAILED_CONTAINER_ERRORsdcard 訪問失敗確認 sdcard 可用,或者安裝到內置存儲INSTALL_FAILED_INVALID_INSTALL_LOCATION不能安裝到指定位置切換安裝位置,添加或刪除 -s 參數INSTALL_FAILED_MEDIA_UNAVAILABLE安裝位置不可用一般為 sdcard,確認 sdcard 可用或安裝到內置存儲INSTALL_FAILED_VERIFICATION_TIMEOUT驗證安裝包超時
INSTALL_FAILED_VERIFICATION_FAILURE驗證安裝包失敗
INSTALL_FAILED_PACKAGE_CHANGED應用與調用程序期望的不一致
INSTALL_FAILED_UID_CHANGED以前安裝過該應用,與本次分配的 UID 不一致清除以前安裝過的殘留文件INSTALL_FAILED_VERSION_DOWNGRADE已經安裝了該應用更高版本使用 -d 參數INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE已安裝 target SDK 支持運行時權限的同名應用,要安裝的版本不支持運行時權限
INSTALL_PARSE_FAILED_NOT_APK指定路徑不是文件,或不是以 .apk 結尾
INSTALL_PARSE_FAILED_BAD_MANIFEST無法解析的 AndroidManifest.xml 文件
INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION解析器遇到異常
INSTALL_PARSE_FAILED_NO_CERTIFICATES安裝包沒有籤名
INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES已安裝該應用,且籤名與 APK 文件不一致先卸載設備上的該應用,再安裝INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING解析 APK 文件時遇到 CertificateEncodingException
INSTALL_PARSE_FAILED_BAD_PACKAGE_NAMEmanifest 文件裡沒有或者使用了無效的包名
INSTALL_PARSE_FAILED_BAD_SHARED_USER_IDmanifest 文件裡指定了無效的共享用戶 ID
INSTALL_PARSE_FAILED_MANIFEST_MALFORMED解析 manifest 文件時遇到結構性錯誤
INSTALL_PARSE_FAILED_MANIFEST_EMPTY在 manifest 文件裡找不到找可操作標籤(instrumentation 或 application)
INSTALL_FAILED_INTERNAL_ERROR因系統問題安裝失敗
INSTALL_FAILED_USER_RESTRICTED用戶被限制安裝應用
INSTALL_FAILED_DUPLICATE_PERMISSION應用嘗試定義一個已經存在的權限名稱
INSTALL_FAILED_NO_MATCHING_ABIS應用包含設備的應用程式二進位接口不支持的 native code
INSTALL_CANCELED_BY_USER應用安裝需要在設備上確認,但未操作設備或點了取消在設備上同意安裝INSTALL_FAILED_ACWF_INCOMPATIBLE應用程式與設備不兼容
does not contain AndroidManifest.xml無效的 APK 文件
is not a valid zip file無效的 APK 文件
Offline設備未連接成功先將設備與 adb 連接成功unauthorized設備未授權允許調試
error: device not found沒有連接成功的設備先將設備與 adb 連接成功protocol failure設備已斷開連接先將設備與 adb 連接成功Unknown option: -sAndroid 2.2 以下不支持安裝到 sdcard不使用 -s 參數No space left on devicerm空間不足清理空間Permission denied ... sdcard ...sdcard 不可用

參考:PackageManager.java

adb install 內部原理簡介

adb install 實際是分三步完成:

push apk 文件到 /data/local/tmp。

調用 pm install 安裝。

刪除 /data/local/tmp 下的對應 apk 文件。

所以,必要的時候也可以根據這個步驟,手動分步執行安裝過程。

卸載應用

命令:

adb uninstall [-k] <packagename>

<packagename> 表示應用的包名,-k 參數可選,表示卸載應用但保留數據和緩存目錄。

命令示例:

adb uninstall com.qihoo360.mobilesafe

表示卸載 360 手機衛士。

清除應用數據與緩存

命令:

adb shell pm clear <packagename>

<packagename> 表示應用名包,這條命令的效果相當於在設置裡的應用信息界面點擊了「清除緩存」和「清除數據」。

命令示例:

adb shell pm clear com.qihoo360.mobilesafe

表示清除 360 手機衛士的數據和緩存。

查看前臺 Activity

命令:

adb shell dumpsys activity activities | grep mFocusedActivity

輸出示例:

mFocusedActivity: ActivityRecord{8079d7e u0 com.cyanogenmod.trebuchet/com.android.launcher3.Launcher t42}

其中的 com.cyanogenmod.trebuchet/com.android.launcher3.Launcher 就是當前處於前臺的 Activity。

查看正在運行的 Services

命令:

adb shell dumpsys activity services [<packagename>]

<packagename> 參數不是必須的,指定 <packagename> 表示查看與某個包名相關的 Services,不指定表示查看所有 Services。

<packagename> 不一定要給出完整的包名,比如運行 adb shell dumpsys activity services org.mazhuang,那麼包名 org.mazhuang.demo1、org.mazhuang.demo2 和 org.mazhuang123 等相關的 Services 都會列出來。

我們是每周三的黑盒測試組,我們專注於黑盒測試過程中的一切,包括但不局限於總結現有的工作成果,發掘新的工作方法,探尋高效的測試工具等,所有與黑盒測試相關的話題都可以在這裡討論

(群號:219234105,或者直接掃描下方二維碼)

點擊閱讀原文可以查看更全的 adb 用法~

相關焦點

  • ADB大法好!無需ROOT也可以使用APP Ops來管理手機應用權限
    但同時我們應該意識到手機內安裝的APP並不都是向善的,由於各方面原因,往往需要我們開通足夠的權限才能正常運行,而這些權限的開啟很可能洩露我們的隱私,尤其在安卓手機魚龍混雜的應用市場。針對這一情況,安卓平臺也有不少應用支持對應用的權限進行管理,關閉應用申請的不必要權限,並且不影響APP的使用,這就是今天我們要講的APP Ops。
  • 安卓測試常用的 ADB 命令大全,非常全!
    通過adb我們可以在Eclipse中方面通過DDMS來調試Android程序。藉助這個工具,我們可以管理設備或手機模擬器的狀態。還可以進行以下的操作:1)、快速更新設備或手機模擬器中的代碼,如應用或Android 系統升級;2)、在設備上運行shell命令;3)、管理設備或手機模擬器上的預定埠;4)、在設備或手機模擬器上複製或粘貼文件;2、工作環境:    adb的工作方式比較特殊採用監聽Socket TCP 5554等埠的方式讓IDE和Qemu
  • adb命令大全--使用詳解(二)
    概述adb的安裝命令語法應用管理與應用交互發送廣播文件管理模擬按鍵/輸入adb命令大全--使用詳解(一)查看日誌Android 系統的日誌分為兩部分表示設置在包名為 com.package1 和 com.package2 的應用裡隱藏狀態欄,在除了包名為 com.package3 的所有應用裡隱藏導航欄。
  • 【實用工具】adb命令刪除盒子或安卓手機內置應用
    聽著好像很高大上,其實就是一種調試工具,今天教大家如何用adb命令刪掉那些電視盒子中討厭的內置應用(就是不讓你刪除的app)(現在的網絡盒子還有幾個沒有廣告?)扯了半天廢話,下面進入正題這次攻略需要用到PC來配合完成刪除電視盒子內置應用PC上需要下載軟體刷機精靈(自己網上找,不解釋)第一步、電腦下載刷機精靈
  • Android測試 常用adb 命令總結
    PC 端的手機助手,諸如 360 手機助手、豌豆莢、應用寶等,其除了安裝第三方應用方便,其他的功能,基本上都可以通過 adb 命令去完成,這裡建議測試人員儘量不要在電腦上安裝這類手機助手,因為其自帶的 adb 程序可能會與 Android SDK 下的 adb 程序產生衝突,5037 埠被佔用,導致使用 adb 命令時無法連接到設備運行在 PC 端的 Service
  • ADB命令手冊大全
    設備連接管理查詢已連接設備/模擬器命令:adb devices輸出示例:List of devices attachedcf264b8f deviceemulator-5554  device10.129.164.6:5555 device應用管理查看應用列表查看應用列表的基本命令格式是
  • 史上最全ADB命令使用大全,一步教你成為玩機大神
    具體adb介紹可以google或百度。要使用adb命令,手機需要打開USB debug。二、adb命令大全安裝軟體adb install apk文件名稱.apk重新安裝該軟體adb install -r apk文件名稱.apk
  • 通過ADB USB方法從計算機安裝Android應用APK
    該應用程式完全無法從您的Android安裝。在這種情況下,我們可以使用ADB Android設備橋來推送我們的應用程式,或通過連接到您計算機的USB電纜安裝它們。ADB方法適用於所有Android設備,並且ADB可用於Windows,Mac OS X和linux,因此ADB方法適用於所有這些設備。
  • 常用ADB命令整理
    devicesps這個命令是查看當前連接的設備, 連接到計算機的android設備或者模擬器將會列出顯示若有多臺安卓設備,可以通過在adb後面加上 -s <設備id> 對指定設備進行裝包、卸載等操作 *啟動adbadb start-server *關閉adbadb kill-server
  • 史上最全 | Android 常用 adb 命令總結
    在開發或者測試的過程中,我們可以通過 adb 來管理多臺設備,其一般的格式為:adb [-e | -d | -s <設備序列號>] <子命令>在配好環境變量的前提下,在命令窗口當中輸入 adb help 或者直接輸入 adb ,將會列出所有的選項說明及子命令。
  • adb操作命令詳解及大全
    adb的工作方式比較特殊,採用監聽Socket TCP 5554等埠的方式讓IDE和Qemu通訊,默認情況下adb會daemon相關的網絡埠,所以當我們運行Eclipse時adb進程就會自動運行。adb有什麼用?藉助adb工具,我們可以管理設備或手機模擬器的狀態。
  • adb monkey測試大全
    8) 參數:  --kill-process-after-error(發生錯誤停止運行並保持當前狀態)用於指定當應用程式發生錯誤時,是否停止其運行。如果指定此參數,當應用程式發生錯誤時,應用程式停止運行並保持在當前狀態(注意:系統並不會結束該應用程式的進程)。
  • 34個Android常用adbshell命令匯總
    調試Android程序有時需要adb shell命令,adb全稱Android Debug Bridge,就是起到調試橋的作用。通過adb我們可以在Eclipse中通過DDMS來調試Android程序,說白了就是debug工具。adb通過監聽Socket TCP 5554等埠讓IDE和Qemu通訊。默認情況下當我們運行Eclipse時adb進程就會自動運行。
  • [電視盒子]通過deepin 中的 adb 命令行工具安裝 kodi 與 aptoide tv
    電視盒子畢竟大概都基於安卓系統開發,所以自然存在開發者模式並且可以安裝第三方應用(不能安裝第三方的話難不成用咕果), 通過所以安卓上的調試工具 adb 也可以用來管理電視盒子.▍本文摘要1、前提準備2、具體操作3、Kodi 與 aptoide tv介紹▍一、前提準備1、 電腦端:deepin v20系統 (帶adb)2、 盒子端:開發者模式/ adb 調試/安裝第三方應用3、 安卓安裝包:kodi 安裝包/aptoide tv 安裝包▍【01.1】Deepin自帶了 android sdk
  • 【ADB命令實戰】免ROOT停用小米手機系統應用
    對於未解鎖的手機,總存在那麼一些我們用不到,甚至看都不想看到的應用,但是沒辦法卸載,在這裡提供一些禁用掉這些應用的方法供參考:本內容是以小米的MIUI系統為例,其他品牌機型不確保可以成功,畢竟系統應用的包名是不一樣的,需要自己去發現.
  • 軟體測試進階:玩轉ADB之手機操作命令
    可以看出,Android的初衷是用adb這樣的一個工具來協助開發人員在開發android應用的過程中更快更好的調試apk,因此adb具有安裝卸載apk、拷貝推送文件、查看設備硬體信息、查看應用程式佔用資源、在設備執行shell命令等功能。
  • ADB調試有什麼用?電視、盒子開啟ADB調試安裝軟體教程!
    智能電視是基於網際網路浪潮衝擊形成的新產品,其目的是帶給用戶更便捷的體驗,目前已經成為電視的潮流趨勢,那你知道電視adb調試在哪嗎?電視adb有什麼作用,是什麼意思呢?我們一起來了解下。什麼是ADB調試?
  • 安卓開發測試小工具-adb
    adb的全稱為Android Debug Bridge,它是是Android SDK裡的一個輔助工具,PC可以通過adb工具對手機或模擬器進行各種操作,如安裝軟體、系統升級、運行shell命令等。ADB的組成客戶端(Client):可對安卓應用進行安裝、卸載和調試服務端(Service):管理客戶端到安卓設備應用的後臺adb進程。
  • Android自動化之adb模擬操作(可實現按鍵精靈和手機輸入法)
    我們知道,手機連接電腦,在電腦上輸入adb命令是可以實現安裝應用、卸載應用、monkey等事件的,甚至可以指定點擊屏幕某點、或者操作某按鍵的行為。在android應用裡,也可以執行adb命令,因此,這些操作是可以不藉助電腦、直接在某一android應用裡實現的。按鍵精靈就是通過該技術實現的。
  • ADB安卓調試命令
    基本用法命令語法為命令指定目標設備啟動/停止查看 adb 版本以 root 權限運行 adbd指定 adb server 的網絡埠設備連接管理查詢已連接設備/模擬器USB 連接無線連接(需要藉助 USB 線)無線連接(無需藉助 USB