常有很多命令可以通過串口終端輸入,得到結(jié)果,在程序中,通常我們需要得到某些命令的結(jié)果,在代碼中執(zhí)行命令,并將結(jié)果返回。
成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),江門網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:江門等地區(qū)。江門做網(wǎng)站價(jià)格咨詢:18982081108
有兩個類:CommandHelper.java和CommandResult.java 第一個類用于處理命令,第二個則用于返回一個結(jié)果
package com.example.task_aidl;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class CommandHelper {
//default time out, in millseconds
public static int DEFAULT_TIMEOUT;
public static final int DEFAULT_INTERVAL = 1000;
public static long START;
public static CommandResult exec(String command) throws IOException, InterruptedException {
Process process = Runtime.getRuntime().exec(command);//創(chuàng)建一個字進(jìn)程,并保存在process對象中
CommandResult commandResult = wait(process);
27種用法格式 :
用法說明 :
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刪除用戶
列出當(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,留空則代表該文件為一個文件;rwxr-xr-x 代表其權(quán)限為 755,具體算法為將上述字段每 3 個分為 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 一個很大的文件或與 log 驅(qū)動節(jié)點(diǎn)無關(guān)的文件,否則將造成串口輸出亂碼或死機(jī)!??!示例:cat /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)某個必現(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 :安裝一個已經(jīng)存在的 apk 并保留其數(shù)據(jù);
-d : 允許降級安裝
如:pm install -r xxx.apk
uninstall : 卸載 apk,命令僅支持卸載 data/app,后接包名;
如:pm uninstall com.sys.migusmartlink.ott.tv //卸載包名為 com.sys.migusmartlink.ott.tv 的 apk
隨機(jī)測試指令,會自動模擬一些用戶操作對 APP 進(jìn)行壓力測試。
常用參數(shù):
-p :指定啟動的 APK,我們比較常用的是 monkey -p com.xxx.yyy 1 來啟動一個 apk 的隨機(jī)頁面。
用于啟動和管理 activity 和 service
常用參數(shù):
start : 后接 intent 啟動一個頁面;
startservice : 后接 intent 啟動一個 service; stopservice :后接 intent 停止一個 service; broadcast :后接一個 intent 發(fā)送一個廣播; kill :后接一個 app 包名,殺掉該 app 所有進(jìn)程;在 shell 環(huán)境下用如下參數(shù)表述一個 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]
示例:
如我們在 logcat 抓到如下打印啟動了播放器:
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 指令來啟動它:
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 //啟動原生安卓設(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 的行并展示行號
參數(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:若給出的源文件是一個目錄文件,此時(shí)將復(fù)制該目錄下所有的子目錄和文件。
-l:不復(fù)制文件,只是生成鏈接文件。
命令示例:cp -a a? parentPath/sonPath/ a對應(yīng)當(dāng)前文件夾下目錄或文件名? 可替換為絕對路徑?
移動指令,等效于 windows 的移動和重命名。
示例:
mv /data/tmp1 /data/local/tmp2 //將 data/tmp1移動到/data/local/ 并重命名為 tmp2
刪除指令,用于刪除文件和文件夾,示例:
rm -rf tmp // 刪除 tmp,建議加上-rf參數(shù),其會刪除 tmp 所有的目錄和文件。
創(chuàng)建目錄。常用參數(shù):
-p :若 mkdir -p 后接路徑包含不存在路徑則一并創(chuàng)建。
同步命令,常用于 cp 替換文件或指令結(jié)束后同步狀態(tài),有益無害。
重定向,即將一個命令的輸出指向另外路徑的文件,使用覆蓋模式,即重定向到的文件若存在將覆蓋里面的內(nèi)容。
示例:
logcat /data/xxx.log; //將 logcat輸出到/data/xxx.log;
cat /proc/kmsg /data/kmsg.log; //將 kmsg 打印輸出重定向到/data/kmsg.log
重定向,即將一個命令的輸出指向另外路徑的文件,使用拼接模式,即重定向到的文件若存在則將輸出拼接到原文件的后面。
示例:
logcat /data/xxx.log; //例如我們做 netreboot的時(shí)候需要每一次開關(guān)機(jī)的 log,則會用拼接模式記錄log。
將指令放至后臺靜默執(zhí)行。
依次執(zhí)行指令,若有指令執(zhí)行失敗,則后續(xù)指令不會執(zhí)行。
示例:
logcat -c logcat //先清除 logcat 緩存再抓取 log
APKTool是GOOGLE提供的APK編譯工具,能夠反編譯及回編譯apk,同時(shí)安裝反編譯系統(tǒng)apk所需要的framework-res框架,清理上次反編譯文件夾等功能。需要java支持。
常見命令:
decode
該命令用于進(jìn)行反編譯apk文件,一般用法為
apktool d file.apk dir
file.apk代表了要反編譯的apk文件的路徑,最好寫絕對路徑,比如C:\MusicPlayer.apk
dir代表了反編譯后的文件的存儲位置,比如C:\MusicPlayer
如果你給定的dir已經(jīng)存在,那么輸入完該命令后會提示你,并且無法執(zhí)行,需要你重新修改命令加入-f指令
apktool d –f file.apk dir
這樣就會強(qiáng)行覆蓋已經(jīng)存在的文件
build
該命令用于編譯修改好的文件,一般用法為
apktool b dir
這里的dir就是剛才你反編譯時(shí)輸入的dir(如C:\MusicPlayer),輸入這行命令后,如果一切正常,你會發(fā)現(xiàn)C:\MusicPlayer內(nèi)多了2個文件夾build和dist,其中分別存儲著編譯過程中逐個編譯的文件以及最終打包的apk文件。
install
install-framework命令用于為APKTool安裝特定的framework-res.apk文件,以方便進(jìn)行反編譯一些與ROM相互依賴的APK文件。