mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-30 00:01:50 +00:00
af26e68984
The goal is to use a newer Android-Gradle build plugin version (2.3.3 is latest stable). That requires a modern Gradle (anything 3.3+, but 3.4.1 is the default from my Android Studio), and also a newer build-tools (25.0.3 is latest stable). The locations of lint output changed, and we want to use the standard output location because it's difficult to accommodate variant details in custom names. We change the location of findbugs output to follow suit. This requires either: - fixing lint errors - adding to the lint whitelist - using the new lint baseline It's best to use the new lint baseline, which will happen in the next commit. MozReview-Commit-ID: D19FzIDCJrE --HG-- extra : rebase_source : 12d132c0c3e0dbe2b8873b31360ea96d612de44c
151 lines
4.8 KiB
Groovy
151 lines
4.8 KiB
Groovy
import java.util.regex.Pattern
|
|
|
|
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)
|
|
buildToolsVersion = tryInt(mozconfig.substs.ANDROID_BUILD_TOOLS_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"
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
classpath 'com.android.tools.build:gradle:2.3.3'
|
|
classpath('com.stanfy.spoon:spoon-gradle-plugin:1.0.4') {
|
|
// Without these, we get errors linting.
|
|
exclude module: 'guava'
|
|
}
|
|
// Provided in tree.
|
|
classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.7.3'
|
|
}
|
|
}
|
|
|
|
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()}")
|
|
}
|
|
}
|
|
}
|
|
|
|
// Skip unit test for all build variants, unless if it was specifically requested by user.
|
|
// The enabled property for the unit test tasks is reset based on the command line task names just before the task execution.
|
|
// I bet there is a easier/cleaner way to do this, but this gets the job done for now.
|
|
Pattern pattern = Pattern.compile('.*test(.+UnitTest)?.*')
|
|
boolean startTasksIncludeTest = gradle.startParameter.taskNames.any {
|
|
taskName ->
|
|
taskName.matches(pattern)
|
|
}
|
|
gradle.taskGraph.beforeTask {
|
|
Task task ->
|
|
if (task.name.matches(pattern)) {
|
|
task.enabled = startTasksIncludeTest
|
|
}
|
|
}
|
|
|
|
afterEvaluate {
|
|
subprojects {
|
|
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.7'
|
|
}
|
|
|
|
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) {
|
|
}
|