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
...
事前コンパイルを削除したことによるバグの報告は見たことがありません。ただし、パフォーマンスの低下により、この変更を行う前には見えなかった問題がアプリケーションで明らかになる可能性があります。
非常に集中的な処理が何倍も遅くなる可能性があります。アプリがこのカテゴリに当てはまる場合は、事前コンパイルを削除しないことをお勧めします。