• 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                    cFlags '-fvisibility=hidden',
62                            '-DBORINGSSL_SHARED_LIBRARY',
63                            '-DBORINGSSL_IMPLEMENTATION',
64                            '-DOPENSSL_SMALL',
65                            '-D_XOPEN_SOURCE=700',
66                            '-Wno-unused-parameter'
67                    targets 'conscrypt_jni'
68                    version androidCmakeVersion
69                }
70            }
71            ndk {
72                abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
73            }
74        }
75        buildTypes {
76            release {
77                minifyEnabled false
78                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
79            }
80        }
81        sourceSets.main {
82            java {
83                srcDirs = [
84                        "${rootDir}/common/src/main/java",
85                        "src/main/java"
86                ]
87                // Requires evaluationDependsOn(':conscrypt-constants') above.
88                srcDirs += project(':conscrypt-constants').sourceSets.main.java.srcDirs
89            }
90            resources {
91                srcDirs += "build/generated/resources"
92            }
93        }
94        externalNativeBuild {
95            cmake {
96                path 'CMakeLists.txt'
97                version androidCmakeVersion
98            }
99        }
100        lintOptions {
101            lintConfig file('lint.xml')
102        }
103    }
104
105    configurations {
106        publicApiDocs
107    }
108
109    preBuild {
110        dependsOn generateProperties
111    }
112
113    dependencies {
114        publicApiDocs project(':conscrypt-api-doclet')
115        androidTestImplementation('androidx.test.espresso:espresso-core:3.1.1', {
116            exclude module: 'support-annotations'
117            exclude module: 'support-v4'
118            exclude module: 'support-v13'
119            exclude module: 'recyclerview-v7'
120            exclude module: 'appcompat-v7'
121            exclude module: 'design'
122        })
123        compileOnly project(':conscrypt-android-stub')
124
125        // Adds the constants module as a dependency so that we can include its generated source
126        compileOnly project(':conscrypt-constants')
127    }
128
129    def configureJavaDocs = tasks.register("configureJavadocs") {
130        dependsOn configurations.publicApiDocs
131        doLast {
132            javadocs.options.docletpath = configurations.publicApiDocs.files as List
133        }
134    }
135
136    def javadocs = tasks.register("javadocs", Javadoc) {
137        dependsOn configureJavadocs
138        source = android.sourceSets.main.java.srcDirs
139        classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) + project(':conscrypt-android-stub').sourceSets.main.output
140        // TODO(nmittler): Fix the javadoc errors.
141        failOnError false
142        options {
143            encoding = 'UTF-8'
144            links "https://docs.oracle.com/javase/7/docs/api/"
145            // TODO(prb): Update doclet to Java 11.
146            // doclet = "org.conscrypt.doclet.FilterDoclet"
147        }
148    }
149
150    def javadocsJar = tasks.register("javadocsJar", Jar) {
151        dependsOn javadocs
152        classifier = 'javadoc'
153        from {
154            javadocs.get().destinationDir
155        }
156    }
157
158    def sourcesJar = tasks.register("sourcesJar", Jar) {
159        classifier = 'sources'
160        from android.sourceSets.main.java.srcDirs
161    }
162
163    apply from: "$rootDir/gradle/publishing.gradle"
164    publishing.publications.maven {
165        from components.android
166        artifact sourcesJar.get()
167        artifact javadocsJar.get()
168    }
169} else {
170    logger.warn('Android SDK has not been detected. The Android module will not be built.')
171
172    // Disable all tasks
173    tasks.configureEach {
174        it.enabled = false
175    }
176}
177