Runtime is an environment in which programs written in a specific language run. Android Runtime (ART) is Java-like runtime which runs Dalvik Executable (DEX) bytecode (from apk
files) in a Virtual Machine. Like other Runtime Environments ART can run the code in three different modes:
- Interpretation
- Just-in-Time (JIT) compilation
- Ahead of Time (AOT) compilation
In order to improve performance, JIT and AOT compilers translate DEX bytecode (during or before execution respectively) into native machine language. JIT compiler was part of DVM, readded to ART in Android 7. Since then AOT compiler also supports profile-guided background compilation. App profiles are created during JIT compiled executions.
While interpreter is part of ART libraries, dex2oat
tool is used as JIT and AOT compiler. Documentation states:
At install time, ART compiles apps using the on-device dex2oat tool. This utility accepts DEX files as input and generates a compiled app executable for the target device.
And here:
JIT and AOT use the same compiler with a similar set of optimizations
On your Marshmallow ROM AOT compilation won't work in the absence of dex2oat
which may adversely affect the apps performance. Also the installd
native service and PackageManager
Java service rely on dex2oat
during app installation or profile update of previously installed apps. So they may break due to missing file.
To summarize, installd
or dex2oat
crashes are serious bugs in your ROM which need to be fixed. Deleting dex2oat
binary isn't a solution but a workaround which is very likely to fail.
RELATED:
dex
interpreter or JIT compiler modes. So AOT Compilation isn't necessarily required but may impact the performance. Also the processes (likeinstalld
) involved withdex2oat
binary may break if binary is missing e.g. on a new app install or on profile update of previously installed apps.