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