xref: /aosp_15_r20/external/conscrypt/android/build.gradle (revision cd0cc2e34ba52cdf454361820a14d744e4bd531d)
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