編輯:關於Android編程
am工具的含義為Activity Manager。
usage: am [subcommand] [options]
start an Activity: am start [-D] [-W]
-D: enable debugging
-W: wait for launch to complete
start a Service: am startservice
send a broadcast Intent: am broadcast
start an Instrumentation: am instrument [flags]
-r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT)
-e : set argument to
-p : write profiling data to
-w: wait for instrumentation to finish before returning
start profiling: am profile start
stop profiling: am profile stop
start monitoring: am monitor [--gdb ]
--gdb: start gdbserv on the given port at crash/ANR
主要參數Intent:
顯式啟動Activity:
am start -n {包名}/{包名}.{活動名}
隱式啟動Activity:
am start -a {指定的action} -d {URI}
隱式啟動服務:
am startService -a {指定的action}
隱式發送廣播:
am broadcast -a {指定的action}
啟動Calculator應用:
am start -n com.android.calculator2/com.android.calculator2.Calculator
Starting: Intent { cmp=com.android.calculator2/.Calculator }
am start -n com.android.calculator2/.Calculator
Starting: Intent { cmp=com.android.calculator2/.Calculator }
啟動應用並帶有URL參數:
am start -a android.intent.action.VIEW -d http://www.baidu.com
Starting: Intent { act=android.intent.action.VIEW dat=http://www.baidu.com }
am start -a android.intent.action.CALL -d tel:12345
Starting: Intent { act=android.intent.action.CALL dat=tel:xxx-xxx-xxxx }
幾種VIEW類型(查看)的啟動:
am start -a android.intent.action.VIEW -d file:///sdcard/image.jpg -t image/*
am start -a android.intent.action.VIEW -d file:///sdcard/audio.mp3 -t audio/*
am start -a android.intent.action.VIEW -d file:///sdcard/video.3gp -t video/*
幾種GET_CONTENT類型(獲取)的啟動:
am start -a android.intent.action.GET_CONTENT -t image/*
am start -a android.intent.action.GET_CONTENT -t video/*
am start -a android.intent.action.GET_CONTENT -t audio/*
注意:
[–activity-brought-to-front]等的參數和 android.content.Intent類的FLAG_XXX內容相對應。
-f參數可以直接加代表10進制或者16進制的FLAG數字。
PM工具的含義為Package Manager。
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] [-s] [-f] PATH
pm uninstall [-k] PACKAGE
pm enable PACKAGE_OR_COMPONENT
pm disable PACKAGE_OR_COMPONENT
pm setInstallLocation [0/auto] [1/internal] [2/external]
列出安裝包的信息。
pm list packages -f
另一個文件: /data/system/packages.xml
禁止包(或者組件),清除包的數據,可以排除個別包的影響。
pm disable {包名.組件名}
pm enable {包名.組件名}
pm clear {包名}
直接安裝包
pm install /sdcard/SkeletonApp.apk
pkg: /sdcard/SkeletonApp.apk Success D/installd( 36): DexInv:
— BEGIN ‘/data/app/com.example.android.skeletonapp-1.apk’ — D/dalvikvm( 763): DexOpt: load 37ms, verify+opt 52ms D/installd(
36): DexInv: — END ‘/data/app/com.example.android.skeletonapp-1.apk’
(success) —
指定路徑,進行安裝
pm set-install-location
pm get-install-location
input工具用於模擬用戶的按鍵輸入和文本輸入。
input
usage: input [text|keyevent]
input text
input keyevent
input tap
input swipe
模擬按鍵的輸入,按鍵碼參考 android.View.KeyEvent。
input keyevent 82 # 菜單事件(MENU)
input keyevent 4 # 回退事件 (BACK)
input text “i_love_beijing” # 輸入文字
模擬按鍵輸入可以用於簡單的程序調試,在Activity中實現onKeyUp()方法即可。
Android 4.0+才可以使用tap和swipe子命令。
ime工具用於輸入法管理。
ime
usage: ime list [-a] [-s]
ime enable ID
ime disable ID
ime set ID
列出輸入法:
ime list
選擇輸入法
ime set
腳本實際上是利用了Android的shell系統運行的,同樣可以傳入命令行的參數。 通過使用am調用Activity,通過input進行輸入事件,可以模擬一個可執行程序的執行過程。 腳本中還可以傳遞shell中傳入的參數。
編寫一個自動化腳本:
echo $*
am start -a android.intent.action.VIEW -d about://blank
echo Enter Browser
input keyevent 82
echo Browser Menu
input keyevent 22
input keyevent 22
input keyevent 66
input keyevent 4
echo Browser Main
運行腳本:
chmod 777 test.sh
./test.sh
(我就不告訴你,很多同學通過這種方式去抓別人app的數據)
Android應用程序APK調試的幾個要點:
核心方法是利用命令行的Intent。 單次調用可使用BroadcastReceiver組件 後台調用可使用Service組件 BroadcastReceiver組件也可放入其他組件內部 調用的參數使用Intent傳入;啟動:am startservice和am broadcast
首要參數使用-a,數據參數為-d
AndroidManifest.xml當中要定義IntentFilter
帶數據的Intet和不帶數據的Intent命令行不同
:// : //…/ # ?
Host是字符串,Port是整數,Path是多個字符串, Segments是字符串,QueryParameter是無順序的多個參數。
android.net.Uri類可以完成參數的
public abstract String getScheme ()
public abstract String getHost()
public abstract int getPort()
public abstract String getFragment()
public abstract String getPath()
public abstract List getPathSegments()
public String getQueryParameter(String key)
public List getQueryParameters(String key)
方法:
am startservice -a android.intent.action.testtools.stub1 command://?key=10
am startservice -a android.intent.action.testtools.stub1 -d command://?key=5
am startservice -a android.intent.action.testtools.stub2 -d “command://?key1=hello&key2=120”
am broadcast -a android.intent.action.testtools.stub
am broadcast -a android.intent.action.testtools.stub command://abc:1234#hello
am broadcast -a android.intent.action.testtools.stub command:#/sdcard/test.txt
am broadcast -a android.intent.action.testtools.stub command://abc/hi1/hi2/hi3#hello
參數解析方法
String action = intent.getAction();
Uri data = intent.getData();
Log.i(TAG, action = + action + data = + data);
if(null != data){
String host = data.getHost();
int port = data.getPort();
String path = data.getPath();
String fragment = data.getFragment();
Log.i(TAG, [Host]:[ + host + ] + [Port]:[ + port + ] + [Path]:[ + path + ] + [Fragment]:[ + fragment + ] );
List pathlist = data.getPathSegments();
for(int i=0;i< pathlist.size();i++ ){
Log.i(TAG, PATH[+i+]:[ + pathlist.get(i) + ] );
}
}
注意:不同的Android版本組件是否可以直接使用的問題。
netcfg -h
usage: netcfg [ {dhcp|up|down}]
netcfg
vdc volume list
ndc interface list
service -h
Usage: service [-h|-?]
service list
service check SERVICE
service call SERVICE CODE [i32 INT | s16 STR] … Options: i32: Write the integer INT into the send parcel. s16: Write the
UTF-16 string STR into the send parcel.
service list
iphonesubinfo等就是ServiceManager管理的服務名稱。
直接利用Binder方式調用。
Android具有prop屬性系統,使用getprop和setprop可以獲得屬性和設置屬性。
getprop查看屬性值
getprop ro.secure
setprZ喎?/kf/ware/vc/" target="_blank" class="keylink">vcCDJ6NbDyvTQ1Na1PC9zdHJvbmc+PC9wPg0KPGJsb2NrcXVvdGU+DQoJPHA+dXNhZ2U6IHNldHByb3A8L3A+DQo8L2Jsb2NrcXVvdGU+DQo8cD48c3Ryb25nPndhdGNocHJvcHO87LLiyvTQ1Na1seS7rzwvc3Ryb25nPjxiciAvPg0Kd2F0Y2hwcm9wc9PD09q84LLiyvTQ1LXEseS7r6Os1rG909TL0NDV4rj2w/zB7qOsvavQzrPJ0a27t6Osvauw0c+1zbPDv9K7uPbK9NDUtcSx5LuvwdCz9qGjPC9wPg0KPHA+PHN0cm9uZz53YXRjaHByb3BzPC9zdHJvbmc+PC9wPg0KPGJsb2NrcXVvdGU+DQoJPHA+Jmx0O8qxvOQmZ3Q7IMr00NQgPSAmbHNxdW87yvTQ1Na1JnJzcXVvOyAmaGVsbGlwOyZoZWxsaXA7PGJyIC8+DQoJJmx0O8qxvOQmZ3Q7IMr00NQgPSAmbHNxdW87yvTQ1Na1JnJzcXVvOzwvcD4NCjwvYmxvY2txdW90ZT4NCjxociAvPg0KPHA+c3RhcnS6zXN0b3DD/MHuo6zTw9Pav6rKvLrNzaPWuWluaXS9+LPM1tC1xHNlcnZpY2WhozwvcD4NCjxwPjxzdHJvbmc+c3RhcnQge3NlcnZpY2VfbmFtZX08L3N0cm9uZz48YnIgLz4NCjxzdHJvbmc+c3RvcCB7c2VydmljZV9uYW1lfTwvc3Ryb25nPjwvcD4NCjxwPr3ivvZBbmRyb2lkz7XNs7XEZGFlbW9usbtraWxs1q6689bY0MLG9LavtcTOysziPC9wPg0KPGgyIGlkPQ=="系統信息查看小工具">系統信息查看小工具
Android中還提供了dumpstate、dumpsys、bugreport等幾個工具,用於查看系統各個方面的信息。 dumpstate dumpsys procrank抓取內存信息 procrank VSS = Virtual Set Size 由於Android系統基於Linux實現,在系統中可以使用Linux中標准的方法進行調試。在Android中常用的通用Linux的調試方法主要包括以下幾個: ps 使用ps -t <進程id>則表示查看某一個進程中的線程。 /proc/<進程id>/為某一個進程的目錄。 cat /proc/34/cmdline cat /proc/34/status #進程狀態 printenv命令用於查看系統中的各個環境變量 printenv moun命令用於查看系統的掛接的文件系統分區。 mount mount -t vfat /dev/block/mmcblk0p1 /sdcard ifconfig用於配置網絡 ifconfig eth0 192.168.0.1 netmask 255.255.255.0 route命令用於網絡路由 route add default dev eth0 第一行表示增加了網卡eth0,第二行表示為這個網絡設備設置網關(gw)。 iftop實時流量監控工具 netstat vmstat top命令表示列出系統最耗資源的進程,主要可以檢測各個進程對CPU的消耗情況,信息將一屏一屏的階段性地打印到終端上。 top tcpdump tcpdump -i any -p -s 0 /*
工具用於將系統設備的狀態導出,通過訪問sys文件系統和調用其他工具來完成。
用於查看應用的狀態。
由於dumpstate和dumpsys兩個工具導出的內容都較多,最好在主機端配合adb來使用。
procrank工具用於抓取Android進程的內存使用信息。
RSS = Resident Set Size
PSS = Proportional Set Size
USS = Unique Set SizeAndroid中的Linux命令
ps和proc查看進程
USER PID PPID VSIZE RSS WCHAN PC NAME
root 1 0 268 180 c009b74c 0000875c S /init
root 2 0 0 0 c004e72c 00000000 S kthreadd
各個內核線程
root 3 2 0 0 c003fdc8 00000000 S ksoftirqd/0
root 4 2 0 0 c004b2c4 00000000 S events/0
……省略,其他各個內核線程
各個由init的啟動守護進程
root 27 1 248 152 c009b74c 0000875c S /sbin/ueventd
root 29 1 3916 476 ffffffff afd0bdac S /system/bin/vold
……省略,各個由init的啟動守護進程
各個應用程序進程
system 64 33 125924 29216 ffffffff afd0b6fc S system_server
……省略,各個應用程序進程
kill命令可以指定進程的id來殺死進程。proc文件系統
/system/bin/mediaserver
Name: mediaserver # 進程名稱
State: S (sleeping) # 進程狀態
Tgid: 34 # 線程組ID
Pid: 34 # 進程ID
PPid: 1 # 父進程ID
TracerPid: 0
Uid: 1013 1013 1013 1013
Gid: 1000 1000 1000 1000
FDSize: 32
Groups: 1003 1005 1006 3001 3002 3003 3004
Threads: 8 # 所包含的線程數
環境變量
文件系統
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
none /acct cgroup rw,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,cpu 0 0
/dev/block/mtdblock0 /system yaffs2 ro 0 0
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0
/dev/block/vold/179:0 /mnt/sdcard vfat
mount -o rw,remount -t yaffs /dev/block/mtdblock0 /system
網絡配置和信息
ifconfig eth0
eth0: ip 192.168.0.1 mask 255.255.255.0 flags [up broadcast running multicast]
route add default gw 192.168.1.1 dev eth0
iftop工具用於統計網絡流量,按照網絡設備列出接收數據(Rx)和發送數據(Tx)的情況:
Rx Tx
name MTU bytes packets errs drpd bytes packets errs drpd
eth0 1500 0 0 0 0 0 0 0 0
netstat網絡狀態的信息獲取工具
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:5037 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:5555 0.0.0.0:* LISTEN
tcp 0 0 10.0.2.15:5555 10.0.2.2:45610 ESTABLISHED
vmstat在運行過程中,會定期打出一行的內容,表示系統當前的運行
procs memory system cpu
r b free mapped anon slab in cs flt us ni sy id wa ir
0 0 348688 33004 58068 4264 18 13 0 1 0 0 99 0 0
0 0 348688 33008 58068 4264 27 39 0 1 0 1 99 0 0
0 0 348688 33008 58068 4264 22 21 0 0 0 1 99 0 0
0 0 348688 33008 58068 4264 27 59 0 3 0 4 94 0 0
0 0 348688 33008 58068 4264 19 19 0 0 0 1 99 0 0
2 0 348068 33012 58592 4240 70 138 0 27 0 4 69 0 0
0 0 348068 33012 58592 4240 84 188 0 42 0 8 51 0 0
2 0 345632 33756 60124 4248 119 416 5 36 0 13 51 0 0
0 0 344392 32660 62044 4248 96 396 0 46 0 8 46 0 0
0 0 344020 32664 62392 4248 103 548 0 42 0 6 52 0 0
0 0 344020 33264 62372 4248 45 80 0 2 0 5 93 0 0
0 0 344020 33264 62372 4248 37 87 0 3 0 1 97 0 0
0 0 343896 33264 62372 4248 23 28 0 1 0 1 98 0 0
0 0 343896 33264 62372 4248 24 26 0 1 0 0 99 0 0
0 0 343896 33264 61992 4248 30 41 0 4 0 3 93 0 0
top
tcpdump命令是對網絡上的數據包進行截獲的工具(抓包工具),可以根據不同的協議、設備、端口等獲取信息,得到的數據可供進一步的分析。
tcpdump -i any -p -s 0 -w
00:20:52.011779 IP 10.0.2.2.33338 > 10.0.2.15.rplay: P 88033:88057(24) ack 878157 win 8760
00:20:52.012146 IP 10.0.2.15.rplay > 10.0.2.2.33338: P 878157:878367(210) ack 88057 win 5840
00:20:52.012421 IP 10.0.2.2.33338 > 10.0.2.15.rplay: P 88057:88081(24) ack 878367 win 8760
00:20:52.012840 IP 10.0.2.15.rplay > 10.0.2.2.33338: P 878367:878559(192) ack 88081 win 5840
00:20:52.013365 IP 10.0.2.2.33338 > 10.0.2.15.rplay: . ack 878559 win 8760
00:20:52.013369 IP 10.0.2.2.33338 > 10.0.2.15.rplay: P 88081:88105(24) ack 878559 win 8760
00:20:52.013757 IP 10.0.2.15.rplay > 10.0.2.2.33338: P 878559:878863(304) ack 88105 win 5840
00:20:52.014262 IP 10.0.2.2.33338 > 10.0.2.15.rplay: P 88105:88129(24) ack 878863 win 8760
00:20:52.014679 IP 10.0.2.15.rplay > 10.0.2.2.33338: P 878863:879149(286) ack 88129 win 5840
00:20:52.015087 IP 10.0.2.2.33338 > 10.0.2.15.rplay: P 88129:88153(24) ack 879149 win 8760
00:20:52.015486 IP 10.0.2.15.rplay > 10.0.2.2.33338: P 879149:879359(210) ack 88153 win 5840
* @author zhoushengtao(周聖韬)
* @since 2015年7月3日 11:04:22
* @weixin stchou_zst
* @blog http://blog.csdn.net/yzzst
* @交流學習QQ群:341989536
* @私人QQ:445914891
/
今天在慕課網看了一個視頻,介紹了幾種圖像處理的方法,其中有一種就是鏡面效果,但是他是通過自定義view的方式實現的,但是算法都大同小異。他的自定義view:package
創建一個Android應用程序 Android Application Project 設置工程的相關信息,默認會創建icon和activity
如果我們在每個xml文件中都把相同的布局都重寫一遍,一個是代碼冗余,可讀性很差;另一個是修改起來比較麻煩,對後期的修改和維護非常不利
簡介 在Android中運用了很多機制,例如:廣播、服務、數據庫、通知、包……等等。什麼是廣播?Broadcast是一種廣泛運用的在應用程序之間傳輸