1*cd0cc2e3SAndroid Build Coastguard Workerbuildscript { 2*cd0cc2e3SAndroid Build Coastguard Worker repositories { 3*cd0cc2e3SAndroid Build Coastguard Worker google() 4*cd0cc2e3SAndroid Build Coastguard Worker mavenCentral() 5*cd0cc2e3SAndroid Build Coastguard Worker } 6*cd0cc2e3SAndroid Build Coastguard Worker dependencies { 7*cd0cc2e3SAndroid Build Coastguard Worker classpath libs.android.tools 8*cd0cc2e3SAndroid Build Coastguard Worker } 9*cd0cc2e3SAndroid Build Coastguard Worker} 10*cd0cc2e3SAndroid Build Coastguard Worker 11*cd0cc2e3SAndroid Build Coastguard Workerdescription = 'Conscrypt: Android' 12*cd0cc2e3SAndroid Build Coastguard Worker 13*cd0cc2e3SAndroid Build Coastguard Workerext { 14*cd0cc2e3SAndroid Build Coastguard Worker androidHome = "$System.env.ANDROID_HOME" 15*cd0cc2e3SAndroid Build Coastguard Worker androidSdkInstalled = file("$androidHome").exists() 16*cd0cc2e3SAndroid Build Coastguard Worker androidVersionCode = 1 17*cd0cc2e3SAndroid Build Coastguard Worker androidVersionName = "$version" 18*cd0cc2e3SAndroid Build Coastguard Worker androidMinSdkVersion = 19 19*cd0cc2e3SAndroid Build Coastguard Worker androidTargetSdkVersion = 26 20*cd0cc2e3SAndroid Build Coastguard Worker androidNdkVersion = '25.2.9519653' 21*cd0cc2e3SAndroid Build Coastguard Worker androidCmakeVersion = '3.22.1' 22*cd0cc2e3SAndroid Build Coastguard Worker} 23*cd0cc2e3SAndroid Build Coastguard Worker 24*cd0cc2e3SAndroid Build Coastguard Workerif (androidSdkInstalled) { 25*cd0cc2e3SAndroid Build Coastguard Worker apply plugin: 'com.android.library' 26*cd0cc2e3SAndroid Build Coastguard Worker 27*cd0cc2e3SAndroid Build Coastguard Worker // Since we're not taking a direct dependency on the constants module, we need to add an 28*cd0cc2e3SAndroid Build Coastguard Worker // explicit task dependency to make sure the code is generated. 29*cd0cc2e3SAndroid Build Coastguard Worker evaluationDependsOn(':conscrypt-constants') 30*cd0cc2e3SAndroid Build Coastguard Worker 31*cd0cc2e3SAndroid Build Coastguard Worker android { 32*cd0cc2e3SAndroid Build Coastguard Worker namespace "org.conscrypt" 33*cd0cc2e3SAndroid Build Coastguard Worker 34*cd0cc2e3SAndroid Build Coastguard Worker compileSdkVersion androidTargetSdkVersion 35*cd0cc2e3SAndroid Build Coastguard Worker ndkVersion androidNdkVersion 36*cd0cc2e3SAndroid Build Coastguard Worker 37*cd0cc2e3SAndroid Build Coastguard Worker compileOptions { 38*cd0cc2e3SAndroid Build Coastguard Worker sourceCompatibility androidMinJavaVersion 39*cd0cc2e3SAndroid Build Coastguard Worker targetCompatibility androidMinJavaVersion 40*cd0cc2e3SAndroid Build Coastguard Worker } 41*cd0cc2e3SAndroid Build Coastguard Worker 42*cd0cc2e3SAndroid Build Coastguard Worker defaultConfig { 43*cd0cc2e3SAndroid Build Coastguard Worker minSdkVersion androidMinSdkVersion 44*cd0cc2e3SAndroid Build Coastguard Worker targetSdkVersion androidTargetSdkVersion 45*cd0cc2e3SAndroid Build Coastguard Worker versionCode androidVersionCode 46*cd0cc2e3SAndroid Build Coastguard Worker versionName androidVersionName 47*cd0cc2e3SAndroid Build Coastguard Worker 48*cd0cc2e3SAndroid Build Coastguard Worker testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 49*cd0cc2e3SAndroid Build Coastguard Worker 50*cd0cc2e3SAndroid Build Coastguard Worker consumerProguardFiles 'proguard-rules.pro' 51*cd0cc2e3SAndroid Build Coastguard Worker 52*cd0cc2e3SAndroid Build Coastguard Worker externalNativeBuild { 53*cd0cc2e3SAndroid Build Coastguard Worker cmake { 54*cd0cc2e3SAndroid Build Coastguard Worker arguments '-DANDROID=True', 55*cd0cc2e3SAndroid Build Coastguard Worker '-DANDROID_STL=c++_static', 56*cd0cc2e3SAndroid Build Coastguard Worker "-DBORINGSSL_HOME=$boringsslHome", 57*cd0cc2e3SAndroid Build Coastguard Worker "-DCMAKE_CXX_STANDARD=17", 58*cd0cc2e3SAndroid Build Coastguard Worker '-DCMAKE_SHARED_LINKER_FLAGS=-z max-page-size=16384' 59*cd0cc2e3SAndroid Build Coastguard Worker cFlags '-fvisibility=hidden', 60*cd0cc2e3SAndroid Build Coastguard Worker '-DBORINGSSL_SHARED_LIBRARY', 61*cd0cc2e3SAndroid Build Coastguard Worker '-DBORINGSSL_IMPLEMENTATION', 62*cd0cc2e3SAndroid Build Coastguard Worker '-DOPENSSL_SMALL', 63*cd0cc2e3SAndroid Build Coastguard Worker '-D_XOPEN_SOURCE=700', 64*cd0cc2e3SAndroid Build Coastguard Worker '-Wno-unused-parameter' 65*cd0cc2e3SAndroid Build Coastguard Worker targets 'conscrypt_jni' 66*cd0cc2e3SAndroid Build Coastguard Worker } 67*cd0cc2e3SAndroid Build Coastguard Worker } 68*cd0cc2e3SAndroid Build Coastguard Worker ndk { 69*cd0cc2e3SAndroid Build Coastguard Worker abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' 70*cd0cc2e3SAndroid Build Coastguard Worker } 71*cd0cc2e3SAndroid Build Coastguard Worker } 72*cd0cc2e3SAndroid Build Coastguard Worker buildTypes { 73*cd0cc2e3SAndroid Build Coastguard Worker release { 74*cd0cc2e3SAndroid Build Coastguard Worker minifyEnabled false 75*cd0cc2e3SAndroid Build Coastguard Worker proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 76*cd0cc2e3SAndroid Build Coastguard Worker } 77*cd0cc2e3SAndroid Build Coastguard Worker } 78*cd0cc2e3SAndroid Build Coastguard Worker sourceSets.main { 79*cd0cc2e3SAndroid Build Coastguard Worker java { 80*cd0cc2e3SAndroid Build Coastguard Worker srcDirs = [ 81*cd0cc2e3SAndroid Build Coastguard Worker "${rootDir}/common/src/main/java", 82*cd0cc2e3SAndroid Build Coastguard Worker "src/main/java" 83*cd0cc2e3SAndroid Build Coastguard Worker ] 84*cd0cc2e3SAndroid Build Coastguard Worker // Requires evaluationDependsOn(':conscrypt-constants') above. 85*cd0cc2e3SAndroid Build Coastguard Worker srcDirs += project(':conscrypt-constants').sourceSets.main.java.srcDirs 86*cd0cc2e3SAndroid Build Coastguard Worker } 87*cd0cc2e3SAndroid Build Coastguard Worker resources { 88*cd0cc2e3SAndroid Build Coastguard Worker srcDirs += "build/generated/resources" 89*cd0cc2e3SAndroid Build Coastguard Worker } 90*cd0cc2e3SAndroid Build Coastguard Worker } 91*cd0cc2e3SAndroid Build Coastguard Worker externalNativeBuild { 92*cd0cc2e3SAndroid Build Coastguard Worker cmake { 93*cd0cc2e3SAndroid Build Coastguard Worker path 'CMakeLists.txt' 94*cd0cc2e3SAndroid Build Coastguard Worker version androidCmakeVersion 95*cd0cc2e3SAndroid Build Coastguard Worker } 96*cd0cc2e3SAndroid Build Coastguard Worker } 97*cd0cc2e3SAndroid Build Coastguard Worker lintOptions { 98*cd0cc2e3SAndroid Build Coastguard Worker lintConfig file('lint.xml') 99*cd0cc2e3SAndroid Build Coastguard Worker } 100*cd0cc2e3SAndroid Build Coastguard Worker 101*cd0cc2e3SAndroid Build Coastguard Worker publishing { 102*cd0cc2e3SAndroid Build Coastguard Worker singleVariant("release") { 103*cd0cc2e3SAndroid Build Coastguard Worker withSourcesJar() 104*cd0cc2e3SAndroid Build Coastguard Worker } 105*cd0cc2e3SAndroid Build Coastguard Worker } 106*cd0cc2e3SAndroid Build Coastguard Worker } 107*cd0cc2e3SAndroid Build Coastguard Worker 108*cd0cc2e3SAndroid Build Coastguard Worker configurations { 109*cd0cc2e3SAndroid Build Coastguard Worker publicApiDocs 110*cd0cc2e3SAndroid Build Coastguard Worker } 111*cd0cc2e3SAndroid Build Coastguard Worker 112*cd0cc2e3SAndroid Build Coastguard Worker preBuild { 113*cd0cc2e3SAndroid Build Coastguard Worker dependsOn generateProperties 114*cd0cc2e3SAndroid Build Coastguard Worker } 115*cd0cc2e3SAndroid Build Coastguard Worker 116*cd0cc2e3SAndroid Build Coastguard Worker dependencies { 117*cd0cc2e3SAndroid Build Coastguard Worker publicApiDocs project(':conscrypt-api-doclet') 118*cd0cc2e3SAndroid Build Coastguard Worker androidTestImplementation('androidx.test.espresso:espresso-core:3.1.1', { 119*cd0cc2e3SAndroid Build Coastguard Worker exclude module: 'support-annotations' 120*cd0cc2e3SAndroid Build Coastguard Worker exclude module: 'support-v4' 121*cd0cc2e3SAndroid Build Coastguard Worker exclude module: 'support-v13' 122*cd0cc2e3SAndroid Build Coastguard Worker exclude module: 'recyclerview-v7' 123*cd0cc2e3SAndroid Build Coastguard Worker exclude module: 'appcompat-v7' 124*cd0cc2e3SAndroid Build Coastguard Worker exclude module: 'design' 125*cd0cc2e3SAndroid Build Coastguard Worker }) 126*cd0cc2e3SAndroid Build Coastguard Worker compileOnly project(':conscrypt-android-stub') 127*cd0cc2e3SAndroid Build Coastguard Worker 128*cd0cc2e3SAndroid Build Coastguard Worker // Adds the constants module as a dependency so that we can include its generated source 129*cd0cc2e3SAndroid Build Coastguard Worker compileOnly project(':conscrypt-constants') 130*cd0cc2e3SAndroid Build Coastguard Worker } 131*cd0cc2e3SAndroid Build Coastguard Worker 132*cd0cc2e3SAndroid Build Coastguard Worker def javadocs = tasks.register("javadocs", Javadoc) { 133*cd0cc2e3SAndroid Build Coastguard Worker dependsOn configurations.publicApiDocs 134*cd0cc2e3SAndroid Build Coastguard Worker source = android.sourceSets.main.java.srcDirs 135*cd0cc2e3SAndroid Build Coastguard Worker classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) + 136*cd0cc2e3SAndroid Build Coastguard Worker project(':conscrypt-android-stub').sourceSets.main.output 137*cd0cc2e3SAndroid Build Coastguard Worker options { 138*cd0cc2e3SAndroid Build Coastguard Worker showFromPublic() 139*cd0cc2e3SAndroid Build Coastguard Worker encoding = 'UTF-8' 140*cd0cc2e3SAndroid Build Coastguard Worker doclet = "org.conscrypt.doclet.FilterDoclet" 141*cd0cc2e3SAndroid Build Coastguard Worker links = ['https://docs.oracle.com/en/java/javase/21/docs/api/java.base/'] 142*cd0cc2e3SAndroid Build Coastguard Worker docletpath = configurations.publicApiDocs.files as List 143*cd0cc2e3SAndroid Build Coastguard Worker } 144*cd0cc2e3SAndroid Build Coastguard Worker failOnError false 145*cd0cc2e3SAndroid Build Coastguard Worker 146*cd0cc2e3SAndroid Build Coastguard Worker doLast { 147*cd0cc2e3SAndroid Build Coastguard Worker copy { 148*cd0cc2e3SAndroid Build Coastguard Worker from "$rootDir/api-doclet/src/main/resources/styles.css" 149*cd0cc2e3SAndroid Build Coastguard Worker into "$buildDir/docs/javadoc" 150*cd0cc2e3SAndroid Build Coastguard Worker } 151*cd0cc2e3SAndroid Build Coastguard Worker } 152*cd0cc2e3SAndroid Build Coastguard Worker } 153*cd0cc2e3SAndroid Build Coastguard Worker 154*cd0cc2e3SAndroid Build Coastguard Worker def javadocsJar = tasks.register("javadocsJar", Jar) { 155*cd0cc2e3SAndroid Build Coastguard Worker dependsOn javadocs 156*cd0cc2e3SAndroid Build Coastguard Worker archiveClassifier = 'javadoc' 157*cd0cc2e3SAndroid Build Coastguard Worker from { 158*cd0cc2e3SAndroid Build Coastguard Worker javadocs.get().destinationDir 159*cd0cc2e3SAndroid Build Coastguard Worker } 160*cd0cc2e3SAndroid Build Coastguard Worker } 161*cd0cc2e3SAndroid Build Coastguard Worker 162*cd0cc2e3SAndroid Build Coastguard Worker afterEvaluate { 163*cd0cc2e3SAndroid Build Coastguard Worker apply from: "$rootDir/gradle/publishing.gradle" 164*cd0cc2e3SAndroid Build Coastguard Worker publishing.publications.maven { 165*cd0cc2e3SAndroid Build Coastguard Worker pom.packaging = 'aar' 166*cd0cc2e3SAndroid Build Coastguard Worker from components.release 167*cd0cc2e3SAndroid Build Coastguard Worker artifact javadocsJar.get() 168*cd0cc2e3SAndroid Build Coastguard Worker } 169*cd0cc2e3SAndroid Build Coastguard Worker } 170*cd0cc2e3SAndroid Build Coastguard Worker} else { 171*cd0cc2e3SAndroid Build Coastguard Worker logger.warn('Android SDK has not been detected. The Android module will not be built.') 172*cd0cc2e3SAndroid Build Coastguard Worker 173*cd0cc2e3SAndroid Build Coastguard Worker // Disable all tasks 174*cd0cc2e3SAndroid Build Coastguard Worker tasks.configureEach { 175*cd0cc2e3SAndroid Build Coastguard Worker it.enabled = false 176*cd0cc2e3SAndroid Build Coastguard Worker } 177*cd0cc2e3SAndroid Build Coastguard Worker} 178