Bug 1098239 - Rewrite mobile/android Gradle integration. r=me
authorNick Alexander <nalexander@mozilla.com>
Mon, 22 Dec 2014 19:49:04 -0800
changeset 246802 6d4ab59f9764de7a00e9a22074d909994d3cd34a
parent 246801 893dbf1b59ee665174369404a7733a2094d3c6c8
child 246803 53d6270744abdf9f15245b2956734f6c2767be96
push id4489
push userraliiev@mozilla.com
push dateMon, 23 Feb 2015 15:17:55 +0000
treeherdermozilla-beta@fd7c3dc24146 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersme
bugs1098239
milestone37.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1098239 - Rewrite mobile/android Gradle integration. r=me This is a big patch, but it's essentially NPOTB. The part that is POTB is ... removing Gradle integration from the build. I've implemented |mach gradle-install| as a substitute for the build system stuff; it's just so much easier to iterate on a mach command than a moz.build and Makefile.in. I'm landing this with self-review because this lessens the impact of the Gradle integration on the build system and because I am the only person who understands either the old or the new system. You'll need to run |mach gradle-install| at top level to configure the new Gradle integration. But |mach gradle ...| does the right thing configuration steps too. This patch rewrites most of the Gradle integration. The major changes are: * all .gradle files move into mobile/android/gradle; * all the Gradle projects live in the object directory; * mozconfig exposed to all build.gradle files; * simplification of Android configuration between build.gradle files; * support for user-specified version of build tools; * first steps towards supporting builds from the source directory; * bumps Gradle to 2.2.1; * bumps the Android-Gradle plugin to 0.14.4. This is seemingly a step backwards given that we'd prefer to ship the .idea directory in the source directory. But in fact we get closer to that; it's possible to run ./gradlew in the source directory and get a reasonable build. We'll progress with this in time. The win right now is that the projects are nested, which makes importing work better on Linux machines. Unfortunately IntelliJ 13 and 14 now have conflicting Android-Gradle plugin version requirements, so we now only support IntelliJ 14.0.2 and above.
.gitignore
.hgignore
mobile/android/app/build.gradle
mobile/android/base/build.gradle
mobile/android/base/docs/gradle.rst
mobile/android/base/gradle_AndroidManifest.xml
mobile/android/gradle/Makefile.in
mobile/android/gradle/android.gradle
mobile/android/gradle/app/build.gradle
mobile/android/gradle/base/AndroidManifest.xml
mobile/android/gradle/base/build.gradle
mobile/android/gradle/branding/AndroidManifest.xml
mobile/android/gradle/branding/build.gradle
mobile/android/gradle/build.gradle
mobile/android/gradle/gradle.properties
mobile/android/gradle/gradle.properties.in
mobile/android/gradle/gradle/wrapper/gradle-wrapper.jar
mobile/android/gradle/gradle/wrapper/gradle-wrapper.properties
mobile/android/gradle/moz.build
mobile/android/gradle/omnijar/AndroidManifest.xml
mobile/android/gradle/omnijar/build.gradle
mobile/android/gradle/omnijar/gradle_AndroidManifest.xml
mobile/android/gradle/preprocessed_code/AndroidManifest.xml
mobile/android/gradle/preprocessed_code/build.gradle
mobile/android/gradle/preprocessed_resources/AndroidManifest.xml
mobile/android/gradle/preprocessed_resources/build.gradle
mobile/android/gradle/settings.gradle
mobile/android/gradle/thirdparty/AndroidManifest.xml
mobile/android/gradle/thirdparty/build.gradle
mobile/android/mach_commands.py
mobile/android/moz.build
mobile/android/thirdparty/build.gradle
mobile/android/thirdparty/gradle_AndroidManifest.xml
--- a/.gitignore
+++ b/.gitignore
@@ -62,8 +62,11 @@ toolkit/devtools/chrome.manifest
 # Tag files generated by GNU Global
 GTAGS
 GRTAGS
 GSYMS
 GPATH
 
 # Git clone directory for updating web-platform-tests
 testing/web-platform/sync/
+
+# Android Gradle artifacts.
+mobile/android/gradle/.gradle
--- a/.hgignore
+++ b/.hgignore
@@ -88,8 +88,11 @@ GPATH
 # Loop legal content build/deploy artifacts
 
 # XXX Once a grunt contrib-clean command has been added (bug 1066491), or
 # once legal has centralized their ToS and PP hosting infrastructure,
 # (expected Q4 2014) the legal doc build stuff for Loop can be removed,
 # including the following three lines
 ^browser/components/loop/standalone/content/legal/styles/.*\.css$
 ^browser/components/loop/standalone/content/legal/terms/en_US\.html$
