• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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