The wizard will force you to download unwanted SDK components to //third_party/android_tools.

To skip it, select “Cancel” when it comes up.

To import the project:

Use “Import Project”, and select the directory containing the generated project, by default out/Debug/gradle.

If you‘re asked to use Studio’s Android SDK:

No. (Always use project's own SDK)

If you‘re asked to use Studio’s Gradle wrapper:

Yes.

You need to re-run generate_gradle.py whenever BUILD.gn files change.

After regenerating, Android Studio should prompt you to “Sync”. If it doesn't, use:

Button with two arrows on the right side of the top strip.

Help -> Find Action -> “Sync Project with Gradle Files”

After gn clean you may need to restart Android Studio.

How It Works

By default, only a single module is generated. If more than one apk target is specified, then an _all module is generated. Otherwise a single apk module is generated. Since instrumentation tests are combined with their apk_under_test target, they count as one module together.

To see more detailed structure of gn targets, the --split-projects flag can be used. This will generate one module for every gn target in the dependency graph.

Excluded Files

Gradle supports source directories but not source files. However, files in Chromium are used amongst multiple targets. To accommodate this, the script detects such targets and creates exclude patterns to exclude files not in the current target. The editor does not respect these exclude patterns, so a _all pseudo module is added which includes directories from all targets. This allows imports and refactorings to be searched across all targets.

Extracting .srcjars

Most generated .java files in GN are stored as .srcjars. Android Studio does not support them, and so the generator script builds and extracts them all to extracted-srcjars/ subdirectories for each target that contains them. This is the reason that the _all pseudo module may contain multiple copies of generated files.

Building from the Command Line

Gradle builds can be done from the command-line after importing the project into Android Studio (importing into the IDE causes the Gradle wrapper to be added). This wrapper can also be used to invoke gradle commands.

cd $GRADLE_PROJECT_DIR && bash gradlew

The resulting artifacts are not terribly useful. They are missing assets, resources, native libraries, etc.