zoukankan      html  css  js  c++  java
  • [Android] 配置安卓模拟器,使得dex文件不被优化成odex

    最近做一个模块,需要将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.prop
    echo "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里面。

    3. 修改安卓源码

    用上面的方法运行一段时间之后发现并不能完全避免dex被优化,具体原因没有找到,所以最后修改了安卓的源码,重新编译了一个img出来。

    具体修改的是 /dalvik/vm/analysis/Optimize.c 文件,将里面的 dvmOptimizeClass 函数直接return。此方法测试有效,暂时没有发现问题。

  • 相关阅读:
    Poj 2017 Speed Limit(水题)
    Poj 1316 Self Numbers(水题)
    Poj 1017 Packets(贪心策略)
    Poj 1017 Packets(贪心策略)
    Poj 2662,2909 Goldbach's Conjecture (素数判定)
    Poj 2662,2909 Goldbach's Conjecture (素数判定)
    poj 2388 Who's in the Middle(快速排序求中位数)
    poj 2388 Who's in the Middle(快速排序求中位数)
    poj 2000 Gold Coins(水题)
    poj 2000 Gold Coins(水题)
  • 原文地址:https://www.cnblogs.com/hiddenfox/p/3811780.html
Copyright © 2011-2022 走看看