buildscript { repositories { mavenCentral() mavenLocal() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.3' // jcenter has the latest classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' } } description = 'Conscrypt: Android' ext { androidHome = "$System.env.ANDROID_HOME" androidSdkInstalled = file("$androidHome").exists() androidVersionCode = 1 androidVersionName = "$version" androidMinSdkVersion = 9 androidTargetSdkVersion = 25 androidBuildToolsVersion = "25.0.0" } if (androidSdkInstalled) { apply plugin: 'com.android.library' apply plugin: 'com.github.dcendents.android-maven' // Since we're not taking a direct dependency on the constants module, we need to add an // explicit task dependency to make sure the code is generated. evaluationDependsOn(':conscrypt-constants') android { compileSdkVersion androidTargetSdkVersion buildToolsVersion androidBuildToolsVersion compileOptions { sourceCompatibility androidMinJavaVersion; targetCompatibility androidMinJavaVersion } defaultConfig { minSdkVersion androidMinSdkVersion targetSdkVersion androidTargetSdkVersion versionCode androidVersionCode versionName androidVersionName testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" consumerProguardFiles 'proguard-rules.pro' externalNativeBuild { cmake { arguments '-DANDROID=True', '-DANDROID_STL=c++_static', "-DBORINGSSL_HOME=$boringsslHome" cFlags '-fvisibility=hidden', '-DBORINGSSL_SHARED_LIBRARY', '-DBORINGSSL_IMPLEMENTATION', '-DOPENSSL_SMALL', '-D_XOPEN_SOURCE=700', '-Wno-unused-parameter' } } ndk { abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets.main { java { srcDirs = [ "${rootDir}/common/src/main/java", "src/main/java" ] // Requires evaluationDependsOn(':conscrypt-constants') above. srcDirs += project(':conscrypt-constants').sourceSets.main.java.srcDirs } } externalNativeBuild { cmake { path 'CMakeLists.txt' } } lintOptions { lintConfig file('lint.xml') } } configurations { publicApiDocs } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) publicApiDocs project(':conscrypt-api-doclet') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude module: 'support-annotations' exclude module: 'support-v4' exclude module: 'support-v13' exclude module: 'recyclerview-v7' exclude module: 'appcompat-v7' exclude module: 'design' }) provided project(':conscrypt-android-stub') // Adds the constants module as a dependency so that we can include its generated source provided project(':conscrypt-constants') } task javadocs(type: Javadoc) { source = android.sourceSets.main.java.srcDirs classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) + project(':conscrypt-android-stub').sourceSets.main.output // TODO(nmittler): Fix the javadoc errors. failOnError false options { encoding = 'UTF-8' links "https://docs.oracle.com/javase/7/docs/api/" doclet = "org.conscrypt.doclet.FilterDoclet" docletpath = configurations.publicApiDocs.files as List // Disable JavaDoc doclint on Java 8. It's annoying. if (JavaVersion.current().isJava8Compatible()) { addStringOption('Xdoclint:none', '-quiet') } } } task javadocsJar(type: Jar, dependsOn: javadocs) { classifier = 'javadoc' from javadocs.destinationDir } task sourcesJar(type: Jar) { classifier = 'sources' from android.sourceSets.main.java.srcDirs } artifacts { archives sourcesJar archives javadocsJar } uploadArchives.repositories.mavenDeployer { beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } String stagingUrl if (rootProject.hasProperty('repositoryId')) { stagingUrl = 'https://oss.sonatype.org/service/local/staging/deployByRepositoryId/' + rootProject.repositoryId } else { stagingUrl = 'https://oss.sonatype.org/service/local/staging/deploy/maven2/' } def configureAuth = { if (rootProject.hasProperty('ossrhUsername') && rootProject.hasProperty('ossrhPassword')) { authentication(userName: rootProject.ossrhUsername, password: rootProject.ossrhPassword) } } repository(url: stagingUrl, configureAuth) snapshotRepository(url: 'https://oss.sonatype.org/content/repositories/snapshots/', configureAuth) } [ install.repositories.mavenInstaller, uploadArchives.repositories.mavenDeployer, ]*.pom*.whenConfigured { pom -> pom.project { name "$project.group:$project.name" description project.description url 'https://conscrypt.org/' scm { connection 'scm:git:https://github.com/google/conscrypt.git' developerConnection 'scm:git:git@github.com:google/conscrypt.git' url 'https://github.com/google/conscrypt' } licenses { license { name 'Apache 2' url 'https://www.apache.org/licenses/LICENSE-2.0' } } developers { developer { id "conscrypt" name "Conscrypt Contributors" email "conscrypt@googlegroups.com" url "https://conscrypt.org/" organization = "Google, Inc." organizationUrl "https://www.google.com" } } } } } else { logger.warn('Android SDK has not been detected. The Android module will not be built.') // Disable all tasks tasks.collect { it.enabled = false } }