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