Skip to content

Instantly share code, notes, and snippets.

@pentiumao
Forked from xian/build.gradle
Last active November 9, 2018 07:29
Show Gist options
  • Save pentiumao/121056319e2060c087f6465aefe82bb6 to your computer and use it in GitHub Desktop.
Save pentiumao/121056319e2060c087f6465aefe82bb6 to your computer and use it in GitHub Desktop.
Download Robolectric dependencies for hermetic build
def robolectricVersion = '4.0'
def androidSdkVersions = [
'4.1.2_r1-robolectric-0',
'4.2.2_r1.2-robolectric-0',
'4.3_r2-robolectric-0',
'4.4_r1-robolectric-1',
'5.0.0_r2-robolectric-1',
'5.1.1_r9-robolectric-1',
'6.0.1_r3-robolectric-r1',
'7.0.0_r1-robolectric-0',
'7.1.0_r7-robolectric-r1',
'8.1.0-robolectric-4611349',
'9-robolectric-4913185-2'
]
def shadowArtifacts = [
"org.robolectric:sandbox:${robolectricVersion}",
"org.robolectric:shadowapi:${robolectricVersion}",
"org.robolectric:processor:${robolectricVersion}",
"org.robolectric:resources:${robolectricVersion}",
"org.robolectric:utils:${robolectricVersion}",
"org.robolectric:shadows-framework:${robolectricVersion}",
"org.robolectric:shadows-httpclient:${robolectricVersion}",
"org.robolectric:shadows-multidex:${robolectricVersion}",
"org.robolectric:shadows-playservices:${robolectricVersion}",
"org.robolectric:shadows-supportv4:${robolectricVersion}",
]
apply plugin: 'java'
repositories {
mavenLocal()
jcenter()
}
configurations {
sandbox
}
def allSdkConfigurations = []
androidSdkVersions.forEach { version ->
allSdkConfigurations << configurations.create(version)
dependencies.add(version, "org.robolectric:android-all:${version}")
dependencies.add('sandbox', "org.robolectric:android-all:${version}")
}
// In this section you declare the dependencies for your production and test code
dependencies {
compile("org.robolectric:robolectric:${robolectricVersion}") {
// we don't need these MavenDependencyResolver in a hermetic build
exclude group: 'org.apache.maven', module: 'maven-ant-tasks'
exclude group: 'org.apache.ant', module: 'ant'
}
shadowArtifacts.forEach { shadowArtifact ->
compile shadowArtifact
sandbox shadowArtifact
}
}
task createRobolectricDeps {
}
task copyLibs(type: Copy) {
into "$buildDir/output/libs"
from configurations.compile
doLast {
def f = new File("$buildDir/output/README.txt")
f.delete()
f << "# Include the following jar files on your classpath:\n"
f << "#\n"
source.forEach { file ->
f << "libs/${file.name}\n"
}
}
}
task copySdks(type: Copy) {
into "$buildDir/output/libs"
from allSdkConfigurations
doLast {
def f = new File("$buildDir/output/robolectric-deps.properties")
f.delete()
f << "# Place this file in your test resources dir (e.g. src/test/resources).\n"
f << "# Paths below should be absolute, or relative to this file.\n"
f << "#\n"
allSdkConfigurations.forEach { config ->
config.allDependencies.forEach { dep ->
def files = new ArrayList(config.files)
if (files.size != 1) {
throw new RuntimeException("huh, more than one file in ${dep}? ${files}")
}
def file = files[0]
f << "${dep.group}\\:${dep.name}\\:${dep.version}=path/to/${file.name}\n"
}
}
}
}
task filesForHermeticBuild {
dependsOn createRobolectricDeps
dependsOn copyLibs
dependsOn copySdks
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment