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文章中的第二种方法来实现的。

更多相关文章

  1. Android中获取定位经纬度信息
  2. Android(安卓)网络应用重点———使用HttpGet 下载apk文件并安装
  3. Android应用签名
  4. Android(安卓)缓存机制
  5. Android使用图片资源
  6. Windows下修改android 模拟机 hosts文件
  7. How to Install apk to Android(安卓)Devices from Mac OS X
  8. Android命令行编译方法,不用Eclipse IDE
  9. Android中数据存储方式一:文件形式

随机推荐

  1. android权限申请库解析
  2. 成佩涛编程之路——Android控件动画效果(
  3. Android(安卓)开发GPS定位、网络定位、卡
  4. Android支付宝支付接入(支付宝支付SDKV2.0
  5. 论文之自学android 开发
  6. Android(安卓)API Guides---Supporting M
  7. Android借助系统自带图片裁剪集成图片选
  8. android中的通信机制总结1:使用handler来
  9. Android学习笔记(一)---一定要看的 Android
  10. Android(安卓)彻底组件化方案实践