现在我们用agcc来编译一个真正有用的东西(smem),然后让它跑在Android上面,这是一个用来查看Memory Usage的工具,它比Android原生的procmem准确。
对做Memory Optimization是很有用处的一个命令工具。
如何搭建编译smem的编译环境请参考在Android上運行本地C語言代碼,文中有说明怎么搭建和使用aggc来编译在Android上运行的本地程序
详细信息查看http://www.elinux.org/Using_smem_on_Android
现在开始让它跑在Android上面吧
最开始我用Mercurial下载了最新的源码(hg clone http://selenic.com/repo/smem)编译,发现出错。
找到一封邮件(http://selenic.com/pipermail/smem/2010-November.txt)说是可能和操作系统版本有关系,我是Ubuntu_X64的机器。
所以又重新下载了http://www.selenic.com/smem/download/smem-0.9.tar.gz,这个版本对于我来说是好用的。
具体使用步骤比较简单,解压出来放到一个文件夹。
/smem-0.9$ agcc smemcap.c -o a-smem /smem-0.9$ adb remount /smem-0.9$ adb shell mkdir /data/smem /smem-0.9$ adb push a-smem /data/smem /smem-0.9$ adb shell
# cd /data/smem # ./a-smem >> memdata-moto.tar
/smem-0.9$ adb pull /data/smem/smem_data_moto.tar /smem-0.9$ smem -S smem_data_moto.tar
执行这个命令后会得到如下输出
PID User Command Swap USS PSS RSS
1439 1008 /system/bin/akmd2 0 32 32 36
12021 0 /system/bin/debuggerd 0 48 49 156
1431 0 /system/bin/installd 0 68 70 204
1432 1017 /system/bin/keystore /data/ 0 72 73 168
1410 1001 /system/bin/nvm_daemon 0 76 77 204
1447 1000 /system/bin/secclkd 0 76 77 192
1403 1000 /system/bin/servicemanager 0 80 81 196
1430 1002 /system/bin/dbus-daemon --s 0 84 86 212
18130 0 /system/bin/dhcpcd -ABKL ti 0 92 94 248
1409 0 /system/bin/usbd 0 100 102 240
1433 0 /system/xbin/ssmgrd 0 100 102 240
1451 0 opprofdaemon 0 100 107 276
1421 1001 /system/bin/rild_tcmd 0 100 121 344
1413 0 /system/bin/gkisystem 0 112 125 332
1423 0 /system/bin/catcommands 0 108 125 352
1437 1001 /system/bin/panic_daemon 0 124 126 316
1405 0 /system/bin/netd 0 144 152 300
1404 0 /system/bin/vold 0 152 160 316
1422 0 /system/bin/battd 0 164 167 372
19390 0 /system/bin/sh - 0 144 173 376
1449 0 location 0 168 191 428
1402 0 /sbin/adbd 0 228 228 248
1 0 /init 0 260 260 288
1444 1001 /system/bin/brcm_guci_drv - 0 276 287 496
1758 0 /system/bin/wpa_supplicant 0 324 326 476
1435 0 /system/bin/tcmd 0 344 347 536
19392 0 ./a-smem 0 336 361 540
1407 0 /system/bin/rild 0 472 506 828
1448 0 protocol_driver 0 740 776 1096
1426 0 zygote /bin/app_process -Xz 0 1064 1742 12332
1427 1013 /system/bin/mediaserver 0 2028 2034 2324
19278 10021 android.process.media 0 2388 3335 16900
1783 10049 com.motorola.usb 0 2552 3360 15012
19257 10074 com.picplz.rangefinder 0 2612 3578 17232
19266 10093 com.google.android.apps.plu 0 3180 4161 17876
2481 10070 com.tencent.mm:push 0 3908 4562 15608
19311 10053 com.google.android.apps.map 0 2808 5167 21776
19344 10085 cn.com.fetion 0 4152 6327 21236
18709 10053 com.google.android.apps.map 0 5420 6561 20100
2011 10030 com.android.mms 0 5720 6585 18920
1834 10059 com.google.process.gapps 0 6004 6704 17952
19375 10022 com.android.email 0 5616 6994 21076
19330 10086 com.tencent.WBlog 0 4064 7054 22436
19302 10053 com.google.android.apps.map 0 4940 7510 24692
1780 1001 com.android.phone 0 8960 9690 21508
1773 10069 com.cootek.smartinputv5 0 9400 10111 21592
7687 10004 android.process.acore 0 12364 14029 26980
1693 1000 system_server 0 39128 40908 57464
这样你就可以看出Android上每个process所占用的内存情况,基本可以满足日常使用了,简单好用。
更多更高级的用法可以参见主页http://www.selenic.com/smem/。