ADB (Android Debug Bridge)
說明:下面一些命令需要有root許可權才能執行成功
快速啟動dos窗口執行adb:
1. adb.exe所在路徑添加到系統環境變數中
2. 配置快捷鍵啟動dos
進入C:\WINDOWS\system32目錄下,找到cmd.exe.
右擊菜單 "發送到" -> 桌面快捷方式。
在桌面上右擊"快捷方式 到 cmd.exe" -> "屬性" -> "快捷方式"頁
-> 游標高亮"快捷鍵" -> 按下自定義快捷鍵 (如:Ctrl + Alt + Z)
任何情況下,按下Ctrl + Alt + Z啟動dos窗口就可以執行adb命令了
-----------查看設備連接狀態 系列-----------
adb get-serialno 獲取設備的ID和序列號serialNumber
adb devices 查詢當前計算機上連接那些設備(包括模擬器和手機),輸出格式: [serialNumber] [state]
adb get-state 查看模擬器/設施的當前狀態.
說明:
序列號[serialNumber]——由adb創建的一個字元串,這個字元串通過自己的控制埠<type>-<consolePort>
唯一地識別一個模擬器/設備實例。一個序列號的例子: emulator-5554
-----------發送命令到設備 系列-----------
adb [-d|-e|-s <serialNumber>] <command>
-d 發送命令給usb連接的設備
-e 發送命令到模擬器設備
-s <serialNumber> 發送命令到指定設備
如啟動手機設備shell: adb -d shell
adb forward <local> <remote>發布埠,可以設置任意的埠號,
做為主機向模擬器或設備的請求埠。如:adb forward tcp:5555 tcp:8000
adb reboot 重啟手機
adb remount 將system分區重新掛載為可讀寫分區
adb kill-server 終止adb服務進程
adb start-server 重啟adb服務進程
adb root 已root許可權重啟adb服務
adb wait-for-device 在模擬器/設備連接之前把命令轉載在adb的命令器中
adb jdwp 查看指定的設施的可用的JDWP信息.
可以用 forward jdwp:<pid> 埠映射信息來連接指定的JDWP進程.例如:
adb forward tcp:8000 jdwp:472
jdb -attach localhost:8000
adb shell am 命令可以啟動應用程序
adb shell input text <string> 向設備輸入文本(游標所在的文本框)
adb shell input keyevent <event_code> 向設備發送按鍵事件
如:
在編輯簡訊時,往文本框輸入文本:adb shell input text "hello"
向手機發送鍵值回Home:adb shell input keyevent 3
event_code 參考view/KeyEvent.java中的 KEYCODE_*
public static final int KEYCODE_SOFT_LEFT = 1;
public static final int KEYCODE_SOFT_RIGHT = 2;
public static final int KEYCODE_HOME = 3;
public static final int KEYCODE_BACK = 4;
public static final int KEYCODE_CALL = 5;
public static final int KEYCODE_ENDCALL = 6;
-----------安裝卸載 系列-----------
adb install [-l] [-r] <file> - push this package file to the device and install it
('-l' means forward-lock the app)
('-r' means reinstall the app, keeping its data)
adb uninstall [-k] <package> - remove this app package from the device
('-k' means keep the data and cache directories)
如:
adb install d:\hello.apk
adb unstall com.huawei.hello
說明:如果帶-r選項重新安裝apk時,安裝在 /data/local/tmp/目錄下,手機重啟後還是使用原來的apk.
-----------文件操作 系列-----------
adb push <local> <remote> - file/dir to device
adb pull <remote> <local> - file/dir from device
-----------基本linux shell命令 系列-----------
adb shell [command]
ls 列出目錄下的文件和文件夾
cd 切換目錄
rm 刪除目錄和文件
cat 查看文件內容
ps 可以看那個進程再跑
ps -x [PID] 查看單個進程的狀態
top 可以看那個進程的佔用率最高
su 切換到root用戶
kill [pid] 殺死一個進程
chmod 777 <file> 修改該文件為可執行許可權
詳細使用情況可以登錄一台Linux伺服器在shell下查看幫助手冊, man <command>
-----------查看系統狀態和信息 系列-----------
adb shell procrank 查詢各進程內存使用情況
adb shell service list 查看services信息
adb shell cat /proc/meminfo 查看當前的內存情況
adb shell cat /proc/cpuinfo 查看CPU信息(硬體)
adb shell cat /proc/iomem 查看IO內存分區
adb shell getprop 列出系統所有屬性
adb shell getprop | findstr "gsm" 列出包含gsm的屬性
adb shell setprop <key> <value> 修改系統屬性
adb shell sqlite3 可以執行sql語句查看資料庫信息, 具體使用情況待調查
-----------Log 系列-----------
adb logcat [ <filter-spec> ] - View device log
1~~~~~~~~~~~查看可用日誌緩沖區:
adb logcat -b radio — 查看緩沖區的相關的信息.
adb logcat -b events — 查看和事件相關的的緩沖區.
adb logcat -b main — 查看主要的日誌緩沖區
2~~~~~~~~~~~過濾日誌輸出:
過濾器語句按照下面的格式描tag:priority ... , tag 表示是標簽, priority 是表示標簽的報告的最低等級
adb logcat *:W 顯示優先順序為warning或更高的日誌信息
adb logcat ActivityManager:I MyApp:D *:S
日誌的標簽是系統部件原始信息的一個簡要的標志。(比如:「View」就是查看系統的標簽).
優先順序有下列集中,是按照從低到高順利排列的:
V — Verbose (lowest priority)
D — Debug
I — Info
W — Warning
E — Error
F — Fatal
S — Silent (highest priority, on which nothing is ever printed)
如果你電腦上運行logcat ,相比在遠程adbshell端,你還可以為環境變數ANDROID_LOG_TAGS :輸入一個參數來設置默認的過濾
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
需要注意的是ANDROID_LOG_TAGS 過濾器如果通過遠程shell運行logcat 或用adb shell logcat 來運行模擬器/設備不能輸出日誌.
3~~~~~~~~~~~控制日誌輸出格式:
日誌信息包括了許多元數據域包括標簽和優先順序。可以修改日誌的輸出格式,所以可以顯示出特定的元數據域。可以通過 -v 選項得到格式化輸出日誌的相關信息.
brief — Display priority/tag and PID of originating process (the default format).
process — Display PID only.
tag — Display the priority/tag only.
thread — Display process:thread and priority/tag only.
raw — Display the raw log message, with no other metadata fields.
time — Display the date, invocation time, priority/tag, and PID of the originating process.
long — Display all metadata fields and separate messages with a blank lines.
當啟動了logcat ,你可以通過-v 選項來指定輸出格式:
[adb] logcat [-v <format>]
下面是用 thread 來產生的日誌格式:
adb logcat -v thread
需要注意的是你只能-v 選項來規定輸出格式 option.
4~~~~~~~~~~~Logcat命令列表
-b <buffer> 載入一個可使用的日誌緩沖區供查看,比如event 和radio . 默認值是main 。具體查看Viewing Alternative Log Buffers.
-c 清楚屏幕上的日誌.
-d 輸出日誌到屏幕上.
-f <filename> 指定輸出日誌信息的<filename> ,默認是stdout .
-g 輸出指定的日誌緩沖區,輸出後退出.
-n <count> 設置日誌的最大數目<count> .,默認值是4,需要和 -r 選項一起使用。
-r <kbytes> 每<kbytes> 時輸出日誌,默認值為16,需要和-f 選項一起使用.
-s 設置默認的過濾級別為silent.
-v <format> 設置日誌輸入格式,默認的是brief 格式,要知道更多的支持的格式,參看Controlling Log Output Format
adb bugreport - return all information from the device
that should be included in a bug report.
adb shell dmesg 查詢內核緩沖區信息
adb shell mpstate 各類信息,比如進程信息,內存信息,進程是否異常,kernnel的log等
adb shell mpcrash
adb shell mpsys 查詢所有service的狀態
-----------其他 -----------
模擬器使用鏡像sdcard
用SDK里的mksdcard工具來創建FAT32磁碟鏡像並在模擬器啟動時載入它。這樣創建鏡像:? mksdcard <size> <file>,
比如我要創建一個64M的SD卡模擬文件,文件路徑是在D:\workspace\sdcard.img
mksdcard 64000000 D:\workspace\sdcard.img
Emulator –sdcard D:\workspace\sdcard.img
或者在eclipse的run菜單的open run dialog對話框中配置啟動參數。
#top
Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [ -t ] [ -h ]
-m num Maximum number of processes to display.
-n num Updates to show before exiting.
-d num Seconds to wait between updates.
-s col Column to sort by (cpu,vss,rss,thr).
-t Show threads instead of processes.
-h Display this help screen.
********* simple selection ********* ********* selection by list *********
-A all processes -C by command name
-N negate selection -G by real group ID (supports names)
-a all w/ tty except session leaders -U by real user ID (supports names)
-d all except session leaders -g by session OR by effective group name
-e all processes -p by process ID
T all processes on this terminal -s processes in the sessions given
a all w/ tty, including other users -t by tty
g OBSOLETE -- DO NOT USE -u by effective user ID (supports names)
r only running processes U processes for specified users
x processes w/o controlling ttys t by tty
*********** output format ********** *********** long options ***********
-o,o user-defined -f full --Group --User --pid --cols --ppid
-j,j job control s signal --group --user --sid --rows --info
-O,O preloaded -o v virtual memory --cumulative --format --deselect
-l,l long u user-oriented --sort --tty --forest --version
-F extra full X registers --heading --no-heading --context
********* misc options *********
-V,V show version L list format codes f ASCII art forest
-m,m,-L,-T,H threads S children in sum -y change -l format
-M,Z security data c true command name -c scheling class
-w,w wide output n numeric WCHAN,UID -H process hierarchy
netstat -ano 查看網路連狀態
顯示協議統計信息和當前 TCP/IP 網路連接。
NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval]
-a 顯示所有連接和監聽埠。
-b 顯示包含於創建每個連接或監聽埠的
可執行組件。在某些情況下已知可執行組件
擁有多個獨立組件,並且在這些情況下
包含於創建連接或監聽埠的組件序列
被顯示。這種情況下,可執行組件名
在底部的 [] 中,頂部是其調用的組件,
等等,直到 TCP/IP 部分。注意此選項
可能需要很長時間,如果沒有足夠許可權
可能失敗。
-e 顯示乙太網統計信息。此選項可以與 -s
選項組合使用。
-n 以數字形式顯示地址和埠號。
-o 顯示與每個連接相關的所屬進程 ID。
-p proto 顯示 proto 指定的協議的連接;proto 可以是
下列協議之一: TCP、UDP、TCPv6 或 UDPv6。
如果與 -s 選項一起使用以顯示按協議統計信息,proto 可以是下列協議之一:
IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。
-r 顯示路由表。
-s 顯示按協議統計信息。默認地,顯示 IP、
IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的統計信息;
-p 選項用於指定默認情況的子集。
-v 與 -b 選項一起使用時將顯示包含於
為所有可執行組件創建連接或監聽埠的
組件。
interval 重新顯示選定統計信息,每次顯示之間
暫停時間間隔(以秒計)。按 CTRL+C 停止重新
顯示統計信息。如果省略,netstat 顯示當前
配置信息(只顯示一次)
pm
usage: pm [list|path|install|uninstall]
pm list packages [-f]
pm list permission-groups
pm list permissions [-g] [-f] [-d] [-u] [GROUP]
pm list instrumentation [-f] [TARGET-PACKAGE]
pm list features
pm path PACKAGE
pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] PATH
pm uninstall [-k] PACKAGE
pm enable PACKAGE_OR_COMPONENT
pm disable PACKAGE_OR_COMPONENT
The list packages command prints all packages. Options:
-f: see their associated file.
The list permission-groups command prints all known
permission groups.
The list permissions command prints all known
permissions, optionally only those in GROUP. Options:
-g: organize by group.
-f: print all information.
-s: short summary.
-d: only list dangerous permissions.
-u: list only the permissions users will see.
The list instrumentation command prints all instrumentations,
or only those that target a specified package. Options:
-f: see their associated file.
The list features command prints all features of the system.
The path command prints the path to the .apk of a package.
The install command installs a package to the system. Options:
-l: install the package with FORWARD_LOCK.
-r: reinstall an exisiting app, keeping its data.
-t: allow test .apks to be installed.
-i: specify the installer package name.
The uninstall command removes a package from the system. Options:
-k: keep the data and cache directories around.
after the package removal.
The enable and disable commands change the enabled state of
a given package or component (written as "package/class").
查看stdout 和stderr
在默認狀態下,Android系統有stdout 和 stderr (System.out和System.err )輸出到/dev/null ,
在運行Dalvik VM的進程中,有一個系統可以備份日誌文件。在這種情況下,系統會用stdout 和stderr 和優先順序 I.來記錄日誌信息
通過這種方法指定輸出的路徑,停止運行的模擬器/設備,然後通過用setprop 命令遠程輸入日誌
$ adb shell stop
$ adb shell setprop log.redirect-stdio true
$ adb shell start系統直到你關閉模擬器/設備前設置會一直保留,可以通過添加/data/local.prop 可以使用模擬器/設備上的默認設置
UI/軟體 試驗程序 Monkey
當Monkey程序在模擬器或設備運行的時候,如果用戶出發了比如點擊,觸摸,手勢或一些系統級別的事件的時候,
它就會產生隨機脈沖,所以可以用Monkey用隨機重復的方法去負荷測試你開發的軟體.
最簡單的方法就是用用下面的命令來使用Monkey,這個命令將會啟動你的軟體並且觸發500個事件.
$ adb shell monkey -v -p your.package.name 500
更多的關於命令Monkey的命令的信息,可以查看UI/Application Exerciser Monkey documentation page.
B. 安卓手機怎麼打開文件夾找文件夾
准確找到手機應用所在的文件夾的具體操作步驟如下:
1、在此以華為榮耀10為例,首先在手機上點擊「文件管理」應用程序的圖標。
C. 安卓手機連接電腦怎麼讀取文件夾
可以通過工具「豌豆莢」來讀取手機文件夾。
具體操作如下:
1、在電腦中打開「豌豆莢」。
D. 安卓adb命令怎麼打開系統文件,怎麼重命名,怎麼復制,怎麼刪除
具體步驟:
首先要用數據線連接計算機android設備
1.計算機發doc界面輸入adb shell 進入手機shell交互終端界面圖
2.輸入mount即看前掛載情況
3.面圖片紅框內ro,rw系統應用許可權ro前system讀許可權rw前system讀寫許可權所要更改許可權即
4.更改許可權,命令:mount -o remount,rw /dev/block/mtdblock3 /system(吧ro許可權修改rwrw表示刪除)
輸入直接進入/system/app刪應用刪除命令rm指令
E. 常用的安卓手機adb命令總結
很早就想整理一下自己平時常用的一些adb命令,不僅為了便於以後查找,而且整理的過程自己又重新復習了一遍,但是當我開始在度娘一搜的時候,發現很多人已經寫的非常詳細了,尤其是當我發現了這篇adb概括
心中一句NND,怎麼可以寫的這么詳細,瞬間沒了想寫這篇文章的慾望,如果你點了鏈接發現確實很全,那麼恭喜你可以關掉這篇了,哈哈哈。
我就不這么想的,雖然很全,但不是我常用的,因人而異,所以我就權當記筆記+替這哥們宣傳了。
– adb devices , 獲取設備列表及設備狀態
設備的狀態有 3 種
device , 設備連接正常
offline , 設備離線,連接出現異常
unauthorized 設備為進行授權,需要在設備上是否允許調試對話框進行授權
offline情況解決辦法,先執行adb kill-server 命令,再執行adb start-server 命令,再嘗試adb devices 查看列表,如果還是offline,來來來,使用必殺技,重啟大法。
當電腦連接多個android設備並可用時,所有的adb命令都需要指定設備後執行(當然你也可以移除多餘的設備)
adb -s <設備名稱> install/uninstall/shell/pull/push等命令
– adb install app在pc硬碟路徑,選中app直接拖入即可
常見的錯誤情況
INSTALL_FAILED_TEST_ONLY, 安裝的app的debug版本的,未簽名,adb install -t 路徑即可安裝
INSTALL_FAILED_DUPLICATE_PACKAGE, 已經安裝相同包名的app, 先卸載再安裝
– adb uninstall app的包名,卸載app
adb pull 將 Android 設備上的文件或者文件夾復制到本地
adb pull sdcard/Android/111.txt E:\
小技巧,可以將本地路徑指定為桌面,方便查看, 在桌面按住shift鍵,滑鼠右鍵選擇在此處打開命令行窗口,直接輸入adb pull sdcard/Android/111.txt 執行,就可將111.txt復制到桌面。
前提是設備已經獲取root許可權
adb root
adb remount
adb push 將pc上文件復制到android設備中,修改room原生應用時比較頻繁使用,如settings.apk, launcher3.apk
– adb shell pm 命令
adb shell pm list package 列出android設備上的所有app
adb shell pm list package -s 列出android設備上的系統級別app
adb shell pm list package -3 列出android設備上的第三方app(用戶安裝的)
adb shell pm list package -f 列出app包名及對應的apk名及存放位置
adb shell pm list package -i 列出app包名及其安裝來源(應用市場名稱)
adb shell pm mp app包名 列出app的相關信息,類似獲取Manifest文件內容
-查看前台 Activity
adb shell mpsys activity activities 「| grep mFocusedActivity」
-adb shell am 命令
最常用的就是啟動指定的activity和發送指定的廣播
啟動指定的activity
操作指令 adb shell am start -n 包名/類名
註:如果啟動activity時,出現如下錯誤
java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000 > > cmp=com.mediatek.engineermode/.io.Gpio } from null (pid=3083, uid=2000) not exported from uid 1001
解決辦法,1、如果是你自己可控的app,那麼找到你要調用的activity在manifest.xml中,增加
1
配置即可, android:name="" 可以為空字元串。
2、如果是不可控的app,例如我調用的系統原生app,那麼你就洗洗睡吧,別折騰了,除非你修改源碼和上邊一樣操作,重新push替換原來的app。
啟動默認瀏覽器打開一個網頁
adb shell am start -a android.intent.action.VIEW -d * ********
先停止目標應用,再啟動
adb shell am start -s com.android.camera/.Camera
啟動相機
adb shell am start -n com.android.camera/.Camera
啟動設置
adb shell am start -n com.android.settings/com.android.settings.Settings
啟動Wifi設置
adb shell am start -n com.android.settings/com.android.settings.wifi.WifiSettings
啟動藍牙設置
adb shell am start -n com.android.settings/com.android.settings.bluetooth.BluetoothSettings
其它的類似只要你能在manifest中找到配置的,都可以通過這種方法來調用
發送指定的廣播
操作指令 adb shell am broadcast -a 廣播名 --ei/es/ez 參數名 參數值 --ei/es/ez 參數名 參數值
–ei integer 值
–es String 值
–ez boolean 值
–ef float 值
–el long 值
例如之前寫的
Android6.0 源碼修改之Setting列表配置項動態添加和靜態添加, 當中就通過發送廣播來接收增加配置列表項
adb shell am broadcast -a cn.dynamic.add.settingcategoryitem --es location 「0-2」 --es title 「紅」 --es intent 「com.android.settings.SCHEDULE_POWER_ON_OFF_SETTING」
-adb shell input keycode 指令
HOME 鍵 adb shell input keycode 3
返回鍵 adb shell input keycode 4
打開瀏覽器 adb shell input keycode 64
-adb shell wm 指令
屏幕解析度 adb shell wm size
屏幕密度 adb shell wm density
adb shell wm density 320/480/640 可修改屏幕密度查看效果,對應Launcher圖標會縮放
adb shell ifconfig 命令
IP 地址 adb shell ifconfig 「| grep Mask」
WIFI 地址 adb shell ifconfig wlan0
狀態欄和導航欄的顯示隱藏
命令:
adb shell settings put global policy_control
可由如下幾種鍵及其對應的值組成,格式為 key1=value1:key2=value2。
key 含義
immersive.full 同時隱藏
immersive.status 隱藏狀態欄
immersive.navigation 隱藏導航欄
immersive.preconfirms 同時顯示
這些鍵對應的值可則如下值用逗號組合:
value 含義
apps 所有應用
所有界面
packagename 指定應用
packagename 排除指定應用
例如:
adb shell settings put global policy_control immersive.full=*
表示設置在所有界面下都同時隱藏狀態欄和導航欄。(重啟也不會失效,恢復需調用下面的命令)
adb shell settings put global policy_control immersive.preconfirms=*
表示恢復顯示
adb shell settings put global policy_control immersive.status=com.package1,com.package2:immersive.navigation=apps,-com.package3
表示設置在包名為 com.package1 和 com.package2 的應用里隱藏狀態欄,在除了包名為 com.package3 的所有應用里隱藏導航欄
adb shell am force-stop app 關閉APP
adb shell pm clear APP app進程被殺死,且會清楚所有數據
1:查找手機安裝應用的包名:adb shell pm list packages -f
2:查看系統盤符:adb shell df
3:查看Log 1:adb shell 2: logcat | grep "abc"
4:刪除應用:1:adbremount 2:adb shell 3:cdsystem/app 4:rm *.apk
5:安裝APK: adbinstall -r *.apk 或者 adb push*.apk /system/app
6:查看APP啟動的時間指令
adb shell am start -W -ncom.android.dialer/.DialtactsActivity (W是大寫)執行命令後APP會自 動啟動,其中ThisTime即是本次 App啟動所花費的時間。
7:查看包名中當前所在進程信息:adb shell ps | grep +包名
8:查看Activity運行的任務棧:adb shell mpsys activity
9:查看鍵值:adb logcat | grep intercep -i
10:查看模塊所佔有的CPU資源:adb shell top -d 2 -m 10
11:查看可用系統的權
$ adb shell
# pm list permissions
12:模擬按鍵的輸入:adb shell input keyevent + 鍵值
eg: adb shell input keyevent 82 表示menu
adb shell input keyevent 3 表示home
adb shell input keyevent 19 表示up
adb shell input keyevent 20 表示down
adb shell input keyevent 21 表示left
adb shell input keyevent 22 表示right
adb shell input keyevent 66 表示enter
adb shell input keyevent 4 表示back
13:模擬滑動輸入:adb shell input touchscreen <x1> <y1> <x2> <y2>
eg: adb shell input touchscreen swipe 18 665 18 350
14:啟動一個Activity : adb shell am start -n 包名+類名
15:錄制屏幕:adb shell screenrecord /sdcard/demo.mp4
16:重新啟動:adb reboot
17:Monkey的基本用法下面是一個更為典型的命令行示例,它啟動指定的應用程序,並向其發送500個偽隨機事件:
$ adb shell monkey -p your.package.name -v 500
如果跑桌面或者systemUi的monkey的話:
adb shell monkey -v -v -p 桌麵包名 --pct-touch 50 --pct-motion 30 --pct-syskeys 20 --throttle 300 -s 200 200000
18:查找第三方應用的詳細信息:
adb shell mpsys package +第三方包名(com.txznet.webchat)
F. 安卓機怎麼查看手機文件夾
查看安卓手機自身存儲空間文件夾的方法:
1、打開手機。
2、打開「應用程序」。
3、找到並打開「文件管理」。
4、找到需要打開的文件夾即可。
安卓系統手機SD卡文件管理方法:
1、打開「應用程序」。
2、找到並打開「文件管理」。
3、打開「EXsdcard」。
4、即可開始管理SD卡的文件。
G. 如何通過命令行或者使用代碼打開一個apk文件
命令行打開方式:
1、首先你要打開android模擬器
(下面命令行打開的4步驟我是引用網路上的)
1).找到SDK的tools文件夾,我的在D:\android-sdk-windows\tools; 2).如果沒有創建AVD的話,可以用命令android list targets查看各版本對應的id; 然後android create avd --target 5 --name Android2.2;//我這里5對應的是android2.2 3).用命令android list avd查看自己以創建的AVD 4).emulator -debug avd_config -avd Android2.2就可以打開AVD了,就是有點慢
或者在eclipse上直接打開一個android程序。
2、然後輸入 adb install xxx.apk
,在模擬器上點擊對應應用即可(安裝apk後的應用程序名不知道的話得仔細找哦,肯定在模擬器上的)。
註:xxx.apk包含路徑名,在命令行你只要直接把apk文件拖至windows命令窗口就可以載入完整路徑了。
代碼打開方式:
需要將apk拷貝至shared_prefs文件夾下
(Eclipse下工具欄window--show view--other--Android--File Explorer,
也許打開的File Explorer為空白,這個你肯定忘了先運行下面代碼構成的工程。出現目錄後找到data/data/工程包名/shared_prefs,ok)
public class APKTest extends Activity { private SharedPreferences metafer = null; ApplicationInfo mAppInfo = null; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //apk安裝或卸載路徑 String installPath = "/data/data/com.hyz/shared_prefs/matchmusic.apk"; //新建shared_prefs文件夾 mkShared_prefs(); //安裝apk installApk(installPath); //卸載apk mpApk(installPath); } public void mpApk(String path) { ApplicationInfo mAppInfo = null; PackageManager pm = getApplicationContext().getPackageManager(); PackageInfo info = pm.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES); if(info != null) { mAppInfo = info.applicationInfo; } Uri uri = Uri.fromParts("package", mAppInfo.packageName, null); Intent it = new Intent(Intent.ACTION_DELETE, uri); startActivity(it); } public void installApk(String path) { Intent ret = new Intent(); ret.setDataAndType(Uri.fromFile(new File(path)),"application/vnd.android.package-archive"); ret.setAction(Intent.ACTION_VIEW); startActivity(ret); } public void mkShared_prefs() { if (metafer == null) { // metafer = getSharedPreferences("Vdmc", 0); metafer = PreferenceManager.getDefaultSharedPreferences(this); } SharedPreferences.Editor editor = metafer.edit(); //editor.putString("IMSI", ""); editor.commit(); } }