diff options
Diffstat (limited to 'mobile/android/geckoview/build.gradle')
-rw-r--r-- | mobile/android/geckoview/build.gradle | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/mobile/android/geckoview/build.gradle b/mobile/android/geckoview/build.gradle new file mode 100644 index 000000000..cc46530cb --- /dev/null +++ b/mobile/android/geckoview/build.gradle @@ -0,0 +1,176 @@ +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 + } +} |