build.gradle
author Belén Albeza <balbeza@mozilla.com>
Thu, 11 Oct 2018 12:01:59 +0000
changeset 499689 744747bb295cbb4a02dbf9960e5f7676822834c6
parent 493443 d81912697dac6aa17bca81962160ff379e1478dc
child 506080 32e919db3735b2c11d2533706ebce858c73477d3
permissions -rw-r--r--
Bug 1494543 - Part 2: Add model + short runtime name to the sidebar item. r=jdescottes,daisuke Added new getters to the ADB scanner so our runtime objects have now the information we need. Note that the UX of the devices in this patch doesn't still match what we had in the mockups (icons don't match, and we also need a circle with a tick), but since we have another bug to handle the CSS in the Sidebar, we can always adapt it there. The information needed to display what is shown in the mockups should be passed in this patch –if I miss anything, give me a shout! Differential Revision: https://phabricator.services.mozilla.com/D7705

def tryInt = { string ->
    if (string == null) {
        return string
    }
    if (string.isInteger()) {
        return string as Integer
    }
    return string
}

allprojects {
    // Expose the per-object-directory configuration to all projects.
    ext {
        mozconfig = gradle.mozconfig
        topsrcdir = gradle.mozconfig.topsrcdir
        topobjdir = gradle.mozconfig.topobjdir

        compileSdkVersion = tryInt(mozconfig.substs.ANDROID_COMPILE_SDK_VERSION)
        targetSdkVersion = tryInt(mozconfig.substs.ANDROID_TARGET_SDK)
        minSdkVersion = tryInt(mozconfig.substs.MOZ_ANDROID_MIN_SDK_VERSION)
        manifestPlaceholders = [
            ANDROID_PACKAGE_NAME: mozconfig.substs.ANDROID_PACKAGE_NAME,
            ANDROID_TARGET_SDK: mozconfig.substs.ANDROID_TARGET_SDK,
            MOZ_ANDROID_MIN_SDK_VERSION: mozconfig.substs.MOZ_ANDROID_MIN_SDK_VERSION,
            MOZ_ANDROID_SHARED_ID: "${mozconfig.substs.ANDROID_PACKAGE_NAME}.sharedID",
        ]
    }

    repositories {
        gradle.mozconfig.substs.GRADLE_MAVEN_REPOSITORIES.each { repository ->
            maven {
                url repository
            }
        }
    }
}

buildDir "${topobjdir}/gradle/build"

buildscript {
    repositories {
        gradle.mozconfig.substs.GRADLE_MAVEN_REPOSITORIES.each { repository ->
            maven {
                url repository
            }
        }
        // For in tree plugins.
        maven {
            url "file://${gradle.mozconfig.topsrcdir}/mobile/android/gradle/m2repo"
        }
    }

    ext.kotlin_version = '1.2.41'
    ext.support_library_version = '26.1.0'
    ext.jacoco_version = '0.8.1'

    if (gradle.mozconfig.substs.MOZ_ANDROID_GOOGLE_PLAY_SERVICES) {
        ext.google_play_services_version = '15.0.1'
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.4'
        classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.8.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

if ('multi' == System.env.AB_CD) {
    // Multi-l10n builds set `AB_CD=multi`, which isn't a valid locale.  This
    // causes the
    //
    // |mach build| > |mach gradle| > |make gradle-targets| > AndroidManifest.xml > strings.xml > multi/brand.dtd
    //
    // dependency chain to fail, since multi isn't a real locale.  To avoid
    // this, if Gradle is invoked with AB_CD=multi, we don't invoke Make at all.
    task generateCodeAndResources()
} else if (System.env.IS_LANGUAGE_REPACK == '1') {
    // Single-locale l10n repacks set `IS_LANGUAGE_REPACK=1` and handle resource
    // and code generation themselves.
    task generateCodeAndResources()
} else {
    task generateCodeAndResources(type:Exec) {
        workingDir "${topobjdir}"

        commandLine mozconfig.substs.GMAKE
        args '-C'
        args "${topobjdir}/mobile/android/base"
        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 {
    subprojects { project ->
        if (project.name != 'thirdparty') {
            tasks.withType(JavaCompile) {
                // Add compiler args for all code except third-party code.
                options.compilerArgs += [
                    // Turn on all warnings, except...
                    "-Xlint:all",
                    // Deprecation, because we do use deprecated API for compatibility.
                    "-Xlint:-deprecation",
                    // Serial, because we don't use Java serialization.
                    "-Xlint:-serial",
                    // Classfile, because javac has a bug with MethodParameters attributes
                    // with Java 7. https://bugs.openjdk.java.net/browse/JDK-8190452
                    "-Xlint:-classfile",
                    // Turn all remaining warnings into errors,
                    // unless marked by @SuppressWarnings.
                    "-Werror"]
            }
            if (project.name == 'app') {
                tasks.withType(JavaCompile) {
                    // Turn off classfile warnings because upon updating to play services 15.0.0
                    // a warning is being thrown from play-services-base which fails the build
                    // (com/google/android/gms/common/api/GoogleApiClient.class):
                    // warning: Cannot find annotation method 'value()' in type 'GuardedBy':
                    // class file for javax.annotation.concurrent.GuardedBy not found
                    options.compilerArgs += ["-Xlint:-classfile"]
                }
            }
        }

        if (!hasProperty('android')) {
            return
        }
        android.applicationVariants.all {
            preBuild.dependsOn rootProject.generateCodeAndResources
        }
        android.libraryVariants.all {
            preBuild.dependsOn rootProject.generateCodeAndResources
        }
    }
}

apply plugin: 'idea'

idea {
    project {
        languageLevel = '1.8'
    }

    module {
        // Object directories take a huge amount of time for IntelliJ to index.
        // Exclude them.  Convention is that object directories start with obj.
        // IntelliJ is clever and will not exclude the parts of the object
        // directory that are referenced, if there are any.  In practice,
        // indexing the entirety of the tree is taking too long, so exclude all
        // but mobile/.
        def topsrcdirURI = file(topsrcdir).toURI()
        excludeDirs += files(file(topsrcdir)
            .listFiles({it.isDirectory()} as FileFilter)
            .collect({topsrcdirURI.relativize(it.toURI()).toString()}) // Relative paths.
            .findAll({!it.equals('mobile/')}))

        // If topobjdir is below topsrcdir, hide only some portions of that tree.
        def topobjdirURI = file(topobjdir).toURI()
        if (!topsrcdirURI.relativize(topobjdirURI).isAbsolute()) {
            excludeDirs -= file(topobjdir)
            excludeDirs += files(file(topobjdir).listFiles())
            excludeDirs -= file("${topobjdir}/gradle")
        }

        if (!mozconfig.substs.MOZ_INSTALL_TRACKING) {
            excludeDirs += file("${topsrcdir}/mobile/android/thirdparty/com/adjust")
        }
    }
}

task wrapper(type: Wrapper) {
}