gecko-dev/mobile/android/geckoview/build.gradle
Nick Alexander 73d0e38845 Bug 1291372 - Produce Maven repository with GeckoView Javadoc and Sources JARs. r=snorp
We use a Maven repository and the (misleadingly named!) uploadArchives
task because this is the best way to make Android Studio download and
recognize the Javadoc and sources.  With this, it's automatic; with a
single AAR file, it's a nightmare of point-and-click configuration.

This patch does a bunch of Gradle hacking to make -javadoc and
-sources JARs; there's nothing special or particularly likely to break
here.

This patch also adds Proguard declarations to the :geckoview library
project.  That involves moving a good part of the Proguard
configuration into mobile/android/geckoview.  (I also expand upon the
existing configuration.)  This should be only a re-arrangement, and
the resulting file is included in the original, so nothing should be
changed.

MozReview-Commit-ID: BGNW1v92J0k

--HG--
extra : rebase_source : 94633d27e8ae6bafa3d6823996355c22d2e2e6eb
2016-11-07 20:07:30 -08:00

177 lines
6.6 KiB
Groovy

buildDir "${topobjdir}/gradle/build/mobile/android/geckoview"
apply plugin: 'android-sdk-manager' // Must come before 'com.android.*'.
apply plugin: 'com.android.library'
def VERSION_NAME = '0.0.1'
android {
compileSdkVersion 23
buildToolsVersion mozconfig.substs.ANDROID_BUILD_TOOLS_VERSION
defaultConfig {
// TODO: version GeckoView explicitly. We'd like to avoid
// mozconfig.substs.ANDROID_VERSION_CODE, which won't be intuitive to
// consumer (and advances very quickly on pre-release channels).
versionCode 1
versionName VERSION_NAME
targetSdkVersion 23
minSdkVersion 15
consumerProguardFiles 'proguard-rules.txt'
}
buildTypes {
withGeckoBinaries {
initWith release
}
withoutGeckoBinaries { // For clarity and consistency throughout the tree.
initWith release
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
dexOptions {
javaMaxHeapSize "2g"
}
lintOptions {
abortOnError false
}
sourceSets {
main {
java {
srcDir "${topsrcdir}/mobile/android/geckoview/src/thirdparty/java"
// TODO: support WebRTC.
// if (mozconfig.substs.MOZ_WEBRTC) {
// srcDir "${topsrcdir}/media/webrtc/trunk/webrtc/modules/audio_device/android/java/src"
// srcDir "${topsrcdir}/media/webrtc/trunk/webrtc/modules/video_capture/android/java/src"
// srcDir "${topsrcdir}/media/webrtc/trunk/webrtc/modules/video_render/android/java/src"
// }
// TODO: don't use AppConstants.
srcDir "${project.buildDir}/generated/source/preprocessed_code" // See syncPreprocessedCode.
}
assets {
}
}
}
}
dependencies {
compile "com.android.support:support-v4:${mozconfig.substs.ANDROID_SUPPORT_LIBRARY_VERSION}"
}
task syncPreprocessedCode(type: Sync, dependsOn: rootProject.generateCodeAndResources) {
into("${project.buildDir}/generated/source/preprocessed_code")
from("${topobjdir}/mobile/android/base/generated/preprocessed") {
// AdjustConstants is included in the main app project.
exclude '**/AdjustConstants.java'
}
}
apply from: "${topsrcdir}/mobile/android/gradle/with_gecko_binaries.gradle"
android.libraryVariants.all { variant ->
variant.preBuild.dependsOn syncPreprocessedCode
// Like 'debug', 'release', or 'withGeckoBinaries'.
def buildType = variant.buildType.name
// It would be most natural for :geckoview to always include the Gecko
// binaries, but that's difficult; see the notes in
// mobile/android/gradle/with_gecko_binaries.gradle. Instead :app uses
// :geckoview:release and handles it's own Gecko binary inclusion.
if (buildType.equals('withGeckoBinaries')) {
configureVariantWithGeckoBinaries(variant)
}
// Javadoc and Sources JAR configuration cribbed from
// https://github.com/mapbox/mapbox-gl-native/blob/d169ea55c1cfa85cd8bf19f94c5f023569f71810/platform/android/MapboxGLAndroidSDK/build.gradle#L85
// informed by
// https://code.tutsplus.com/tutorials/creating-and-publishing-an-android-library--cms-24582,
// and amended from numerous Stackoverflow posts.
def name = variant.name
def javadoc = task "javadoc${name.capitalize()}"(type: Javadoc) {
description = "Generate Javadoc for build variant $name"
failOnError = false
destinationDir = new File(destinationDir, variant.baseName)
source = files(variant.javaCompile.source)
classpath = files(variant.javaCompile.classpath.files) + files(android.bootClasspath)
options.windowTitle("Mozilla GeckoView Android API $VERSION_NAME Reference")
options.docTitle("Mozilla GeckoView Android API $VERSION_NAME")
options.header("Mozilla GeckoView Android API $VERSION_NAME Reference")
options.bottom("© 2016 Mozilla. All rights reserved.")
options.links("http://docs.oracle.com/javase/7/docs/api/")
options.linksOffline("http://d.android.com/reference/", "$System.env.ANDROID_HOME/docs/reference")
// TODO: options.overview("src/main/java/overview.html")
options.group("Mozilla GeckoView", "org.mozilla.gecko*") // TODO: narrow this down.
exclude '**/R.java', '**/BuildConfig.java', 'com/googlecode/**'
}
task "javadocJar${name.capitalize()}"(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
task "sourcesJar${name.capitalize()}"(type: Jar) {
classifier 'sources'
description = "Generate Javadoc for build variant $name"
destinationDir = new File(destinationDir, variant.baseName)
from files(variant.javaCompile.source)
}
}
apply plugin: 'maven'
uploadArchives {
repositories.mavenDeployer {
pom.groupId = 'org.mozilla'
pom.artifactId = 'geckoview'
pom.version = VERSION_NAME
pom.project {
licenses {
license {
name 'The Mozilla Public License, v. 2.0'
url 'http://mozilla.org/MPL/2.0/'
distribution 'repo'
}
}
}
repository(url: "file://${project.buildDir}/maven")
}
}
// This is all related to the withGeckoBinaries approach; see
// mobile/android/gradle/with_gecko_binaries.gradle.
afterEvaluate {
// The bundle tasks are only present when the particular configuration is
// being built, so this task might not exist. (This is due to the way the
// Android Gradle plugin defines things during configuration.)
def bundleWithGeckoBinaries = tasks.findByName('bundleWithGeckoBinaries')
if (!bundleWithGeckoBinaries) {
return
}
// Remove default configuration, which is the release configuration, when
// we're actually building withGeckoBinaries. This makes `gradle install`
// install the withGeckoBinaries artifacts, not the release artifacts (which
// are withoutGeckoBinaries and not suitable for distribution.)
def Configuration archivesConfig = project.getConfigurations().getByName('archives')
archivesConfig.artifacts.removeAll { it.extension.equals('aar') }
artifacts {
// Instead of default (release) configuration, publish one with Gecko binaries.
archives bundleWithGeckoBinaries
// Javadoc and sources for developer ergononomics.
archives javadocJarWithGeckoBinaries
archives sourcesJarWithGeckoBinaries
}
}