仅启用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 输出,以确保在dex2oat
执行进程时正确应用了 vmSafeMode 标志。寻找论据--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/data@app@com.testing.sample.myapp-1@base.apk@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
...
我没有看到任何关于删除提前编译引起的错误的报告。但是,由于性能下降,您的应用程序可能会暴露在进行此更改之前不可见的问题。
非常密集的处理可能会慢很多倍。如果您的应用属于此类别,则最好不要删除提前编译。