首页 > 安卓 > 正文

配置安卓模拟器dex文件不被优化成odex

卡饭网 梦在深巷 2014-06-26 12:11:31

最近做一个模块,需要将apk里面加载的dex文件dump出来,所以需要配置让dalvik不要把dex文件优化成odex。

1. 配置build.prop

主要是通过修改文件/system/build.prop里面的配置。

(1) dalvik.vm.dexopt-flags

本参数控制Dalvik虚拟机的程序代码校验和优化。可填写的值有m、v和o。
m为标准选项,可以是m=y或m=n。若m=y则启用不安全代码的校验和托管代码的优化。兼容性和安全性最高。
v为校验选项,可与o并存。可以是v=a或v=n。若v=a则表示校验所有代码,v=n则关闭代码的校验。
o为优化选项,可与v并存。可以是o=v或o=a。若o=v则表示优化以校验过的代码,o=a则表示优化所有代码。

这里我们配置成:dalvik.vm.dexopt-flags=v=n,o=v,表示关闭代码校验,并只优化校验过的代码,也就是所有代码都不会被优化。

(2) dalvik.vm.checkjni

这里我们配置成:dalvik.vm.checkjni=false,这个会把checkjni设置成false

2. 把配置持久化到模拟器

(1) 首先重新挂载系统分区,使系统分区可写。如果不执行这个,会发现没法修改build.prop文件。

  adb remount

(2) 接下来,进入模拟器的命令行:

  adb shell

(3) 将配置写到build.prop:

  echo "dalvik.vm.dexopt-flags=v=n,o=v" >> /system/build.propecho "dalvik.vm.checkjni=false" >> /system/build.prop

这样,配制就改到模拟器里面了,验证之后发现dex果然没有被转化成odex。

可是在重启模拟器之后,发现build.prop里面的改动都没有了。

在网上搜了一下,参考了这个stackoverflow的提问:http://stackoverflow.com/questions/15417105/forcing-the-android-emulator-to-store-changes-to-system

具体步骤如下:

(1) 将system.img复制到一个地方,

(2) 用下面的命令启动模拟器:

  emulator -avd [你的模拟器名字] -qemu -nand system,size=[模拟器需要的空间,16进制],file=[刚才复制的目录]/system.img
  例如:  emulator -avd Galaxy_Nexus -qemu -nand system,size=0x1f400000,file=/home/fx/.android/avd/Galaxy_Nexus/system.img

(3) 按照之前的步骤修改build.prop

(4) 用这个命令关闭模拟器:

  adb -e emu kill

这样,下次正常启动模拟器的时候(不必再用上面步骤2里面的命令),发现修改的内容已经被持久化到build.prop里面。