萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 軟體知識 >  >> 多媒體工具

安卓模擬器配置禁用 dex→odex 優化:build.prop 修改與持久化完整指南

開發/逆向場景下,常需**阻止 Dalvik/ART 將 classes.dex 優化為 odex**,以便直接 dump 原始 dex 文件進行分析。本文詳述通過修改 `/system/build.prop` 實現禁用優化,並解決模擬器重啟配置失效的持久化難題。

核心配置參數

編輯 `/system/build.prop`,添加/修改兩項鍵值:

  1. dalvik.vm.dexopt-flags = v=n,o=v
    • v=n:關閉**所有代碼校驗**(verify none);
    • o=v:僅優化**已校驗過的代碼**(optimize verified)——因校驗已關閉,實際**無代碼被優化**,達到禁用 odex 目的。
    • 其他可選值:`m=y/n`(驗證/優化不安全代碼)、`v=a`(校驗所有)、`o=a`(優化所有)。
  2. dalvik.vm.checkjni = false:關閉 JNI 邊界檢查,略微提升性能,減少干擾。

臨時生效步驟 (重啟失效)

adb remount                    # 重掛載 system 分區為可寫
adb shell                      # 進入模擬器 shell
echo "dalvik.vm.dexopt-flags=v=n,o=v" >> /system/build.prop
echo "dalvik.vm.checkjni=false" >> /system/build.prop
exit

驗證:重啟模擬器後 `cat /system/build.prop` 確認生效,dex 不再生成 odex。

持久化方案:掛載自定義 system.img (關鍵突破)

模擬器默認 system.img 為臨時快照,關機丟失修改。參考 StackOverflow 方案,實現**永久寫入 system.img**:

  1. 複製原 system.img 到本地目錄(如 `/home/user/avd/MyAVD/system.img`)。
  2. 用**帶參數命令啟動模擬器**,掛載該 system.img 為可寫持久存儲:
    emulator -avd <你的AVD名稱> -qemu -nand system,size=0x1f400000,file=/home/user/avd/MyAVD/system.img
    

    size 為分配給 system 分區的空間(十六進制,例 0x1f400000 = 500MB),按需調整。

  3. 進入模擬器後按「臨時生效步驟」修改 build.prop。
  4. **正確關機持久化:**
    adb -e emu kill
    

    此命令觸發 QEMU 安全關機,**將內存修改刷回 system.img 文件**。

  5. 後續**正常啟動模擬器**(無需特殊參數),修改已永久生效。

驗證與應用

  • 重啟後 `adb shell cat /system/build.prop | grep dexopt` 確認配置保留。
  • 安裝測試 APP,`adb shell ls /data/dalvik-cache/` 確認無對應 odex 文件生成。
  • 使用 `dexdump` / `baksmali` 直接分析 `/data/app/包名/base.apk` 內的 classes.dex,無需反編譯 odex。

避坑提示

  • 修改 build.prop 前**務必 `adb remount`**,否則提示「Read-only file system」。
  • size 參數**不可過小**,至少 300MB+,否則系統無法啟動。
  • 僅適用於**模擟器**(AVD)環境,真機需解鎖 BL 並刷寫修改後的 system 分區,風險極高不建議嘗試。
  • Android 7.0+ 使用 ART 運行時,dex2oat 編譯流程不同,此配置可能部分失效,建議改用 `dalvik.vm.image-dex2oat-filter=speed` 等 ART 專用參數。
copyright © 萬盛學電腦網 all rights reserved