blob: 3cae102dfb09f8c5c5583d38c3261c5a31886885 [file] [log] [blame] [view]
# Introduction
It is possible to build and run the standalone Dart VM for Android devices.
## Limitations
* The host (build) machine must be an x64 Linux machine or a Mac.
* The target (Android) device must be a device or emulator that supports the Android NDK.
* The resulting Android Dart VM can only be run from the Android command line.
* The resulting Android Dart VM only has access to dart:core APIs. It does not have access to the Android C or Java APIs.
* The Android-related tools and emulator image files will take about 2GB of disk space on the host machine.
# One-time Setup
Download and install the Dart source tree using the standard instructions for building Dart.
Use a text editor to add the following line to the very bottom of your Dart .gclient file (which is located in the directory that contains the main 'dart' directory):
`download_android_deps = True`
Run gclient sync to install the Android NDK and SDK. This may take 10 minutes or more depending upon the speed of your Internet connection
`$ gclient sync`
# Building for Android
Once you've set up your build tree, you can build the Dart VM for Android by using the standard Dart build script with the addition of the --os android build flag:
`$ tools/build.py --arch=arm,arm64,ia32,x64,riscv64 --os=android runtime`
# Testing the result
Adding `adb` to your path
For convenience, add the path to the adb tool to your shell PATH:
`$ export PATH=$PATH:path-to-dart/third_party/android_tools/sdk/platform-tools`
Starting an Android emulator
You can start an emulator running, by using the android_finder.py script:
`$ runtime/tools/android_finder.py -a {armeabi-v7a, x86} -b`
The -a flag says to find an Android device for the specified architecture. The -b flag says to start (or bootstrap) a new emulator if no existing emulator or device with a given ABI can be found. This script could take up to 20 seconds to run if a new emulator needs to be started.
## Running the Dart VM on an Android emulator
Once you have finished building the Android Dart VM and have a running Android emulator, you can run Dart scripts on the emulator as follows:
Create a directory on the Android emulator.
`$ adb shell mkdir /data/local/tmp/dart`
Copy the Dart VM executable to the Android emulator:
`$ adb push out/android/ReleaseAndroid{ARM,ARM64,IA32,X64,RISCV64}/dart /data/local/tmp/dart/dart`
Create a simple Dart test script:
`$ echo "main(){ print(\"Hello, world\!\");}" >hello.dart`
Copy the Dart test script to the Android emulator:
`$ adb push hello.dart /data/local/tmp/dart`
Run the Dart VM with the test script:
`$ adb shell /data/local/tmp/dart/dart /data/local/tmp/dart/hello.dart`
Hello, world!
## Stopping an Android Emulator
You can list all currently attached Android devices, including emulators, using the adb command:
`$ adb devices`
You can stop a running emulator using the adb emu kill command:
`$ adb emu kill ← if there is just one emulator running`
or
`$ adb -s emulator-name emu kill ← if there is more than one emulator running`
## Running the Dart VM on an Android device
First, make sure that the "USB Debugging" mode is enabled by navigating to Settings > Developer options > USB debugging. The box should be checked. You may need to have root on the device.
Now, plug in your device. Then, run:
`$ adb devices`
There should be an entry for your device, such as:
```
List of devices attached
TA23701VKR device
```
Now, you can copy dart and hello.dart to the device as above. If an emulator is also running, be sure to give adb the -d switch to tell it to use the attached device instead of the emulator. Use the -s switch to give the device ID explicitly.