首页
社区
课程
招聘
[原创]如何在模拟器上直接加载修改后的apk文件
发表于: 2013-11-2 23:38 5514

[原创]如何在模拟器上直接加载修改后的apk文件

2013-11-2 23:38
5514

瞎折腾了一晚上,终于搞明白怎么在模拟器上直接运行修改后的apk文件了,在实体机上测试实在是忒麻烦鸟。
  我们知道DDMS是动态调试android的利器,它提供了各种强大的功能,如查看运行的线程信息,文件浏览,Logcat等,对于我们搞逆向的来说,主要还是看它的log信息了,废话少说,来简单看下DDMS调试的原理吧。
  1.  每一个Android应用都运行在一个Dalvik虚拟机实例里,而每一个虚拟机实例都是  
     一个独立的进程空间。虚拟机的线程机制,内存分配和管理,Mutex等等都是依赖
     底层操作系统而实现的。所有的Android应用线程都对应一个Linux线程,虚拟机
     因而可以更多的依赖操作系统的线程调度和管理机制。
    2.  DDMS在IDE与设备货模拟器之间起着中间人的角色
  3.  DDMS启动时会与ADB之间简历一个device monitoring service用于监控设备。当
     设备断开或链接时,这个service就会通知DDMS
  4.  当一个设备链接上时,DDMS和ADB之间又会建立VM monitoring service用于监
     控设备上的虚拟机
  5. 通过ADB Deamon与设备上的虚拟机的debugger建立链接,这样DDMS就开始与
     虚拟机对话了。
       详见:http://www.doc88.com/p-672405491094.html  
  也就是说,如果要使用DDMS调试,就必须启动adb调试。Adb是模拟器,那么怎么才能将修改后的apk文件放到模拟器里面呢?以前都是使用IDE直接调试,这可把我给难住了,首先还是看下adb的命令吧,可能会从里面得到些提示:

adb install [-l] [-r] file_spec
    这条命令用于安装或者重新安装一个Android应用程序。其中-l选项为防复制锁,它可  以禁止安装好的应用程序被复制到其他设备上使用。其中的-r选项用于重装应用程序时保留之前的数据。命令中的file_spec参数必须是一个合法的并经数字签名过的.apk文件。

adb uninstall  [-k]  package
          这条命令用于从目标设备上卸载指定的应用程序。其中package参数必须是应用程序的全名。如果在卸载应用程序的时候希望保留应用程序的数据,则可以加上-k选项。

adb   push  local  remote
           这条命令用于将计算机上的某个文件复制到目标设备的指定目录下。

adb  pull   remote   local
           这个命令用于将目标设备上的一个文件复制到计算机上。
详见:http://blog.163.com/susu_sf/blog/static/1710602532010102244939506/

看到这些命令,登时觉得有戏,先来试下
Adb install 命令:

擦,竟然出来个错误,应该是找不到文件,好吧,那么就找下目录,看下能不能直接把修改后的文件放到/data/local/tmp/目录下:
来到模拟器的目录下,好吧,我哭了,全是img文件,那么也就是说,如果我想把修改后的文件放进去,那么我就必须编辑解析img文件,感觉这个成本较高,再想想其他办法吧。。

来看另一个命令:
adb   push  local  remote
通过这条命令,我是可以先把文件传上去的,然后再进行安装,那岂不就ok,好吧,继续:
因为不知道模拟器上的路径,所以先随便试下root目录吧,如果我们能够正常得把apk文件传上去,并且在模拟器上找到,那么只要双击就可以正常安装了:

好吧,root目录是不可读的。
此时忽然想到之前的那个安装错误:

如果,我把文件传到这个目录,然后之间通过install命令安装不就完了?

很happy,都成功了,那么最后一步,到模拟器上看下是否有我安装的apk文件:

安装成功,接下来就可以正常调试了,小伙伴们,加油!!!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 5
支持
分享
最新回复 (1)
雪    币: 5
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不知道该怎么弄图片,所以,还是直接打个包吧,方便
2013-11-2 23:40
0
游客
登录 | 注册 方可回帖
返回
//