+
+# Android Gradle artifacts.
+^mobile/android/gradle/.gradle
deleted file mode 100644
--- a/mobile/android/app/build.gradle
+++ /dev/null
@@ -1,61 +0,0 @@
-project.buildDir = "${topobjdir}/mobile/android/gradle/app/build"
-
-apply plugin: 'android'
-
-android {
-    compileSdkVersion rootProject.ext.compileSdkVersion
-    buildToolsVersion rootProject.ext.buildToolsVersion
-
-    defaultConfig {
-        minSdkVersion rootProject.ext.minSdkVersion
-        targetSdkVersion rootProject.ext.targetSdkVersion
-    }
-
-    buildTypes {
-        release {
-            runProguard false
-            proguardFile getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
-    compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
-    }
-
-    android {
-        lintOptions {
-            abortOnError false
-        }
-    }
-
-    sourceSets {
-        main {
-            manifest {
-                srcFile "${topobjdir}/mobile/android/base/AndroidManifest.xml"
-            }
-
-            assets {
-                srcDir "${topobjdir}/dist/fennec/assets"
-            }
-
-            jniLibs {
-                srcDir "${topobjdir}/dist/fennec/lib"
-            }
-        }
-
-        androidTest {
-            java {
-                srcDir "${topobjdir}/mobile/android/gradle/app/src/androidTest/robocop_harness/java"
-                srcDir "${topobjdir}/mobile/android/gradle/app/src/androidTest/robocop/java"
-                srcDir "${topobjdir}/mobile/android/gradle/app/src/androidTest/background/java"
-                srcDir "${topobjdir}/mobile/android/gradle/app/src/androidTest/browser/java"
-            }
-        }
-    }
-}
-
-dependencies {
-    compile project(':base')
-    androidTestCompile fileTree(dir: "../../../build/mobile/robocop", include: ['*.jar'])
-}
--- a/mobile/android/base/build.gradle
+++ b/mobile/android/base/build.gradle
@@ -1,25 +1,25 @@
 project.buildDir = "${topobjdir}/mobile/android/gradle/base/build"
 
-apply plugin: 'android-library'
+apply plugin: 'com.android.library'
 
 android {
     compileSdkVersion rootProject.ext.compileSdkVersion
     buildToolsVersion rootProject.ext.buildToolsVersion
 
     defaultConfig {
         applicationId 'org.mozilla.gecko'
         minSdkVersion rootProject.ext.minSdkVersion
         targetSdkVersion rootProject.ext.targetSdkVersion
     }
 
     buildTypes {
         release {
-            runProguard false
+            minifyEnabled false
             proguardFile getDefaultProguardFile('proguard-android.txt')
         }
     }
 
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
     }
--- a/mobile/android/base/docs/gradle.rst
+++ b/mobile/android/base/docs/gradle.rst
@@ -13,20 +13,20 @@ Instructions
   ./mach gradle build
 
 The debug APK will be at
 ``$OBJDIR/mobile/android/gradle/app/build/outputs/apk/app-debug.apk``.
 
 The ``$OBJDIR/mobile/android/gradle`` directory can be imported into IntelliJ as
 follows:
 
-- File > Import Project
+- File > Import Project...
 - [select ``$OBJDIR/mobile/android/gradle``]
 - Import project from external model > Gradle
-- [select Use default Gradle wrapper]
+- [select Use customizable Gradle wrapper]
 
 When prompted, do not add any files to git.  You may need to re-open the
 project, or restart IntelliJ, to pick up a compiler language-level change.
 
 Technical overview
 ==================
 
 Caveats
@@ -37,21 +37,21 @@ Caveats
 * Changes to preprocessed source code and resources (namely, ``strings.xml.in``
   and the accompanying DTD files) may not be recognized.
 * There's minimal support for editing JavaScript.
 * There's no support for editing C/C++.
 
 How the Gradle project is laid out
 ----------------------------------
 
-To the greatest extent possible, the Gradle configuration lives in the source
-directory.  The only Gradle configuration that lives in the object directory is
-installed when building the ``mobile/android/gradle`` directory.
+To the greatest extent possible, the Gradle configuration lives in the object
+directory.
 
-At the time of writing, their are three sub-modules: *app*, *base*, and *thirdparty*.
+At the time of writing, their are three main sub-modules: *app*, *base*, and
+*thirdparty*, and several smaller sub-modules.
 
 *app* is the Fennec wrapper; it generates the **org.mozilla.fennec.R** resource
 package.  *base* is the Gecko code; it generates the **org.mozilla.gecko.R**
 resource package.  Together, *app* and *base* address the "two package
 namespaces" that has plagued Fennec from day one.
 
 Due to limitations in the Android Gradle plugin, all test code is shoved into
 the *app* module.  (The issue is that, at the time of writing, there is no
deleted file mode 100644
--- a/mobile/android/gradle/Makefile.in
+++ /dev/null
@@ -1,59 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-gradle := \
-  local.properties.in \
-  gradle.properties.in \
-  $(NULL)
-
-gradle_PATH := $(CURDIR)
-gradle_FLAGS += -Dtopsrcdir=$(abspath $(topsrcdir))
-gradle_FLAGS += -Dtopobjdir=$(abspath $(DEPTH))
-gradle_FLAGS += -DANDROID_SDK_ROOT=$(ANDROID_SDK_ROOT)
-gradle_KEEP_PATH := 1
-PP_TARGETS += gradle
-
-wrapper_FILES := \
-  build.gradle \
-  settings.gradle \
-  gradle/wrapper/gradle-wrapper.jar \
-  gradle/wrapper/gradle-wrapper.properties \
-  gradlew \
-  $(NULL)
-
-wrapper_DEST := $(CURDIR)
-wrapper_KEEP_PATH := 1
-INSTALL_TARGETS += wrapper
-
-base/src/main/java/org/mozilla/gecko:
-	$(NSINSTALL) -D ${@D}
-	ln -s $(topsrcdir)/mobile/android/base $@
-libs:: base/src/main/java/org/mozilla/gecko
-
-base/src/main/res:
-	$(NSINSTALL) -D ${@D}
-	ln -s $(topsrcdir)/mobile/android/base/resources $@
-libs:: base/src/main/res
-
-app/src/androidTest/robocop_harness/java/org/mozilla/gecko:
-	$(NSINSTALL) -D ${@D}
-	ln -s $(topsrcdir)/build/mobile/robocop $@
-libs:: app/src/androidTest/robocop_harness/java/org/mozilla/gecko
-
-app/src/androidTest/robocop/java/org/mozilla/gecko/tests:
-	$(NSINSTALL) -D ${@D}
-	ln -s $(topsrcdir)/mobile/android/base/tests $@
-libs:: app/src/androidTest/robocop/java/org/mozilla/gecko/tests
-
-app/src/androidTest/browser/java/org/mozilla/gecko:
-	$(NSINSTALL) -D ${@D}
-	ln -s $(topsrcdir)/mobile/android/tests/browser/junit3/src $@
-libs:: app/src/androidTest/browser/java/org/mozilla/gecko
-
-app/src/androidTest/background/java/org/mozilla/gecko/background:
-	$(NSINSTALL) -D ${@D}
-	ln -s $(topsrcdir)/mobile/android/tests/background/junit3/src $@
-libs:: app/src/androidTest/background/java/org/mozilla/gecko/background
-
-include $(topsrcdir)/config/rules.mk
new file mode 100644
--- /dev/null
+++ b/mobile/android/gradle/android.gradle
@@ -0,0 +1,29 @@
+// Configure shared Android settings.  This should be run (using "apply from")
+// immediately after applying the Android plugin.  Be aware that IntelliJ does
+// not parse these values correctly: the Android-Gradle facet panel manually
+// parses build.gradle rather than interrogating the Gradle model.
+
+android {
+    compileSdkVersion "android-${mozconfig.defines.ANDROID_TARGET_SDK}"
+    // Turn "android-sdk/build-tools/21.1.1" into "21.1.1".
+    buildToolsVersion (new File(mozconfig.substs.ANDROID_BUILD_TOOLS).getName())
+
+    defaultConfig {
+        targetSdkVersion mozconfig.defines.ANDROID_TARGET_SDK
+        minSdkVersion mozconfig.defines.MOZ_ANDROID_MIN_SDK_VERSION
+        if (mozconfig.defines.MOZ_ANDROID_MAX_SDK_VERSION) {
+            maxSdkVersion mozconfig.defines.MOZ_ANDROID_MAX_SDK_VERSION
+        }
+    }
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_7
+        targetCompatibility JavaVersion.VERSION_1_7
+    }
+
+    android {
+        lintOptions {
+            abortOnError false
+        }
+    }
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/gradle/app/build.gradle
@@ -0,0 +1,28 @@
+apply plugin: 'com.android.application'
+
+apply from: rootProject.file("${topsrcdir}/mobile/android/gradle/android.gradle")
+
+android {
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFile getDefaultProguardFile('proguard-android.txt')
+        }
+    }
+
+    sourceSets {
+        androidTest {
+            java {
+                srcDir "${topobjdir}/mobile/android/gradle/app/src/robocop_harness"
+                srcDir "${topobjdir}/mobile/android/gradle/app/src/robocop"
+                srcDir "${topobjdir}/mobile/android/gradle/app/src/background"
+                srcDir "${topobjdir}/mobile/android/gradle/app/src/browser"
+            }
+        }
+    }
+}
+
+dependencies {
+    compile project(':base')
+    androidTestCompile fileTree(dir: 'libs', include: ['*.jar'])
+}
rename from mobile/android/base/gradle_AndroidManifest.xml
rename to mobile/android/gradle/base/AndroidManifest.xml
new file mode 100644
--- /dev/null
+++ b/mobile/android/gradle/base/build.gradle
@@ -0,0 +1,66 @@
+apply plugin: 'com.android.library'
+
+apply from: "${topsrcdir}/mobile/android/gradle/android.gradle"
+
+android {
+    defaultConfig {
+        applicationId 'org.mozilla.gecko'
+    }
+
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFile getDefaultProguardFile('proguard-android.txt')
+        }
+    }
+
+    sourceSets {
+        main {
+            java {
+                exclude 'org/mozilla/gecko/tests/**'
+                exclude 'org/mozilla/gecko/resources/**'
+                if (!mozconfig.substs.MOZ_CRASHREPORTER) {
+                    exclude 'org/mozilla/gecko/CrashReporter.java'
+                }
+            }
+
+            res {
+                if (mozconfig.substs.MOZ_CRASHREPORTER) {
+                    srcDir "src/crashreporter/res"
+                }
+            }
+        }
+    }
+}
+
+dependencies {
+    compile fileTree(dir: 'libs', include: ['*.jar'])
+    compile 'com.android.support:support-v4:19.1.+'
+
+    if (mozconfig.substs.MOZ_NATIVE_DEVICES) {
+        compile 'com.android.support:appcompat-v7:19.1.+'
+        compile 'com.android.support:mediarouter-v7:19.1.+'
+        compile 'com.google.android.gms:play-services:5.+'
+    }
+
+    compile project(':branding')
+    compile project(':omnijar')
+    compile project(':preprocessed_code')
+    compile project(':preprocessed_resources')
+    compile project(':thirdparty')
+}
+
+android.libraryVariants.all { variant ->
+    variant.checkManifest.dependsOn generateCodeAndResources
+}
+
+apply plugin: 'idea'
+
+idea {
+    module {
+        // excludeDirs = []
+        excludeDirs += file('src/main/java/org/mozilla/gecko/tests')
+        excludeDirs += file('org/mozilla/gecko/tests')
+        excludeDirs += file('tests')
+    }
+}
copy from mobile/android/base/gradle_AndroidManifest.xml
copy to mobile/android/gradle/branding/AndroidManifest.xml
--- a/mobile/android/base/gradle_AndroidManifest.xml
+++ b/mobile/android/gradle/branding/AndroidManifest.xml
@@ -1,4 +1,4 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="org.mozilla.gecko">
+    package="org.mozilla.gecko.branding">
 
 </manifest>
