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