Home | History | Annotate | Download | only in android
      1 buildscript {
      2     repositories {
      3         google()
      4         jcenter()
      5     }
      6     dependencies {
      7         classpath libraries.android_tools
      8     }
      9 }
     10 
     11 plugins {
     12     id 'com.github.dcendents.android-maven' version '2.1'
     13 }
     14 
     15 description = 'Conscrypt: Android'
     16 
     17 ext {
     18     androidHome = "$System.env.ANDROID_HOME"
     19     androidSdkInstalled = file("$androidHome").exists()
     20     androidVersionCode = 1
     21     androidVersionName = "$version"
     22     androidMinSdkVersion = 9
     23     androidTargetSdkVersion = 26
     24 }
     25 
     26 if (androidSdkInstalled) {
     27     apply plugin: 'com.android.library'
     28     apply plugin: 'com.github.dcendents.android-maven'
     29 
     30     // Since we're not taking a direct dependency on the constants module, we need to add an
     31     // explicit task dependency to make sure the code is generated.
     32     evaluationDependsOn(':conscrypt-constants')
     33 
     34     android {
     35         compileSdkVersion androidTargetSdkVersion
     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                     cFlags '-fvisibility=hidden',
     58                             '-DBORINGSSL_SHARED_LIBRARY',
     59                             '-DBORINGSSL_IMPLEMENTATION',
     60                             '-DOPENSSL_SMALL',
     61                             '-D_XOPEN_SOURCE=700',
     62                             '-Wno-unused-parameter'
     63                 }
     64             }
     65             ndk {
     66                 abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
     67             }
     68         }
     69         buildTypes {
     70             release {
     71                 minifyEnabled false
     72                 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
     73             }
     74         }
     75         sourceSets.main {
     76             java {
     77                 srcDirs = [
     78                         "${rootDir}/common/src/main/java",
     79                         "src/main/java"
     80                 ]
     81                 // Requires evaluationDependsOn(':conscrypt-constants') above.
     82                 srcDirs += project(':conscrypt-constants').sourceSets.main.java.srcDirs
     83             }
     84             resources {
     85                 srcDirs += "build/generated/resources"
     86             }
     87         }
     88         externalNativeBuild {
     89             cmake {
     90                 path 'CMakeLists.txt'
     91             }
     92         }
     93         lintOptions {
     94             lintConfig file('lint.xml')
     95         }
     96     }
     97 
     98     configurations {
     99         publicApiDocs
    100     }
    101 
    102     preBuild {
    103         dependsOn generateProperties
    104     }
    105 
    106     dependencies {
    107         publicApiDocs project(':conscrypt-api-doclet')
    108         androidTestImplementation('androidx.test.espresso:espresso-core:3.1.1', {
    109             exclude module: 'support-annotations'
    110             exclude module: 'support-v4'
    111             exclude module: 'support-v13'
    112             exclude module: 'recyclerview-v7'
    113             exclude module: 'appcompat-v7'
    114             exclude module: 'design'
    115         })
    116         compileOnly project(':conscrypt-android-stub')
    117 
    118         // Adds the constants module as a dependency so that we can include its generated source
    119         compileOnly project(':conscrypt-constants')
    120     }
    121 
    122     task configureJavadocs {
    123         dependsOn configurations.publicApiDocs
    124         doLast {
    125             javadocs.options.docletpath = configurations.publicApiDocs.files as List
    126         }
    127     }
    128 
    129     task javadocs(type: Javadoc, dependsOn: [configureJavadocs]) {
    130         source = android.sourceSets.main.java.srcDirs
    131         classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) + project(':conscrypt-android-stub').sourceSets.main.output
    132         // TODO(nmittler): Fix the javadoc errors.
    133         failOnError false
    134         options {
    135             encoding = 'UTF-8'
    136             links "https://docs.oracle.com/javase/7/docs/api/"
    137             doclet = "org.conscrypt.doclet.FilterDoclet"
    138             // Disable JavaDoc doclint on Java 8. It's annoying.
    139             if (JavaVersion.current().isJava8Compatible()) {
    140                 addStringOption('Xdoclint:none', '-quiet')
    141             }
    142         }
    143     }
    144 
    145     task javadocsJar(type: Jar, dependsOn: javadocs) {
    146         classifier = 'javadoc'
    147         from javadocs.destinationDir
    148     }
    149 
    150     task sourcesJar(type: Jar) {
    151         classifier = 'sources'
    152         from android.sourceSets.main.java.srcDirs
    153     }
    154 
    155     artifacts {
    156         archives sourcesJar
    157         archives javadocsJar
    158     }
    159 
    160     uploadArchives.repositories.mavenDeployer {
    161         beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
    162         String stagingUrl
    163         if (rootProject.hasProperty('repositoryId')) {
    164             stagingUrl = 'https://oss.sonatype.org/service/local/staging/deployByRepositoryId/' +
    165                     rootProject.repositoryId
    166         } else {
    167             stagingUrl = 'https://oss.sonatype.org/service/local/staging/deploy/maven2/'
    168         }
    169         def configureAuth = {
    170             if (rootProject.hasProperty('ossrhUsername') && rootProject.hasProperty('ossrhPassword')) {
    171                 authentication(userName: rootProject.ossrhUsername, password: rootProject.ossrhPassword)
    172             }
    173         }
    174         repository(url: stagingUrl, configureAuth)
    175         snapshotRepository(url: 'https://oss.sonatype.org/content/repositories/snapshots/', configureAuth)
    176     }
    177 
    178     [
    179             install.repositories.mavenInstaller,
    180             uploadArchives.repositories.mavenDeployer,
    181     ]*.pom*.whenConfigured { pom ->
    182         pom.project {
    183             name "$project.group:$project.name"
    184             description project.description
    185             url 'https://conscrypt.org/'
    186 
    187             scm {
    188                 connection 'scm:git:https://github.com/google/conscrypt.git'
    189                 developerConnection 'scm:git:git (a] github.com:google/conscrypt.git'
    190                 url 'https://github.com/google/conscrypt'
    191             }
    192 
    193             licenses {
    194                 license {
    195                     name 'Apache 2'
    196                     url 'https://www.apache.org/licenses/LICENSE-2.0'
    197                 }
    198             }
    199 
    200             developers {
    201                 developer {
    202                     id "conscrypt"
    203                     name "Conscrypt Contributors"
    204                     email "conscrypt (a] googlegroups.com"
    205                     url "https://conscrypt.org/"
    206                     organization = "Google, Inc."
    207                     organizationUrl "https://www.google.com"
    208                 }
    209             }
    210         }
    211     }
    212 
    213 } else {
    214     logger.warn('Android SDK has not been detected. The Android module will not be built.')
    215 
    216     // Disable all tasks
    217     tasks.collect {
    218         it.enabled = false
    219     }
    220 }
    221