new file mode 100644
--- /dev/null
+++ b/mobile/android/gradle/branding/build.gradle
@@ -0,0 +1,16 @@
+apply plugin: 'com.android.library'
+
+apply from: "${topsrcdir}/mobile/android/gradle/android.gradle"
+
+android {
+    defaultConfig {
+        applicationId 'org.mozilla.gecko.branding'
+    }
+
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFile getDefaultProguardFile('proguard-android.txt')
+        }
+    }
+}
--- a/mobile/android/gradle/build.gradle
+++ b/mobile/android/gradle/build.gradle
@@ -1,23 +1,34 @@
-buildDir = "${topobjdir}/mobile/android/gradle/build"
+allprojects {
+    // Expose the per-object-directory configuration to all projects.
+    ext {
+        mozconfig = gradle.mozconfig
+        topsrcdir = gradle.mozconfig.topsrcdir
+        topobjdir = gradle.mozconfig.topobjdir
+    }
+}
 
-ext {
-    compileSdkVersion = "${compileSdkVersion}"
-    buildToolsVersion = "${buildToolsVersion}"
-
-    targetSdkVersion = "${targetSdkVersion}"
-    minSdkVersion = "${minSdkVersion}"
-}
+buildDir "${topobjdir}/mobile/android/gradle/build"
 
 buildscript {
     repositories {
         jcenter()
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:0.12.2'
+        classpath 'com.android.tools.build:gradle:0.14.4'
     }
 }
 
 repositories {
     jcenter()
 }
