Skip to content

Commit

Permalink
Android Studio: Set Android Gradle plugin to v2.2.0
Browse files Browse the repository at this point in the history
This appeases Android Studio 2.2. Without this, it prompts to update
every time you regenerate the gradle files.

BUG=620034

Review-Url: https://codereview.chromium.org/2359593002
Cr-Commit-Position: refs/heads/master@{#420224}
  • Loading branch information
agrieve authored and Commit bot committed Sep 22, 2016
1 parent 8daac2f commit 0c28e4f
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 22 deletions.
2 changes: 1 addition & 1 deletion build/android/gradle/build.gradle.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ buildscript {
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:2.1.2"
classpath "com.android.tools.build:gradle:2.2.0"
}
}

Expand Down
3 changes: 3 additions & 0 deletions build/android/gradle/generate_gradle.py
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,9 @@ def main():
_RunNinja(output_dir, targets)
_ExtractSrcjars(gradle_output_dir, srcjar_tuples)
logging.warning('Project created successfully!')
logging.warning('Generated projects work best with Android Studio 2.2')
logging.warning('For more tips: https://chromium.googlesource.com/chromium'
'/src.git/+/master/docs/android_studio.md')


if __name__ == '__main__':
Expand Down
100 changes: 79 additions & 21 deletions docs/android_studio.md
Original file line number Diff line number Diff line change
@@ -1,43 +1,101 @@
# Android Studio

Android Studio integration works by generating .gradle files from our BUILD.gn files.

[TOC]

## Usage

```shell
build/android/gradle/generate_gradle.py --output-directory out-gn/Debug --target //chrome/android:chrome_public_apk
build/android/gradle/generate_gradle.py --output-directory out-gn/Debug --target //chrome/android:chrome_public_test_apk
```

This creates a project at `out-gn/Debug/gradle`. To create elsewhere: `--project-dir foo`

## Status (as of July 14, 2016)
For first-time Android Studio users:

* Avoid running the setup wizard.
* The wizard will force you to download unwanted SDK componentns 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.

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:
* Help->Find Action->Sync Project with Gradle Files


## How it Works

Android Studio integration works by generating `build.gradle` files based on GN
targets. Each `android_apk` and `android_library` target produces a separate
Gradle sub-project.

### Symlinks and .srcjars

Gradle supports source directories but not source files. However, some
`java/src/` directories in Chromium are split amonst multiple GN targets. To
accomodate this, the script detects such targets and creates a `symlinked-java/`
directory to point gradle at. Be warned that creating new files from Android
Studio within these symlink-based projects will cause new files to be created in
the generated `symlinked-java/` rather than the source tree where you want it.

*** note
** TLDR:** Always create new files outside of Android Studio.
***

Most generated .java files in GN are stored as `.srcjars`. Android Studio does
not have support for them, and so the generator script builds and extracts them
all to `extracted-srcjars/` subdirectories for each target that contains them.

*** note
** TLDR:** Always re-generate project files when `.srcjars` change (this
includes `R.java`).
***

### Building with Gradle

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).

cd $GRADLE_PROJECT_DIR && bash gradlew

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

## Status (as of Sept 21, 2016)

### What currently works

- Basic Java editing and compiling
* Tested with Android Studio v2.2.
* Basic Java editing and compiling works.

### Roadmap / what's not yet implemented ([crbug](https://bugs.chromium.org/p/chromium/issues/detail?id=620034))

- Test targets (although they *somewhat* work via `--target=//chrome/android:chrome_public_test_apk__apk`)
- Make gradle aware of resources and assets
- Make gradle aware of native code via pointing it at the location of our .so
- Add a mode in which gradle is responsible for generating `R.java`
- Add support for native code editing
* JUnit Test targets
* Better support for instrumtation tests (they are treated as non-test .apks right now)
* Make gradle aware of resources and assets
* Make gradle aware of native code via pointing it at the location of our .so
* Add a mode in which gradle is responsible for generating `R.java`
* Add support for native code editing
* Make the "Make Project" button work correctly

### What's odd about our integration
## Android Studio Tips

- We disable generation of `R.java`, `BuildConfig.java`, `AndroidManifest.java`
- Generated .java files (.srcjars) are extracted to the project directory upon project creation. They are not re-extracted unless you manually run `generate_gradle.py` again
* Configuration instructions can be found [here](http://tools.android.com/tech-docs/configuration). One suggestions:
* Launch it with more RAM: `STUDIO_VM_OPTIONS=-Xmx2048m /opt/android-studio-stable/bin/studio-launcher.sh`
* If you ever need to reset it: `rm -r ~/.AndroidStudio*/`

## Android Studio Tips
### Useful Shortcuts

- Configuration instructions can be found [here](http://tools.android.com/tech-docs/configuration). Some suggestions:
- Launch it with more RAM: `STUDIO_VM_OPTIONS=-Xmx2048m /opt/android-studio-stable/bin/studio-launcher.sh`
- Setup wizard advice:
- Choose "Standard", it then fails (at least for me) from "SDK tools directory is missing". Oh well...
- Choose "Import" and select your generated project directory
- Choose "OK" to set up gradle wrapper
- If you ever need to reset it: `rm -r ~/.AndroidStudio*/`
* `Shift - Shift`: Search to open file or perform IDE action
* `Ctrl + N`: Jump to class
* `Ctrl + Shift + T`: Jump to test
* `Ctrl + Shift + N`: Jump to file
* `Ctrl + F12`: Jump to method
* `Ctrl + G`: Jump to line
* `Shift + F6`: Rename variable
* `Ctrl + Alt + O`: Organize imports
* `Alt + Enter`: Quick Fix (use on underlined errors)

0 comments on commit 0c28e4f

Please sign in to comment.