blob: 2333e361cd19194520ae74c50fa5a5f59fad6962 [file] [log] [blame] [edit]
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath libraries.android_tools
}
}
plugins {
id 'digital.wup.android-maven-publish' version '3.6.2'
}
description = 'Conscrypt: Android'
ext {
androidHome = "$System.env.ANDROID_HOME"
androidSdkInstalled = file("$androidHome").exists()
androidVersionCode = 1
androidVersionName = "$version"
androidMinSdkVersion = 19
androidTargetSdkVersion = 26
androidNdkVersion = '25.2.9519653'
androidCmakeVersion = '3.22.1'
}
if (androidSdkInstalled) {
apply plugin: 'com.android.library'
// 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 {
namespace "org.conscrypt"
compileSdkVersion androidTargetSdkVersion
ndkVersion androidNdkVersion
compileOptions {
sourceCompatibility androidMinJavaVersion
targetCompatibility androidMinJavaVersion
}
defaultConfig {
minSdkVersion androidMinSdkVersion
targetSdkVersion androidTargetSdkVersion
versionCode androidVersionCode
versionName androidVersionName
testInstrumentationRunner "androidx.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'
targets 'conscrypt_jni'
version androidCmakeVersion
}
}
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
}
resources {
srcDirs += "build/generated/resources"
}
}
externalNativeBuild {
cmake {
path 'CMakeLists.txt'
version androidCmakeVersion
}
}
lintOptions {
lintConfig file('lint.xml')
}
}
configurations {
publicApiDocs
}
preBuild {
dependsOn generateProperties
}
dependencies {
publicApiDocs project(':conscrypt-api-doclet')
androidTestImplementation('androidx.test.espresso:espresso-core:3.1.1', {
exclude module: 'support-annotations'
exclude module: 'support-v4'
exclude module: 'support-v13'
exclude module: 'recyclerview-v7'
exclude module: 'appcompat-v7'
exclude module: 'design'
})
compileOnly project(':conscrypt-android-stub')
// Adds the constants module as a dependency so that we can include its generated source
compileOnly project(':conscrypt-constants')
}
def configureJavaDocs = tasks.register("configureJavadocs") {
dependsOn configurations.publicApiDocs
doLast {
javadocs.options.docletpath = configurations.publicApiDocs.files as List
}
}
def javadocs = tasks.register("javadocs", Javadoc) {
dependsOn configureJavadocs
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/"
// TODO(prb): Update doclet to Java 11.
// doclet = "org.conscrypt.doclet.FilterDoclet"
}
}
def javadocsJar = tasks.register("javadocsJar", Jar) {
dependsOn javadocs
classifier = 'javadoc'
from {
javadocs.get().destinationDir
}
}
def sourcesJar = tasks.register("sourcesJar", Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
apply from: "$rootDir/gradle/publishing.gradle"
publishing.publications.maven {
from components.android
artifact sourcesJar.get()
artifact javadocsJar.get()
}
} else {
logger.warn('Android SDK has not been detected. The Android module will not be built.')
// Disable all tasks
tasks.configureEach {
it.enabled = false
}
}