+
+subprojects {
+    task generateCodeAndResources(type:Exec) {
+        workingDir "${topobjdir}"
+
+        commandLine "${topsrcdir}/mach"
+        args 'build'
+        args 'mobile/android/base/gradle-targets'
+    }
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/gradle/gradle.properties
@@ -0,0 +1,2 @@
+org.gradle.parallel=true
+org.gradle.daemon=true
--- a/mobile/android/gradle/gradle.properties.in
+++ b/mobile/android/gradle/gradle.properties.in
@@ -1,15 +1,5 @@
 #filter substitution
+#include gradle.properties
+
 topsrcdir=@topsrcdir@
 topobjdir=@topobjdir@
-compileSdkVersion=android-@ANDROID_TARGET_SDK@
-buildToolsVersion=20.0.0
-targetSdkVersion=@ANDROID_TARGET_SDK@
-minSdkVersion=@MOZ_ANDROID_MIN_SDK_VERSION@
-#ifdef MOZ_ANDROID_MAX_SDK_VERSION
-maxSdkVersion=@MOZ_ANDROID_MAX_SDK_VERSION@
-#endif
-#if MOZ_CRASHREPORTER
-MOZ_CRASHREPORTER=true
-#else
-MOZ_CRASHREPORTER=false
-#endif
index 0087cd3b18659b5577cf6ad3ef61f8eb9416ebba..c97a8bdb9088d370da7e88784a7a093b971aa23a
GIT binary patch
literal 51018
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
--- a/mobile/android/gradle/gradle/wrapper/gradle-wrapper.properties
+++ b/mobile/android/gradle/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Tue Nov 25 10:01:42 PST 2014
+#Sun Dec 21 20:16:49 PST 2014
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-1.12-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-bin.zip
deleted file mode 100644
--- a/mobile/android/gradle/moz.build
+++ /dev/null
@@ -1,5 +0,0 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
rename from mobile/android/gradle/omnijar/gradle_AndroidManifest.xml
rename to mobile/android/gradle/omnijar/AndroidManifest.xml
--- a/mobile/android/gradle/omnijar/build.gradle
+++ b/mobile/android/gradle/omnijar/build.gradle
@@ -1,42 +1,54 @@
-project.buildDir = "${topobjdir}/mobile/android/gradle/omnijar/build"
-
 apply plugin: 'java'
 
-sourceSets {
-    main {
-        java {
-            // Remove the default directories entirely.
-            srcDirs = []
-            // Depend on everything in mobile/android that goes into
-            // the omnijar.
-            srcDir '../../locales'
-            srcDir '../../chrome'
-            srcDir '../../components'
-            srcDir '../../modules'
-            srcDir '../../themes/core'
-        }
-    }
-}
+// sourceSets {
+//     main {
+//         java {
+//             // Remove the default directories entirely.
+//             srcDirs = []
+//             // Depend on everything in mobile/android that goes into
+//             // the omnijar.
+//             srcDir 'src/main/java/locales'
+//             srcDir 'src/main/java/chrome'
+//             srcDir 'src/main/java/components'
+//             srcDir 'src/main/java/modules'
+//             srcDir 'src/main/java/themes'
+//         }
+//     }
+// }
 
 /**
  * This task runs when any input file is newer than the omnijar.
  */
 task rebuildOmnijar(type:Exec) {
     // Depend on all the inputs labeled as Java sources.
-    project.sourceSets.main.java.srcDirs.each { srcDir ->
-        inputs.sourceDir srcDir
-    }
+    // project.sourceSets.main.java.srcDirs.each { srcDir ->
+    //     inputs.sourceDir srcDir
+    // }
+
+    inputs.sourceDir 'src/main/java/locales'
+    inputs.sourceDir 'src/main/java/chrome'
+    inputs.sourceDir 'src/main/java/components'
+    inputs.sourceDir 'src/main/java/modules'
+    inputs.sourceDir 'src/main/java/themes'
+
     // Produce a single output file.
     outputs.file "${topobjdir}/dist/fennec/assets/omni.ja"
 
     workingDir "${topobjdir}"
 
     commandLine "${topsrcdir}/mach"
     args 'build'
     args '-C'
     args 'mobile/android/base'
     args 'gradle-omnijar'
 }
 
 // Rebuild the omnijar before the earliest Java task.
 tasks.compileJava.dependsOn rebuildOmnijar
+
+apply plugin: 'idea'
+
+idea {
+    module {
+    }
+}
copy from mobile/android/base/gradle_AndroidManifest.xml
copy to mobile/android/gradle/preprocessed_code/AndroidManifest.xml
--- a/mobile/android/base/gradle_AndroidManifest.xml
+++ b/mobile/android/gradle/preprocessed_code/AndroidManifest.xml
@@ -1,4 +1,4 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="org.mozilla.gecko">
+    package="org.mozilla.gecko.preprocessed_code">
 
 </manifest>
new file mode 100644
--- /dev/null
+++ b/mobile/android/gradle/preprocessed_code/build.gradle
@@ -0,0 +1,16 @@
+apply plugin: 'android-library'
+
+apply from: "${topsrcdir}/mobile/android/gradle/android.gradle"
+
+android {
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFile getDefaultProguardFile('proguard-android.txt')
+        }
+    }
+}
+
+android.libraryVariants.all { variant ->
+    variant.checkManifest.dependsOn generateCodeAndResources
+}
copy from mobile/android/base/gradle_AndroidManifest.xml
copy to mobile/android/gradle/preprocessed_resources/AndroidManifest.xml
--- a/mobile/android/base/gradle_AndroidManifest.xml
+++ b/mobile/android/gradle/preprocessed_resources/AndroidManifest.xml
@@ -1,4 +1,4 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="org.mozilla.gecko">
+    package="org.mozilla.gecko.preprocessed_resources">
 
 </manifest>
