dumpsys-package


dumpsys-package

ams和pms是android系統最重要的系統服務,本文解析dumpsys package命令,看哪些PMS相關的系統信息,數據結構是運行時可以查看的。

命令提示

console:/ # dumpsys package -h
Package manager dump options:
  [-h] [-f] [--checkin] [cmd] ...
    --checkin: dump for a checkin
    -f: print details of intent filters
    -h: print this help
  cmd may be one of:
    l[ibraries]: list known shared libraries                                   
    f[eatures]: list device features                                           
    k[eysets]: print known keysets                                             
    r[esolvers] [activity|service|receiver|content]: dump intent resolvers     
    perm[issions]: dump permissions                                            
    permission [name ...]: dump declaration and use of given permission        
    pref[erred]: print preferred package settings                              
    preferred-xml [--full]: print preferred package settings as xml            
    prov[iders]: dump content providers                                        
    p[ackages]: dump installed packages                                        
    s[hared-users]: dump shared user IDs                                       
    m[essages]: print collected runtime messages                               
    v[erifiers]: print package verifier info                                   
    d[omain-preferred-apps]: print domains preferred apps                      
    i[ntent-filter-verifiers]|ifv: print intent filter verifier info           
    version: print database version info                                       
    write: write current settings now                                          
    installs: details about install sessions                                   
    check-permission <permission> <package> [<user>]: does pkg hold perm?      
    dexopt: dump dexopt state                                                  
    compiler-stats: dump compiler statistics                                   
    service-permissions: dump permissions required by services                 
    <package.name>: info about given package                                   


AuthBlog:秋城https://www.cnblogs.com/houser0323

數據結構

命令 源碼 關鍵字 釋義
l[ibraries] mSharedLibraries Libraries: 所有庫信息
f[eatures] mAvailableFeatures Features: 系統支持的feature
k[eysets] mSettings.mKeySetManagerService.dumpLPr() Key Set Manager: keyset信息
r[esolvers] IntentResolver.java#dump() Activity Resolver Table: 所有四大組件intent接收器信息
perm[issions] mSettings.dumpPermissionsLPr() Permissions: 所有權限信息
permission [name ...] mSettings.dumpPermissionsLPr() Permissions: 特定權限信息
pref[erred] PreferredIntentResolver#dump() Preferred Activities User launcher activity偏好信息
preferred-xml [--full] mSettings.writePreferredActivitiesLPr 生成xml
prov[iders] PackageParser.Provider mProviders.mProviders Registered ContentProviders: 所有ContentProvider信息
p[ackages] mSettings.dumpPackagesLPr() Packages: 所有package信息
s[hared-users] mSettings.dumpSharedUsersLPr() Shared users: 所有共享uid信息
m[essages] mSettings.dumpReadMessagesLPr()/dumpCriticalInfo() Settings parse messages 讀系統packageSetting解析信息mReadMessages、讀uiderrors.txt
v[erifiers] mRequiredVerifierPackage Verifiers: 需要驗證的apk
d[omain-preferred-apps] PackageSetting#getIntentFilterVerificationInfo() App verification status: 域驗證信息
i[ntent-filter-verifiers] mIntentFilterVerifierComponent Intent Filter Verifier: AppLink相關
version mSettings.dumpVersionLPr() Database versions: 數據庫版本
write mSettings.writeLPr() 這是寫操作用於替換packages.xml
installs mInstallerService.dump() Active install sessions: 活動中的install session信息
check-permission [ ] checkPermission() 返回值0表有;-1表無
dexopt dumpDexoptStateLPr() Dexopt state: 所有apk的dexopt信息
compiler-stats dumpCompilerStatsLPr() Compiler stats: 所有apk的編譯器信息
service-permissions serviceInfo.permission Service permissions: 所有service的權限信息
<package.name> DumpState.OPTION_SHOW_FILTERS 特定apk的所有信息-最常用

常用操作

1.包名和apk名互查

$ dumpsys package com.android.systemui |grep -i path
    codePath=/system/priv-app/SystemUI
    resourcePath=/system/priv-app/SystemUI
    path: /system/priv-app/SystemUI/SystemUI.apk

知道包名查路徑還可以用pm path <package name>更方便,但是知道apk名稱查包名就需要dumpsys了,如下

$ dumpsys package p |grep -B 5 SystemUI|grep Package
  Package [com.android.systemui] (633b2ed):
    pkg=Package{8e872f3 com.android.systemui}

2.查看系統支持的feature

pm list features命令作用相同

$ dumpsys package f
......
  android.hardware.bluetooth
  android.hardware.usb.host
......

3.查看apk權限信息

$ dumpsys package <package name>

打印中查找關鍵字

  • "declared permissions:"應用自定義權限
  • "requested permissions:"AndroidManifest.xml文件中所有request的權限
  • "install permissions:"安裝時就賦予的權限
  • "runtime permissions:"運行時權限

4.查看apk的flag信息

查看某個apk的flag信息,如systemui

$ dumpsys package com.android.systemui |grep Flags                               
    privateFlags=[ PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION DEFAULT_TO_DEVICE_PROTECTED_STORAGE DIRECT_BOOT_AWARE PRIVILEGED ]
    pkgFlags=[ SYSTEM HAS_CODE PERSISTENT ]

可以看到systemui是system系統應用也是persistent應用,如果要查找所有的system應用可以用pm list packages -s,查找所有PERSISTENT的應用呢,可以dumpsys package p然后在結果中過濾,除此之外還有另外兩種方法dumpsys meminfologcat -b events |grep -i am_proc_start

總結

dumpsys是一個很強大的命令,大多數的系統信息都可以用它抓出來,當你想快捷獲取系統信息又沒有思路時,不妨嘗試一下dumpsys,會有驚喜。
dumpsys package能輕松獲取多數的PMS數據結構的值,還能替換更新packages.xml。
示例中也多次提到pm命令,這倆結合的話,有關PMS模塊的大部分系統信息和操作都可以便捷實現,有效提高開發調試速度。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM