新聞中心
android 中l(wèi)inux 命令pm常見用法(安裝卸載app)
27種用法格式 :
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:國際域名空間、虛擬空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、蘭陵網(wǎng)站維護(hù)、網(wǎng)站推廣。
用法說明 :
1、 pm list packages : prints all packages, optionally only those whose package name contains the text in FILTER. Options:
例子:列出系統(tǒng)中所有packages
2、 pm list permission-groups : prints all known permission groups.
例子:
3、 pm list permissions : prints all known permissions, optionally only those in GROUP. Options:
例子:列出系統(tǒng)所有許可
4、 pm list instrumentation : use to list all test packages; optionally supply to list the test packages for a particular application. Options:
-f: list the .apk file for the test package.
5、 pm list features : prints all features of the system.
例子:列出所有手機(jī)特性
6、 pm list users : prints all users on the system.
例子:
7、 pm path : print the path to the .apk of the given PACKAGE.
例子:按包名查找apk文件所在路徑
8、 pm dump : print system state associated with the given PACKAGE.
9、 pm install : installs a package to the system. Options:
例子:
10、 pm uninstall : removes a package from the system. Options:
-k: keep the data and cache directories around after package removal. 保留數(shù)據(jù)
例子:
11、 pm clear : deletes all data associated with a package..
例子:只刪除數(shù)據(jù)
12、 pm enable, disable, disable-user, disable-until-used : these commands change the enabled state of a given package or component (written as "package/class").
13、 pm grant, revoke : these commands either grant or revoke permissions to applications. Only optional permissions the application has declared can be granted or revoked.
14、 pm get-install-location : returns the current install location.
15、 pm set-install-location : changes the default install location.
NOTE: this is only intended for debugging; using this can cause applications to break and other undersireable behavior.
16、 pm trim-caches : trim cache files to reach the given free space.
17、 pm create-user : create a new user with the given USER_NAME, printing the new user identifier of the user. 創(chuàng)建新用戶
18、 pm remove-user : remove the user with the given USER_IDENTIFIER, deleting all data associated with that user 。 按用戶ID刪除用戶
Android中AM、PM、dumpsys命令使用總結(jié)
am指令是 activity manager的縮寫,可以啟動(dòng)Service、Broadcast,殺進(jìn)程,監(jiān)控等功能,這些功能都非常便捷調(diào)試程序。
可以通過adb shell 進(jìn)入Android 的Linux命令界面,輸入am -help查看詳細(xì)命令,先介紹幾個(gè)簡(jiǎn)單用法,
命令格式如下
命令列表:
原理分析:am命令實(shí)的實(shí)現(xiàn)方式在Am.java,最終幾乎都是調(diào)用ActivityManagerService相應(yīng)的方法來完成的,am monitor除外。比如前面概述中介紹的命令am start -a android.intent.action.VIEW -d , 啟動(dòng)Acitivty最終調(diào)用的是ActivityManagerService類的startActivityAsUser()方法來完成的。再比如am kill-all命令,最終的實(shí)現(xiàn)工作是由ActivityManagerService的killBackgroundProcesses()方法完成的。
下面說一下[options]和 INTENT參數(shù)的意義以及如何正確取值。
主要是啟動(dòng)Activity命令am start [options] INTENT使用options參數(shù),接下來列舉Activity命令的[options]參數(shù):
啟動(dòng)Activity的實(shí)現(xiàn)原理: 存在-W參數(shù)則調(diào)用startActivityAndWait()方法來運(yùn)行,否則startActivityAsUser()。
命令
例如: 向pid=12345的進(jìn)程,發(fā)出level=RUNNING_LOW的收緊內(nèi)存命令
level取值范圍為: HIDDEN、RUNNING_MODERATE、BACKGROUND、RUNNING_LOW、MODERATE、RUNNING_CRITICAL、COMPLETE
am的子命令,startservice, stopservice, broadcast, kill, profile start, profile stop, dumpheap的可選參數(shù)都允許設(shè)置--user USER_ID。目前市面上的絕大多數(shù)手機(jī)還是單用戶模式,因此可以忽略該參數(shù),默認(rèn)為當(dāng)前用戶。
例如:?jiǎn)?dòng)id=10001的用戶的指定service。
Intent的參數(shù)和flags較多,為了方便,這里分為3種類型參數(shù),常用參數(shù),Extra參數(shù),F(xiàn)lags參數(shù)
實(shí)例
(1). 基本類型
參數(shù)es是Extra String首字母簡(jiǎn)稱,實(shí)例:
(2). 數(shù)組類型
參數(shù)eia,是Extra int array首字母簡(jiǎn)稱,多個(gè)value值之間以逗號(hào)隔開,實(shí)例:
(3). ArrayList類型
參數(shù)efal,是Extra float Array List首字母簡(jiǎn)稱,多個(gè)value值之間以逗號(hào)隔開,實(shí)例:
pm工具為包管理(package manager)的簡(jiǎn)稱,可以使用pm工具來執(zhí)行應(yīng)用的安裝和查詢應(yīng)用寶的信息、系統(tǒng)權(quán)限、控制應(yīng)用,pm工具是Android開發(fā)與測(cè)試過程中必不可少的工具,shell命令格式如下:
原理分析:pm命令實(shí)的實(shí)現(xiàn)方式在Pm.java,最后大多數(shù)都是調(diào)用PackageManagerService相應(yīng)的方法來完成的。disbale之后,在桌面和應(yīng)用程序列表里邊都看到不該app。
查看所有的package,
[options]參數(shù):
disabled + enabled = 總應(yīng)用個(gè)數(shù); 系統(tǒng) + 第三方 = 總應(yīng)用個(gè)數(shù)。
查看第3方應(yīng)用:
查看已經(jīng)被禁用的包名
FILTER參數(shù)
當(dāng)FILTER為不為空時(shí),則只會(huì)輸出包名帶有FILTER字段的應(yīng)用;當(dāng)FILTER為空時(shí),則默認(rèn)顯示所有滿足條件的應(yīng)用。
例如,查看包名帶有weather字段的包名
[options]參數(shù):
PATH參數(shù): 指的是需要安裝的apk所在的路徑
dumpsys是Android自帶的強(qiáng)大debug工具,從名字就可以看出,主要是用于dump 當(dāng)前android system的一些信息,是一項(xiàng)分析手機(jī)問題,運(yùn)行狀態(tài),使用情況等十分有效的手段。
實(shí)現(xiàn)原理
dumpsys的源碼結(jié)構(gòu)其實(shí)很簡(jiǎn)單,只有一個(gè)dumpsys.cpp
/frameworks/native/cmds/dumpsys/dumpsys.cpp
先通過defaultServiceManager()函數(shù)獲得ServiceManager對(duì)象,然后根據(jù)dumpsys傳進(jìn)來的參數(shù)通過函數(shù)checkService來找到具體的service, 并執(zhí)行該service的dump方法,達(dá)到dump service的目的。
不同的Android系統(tǒng)版本支持的命令有所不同,可通過下面命令查看當(dāng)前手機(jī)所支持的dump服務(wù),先進(jìn)入adb shell,再執(zhí)行如下命令:dumpsys -l。 這些服務(wù)名可能并看不出其調(diào)用的哪個(gè)服務(wù),可以通過下面指令:service list。
服務(wù)列表有很多,這里簡(jiǎn)單介紹幾種
通過下面命令可打印具體某一項(xiàng)服務(wù):dumpsys service,其中service便是前面表格中的服務(wù)名
接下來主要說下dumpsys activity 用法
命令
options可選值
dumpsys activity等價(jià)于依次輸出下面7條指令:
cmd可選值
命令
返回結(jié)果
上面的輸出結(jié)果可以分為以下四個(gè)部分
也可以只輸出某個(gè)pid或package的進(jìn)程信息:
下面以AmberLocker作為實(shí)例進(jìn)行分析
場(chǎng)景1:查詢某個(gè)App所有的Service狀態(tài)
解讀:Service類名為com.amber.lockscreen.LockerHeartService,包名為mobi.infolife.ezweather.locker.locker_2,baseDir(apk路徑)為/data/app/mobi.infolife.ezweather.locker.locker_2-2/base.apk,dataDir((apk數(shù)據(jù)路徑)
運(yùn)行在進(jìn)程pid=1115,進(jìn)程名為進(jìn)程名為mobi.infolife.ezweather.locker.locker_2,,uid=10060,還有創(chuàng)建時(shí)間等信息
場(chǎng)景2:查詢某個(gè)App所有的廣播狀態(tài)
場(chǎng)景3:查詢某個(gè)App所有的Activity狀態(tài)
場(chǎng)景4:查詢某個(gè)App的進(jìn)程狀態(tài)
格式:ProcessRecord{Hashcode pid:進(jìn)程名/uid},進(jìn)程pid=941,進(jìn)程名為mobi.infolife.ezweather.locker.locker_2:live,uid=10060.
該進(jìn)程中還有Services,Connections, Providers, Receivers,
場(chǎng)景5:查詢棧頂Activity
dumpsys 的命令還有很多,這里就不一一列舉了。
Linux常用命令
列出當(dāng)前目錄的文件
常用參數(shù):?
-a: 顯示當(dāng)前目錄的所有文件,包含隱藏文件;?
-l: 顯示文件詳情;?
-Z: 顯示文件的 SE Linux context。?
示例:ls -laZ [if !vml] [endif] 以 acct 為例: drwxr-xr-x:其中 d 代表該文件為目錄,若為 l 則為軟鏈接,軟連接后又箭頭代表其實(shí)際指向的文件,如etc - /system/etc 則訪問 etc 實(shí)際等同訪問/system/etc,留空則代表該文件為一個(gè)文件;rwxr-xr-x 代表其權(quán)限為 755,具體算法為將上述字段每 3 個(gè)分為 1 組得 rwx,r-x,r-x,凡是有字母標(biāo)記的皆計(jì)數(shù) 1,反之為 0,得二進(jìn)制 111,101,101,轉(zhuǎn)為 10 進(jìn)制數(shù)字即得7, 5,5 ,即為該文件權(quán)限; root root :依次代表該文件的所有者(owner)為 root,用戶組(group)為 root,上述屬性可通過 chown 命令修改,日常替換文件需與原文件該屬性維持一致; unlabeled:代表 SE Linux context。
前往指定目錄
更改文件所有者和用戶組? ?示例:chown root:root temfile?將 tmpfile文件 的所有者和用戶組從 meidia:media 更改為 root:root
將文件內(nèi)容顯示出來。
注意不要隨便去 cat 一個(gè)很大的文件或與 log 驅(qū)動(dòng)節(jié)點(diǎn)無關(guān)的文件,否則將造成串口輸出亂碼或死機(jī)?。。∈纠篶at /proc/kmsg 將打印出所有 kernel log。
用于抓取 android logcat 打印。
常用參數(shù):
-v : 設(shè)置打印格式,可用選項(xiàng)為 brief process tag thread raw time threadtime long,我們比較常用 logcat -v time,此時(shí)抓的 log 將在每一行開頭添加時(shí)間信息;
-s : 設(shè)置過濾器,過濾器的選擇取決于軟件中打印 log 時(shí)使用的 TAG ,如
ActivityManagerService.java 中的打印使用的 TAG = ActivityManager,則抓相關(guān)打印方法為 logcat -s ActivityManager;
-c : 清除 log 緩存,常用于清除之前的打印緩存,如復(fù)現(xiàn)某個(gè)必現(xiàn)問題,則可先執(zhí)行 logcat -c 再抓 logcat 重現(xiàn)必現(xiàn)手法以排除無關(guān) log 冗余信息影響問題定位; pm
包管理命令,用于管理安卓 app 應(yīng)用。
常用參數(shù):
-l : 顯示所有安裝包應(yīng)用,等同于 pm list packages
以 package:/system/priv-app/Launcher2.apk=com.android.launcher 為例:
Apk Launcher2 路徑位于/system/priv-app/Launcher2.apk,其包名為 com.android.launcher
path : 根據(jù)報(bào)名返回所在 apk 路徑
install : 安裝 apk
-r :安裝一個(gè)已經(jīng)存在的 apk 并保留其數(shù)據(jù);
-d : 允許降級(jí)安裝
如:pm install -r xxx.apk
uninstall : 卸載 apk,命令僅支持卸載 data/app,后接包名;
如:pm uninstall com.sys.migusmartlink.ott.tv //卸載包名為 com.sys.migusmartlink.ott.tv 的 apk
隨機(jī)測(cè)試指令,會(huì)自動(dòng)模擬一些用戶操作對(duì) APP 進(jìn)行壓力測(cè)試。
常用參數(shù):
-p :指定啟動(dòng)的 APK,我們比較常用的是 monkey -p com.xxx.yyy 1 來啟動(dòng)一個(gè) apk 的隨機(jī)頁面。
用于啟動(dòng)和管理 activity 和 service
常用參數(shù):
start : 后接 intent 啟動(dòng)一個(gè)頁面;
startservice : 后接 intent 啟動(dòng)一個(gè) service; stopservice :后接 intent 停止一個(gè) service; broadcast :后接一個(gè) intent 發(fā)送一個(gè)廣播; kill :后接一個(gè) app 包名,殺掉該 app 所有進(jìn)程;在 shell 環(huán)境下用如下參數(shù)表述一個(gè) intent:
[-a ACTION] [-d DATA_URI] [-t MIME_TYPE]
[-c CATEGORY [-c CATEGORY] ...]
[-e|--es EXTRA_KEY EXTRA_STRING_VALUE ...]
[--esn EXTRA_KEY ...]
[--ez EXTRA_KEY EXTRA_BOOLEAN_VALUE ...]
[--ei EXTRA_KEY EXTRA_INT_VALUE ...]
[--el EXTRA_KEY EXTRA_LONG_VALUE ...]
[--ef EXTRA_KEY EXTRA_FLOAT_VALUE ...]
[--eu EXTRA_KEY EXTRA_URI_VALUE ...]
[--ecn EXTRA_KEY EXTRA_COMPONENT_NAME_VALUE]
[--eia EXTRA_KEY EXTRA_INT_VALUE[,EXTRA_INT_VALUE...]]
[--ela EXTRA_KEY EXTRA_LONG_VALUE[,EXTRA_LONG_VALUE...]]
[--efa EXTRA_KEY EXTRA_FLOAT_VALUE[,EXTRA_FLOAT_VALUE...]]
[-n COMPONENT] [-f FLAGS]
示例:
如我們?cè)?logcat 抓到如下打印啟動(dòng)了播放器:
START u0 {act=android.intent.action.VIEW dat=[4KH265_60.000fps_9Mbps]Wetek-Astra-2m.mp4 typ=video/* flg=0x13000000 cmp=com.meson.videoplayer/.VideoPlayer} from pid 15204
則我們可以使用如下 am 指令來啟動(dòng)它:
am start -a android.intent.action.VIEW -d [4KH265_60.000fps_9Mbps]Wetek-Astra-2m.mp4 -t video/* -f 0x13000000 -n com.meson.videoplayer/.VideoPlayer am start -n com.android.settings/.Settings //啟動(dòng)原生安卓設(shè)置主頁
am broadcast -a com.chinamobile.action.KEY_PRESS_DOWN --ei keyCode 11 am broadcast -a com.chinamobile.action.IR_TEST --es irphycode "0x008EDD22" //發(fā)送廣播
查找命令,查找文件中是否包含指定字符串并輸出該行示例:
grep -rns "repeat" /system/etc/remote1.conf //找出/system/etc/remote1.conf 所有包含 repeat 的行并展示行號(hào)
參數(shù)說明:
-a:此選項(xiàng)通常在復(fù)制目錄時(shí)使用,它保留鏈接、文件屬性,并復(fù)制目錄下的所有內(nèi)容。其作用等于dpR參數(shù)組合。
-d:復(fù)制時(shí)保留鏈接。這里所說的鏈接相當(dāng)于Windows系統(tǒng)中的快捷方式。
-f:覆蓋已經(jīng)存在的目標(biāo)文件而不給出提示。
-i:與-f選項(xiàng)相反,在覆蓋目標(biāo)文件之前給出提示,要求用戶確認(rèn)是否覆蓋,回答"y"時(shí)目標(biāo)文件將被覆蓋。
-p:除復(fù)制文件的內(nèi)容外,還把修改時(shí)間和訪問權(quán)限也復(fù)制到新文件中。
-r:若給出的源文件是一個(gè)目錄文件,此時(shí)將復(fù)制該目錄下所有的子目錄和文件。
-l:不復(fù)制文件,只是生成鏈接文件。
命令示例:cp -a a? parentPath/sonPath/ a對(duì)應(yīng)當(dāng)前文件夾下目錄或文件名? 可替換為絕對(duì)路徑?
移動(dòng)指令,等效于 windows 的移動(dòng)和重命名。
示例:
mv /data/tmp1 /data/local/tmp2 //將 data/tmp1移動(dòng)到/data/local/ 并重命名為 tmp2
刪除指令,用于刪除文件和文件夾,示例:
rm -rf tmp // 刪除 tmp,建議加上-rf參數(shù),其會(huì)刪除 tmp 所有的目錄和文件。
創(chuàng)建目錄。常用參數(shù):
-p :若 mkdir -p 后接路徑包含不存在路徑則一并創(chuàng)建。
同步命令,常用于 cp 替換文件或指令結(jié)束后同步狀態(tài),有益無害。
重定向,即將一個(gè)命令的輸出指向另外路徑的文件,使用覆蓋模式,即重定向到的文件若存在將覆蓋里面的內(nèi)容。
示例:
logcat /data/xxx.log; //將 logcat輸出到/data/xxx.log;
cat /proc/kmsg /data/kmsg.log; //將 kmsg 打印輸出重定向到/data/kmsg.log
重定向,即將一個(gè)命令的輸出指向另外路徑的文件,使用拼接模式,即重定向到的文件若存在則將輸出拼接到原文件的后面。
示例:
logcat /data/xxx.log; //例如我們做 netreboot的時(shí)候需要每一次開關(guān)機(jī)的 log,則會(huì)用拼接模式記錄log。
將指令放至后臺(tái)靜默執(zhí)行。
依次執(zhí)行指令,若有指令執(zhí)行失敗,則后續(xù)指令不會(huì)執(zhí)行。
示例:
logcat -c logcat //先清除 logcat 緩存再抓取 log
當(dāng)前文章:linux命令pm 查看文件內(nèi)容的Linux命令
文章路徑:http://fisionsoft.com.cn/article/dojgecs.html