new file mode 100644
--- /dev/null
+++ b/mobile/android/gradle/preprocessed_resources/build.gradle
@@ -0,0 +1,24 @@
+apply plugin: 'com.android.library'
+
+apply from: "${topsrcdir}/mobile/android/gradle/android.gradle"
+
+android {
+    defaultConfig {
+        applicationId 'org.mozilla.gecko.preprocessed_resources'
+    }
+
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFile getDefaultProguardFile('proguard-android.txt')
+        }
+    }
+}
+
+android.libraryVariants.all { variant ->
+    variant.checkManifest.dependsOn generateCodeAndResources
+}
+
+dependencies {
+    compile project(':branding')
+}
--- a/mobile/android/gradle/settings.gradle
+++ b/mobile/android/gradle/settings.gradle
@@ -1,9 +1,50 @@
+// If our root project is in the object directory, we expect to be given
+// topsrcdir from our environment via gradle.properties.  If we don't get it,
+// our root project is in the source directory, so we extract topsrcdir relative
+// to the location of this script.
+if (!hasProperty('topsrcdir')) {
+    // In the source directory, we're not worried about links crossing directories.
+    binding.variables['topsrcdir'] = new File("../../..").getCanonicalPath()
+    logger.warn("topsrcdir is undefined: assuming source directory Gradle invocation with topsrcdir=${topsrcdir}.")
+}
+
+def command = ["${topsrcdir}/mach", "environment", "--format", "json", "--verbose"]
+def proc = command.execute(null, new File(topsrcdir))
+def sout = new StringBuffer()
+def serr = new StringBuffer()
+proc.consumeProcessOutput(sout, serr)
+proc.waitFor()
+
+if (proc.exitValue() != 0) {
+    throw new GradleException("Could not extract mozconfig/build environment from |${topsrcdir}/mach environment|!");
+}
+
+import groovy.json.JsonSlurper
+def slurper = new JsonSlurper()
+def json = slurper.parseText(sout.toString())
+
 include ':app'
 include ':base'
