Android shell下的pm指令


印出已安裝的package
pm list packages
在Android 7之後推出使用者機制之後,用這個指令能得到的套件不再是所有套件

印出安裝套件的位置
pm path {package name}
package:/data/app/{xxxx}/base.apk

可用來判斷是外裝的版本還是內建在系統的版本
/data/底下是外裝的版本, /system/底下是內建的

印出package版本,intent filter,權限,最佳化
dumpsys package {package name}

我自己很偷懶是會接搜尋DEFAULT印出啟動的activity
dumpsys package {package name} | grep -C 5 DEFAULT

常搭配grep印出版本資訊
dumpsys package{package name} | grep version

印出package所有資訊(含使用統計)
pm dump {package name}
不知道要查套件的哪個資訊,用這個指令印出來再查

啟用/關閉package
pm enable {package name}
pm disable {package name}

賦予package特定的runtime permission
pm grant {package name} {permission name}
只有targeSDKVersion指定在Android 6.0以上版本的package才能用這個方式賦予權限,不然這指令會寫legacy app not support runtime permission。在Android 6.0以下解決方式,就是重裝該package

有些permission是特殊的,需要開系統設定頁面才能賦予, 例如最上層繪製內容的android.permission.SYSTEM_ALERT_WINDOW, 得用下面這個方式開啟設定頁,
am start -a "android.settings.action.MANAGE_OVERLAY_PERMISSION" \
  -d "package:{package name}" \
  "com.android.settings/.Settings\$AppDrawOverlaySettingsActivity"

取消package特定的permission
pm revoke {package name} {permission name}
清除package資料
pm clear {package name}

留言