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