+include ':branding'
 include ':omnijar'
+include ':preprocessed_code'
+include ':preprocessed_resources'
 include ':thirdparty'
 
-project(':app').projectDir = new File("${topsrcdir}/mobile/android/app")
-project(':base').projectDir = new File("${topsrcdir}/mobile/android/base")
-project(':omnijar').projectDir = new File("${topsrcdir}/mobile/android/gradle/omnijar")
-project(':thirdparty').projectDir = new File("${topsrcdir}/mobile/android/thirdparty")
+def gradleRoot = new File("${json.topobjdir}/mobile/android/gradle")
+project(':app').projectDir = new File(gradleRoot, 'app')
+project(':base').projectDir = new File(gradleRoot, 'base')
+project(':branding').projectDir = new File(gradleRoot, 'branding')
+project(':omnijar').projectDir = new File(gradleRoot, 'omnijar')
+project(':preprocessed_code').projectDir = new File(gradleRoot, 'preprocessed_code')
+project(':preprocessed_resources').projectDir = new File(gradleRoot, 'preprocessed_resources')
+project(':thirdparty').projectDir = new File(gradleRoot, 'thirdparty')
+
+// The Gradle instance is shared between settings.gradle and all the
+// other build.gradle files (see
+// http://forums.gradle.org/gradle/topics/define_extension_properties_from_settings_xml).
+// We use this ext property to pass the per-object-directory mozconfig
+// between scripts.  This lets us execute set-up code before we gradle
+// tries to configure the project even once, and as a side benefit
+// saves invoking |mach environment| multiple times.
+gradle.ext.mozconfig = json
rename from mobile/android/thirdparty/gradle_AndroidManifest.xml
rename to mobile/android/gradle/thirdparty/AndroidManifest.xml
new file mode 100644
--- /dev/null
+++ b/mobile/android/gradle/thirdparty/build.gradle
@@ -0,0 +1,21 @@
+apply plugin: 'com.android.library'
+
+apply from: "${topsrcdir}/mobile/android/gradle/android.gradle"
+
+android {
+    defaultConfig {
+        applicationId 'org.mozilla.gecko.thirdparty'
+    }
+
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFile getDefaultProguardFile('proguard-android.txt')
+        }
+    }
+}
+
+dependencies {
+    compile fileTree(dir: 'libs', include: ['*.jar'])
+    compile 'com.android.support:support-v4:19.1.+'
+}
--- a/mobile/android/mach_commands.py
+++ b/mobile/android/mach_commands.py
@@ -1,36 +1,155 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 from __future__ import print_function, unicode_literals
 
 import argparse
 import logging
