为您的调试版本启用android:vmSafeMode
的最佳方式是使用调试清单来补充主AndroidManifest.xml的内容。
要添加这一点,创建一个新的文件…/app/src/debug/AndroidManifest.xml
并添加以下XML:
<manifest
xmlns:android="http://schemas.android.com/apk/res/android">
<application android:vmSafeMode="true" />
</manifest>
增加这个调试清单和安装应用程序,你应该检查你的设备的logcat输出之后,以确保vmSafeMode标志是在执行dex2oat
进程时正确应用。查找参数--compiler-filter=interpret-only
。 此输出还报告执行dex2oat
进程所用的时间,以便您可以在进行更改之前和之后进行比较。
I/dex2oat﹕ /system/bin/dex2oat --zip-fd=6 --zip-location=/data/app/com.testing.sample.myapp-1/base.apk --oat-fd=7 --oat-location=/data/dalvik-cache/arm/[email protected]@[email protected]@classes.dex --instruction-set=arm --instruction-set-features=div --runtime-arg -Xms64m --runtime-arg -Xmx512m --compiler-filter=interpret-only --swap-fd=8
I/dex2oat﹕ dex2oat took 1.258ms (threads: 4) arena alloc=0B java alloc=2MB native alloc=502KB free=7MB
也可以使用AAPT工具来检查是否有APK启用vmSafeMode:
aapt list -a myapkfile.apk
...
A: android:vmSafeMode(0x010102b8)=(type 0x12)0xffffffff
...
我还没有看到造成除去名列前茅的时间编制错误的任何报告。但是,由于性能下降,您的应用程序可能会暴露在进行此更改之前不可见的问题。
这可能是非常密集的处理可能会慢许多倍。如果您的应用适合此类别,最好不要删除提前编译。