xref: /aosp_15_r20/prebuilts/misc/common/robolectric/update-script/download-libs.gradle (revision 847dbab7980efcc7f5706bb9c6d844b91a680afd)
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