+import os
+
 import mozpack.path as mozpath
 
 from mozbuild.base import (
     MachCommandBase,
     MachCommandConditions as conditions,
 )
 
+from mozbuild.util import (
+    FileAvoidWrite,
+)
+
 from mach.decorators import (
     CommandArgument,
     CommandProvider,
     Command,
 )
 
+SUCCESS = '''
+You should be ready to build with Gradle and import into IntelliJ!  Test with
+
+    ./mach gradle build
+
+and in IntelliJ select File > Import project... and choose
+
+    {topobjdir}/mobile/android/gradle
+'''
 
 @CommandProvider
 class MachCommands(MachCommandBase):
     @Command('gradle', category='devenv',
         description='Run gradle.',
         conditions=[conditions.is_android])
     @CommandArgument('args', nargs=argparse.REMAINDER)
     def gradle(self, args):
         # Avoid logging the command
         self.log_manager.terminal_handler.setLevel(logging.CRITICAL)
 
+        code = self.gradle_install(quiet=True)
+        if code:
+            return code
+
         return self.run_process(['./gradlew'] + args,
             pass_thru=True, # Allow user to run gradle interactively.
             ensure_exit_code=False, # Don't throw on non-zero exit code.
             cwd=mozpath.join(self.topobjdir, 'mobile', 'android', 'gradle'))
