# Building the ART Module ART is built as a module in the form of an APEX package, `com.android.art.apex`. That package can be installed with `adb install` on a device running Android S or later. It is also included in the system partition (in the `system/apex` directory) of platform releases, to ensure it is always available. The recommended way to build the ART Module is to use the `master-art` manifest, which only has the sources and dependencies required for the module. Currently it is also possible to build ART directly from sources in a platform build, i.e. as has been the traditional way up until Android S. However that method is being phased out. The ART Module is available as a debug variant, `com.android.art.debug.apex`, which has extra internal consistency checks enabled, and some debug tools. A device cannot have both the non-debug and debug variants installed at once - it may not boot then. `com.google.android.art.apex` (note `.google.`) is the Google signed variant of the module. It is also mutually exclusive with the other ones. ## Building as a module on `master-art` 1. Check out the `master-art` tree: ``` repo init -b master-art -u ``` See the [Android source access instructions](https://source.android.com/setup/build/downloading) for further details. Google internal users please see [go/sync](http://go/sync). 2. Set up the development environment: ``` banchan com.android.art export SOONG_ALLOW_MISSING_DEPENDENCIES=true BUILD_BROKEN_DISABLE_BAZEL=true ``` For Google internal builds on the internal master-art branch, specify instead the Google variant of the module and product: ``` banchan com.google.android.art mainline_modules_ export SOONG_ALLOW_MISSING_DEPENDENCIES=true BUILD_BROKEN_DISABLE_BAZEL=true ``` `` is the device architecture, one of `arm`, `arm64`, `x86`, or `x86_64`. Regardless of the device architecture, the build also includes the usual host architectures, and 64/32-bit multilib for the 64-bit products. To build the debug variant of the module, specify `com.android.art.debug` instead of `com.android.art`. It is also possible to list both. 3. Build the module: ``` m apps_only dist ``` 4. Install the module and reboot: ``` adb install out/dist/com.android.art.apex adb reboot ``` The name of the APEX file depends on what you passed to `banchan`. ## Building as part of the base system image NOTE: This method of building is slated to be obsoleted in favor of the module build on `master-art` above (b/172480617). 1. Check out a full Android platform tree and lunch the appropriate product the normal way. 2. Ensure the ART Module is built from source: ``` export ART_MODULE_BUILD_FROM_SOURCE=true ``` If this isn't set then the build may use prebuilts of the ART Module that may be older than the sources. 3. Build the system image the normal way, for example: ``` m droid ``` ## Prebuilts Prebuilts are used for the ART Module dependencies that have sources outside the `master-art` manifest. Conversely the ART Module may be a prebuilt when used in platform builds of the base system image. The locations of the prebuilts are: * `prebuilts/runtime/mainline` for prebuilts and SDKs required to build the ART Module. See [prebuilts/runtime/mainline/README.md](https://android.googlesource.com/platform/prebuilts/runtime/+/master/mainline/README.md) for instructions on how to update them. * `packages/modules/ArtPrebuilt` for the ART Module APEX packages, if present. * `prebuilts/module_sdk/art` for the ART Module SDK and other tools, needed to build platform images and other modules that depend on the ART Module.