1*847dbab7SAndroid Build Coastguard Worker/* 2*847dbab7SAndroid Build Coastguard Worker * Modified from https://gist.github.com/xian/05c4f27da6d4156b9827842217c2cd5c 3*847dbab7SAndroid Build Coastguard Worker * Reference: http://robolectric.org/blog/2017/03/01/hermetic-builds/ 4*847dbab7SAndroid Build Coastguard Worker */ 5*847dbab7SAndroid Build Coastguard WorkerdefaultTasks 'copyLibs' 6*847dbab7SAndroid Build Coastguard Worker 7*847dbab7SAndroid Build Coastguard Workerdef shadowArtifacts = [ 8*847dbab7SAndroid Build Coastguard Worker "org.robolectric:shadows-framework:${robolectricVersion}", 9*847dbab7SAndroid Build Coastguard Worker "org.robolectric:shadows-httpclient:${robolectricVersion}", 10*847dbab7SAndroid Build Coastguard Worker "org.robolectric:shadows-multidex:${robolectricVersion}", 11*847dbab7SAndroid Build Coastguard Worker "org.robolectric:shadows-playservices:${robolectricVersion}", 12*847dbab7SAndroid Build Coastguard Worker "org.robolectric:shadows-supportv4:${robolectricVersion}", 13*847dbab7SAndroid Build Coastguard Worker] 14*847dbab7SAndroid Build Coastguard Worker 15*847dbab7SAndroid Build Coastguard Workerapply plugin: 'java' 16*847dbab7SAndroid Build Coastguard Worker 17*847dbab7SAndroid Build Coastguard Workerrepositories { 18*847dbab7SAndroid Build Coastguard Worker mavenCentral() 19*847dbab7SAndroid Build Coastguard Worker google() 20*847dbab7SAndroid Build Coastguard Worker} 21*847dbab7SAndroid Build Coastguard Worker 22*847dbab7SAndroid Build Coastguard Workerconfigurations { 23*847dbab7SAndroid Build Coastguard Worker sandbox 24*847dbab7SAndroid Build Coastguard Worker roboSources 25*847dbab7SAndroid Build Coastguard Worker} 26*847dbab7SAndroid Build Coastguard Worker 27*847dbab7SAndroid Build Coastguard Worker// In this section you declare the dependencies for your production and test code 28*847dbab7SAndroid Build Coastguard Workerdependencies { 29*847dbab7SAndroid Build Coastguard Worker implementation("org.robolectric:robolectric:${robolectricVersion}") { 30*847dbab7SAndroid Build Coastguard Worker // we don't need these MavenDependencyResolver in a hermetic build 31*847dbab7SAndroid Build Coastguard Worker exclude group: 'org.apache.maven', module: '' 32*847dbab7SAndroid Build Coastguard Worker exclude group: 'org.apache.ant', module: '' 33*847dbab7SAndroid Build Coastguard Worker } 34*847dbab7SAndroid Build Coastguard Worker 35*847dbab7SAndroid Build Coastguard Worker shadowArtifacts.forEach { shadowArtifact -> 36*847dbab7SAndroid Build Coastguard Worker implementation ("${shadowArtifact}") { 37*847dbab7SAndroid Build Coastguard Worker // we don't need these MavenDependencyResolver in a hermetic build 38*847dbab7SAndroid Build Coastguard Worker exclude group: 'org.apache.maven', module: '' 39*847dbab7SAndroid Build Coastguard Worker exclude group: 'org.apache.ant', module: '' 40*847dbab7SAndroid Build Coastguard Worker } 41*847dbab7SAndroid Build Coastguard Worker sandbox ("${shadowArtifact}") { 42*847dbab7SAndroid Build Coastguard Worker // we don't need these MavenDependencyResolver in a hermetic build 43*847dbab7SAndroid Build Coastguard Worker exclude group: 'org.apache.maven', module: '' 44*847dbab7SAndroid Build Coastguard Worker exclude group: 'org.apache.ant', module: '' 45*847dbab7SAndroid Build Coastguard Worker } 46*847dbab7SAndroid Build Coastguard Worker } 47*847dbab7SAndroid Build Coastguard Worker 48*847dbab7SAndroid Build Coastguard Worker def shadowArtifactsSet = shadowArtifacts.collect {it.toString()} toSet() 49*847dbab7SAndroid Build Coastguard Worker configurations.runtimeClasspath.resolvedConfiguration.resolvedArtifacts.each { ResolvedArtifact ra -> 50*847dbab7SAndroid Build Coastguard Worker ModuleVersionIdentifier id = ra.moduleVersion.id 51*847dbab7SAndroid Build Coastguard Worker // download only core sources. relax restriction if required 52*847dbab7SAndroid Build Coastguard Worker if ("org.robolectric".equals(id.group) && !shadowArtifactsSet.contains(id.toString())) { 53*847dbab7SAndroid Build Coastguard Worker roboSources("${id.group}:${id.name}:${id.version}:sources") { 54*847dbab7SAndroid Build Coastguard Worker transitive = false 55*847dbab7SAndroid Build Coastguard Worker } 56*847dbab7SAndroid Build Coastguard Worker } 57*847dbab7SAndroid Build Coastguard Worker } 58*847dbab7SAndroid Build Coastguard Worker} 59*847dbab7SAndroid Build Coastguard Worker 60*847dbab7SAndroid Build Coastguard Worker 61*847dbab7SAndroid Build Coastguard Workertask copyLibs(type: Copy) { 62*847dbab7SAndroid Build Coastguard Worker from configurations.runtimeClasspath 63*847dbab7SAndroid Build Coastguard Worker from configurations.roboSources 64*847dbab7SAndroid Build Coastguard Worker into "$buildDir/lib" 65*847dbab7SAndroid Build Coastguard Worker 66*847dbab7SAndroid Build Coastguard Worker doLast { 67*847dbab7SAndroid Build Coastguard Worker def f = new File("$buildDir/classpath_jars.mk") 68*847dbab7SAndroid Build Coastguard Worker f.delete() 69*847dbab7SAndroid Build Coastguard Worker def jars = source.getFiles() 70*847dbab7SAndroid Build Coastguard Worker .collect { it.name } 71*847dbab7SAndroid Build Coastguard Worker .sort() 72*847dbab7SAndroid Build Coastguard Worker .findAll { !it.endsWith("sources.jar") } 73*847dbab7SAndroid Build Coastguard Worker .collect { " lib/${it} " } 74*847dbab7SAndroid Build Coastguard Worker f << "my_robolectric_runtime_deps := \\\n" << jars.join("\\\n") << "\n" 75*847dbab7SAndroid Build Coastguard Worker } 76*847dbab7SAndroid Build Coastguard Worker} 77