Bug 1234629 - Post: Add Gradle support for bouncer. r=me
--- a/mobile/android/app/build.gradle
+++ b/mobile/android/app/build.gradle
@@ -61,17 +61,19 @@ android {
automation {
}
}
sourceSets {
main {
manifest.srcFile "${topobjdir}/mobile/android/base/AndroidManifest.xml"
assets {
- if (mozconfig.substs.MOZ_ANDROID_DISTRIBUTION_DIRECTORY) {
+ if (mozconfig.substs.MOZ_ANDROID_DISTRIBUTION_DIRECTORY && !mozconfig.substs.MOZ_ANDROID_PACKAGE_INSTALL_BOUNCER) {
+ // If we are packaging the bouncer, it will have the distribution, so don't put
+ // it in the main APK as well.
srcDir "${mozconfig.substs.MOZ_ANDROID_DISTRIBUTION_DIRECTORY}/assets"
}
}
}
androidTest {
java {
srcDir "${topsrcdir}/mobile/android/tests/browser/robocop/src"
--- a/mobile/android/bouncer/Makefile.in
+++ b/mobile/android/bouncer/Makefile.in
@@ -17,9 +17,14 @@ manifest := $(srcdir)/AndroidManifest.xm
manifest_TARGET := export
# Special 'cuz they are set in mobile/android/defs.mk.
manifest_FLAGS += \
-DMOZ_ANDROID_SHARED_ID="$(MOZ_ANDROID_SHARED_ID)" \
-DMOZ_ANDROID_SHARED_ACCOUNT_TYPE="$(MOZ_ANDROID_SHARED_ACCOUNT_TYPE)" \
-DMOZ_ANDROID_SHARED_FXACCOUNT_TYPE="$(MOZ_ANDROID_SHARED_FXACCOUNT_TYPE)" \
$(NULL)
+# Targets built very early during a Gradle build.
+gradle-targets: $(abspath AndroidManifest.xml)
+
+.PHONY: gradle-targets
+
libs:: $(ANDROID_APK_NAME).apk
new file mode 100644
--- /dev/null
+++ b/mobile/android/bouncer/build.gradle
@@ -0,0 +1,76 @@
+buildDir "${topobjdir}/gradle/build/mobile/android/bouncer"
+
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 23
+ buildToolsVersion "23.0.1"
+
+ defaultConfig {
+ targetSdkVersion 23
+ minSdkVersion 15
+ applicationId mozconfig.substs.ANDROID_PACKAGE_NAME
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_7
+ targetCompatibility JavaVersion.VERSION_1_7
+ }
+
+ dexOptions {
+ javaMaxHeapSize "2g"
+ }
+
+ lintOptions {
+ abortOnError false
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ }
+ }
+
+ sourceSets {
+ main {
+ manifest.srcFile "${topobjdir}/mobile/android/bouncer/AndroidManifest.xml"
+ assets {
+ if (mozconfig.substs.MOZ_ANDROID_DISTRIBUTION_DIRECTORY) {
+ srcDir "${mozconfig.substs.MOZ_ANDROID_DISTRIBUTION_DIRECTORY}/assets"
+ }
+ }
+ java {
+ srcDir 'java'
+ }
+ res {
+ srcDir "${topsrcdir}/${mozconfig.substs.MOZ_BRANDING_DIRECTORY}/res" // For the icon.
+ srcDir 'res'
+ }
+ }
+ }
+}
+
+task generateCodeAndResources(type:Exec) {
+ workingDir "${topobjdir}"
+
+ commandLine mozconfig.substs.GMAKE
+ args '-C'
+ args "${topobjdir}/mobile/android/bouncer"
+ args 'gradle-targets'
+
+ // Only show the output if something went wrong.
+ ignoreExitValue = true
+ standardOutput = new ByteArrayOutputStream()
+ errorOutput = standardOutput
+ doLast {
+ if (execResult.exitValue != 0) {
+ throw new GradleException("Process '${commandLine}' finished with non-zero exit value ${execResult.exitValue}:\n\n${standardOutput.toString()}")
+ }
+ }
+}
+
+afterEvaluate {
+ android.applicationVariants.all {
+ preBuild.dependsOn generateCodeAndResources
+ }
+}
--- a/settings.gradle
+++ b/settings.gradle
@@ -33,16 +33,21 @@ include ':base'
include ':omnijar'
include ':thirdparty'
project(':app').projectDir = new File("${json.topsrcdir}/mobile/android/app")
project(':base').projectDir = new File("${json.topsrcdir}/mobile/android/app/base")
project(':omnijar').projectDir = new File("${json.topsrcdir}/mobile/android/app/omnijar")
project(':thirdparty').projectDir = new File("${json.topsrcdir}/mobile/android/thirdparty")
+if (json.substs.MOZ_ANDROID_PACKAGE_INSTALL_BOUNCER) {
+ include ':bouncer'
+ project(':bouncer').projectDir = new File("${json.topsrcdir}/mobile/android/bouncer")
+}
+
// 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