+
+    @Command('gradle-install', category='devenv',
+        description='Install gradle environment.',
+        conditions=[conditions.is_android])
+    def gradle_install(self, quiet=False):
+        import mozpack.manifests
+        m = mozpack.manifests.InstallManifest()
+
+        def srcdir(dst, src):
+            m.add_symlink(os.path.join(self.topsrcdir, src), dst)
+
+        def objdir(dst, src):
+            m.add_symlink(os.path.join(self.topobjdir, src), dst)
+
+        srcdir('build.gradle', 'mobile/android/gradle/build.gradle')
+        srcdir('settings.gradle', 'mobile/android/gradle/settings.gradle')
+
+        m.add_pattern_copy(os.path.join(self.topsrcdir, 'mobile/android/gradle/gradle/wrapper'), '**', 'gradle/wrapper')
+        m.add_copy(os.path.join(self.topsrcdir, 'mobile/android/gradle/gradlew'), 'gradlew')
+
+        defines = {
+            'topsrcdir': self.topsrcdir,
+            'topobjdir': self.topobjdir,
+            'ANDROID_SDK_ROOT': self.substs['ANDROID_SDK_ROOT'],
+        }
+        m.add_preprocess(os.path.join(self.topsrcdir, 'mobile/android/gradle/gradle.properties.in'),
+            'gradle.properties',
+            defines=defines,
+            deps=os.path.join(self.topobjdir, 'mobile/android/gradle/.deps/gradle.properties.pp'))
+        m.add_preprocess(os.path.join(self.topsrcdir, 'mobile/android/gradle/local.properties.in'),
+            'local.properties',
+            defines=defines,
+            deps=os.path.join(self.topobjdir, 'mobile/android/gradle/.deps/local.properties.pp'))
+
+        srcdir('branding/build.gradle', 'mobile/android/gradle/branding/build.gradle')
+        srcdir('branding/src/main/AndroidManifest.xml', 'mobile/android/gradle/branding/AndroidManifest.xml')
+        srcdir('branding/src/main/res', os.path.join(self.substs['MOZ_BRANDING_DIRECTORY'], 'res'))
+
+        srcdir('preprocessed_code/build.gradle', 'mobile/android/gradle/preprocessed_code/build.gradle')
+        srcdir('preprocessed_code/src/main/AndroidManifest.xml', 'mobile/android/gradle/preprocessed_code/AndroidManifest.xml')
+        objdir('preprocessed_code/src/main/java', 'mobile/android/base/generated/preprocessed')
+
+        srcdir('preprocessed_resources/build.gradle', 'mobile/android/gradle/preprocessed_resources/build.gradle')
+        srcdir('preprocessed_resources/src/main/AndroidManifest.xml', 'mobile/android/gradle/preprocessed_resources/AndroidManifest.xml')
+        objdir('preprocessed_resources/src/main/res', 'mobile/android/base/res')
+
+        srcdir('thirdparty/build.gradle', 'mobile/android/gradle/thirdparty/build.gradle')
+        srcdir('thirdparty/src/main/AndroidManifest.xml', 'mobile/android/gradle/thirdparty/AndroidManifest.xml')
+        srcdir('thirdparty/src/main/java', 'mobile/android/thirdparty')
+
+        srcdir('omnijar/build.gradle', 'mobile/android/gradle/omnijar/build.gradle')
+        srcdir('omnijar/src/main/java/locales', 'mobile/android/locales')
+        srcdir('omnijar/src/main/java/chrome', 'mobile/android/chrome')
+        srcdir('omnijar/src/main/java/components', 'mobile/android/components')
+        srcdir('omnijar/src/main/java/modules', 'mobile/android/modules')
+        srcdir('omnijar/src/main/java/themes', 'mobile/android/themes')
+
+        srcdir('app/build.gradle', 'mobile/android/gradle/app/build.gradle')
+        objdir('app/src/main/AndroidManifest.xml', 'mobile/android/base/AndroidManifest.xml')
+        objdir('app/src/main/assets', 'dist/fennec/assets')
+        objdir('app/src/main/jniLibs', 'dist/fennec/lib')
+        # Test code.
+        srcdir('app/src/robocop_harness/org/mozilla/gecko', 'build/mobile/robocop')
+        srcdir('app/src/robocop/org/mozilla/gecko/tests', 'mobile/android/base/tests')
+        srcdir('app/src/background/org/mozilla/gecko', 'mobile/android/tests/background/junit3/src')
+        srcdir('app/src/browser/org/mozilla/gecko', 'mobile/android/tests/browser/junit3/src')
+        # Test libraries.
+        srcdir('app/libs', 'build/mobile/robocop')
+
+        srcdir('base/build.gradle', 'mobile/android/gradle/base/build.gradle')
+        srcdir('base/src/main/AndroidManifest.xml', 'mobile/android/gradle/base/AndroidManifest.xml')
+        srcdir('base/src/main/java/org/mozilla/gecko', 'mobile/android/base')
+        srcdir('base/src/main/java/org/mozilla/mozstumbler', 'mobile/android/stumbler/java/org/mozilla/mozstumbler')
+        srcdir('base/src/main/java/org/mozilla/search', 'mobile/android/search/java/org/mozilla/search')
+        srcdir('base/src/main/res', 'mobile/android/base/resources')
+        srcdir('base/src/newtablet/res', 'mobile/android/base/newtablet/res')
+        srcdir('base/src/crashreporter/res', 'mobile/android/base/crashreporter/res')
+
+        manifest_path = os.path.join(self.topobjdir, 'mobile', 'android', 'gradle.manifest')
+        with FileAvoidWrite(manifest_path) as f:
+            m.write(fileobj=f)
+
+        self.virtualenv_manager.ensure()
+        code = self.run_process([
+                self.virtualenv_manager.python_path,
+                os.path.join(self.topsrcdir, 'python/mozbuild/mozbuild/action/process_install_manifest.py'),
+                '--no-remove',
+                '--no-remove-all-directory-symlinks',
+                '--no-remove-empty-directories',
+                os.path.join(self.topobjdir, 'mobile', 'android', 'gradle'),
+                manifest_path],
+            pass_thru=True, # Allow user to run gradle interactively.
+            ensure_exit_code=False, # Don't throw on non-zero exit code.
+            cwd=mozpath.join(self.topsrcdir, 'mobile', 'android'))
+
+        if not quiet:
+            if not code:
+                print(SUCCESS.format(topobjdir=self.topobjdir))
+
+        return code
--- a/mobile/android/moz.build
+++ b/mobile/android/moz.build
@@ -19,17 +19,16 @@ DIRS += [
     'chrome',
     'components',
     'modules',
     'themes/core',
     'app',
     'fonts',
     'geckoview_library',
     'extensions',
-    'gradle',
 ]
 
 if not CONFIG['LIBXUL_SDK']:
     DIRS += ['../../xulrunner/tools/redit']
 
 TEST_DIRS += [
     'tests',
 ]
deleted file mode 100644
--- a/mobile/android/thirdparty/build.gradle
+++ /dev/null
@@ -1,49 +0,0 @@
-project.buildDir = "${topobjdir}/mobile/android/gradle/thirdparty/build"
-
-apply plugin: 'android-library'
-
-android {
-    compileSdkVersion rootProject.ext.compileSdkVersion
-    buildToolsVersion rootProject.ext.buildToolsVersion
-
-    defaultConfig {
-        applicationId 'org.mozilla.gecko.thirdparty'
-        minSdkVersion rootProject.ext.minSdkVersion
-        targetSdkVersion rootProject.ext.targetSdkVersion
-    }
-
-    buildTypes {
-        release {
-            runProguard false
-            proguardFile getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
-    compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
-    }
-
-    android {
-        lintOptions {
-            abortOnError false
-        }
-    }
-
-    sourceSets {
-        main {
-            manifest {
-                srcFile 'gradle_AndroidManifest.xml'
-            }
-
-            java {
-                srcDir "."
-            }
-        }
-    }
-}
-
-dependencies {
-    compile fileTree(dir: 'libs', include: ['*.jar'])
-    compile 'com.android.support:support-v4:19.1.+'
-}