[android]MonkeyRunner-andrec實現思路

大搜車-自娛發表於2012-06-20
1.使用Apktool.jar反編譯某個APK 命令為:java -jar apktool.jar d -d -f TestRecord.apk /tmp/tmpVpJYTg

2.分析AndroidManifest.xml檔案得到APK的mainActivity名

2-3中間會分析smali目錄下的R$id.smali檔案,獲取到APK的包名,並且可以拼到com.example/.TestRecordActivity類似的monkeyrunner所需要的啟動包名稱,還可以獲取到所有的靜態在xml中的layout元素id以及name的map關係


3.使用java -jar apktool.jar b -d -f /tmp/tmpVpJYTg /tmp/tmpVpJYTg/out.apk重新打包APK,輸出out.apk檔案

4.給out.apk重新簽名,jarsigner -verbose -keystore debug.keystore -storepass andrec -keypass andrec /tmp/tmpVpJYTg/out.apk andrecdebugkey

5.重新優化APK提高APK與android系統的互動效率/home/eamon/android-sdk/android-sdk-linux_x86/tools/zipalign -v -f 4 /tmp/tmpVpJYTg/out.apk /tmp/tmpVpJYTg/out-aligned.apk,優化後得到out-aligned.apk檔案

6.開啟debug主activity,使用命令:/home/eamon/android-sdk/android-sdk-linux_x86/platform-tools/adb shell am start -D -W -n com.example/.TestRecordActivity(這裡通過分離檔案得到檔案內相應的方法來獲取如何debug某一個方法例如onclick)此命令可以啟動某一個activity


6-7之間需要知道的adb jdwp獲取手機內TestRecord應用的PID,此時再利用adb shell ps 以及剛剛獲取到得APK包名,確認這個PID

7.連結遠端debug手機端android虛擬機器

connecting debugger...
DEBUG:root:/home/eamon/android-sdk/android-sdk-linux_x86/platform-tools/adb forward tcp:3977 jdwp:632
其中adb forward實現原理為socket通訊,虛擬機器內debug資訊會通訊給本機3977埠


下面解析Record是如何製作的:
record的製作是借取了adb shell am 的debug方法,加之jdb的遠端除錯,見我的android欄中的jdb相關文章

andrec實現中遇到的斷點debug中採用的是http://blog.csdn.net/ariesjzj/article/details/7393573文章中的第二種方法來實現的。

相關文章