xref: /aosp_15_r20/external/aws-crt-java/android/crt/build.gradle (revision 3c7ae9de214676c52d19f01067dc1a404272dc11)
1*3c7ae9deSAndroid Build Coastguard Workerimport java.util.regex.Pattern
2*3c7ae9deSAndroid Build Coastguard Worker
3*3c7ae9deSAndroid Build Coastguard Workerapply plugin: 'com.android.library'
4*3c7ae9deSAndroid Build Coastguard Workerapply plugin: 'signing'
5*3c7ae9deSAndroid Build Coastguard Worker
6*3c7ae9deSAndroid Build Coastguard Worker// Before configuring, make sure libcrypto is installed
7*3c7ae9deSAndroid Build Coastguard WorkerpreBuild {
8*3c7ae9deSAndroid Build Coastguard Worker    println('Installing libcrypto prebuilt binaries')
9*3c7ae9deSAndroid Build Coastguard Worker    def exec = (project.file('fetch_libcrypto.sh').absolutePath).execute()
10*3c7ae9deSAndroid Build Coastguard Worker    exec.waitForProcessOutput(System.out, System.err)
11*3c7ae9deSAndroid Build Coastguard Worker}
12*3c7ae9deSAndroid Build Coastguard Worker
13*3c7ae9deSAndroid Build Coastguard WorkerProperties getGitTag() {
14*3c7ae9deSAndroid Build Coastguard Worker    def gitTag = "git describe --tags".execute().text.trim()
15*3c7ae9deSAndroid Build Coastguard Worker    def version = new Properties()
16*3c7ae9deSAndroid Build Coastguard Worker    def versionPattern = Pattern.compile('v(\\d+).(\\d+).(\\d+)(-(.+))?')
17*3c7ae9deSAndroid Build Coastguard Worker    def matcher = versionPattern.matcher(gitTag)
18*3c7ae9deSAndroid Build Coastguard Worker    if (matcher.matches()) {
19*3c7ae9deSAndroid Build Coastguard Worker        version['major'] = matcher.group(1)
20*3c7ae9deSAndroid Build Coastguard Worker        version['minor'] = matcher.group(2)
21*3c7ae9deSAndroid Build Coastguard Worker        version['patch'] = matcher.group(3)
22*3c7ae9deSAndroid Build Coastguard Worker        try {
23*3c7ae9deSAndroid Build Coastguard Worker            version['tag'] = matcher.group(5)
24*3c7ae9deSAndroid Build Coastguard Worker        } catch (Exception ex) {}
25*3c7ae9deSAndroid Build Coastguard Worker    }
26*3c7ae9deSAndroid Build Coastguard Worker    return version
27*3c7ae9deSAndroid Build Coastguard Worker}
28*3c7ae9deSAndroid Build Coastguard Worker
29*3c7ae9deSAndroid Build Coastguard Workerext {
30*3c7ae9deSAndroid Build Coastguard Worker    gitVersionName = {
31*3c7ae9deSAndroid Build Coastguard Worker        def version = getGitTag()
32*3c7ae9deSAndroid Build Coastguard Worker        def name = "${version['major']}.${version['minor']}.${version['patch']}"
33*3c7ae9deSAndroid Build Coastguard Worker        return name
34*3c7ae9deSAndroid Build Coastguard Worker    }
35*3c7ae9deSAndroid Build Coastguard Worker    gitVersionCode = {
36*3c7ae9deSAndroid Build Coastguard Worker        def version = getGitTag()
37*3c7ae9deSAndroid Build Coastguard Worker        try {
38*3c7ae9deSAndroid Build Coastguard Worker            def major = version['major'] as int
39*3c7ae9deSAndroid Build Coastguard Worker            def minor = version['minor'] as int
40*3c7ae9deSAndroid Build Coastguard Worker            def patch = version['patch'] as int
41*3c7ae9deSAndroid Build Coastguard Worker            return (major * 1000) + (minor * 100) + patch
42*3c7ae9deSAndroid Build Coastguard Worker        } catch (Exception ex) {
43*3c7ae9deSAndroid Build Coastguard Worker            return 0
44*3c7ae9deSAndroid Build Coastguard Worker        }
45*3c7ae9deSAndroid Build Coastguard Worker    }
46*3c7ae9deSAndroid Build Coastguard Worker    gitVersionTag = {
47*3c7ae9deSAndroid Build Coastguard Worker        def version = getGitTag()
48*3c7ae9deSAndroid Build Coastguard Worker        return version['tag'] != '' ? '-' + version['tag'] : version['tag']
49*3c7ae9deSAndroid Build Coastguard Worker    }
50*3c7ae9deSAndroid Build Coastguard Worker}
51*3c7ae9deSAndroid Build Coastguard Worker
52*3c7ae9deSAndroid Build Coastguard Workerandroid {
53*3c7ae9deSAndroid Build Coastguard Worker    compileSdkVersion 30
54*3c7ae9deSAndroid Build Coastguard Worker    buildToolsVersion "30.0.3"
55*3c7ae9deSAndroid Build Coastguard Worker    ndkVersion "21.4.7075529" // LTS version
56*3c7ae9deSAndroid Build Coastguard Worker
57*3c7ae9deSAndroid Build Coastguard Worker    useLibrary 'android.test.runner'
58*3c7ae9deSAndroid Build Coastguard Worker    useLibrary 'android.test.base'
59*3c7ae9deSAndroid Build Coastguard Worker    useLibrary 'android.test.mock'
60*3c7ae9deSAndroid Build Coastguard Worker
61*3c7ae9deSAndroid Build Coastguard Worker    defaultConfig {
62*3c7ae9deSAndroid Build Coastguard Worker        minSdkVersion 24  // TODO - dictated by CompletableFuture which is API 24+
63*3c7ae9deSAndroid Build Coastguard Worker        targetSdkVersion 30
64*3c7ae9deSAndroid Build Coastguard Worker        versionCode = gitVersionCode()
65*3c7ae9deSAndroid Build Coastguard Worker        versionName = gitVersionName()
66*3c7ae9deSAndroid Build Coastguard Worker
67*3c7ae9deSAndroid Build Coastguard Worker        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
68*3c7ae9deSAndroid Build Coastguard Worker
69*3c7ae9deSAndroid Build Coastguard Worker        consumerProguardFiles 'consumer-rules.pro'
70*3c7ae9deSAndroid Build Coastguard Worker
71*3c7ae9deSAndroid Build Coastguard Worker        ndk {
72*3c7ae9deSAndroid Build Coastguard Worker            abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
73*3c7ae9deSAndroid Build Coastguard Worker        }
74*3c7ae9deSAndroid Build Coastguard Worker
75*3c7ae9deSAndroid Build Coastguard Worker        externalNativeBuild {
76*3c7ae9deSAndroid Build Coastguard Worker            cmake {
77*3c7ae9deSAndroid Build Coastguard Worker                arguments "-DBUILD_DEPS=ON"
78*3c7ae9deSAndroid Build Coastguard Worker            }
79*3c7ae9deSAndroid Build Coastguard Worker        }
80*3c7ae9deSAndroid Build Coastguard Worker    }
81*3c7ae9deSAndroid Build Coastguard Worker
82*3c7ae9deSAndroid Build Coastguard Worker    sourceSets {
83*3c7ae9deSAndroid Build Coastguard Worker        main {
84*3c7ae9deSAndroid Build Coastguard Worker            java.srcDir '../../src/main/java'
85*3c7ae9deSAndroid Build Coastguard Worker            java.srcDir 'src/main/java'
86*3c7ae9deSAndroid Build Coastguard Worker        }
87*3c7ae9deSAndroid Build Coastguard Worker        androidTest {
88*3c7ae9deSAndroid Build Coastguard Worker            setRoot '../../src/test'
89*3c7ae9deSAndroid Build Coastguard Worker            java.srcDir '../../src/test/java'
90*3c7ae9deSAndroid Build Coastguard Worker            java.srcDir 'src/androidTest/java'
91*3c7ae9deSAndroid Build Coastguard Worker            assets.srcDir 'src/androidTest/assets'
92*3c7ae9deSAndroid Build Coastguard Worker        }
93*3c7ae9deSAndroid Build Coastguard Worker    }
94*3c7ae9deSAndroid Build Coastguard Worker
95*3c7ae9deSAndroid Build Coastguard Worker    buildTypes {
96*3c7ae9deSAndroid Build Coastguard Worker        debug {
97*3c7ae9deSAndroid Build Coastguard Worker            versionNameSuffix = gitVersionTag()
98*3c7ae9deSAndroid Build Coastguard Worker            buildConfigField("String", "VERSION_NAME", "\"" + gitVersionName() + "\"")
99*3c7ae9deSAndroid Build Coastguard Worker        }
100*3c7ae9deSAndroid Build Coastguard Worker        release {
101*3c7ae9deSAndroid Build Coastguard Worker            minifyEnabled false
102*3c7ae9deSAndroid Build Coastguard Worker            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
103*3c7ae9deSAndroid Build Coastguard Worker            versionNameSuffix ""
104*3c7ae9deSAndroid Build Coastguard Worker            buildConfigField("String", "VERSION_NAME", "\"" + gitVersionName() + "\"")
105*3c7ae9deSAndroid Build Coastguard Worker        }
106*3c7ae9deSAndroid Build Coastguard Worker    }
107*3c7ae9deSAndroid Build Coastguard Worker
108*3c7ae9deSAndroid Build Coastguard Worker    externalNativeBuild {
109*3c7ae9deSAndroid Build Coastguard Worker        cmake {
110*3c7ae9deSAndroid Build Coastguard Worker            path "../../CMakeLists.txt"
111*3c7ae9deSAndroid Build Coastguard Worker            buildStagingDirectory "../../target/cmake-build"
112*3c7ae9deSAndroid Build Coastguard Worker            version "3.10.2"
113*3c7ae9deSAndroid Build Coastguard Worker        }
114*3c7ae9deSAndroid Build Coastguard Worker    }
115*3c7ae9deSAndroid Build Coastguard Worker
116*3c7ae9deSAndroid Build Coastguard Worker    compileOptions {
117*3c7ae9deSAndroid Build Coastguard Worker        sourceCompatibility = 1.8
118*3c7ae9deSAndroid Build Coastguard Worker        targetCompatibility = 1.8
119*3c7ae9deSAndroid Build Coastguard Worker        // Enable desugaring so that Android lint doesn't flag `java.time` usage. Downstream
120*3c7ae9deSAndroid Build Coastguard Worker        // consumers will need to enable desugaring to use this library.
121*3c7ae9deSAndroid Build Coastguard Worker        // See: https://developer.android.com/studio/write/java8-support#library-desugaring
122*3c7ae9deSAndroid Build Coastguard Worker        coreLibraryDesugaringEnabled true
123*3c7ae9deSAndroid Build Coastguard Worker    }
124*3c7ae9deSAndroid Build Coastguard Worker}
125*3c7ae9deSAndroid Build Coastguard Worker
126*3c7ae9deSAndroid Build Coastguard Workerbuild.dependsOn preBuild
127*3c7ae9deSAndroid Build Coastguard Worker
128*3c7ae9deSAndroid Build Coastguard Workerdependencies {
129*3c7ae9deSAndroid Build Coastguard Worker    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
130*3c7ae9deSAndroid Build Coastguard Worker    androidTestImplementation 'org.mockito:mockito-core:3.11.2'
131*3c7ae9deSAndroid Build Coastguard Worker    androidTestImplementation 'androidx.appcompat:appcompat:1.3.1'
132*3c7ae9deSAndroid Build Coastguard Worker    androidTestImplementation 'junit:junit:4.13.2'
133*3c7ae9deSAndroid Build Coastguard Worker    androidTestImplementation 'androidx.test:runner:1.4.0'
134*3c7ae9deSAndroid Build Coastguard Worker    androidTestImplementation 'androidx.test:monitor:1.4.0@aar'
135*3c7ae9deSAndroid Build Coastguard Worker    androidTestImplementation 'androidx.test:rules:1.4.0'
136*3c7ae9deSAndroid Build Coastguard Worker}
137*3c7ae9deSAndroid Build Coastguard Worker
138*3c7ae9deSAndroid Build Coastguard Worker// Publishing
139*3c7ae9deSAndroid Build Coastguard Workerapply plugin: 'maven-publish'
140*3c7ae9deSAndroid Build Coastguard Worker
141*3c7ae9deSAndroid Build Coastguard Worker// Sources
142*3c7ae9deSAndroid Build Coastguard Workertask androidSourcesJar(type: Jar) {
143*3c7ae9deSAndroid Build Coastguard Worker    archiveClassifier.set('sources')
144*3c7ae9deSAndroid Build Coastguard Worker    from android.sourceSets.main.java.srcDirs
145*3c7ae9deSAndroid Build Coastguard Worker}
146*3c7ae9deSAndroid Build Coastguard Worker
147*3c7ae9deSAndroid Build Coastguard Worker// Docs
148*3c7ae9deSAndroid Build Coastguard Workertask androidDocs(type: Javadoc) {
149*3c7ae9deSAndroid Build Coastguard Worker    source = android.sourceSets.main.java.srcDirs
150*3c7ae9deSAndroid Build Coastguard Worker    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
151*3c7ae9deSAndroid Build Coastguard Worker    android.libraryVariants.all { variant ->
152*3c7ae9deSAndroid Build Coastguard Worker        if (variant.name == 'release') {
153*3c7ae9deSAndroid Build Coastguard Worker            owner.classpath += variant.javaCompileProvider.get().classpath
154*3c7ae9deSAndroid Build Coastguard Worker        }
155*3c7ae9deSAndroid Build Coastguard Worker    }
156*3c7ae9deSAndroid Build Coastguard Worker    exclude '**/R.html', '**/R.*.html', '**/index.html'
157*3c7ae9deSAndroid Build Coastguard Worker}
158*3c7ae9deSAndroid Build Coastguard Worker
159*3c7ae9deSAndroid Build Coastguard Workertask androidDocsJar(type: Jar) {
160*3c7ae9deSAndroid Build Coastguard Worker    archiveClassifier.set('javadoc')
161*3c7ae9deSAndroid Build Coastguard Worker    from androidDocs.destinationDir
162*3c7ae9deSAndroid Build Coastguard Worker}
163*3c7ae9deSAndroid Build Coastguard Worker
164*3c7ae9deSAndroid Build Coastguard Worker
165*3c7ae9deSAndroid Build Coastguard WorkerafterEvaluate {
166*3c7ae9deSAndroid Build Coastguard Worker    publishing {
167*3c7ae9deSAndroid Build Coastguard Worker        repositories {
168*3c7ae9deSAndroid Build Coastguard Worker            maven { name = "testLocal"; url = "$rootProject.buildDir/m2" }
169*3c7ae9deSAndroid Build Coastguard Worker        }
170*3c7ae9deSAndroid Build Coastguard Worker
171*3c7ae9deSAndroid Build Coastguard Worker        publications {
172*3c7ae9deSAndroid Build Coastguard Worker            release(MavenPublication) {
173*3c7ae9deSAndroid Build Coastguard Worker                from components.release
174*3c7ae9deSAndroid Build Coastguard Worker
175*3c7ae9deSAndroid Build Coastguard Worker                groupId = 'software.amazon.awssdk.crt'
176*3c7ae9deSAndroid Build Coastguard Worker                artifactId = 'aws-crt-android'
177*3c7ae9deSAndroid Build Coastguard Worker                version = project.hasProperty('newVersion') ? project.property('newVersion') : android.defaultConfig.versionName
178*3c7ae9deSAndroid Build Coastguard Worker
179*3c7ae9deSAndroid Build Coastguard Worker                pom {
180*3c7ae9deSAndroid Build Coastguard Worker                    name.set("software.amazon.awssdk.crt:aws-crt-android")
181*3c7ae9deSAndroid Build Coastguard Worker                    description.set("Java Android bindings for the AWS SDK Common Runtime")
182*3c7ae9deSAndroid Build Coastguard Worker                    url.set("https://github.com/awslabs/aws-crt-java")
183*3c7ae9deSAndroid Build Coastguard Worker                    licenses {
184*3c7ae9deSAndroid Build Coastguard Worker                        license {
185*3c7ae9deSAndroid Build Coastguard Worker                            name.set("The Apache License, Version 2.0")
186*3c7ae9deSAndroid Build Coastguard Worker                            url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
187*3c7ae9deSAndroid Build Coastguard Worker                        }
188*3c7ae9deSAndroid Build Coastguard Worker                    }
189*3c7ae9deSAndroid Build Coastguard Worker
190*3c7ae9deSAndroid Build Coastguard Worker                    developers {
191*3c7ae9deSAndroid Build Coastguard Worker                        developer {
192*3c7ae9deSAndroid Build Coastguard Worker                            id.set("aws-sdk-common-runtime")
193*3c7ae9deSAndroid Build Coastguard Worker                            name.set("AWS SDK Common Runtime Team")
194*3c7ae9deSAndroid Build Coastguard Worker                            email.set("[email protected]")
195*3c7ae9deSAndroid Build Coastguard Worker                        }
196*3c7ae9deSAndroid Build Coastguard Worker                    }
197*3c7ae9deSAndroid Build Coastguard Worker
198*3c7ae9deSAndroid Build Coastguard Worker                    scm {
199*3c7ae9deSAndroid Build Coastguard Worker                        connection.set("scm:git:git://github.com/awslabs/aws-crt-java.git")
200*3c7ae9deSAndroid Build Coastguard Worker                        developerConnection.set("scm:git:ssh://github.com/awslabs/aws-crt-java.git")
201*3c7ae9deSAndroid Build Coastguard Worker                        url.set("https://github.com/awslabs/aws-crt-java")
202*3c7ae9deSAndroid Build Coastguard Worker                    }
203*3c7ae9deSAndroid Build Coastguard Worker                }
204*3c7ae9deSAndroid Build Coastguard Worker            }
205*3c7ae9deSAndroid Build Coastguard Worker        }
206*3c7ae9deSAndroid Build Coastguard Worker
207*3c7ae9deSAndroid Build Coastguard Worker        repositories {
208*3c7ae9deSAndroid Build Coastguard Worker            maven {
209*3c7ae9deSAndroid Build Coastguard Worker                def snapshotRepo = "https://aws.oss.sonatype.org/content/repositories/snapshots"
210*3c7ae9deSAndroid Build Coastguard Worker                def releaseRepo = "https://aws.oss.sonatype.org/"
211*3c7ae9deSAndroid Build Coastguard Worker                url = version.endsWith('SNAPSHOT') ? snapshotRepo : releaseRepo
212*3c7ae9deSAndroid Build Coastguard Worker            }
213*3c7ae9deSAndroid Build Coastguard Worker        }
214*3c7ae9deSAndroid Build Coastguard Worker
215*3c7ae9deSAndroid Build Coastguard Worker        if (project.hasProperty("signingKey") && project.hasProperty("signingPassword")) {
216*3c7ae9deSAndroid Build Coastguard Worker            signing {
217*3c7ae9deSAndroid Build Coastguard Worker                useInMemoryPgpKeys(
218*3c7ae9deSAndroid Build Coastguard Worker                        (String) project.property("signingKey"),
219*3c7ae9deSAndroid Build Coastguard Worker                        (String) project.property("signingPassword")
220*3c7ae9deSAndroid Build Coastguard Worker                )
221*3c7ae9deSAndroid Build Coastguard Worker                println("key=" + project.property("signingKey"))
222*3c7ae9deSAndroid Build Coastguard Worker                sign(publications)
223*3c7ae9deSAndroid Build Coastguard Worker            }
224*3c7ae9deSAndroid Build Coastguard Worker        }
225*3c7ae9deSAndroid Build Coastguard Worker    }
226*3c7ae9deSAndroid Build Coastguard Worker}
227