No, ART is still used on the device.
In general (and this is true for any language that uses a VM), you can think of the structure like this:
- You have the VM (aka virtual machine) that provides additional services on top of the operating system (actually in OS theory the OS itself provides a virtual machine on top of the hardware itself, but let’s not overcomplicate things. )
- In most cases the VM provides additional services related to memory management (e.g. garbage collection), threading, and code execution.
- Code execution in a VM can happen in many different ways: using an interpreter, using a JIT compiler or using AOT compiled code.
- Even if AOT compiled code is used, that code still uses the additional services of the VM, like the garbage collector.
On Android, from Android 5 to Android 6, ART also used AOT. This AOT compilation happened at installation time, directly on the device by the dex2oat utility. Starting with Android 7, Android now uses a mixture of JIT and AOT compilation. This native code is stored in a .oat file for each app on the device. When you launch an app on Android, ART will look for this .oat file, load it into memory, and start running it. That native code however can only work inside ART, because it relies on ART code for memory management, JNI access and so on.
MOE uses the same dex2oat program, but we are running it at build time on the Mac, because we need to link the resulting native code together with the rest of ART into the same iOS app binary - otherwise iOS would not allow its execution.
I hope this helps,