summaryrefslogtreecommitdiff
path: root/platform/android/gradle
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/gradle')
-rw-r--r--platform/android/gradle/dependencies.gradle55
-rw-r--r--platform/android/gradle/gradle-checkstyle.gradle24
-rw-r--r--platform/android/gradle/gradle-config.gradle23
-rw-r--r--platform/android/gradle/gradle-javadoc.gradle21
-rw-r--r--platform/android/gradle/gradle-lint.gradle30
-rw-r--r--platform/android/gradle/gradle-make.gradle18
-rw-r--r--platform/android/gradle/gradle-publish.gradle137
-rw-r--r--platform/android/gradle/gradle-tests-staticblockremover.gradle59
-rw-r--r--platform/android/gradle/wrapper/gradle-wrapper.properties3
9 files changed, 368 insertions, 2 deletions
diff --git a/platform/android/gradle/dependencies.gradle b/platform/android/gradle/dependencies.gradle
new file mode 100644
index 0000000000..4ef4ae2f7d
--- /dev/null
+++ b/platform/android/gradle/dependencies.gradle
@@ -0,0 +1,55 @@
+ext {
+
+ androidVersions = [
+ minSdkVersion : 14,
+ targetSdkVersion : 25,
+ compileSdkVersion: 25,
+ buildToolsVersion: '26.0.3'
+ ]
+
+ versions = [
+ mapboxServices: '3.0.0-beta.2',
+ mapboxTelemetry: '3.0.0-beta.1',
+ supportLib : '25.4.0',
+ espresso : '3.0.1',
+ testRunner : '1.0.1',
+ leakCanary : '1.5.1',
+ lost : '3.0.4',
+ junit : '4.12',
+ mockito : '2.10.0',
+ robolectric : '3.5.1',
+ timber : '4.5.1',
+ okhttp : '3.9.1'
+ ]
+
+ dependenciesList = [
+ mapboxJavaServices : "com.mapbox.mapboxsdk:mapbox-sdk-services:${versions.mapboxServices}",
+ mapboxJavaGeoJSON : "com.mapbox.mapboxsdk:mapbox-sdk-geojson:${versions.mapboxServices}",
+ mapboxAndroidTelemetry: "com.mapbox.mapboxsdk:mapbox-android-telemetry:${versions.mapboxTelemetry}",
+
+ // for testApp
+ mapboxJavaTurf : "com.mapbox.mapboxsdk:mapbox-sdk-turf:${versions.mapboxServices}",
+
+ junit : "junit:junit:${versions.junit}",
+ mockito : "org.mockito:mockito-core:${versions.mockito}",
+ robolectric : "org.robolectric:robolectric:${versions.robolectric}",
+
+ testRunner : "com.android.support.test:runner:${versions.testRunner}",
+ testRules : "com.android.support.test:rules:${versions.testRunner}",
+ testEspressoCore : "com.android.support.test.espresso:espresso-core:${versions.espresso}",
+ testEspressoIntents : "com.android.support.test.espresso:espresso-intents:${versions.espresso}",
+
+ supportAnnotations : "com.android.support:support-annotations:${versions.supportLib}",
+ supportAppcompatV7 : "com.android.support:appcompat-v7:${versions.supportLib}",
+ supportFragmentV4 : "com.android.support:support-fragment:${versions.supportLib}",
+ supportDesign : "com.android.support:design:${versions.supportLib}",
+ supportRecyclerView : "com.android.support:recyclerview-v7:${versions.supportLib}",
+
+ lost : "com.mapzen.android:lost:${versions.lost}",
+ gmsLocation : 'com.google.android.gms:play-services-location:11.0.4',
+ timber : "com.jakewharton.timber:timber:${versions.timber}",
+ okhttp3 : "com.squareup.okhttp3:okhttp:${versions.okhttp}",
+ leakCanaryDebug : "com.squareup.leakcanary:leakcanary-android:${versions.leakCanary}",
+ leakCanaryRelease : "com.squareup.leakcanary:leakcanary-android-no-op:${versions.leakCanary}"
+ ]
+} \ No newline at end of file
diff --git a/platform/android/gradle/gradle-checkstyle.gradle b/platform/android/gradle/gradle-checkstyle.gradle
new file mode 100644
index 0000000000..41a68f90ce
--- /dev/null
+++ b/platform/android/gradle/gradle-checkstyle.gradle
@@ -0,0 +1,24 @@
+apply plugin: 'checkstyle'
+
+checkstyle {
+ toolVersion = "7.1.1" // 7.3
+ configFile = "../checkstyle.xml" as File
+}
+
+task checkstyle(type: Checkstyle) {
+ description 'Checks if the code adheres to coding standards'
+ group 'verification'
+ configFile file("../checkstyle.xml")
+ source 'src'
+ include '**/*.java'
+ exclude '**/gen/**'
+ exclude '**/style/*LayerTest.java'
+ exclude '**/style/LightTest.java'
+ exclude '**/style/layers/Property.java'
+ exclude '**/style/layers/PropertyFactory.java'
+ exclude '**/style/layers/*Layer.java'
+ exclude '**/style/light/Light.java'
+ exclude '**/Expression.java' // allowing single character signature as e()
+ classpath = files()
+ ignoreFailures = false
+}
diff --git a/platform/android/gradle/gradle-config.gradle b/platform/android/gradle/gradle-config.gradle
new file mode 100644
index 0000000000..8346806633
--- /dev/null
+++ b/platform/android/gradle/gradle-config.gradle
@@ -0,0 +1,23 @@
+//
+// Configuration file for gradle build execution.
+//
+
+task accessToken {
+ def tokenFile = new File("${projectDir}/src/main/res/values/developer-config.xml")
+ if (!tokenFile.exists()) {
+ String mapboxAccessToken = "$System.env.MAPBOX_ACCESS_TOKEN"
+ if (mapboxAccessToken == "null") {
+ System.out.println("You should set the MAPBOX_ACCESS_TOKEN environment variable.")
+ mapboxAccessToken = "YOUR_MAPBOX_ACCESS_TOKEN_GOES_HERE"
+ }
+ String tokenFileContents = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
+ "<resources>\n" +
+ " <string name=\"mapbox_access_token\">" + mapboxAccessToken + "</string>\n" +
+ "</resources>"
+ tokenFile.write(tokenFileContents)
+ }
+}
+
+gradle.projectsEvaluated {
+ preBuild.dependsOn('accessToken')
+}
diff --git a/platform/android/gradle/gradle-javadoc.gradle b/platform/android/gradle/gradle-javadoc.gradle
new file mode 100644
index 0000000000..39372b4378
--- /dev/null
+++ b/platform/android/gradle/gradle-javadoc.gradle
@@ -0,0 +1,21 @@
+android.libraryVariants.all { variant ->
+ def name = variant.name
+ // noinspection GroovyAssignabilityCheck
+ task "javadoc$name"(type: Javadoc) {
+ description = "Generates javadoc for build $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("Mapbox Android SDK $VERSION_NAME Reference")
+ options.docTitle("Mapbox Android SDK $VERSION_NAME")
+ options.header("Mapbox Android SDK $VERSION_NAME Reference")
+ options.bottom("&copy; 2015&ndash;2018 Mapbox. 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")
+ options.overview("src/main/java/overview.html")
+ options.group("Mapbox Android SDK", "com.mapbox.*")
+ options.group("Third Party Libraries", "com.almeros.*")
+ exclude '**/R.java', '**/BuildConfig.java', 'com/almeros/**'
+ }
+}
diff --git a/platform/android/gradle/gradle-lint.gradle b/platform/android/gradle/gradle-lint.gradle
new file mode 100644
index 0000000000..cbebeaa74a
--- /dev/null
+++ b/platform/android/gradle/gradle-lint.gradle
@@ -0,0 +1,30 @@
+task ciLint(type: Copy) {
+ if (isLocalBuild()) {
+ from "${projectDir}/lint/lint-baseline-local.xml"
+ into "${projectDir}"
+ rename { String fileName ->
+ fileName.replace("lint-baseline-local.xml", "lint-baseline.xml")
+ }
+ } else {
+ from "${projectDir}/lint/lint-baseline-ci.xml"
+ into "${projectDir}"
+ rename { String fileName ->
+ fileName.replace("lint-baseline-ci.xml", "lint-baseline.xml")
+ }
+ }
+}
+
+def isLocalBuild() {
+ if (System.getenv('IS_LOCAL_DEVELOPMENT') != null) {
+ return System.getenv('IS_LOCAL_DEVELOPMENT').toBoolean()
+ }
+ return true
+}
+
+lint.dependsOn ciLint
+
+tasks.whenTaskAdded { task ->
+ if (task.name == 'lintVitalRelease') {
+ task.dependsOn ciLint
+ }
+} \ No newline at end of file
diff --git a/platform/android/gradle/gradle-make.gradle b/platform/android/gradle/gradle-make.gradle
new file mode 100644
index 0000000000..65d971cc96
--- /dev/null
+++ b/platform/android/gradle/gradle-make.gradle
@@ -0,0 +1,18 @@
+//
+// Contains GL-native make commands
+//
+
+task makeClean(type: Exec) {
+ workingDir '../../'
+ commandLine 'make', 'clean'
+}
+
+task makeAndroid(type: Exec) {
+ workingDir '../../'
+ commandLine 'make', 'android'
+}
+
+task makeAndroidAll(type: Exec) {
+ workingDir '../../'
+ commandLine 'make', 'apackage'
+}
diff --git a/platform/android/gradle/gradle-publish.gradle b/platform/android/gradle/gradle-publish.gradle
new file mode 100644
index 0000000000..9805763a99
--- /dev/null
+++ b/platform/android/gradle/gradle-publish.gradle
@@ -0,0 +1,137 @@
+apply plugin: 'maven'
+apply plugin: 'signing'
+
+allprojects {
+ group project.GROUP
+ version project.VERSION_NAME
+
+ repositories {
+ mavenCentral()
+ }
+}
+
+repositories {
+ mavenCentral()
+}
+
+def isReleaseBuild() {
+ return VERSION_NAME.contains("SNAPSHOT") == false
+}
+
+def isLocalBuild() {
+ if (System.getenv('IS_LOCAL_DEVELOPMENT') != null) {
+ return System.getenv('IS_LOCAL_DEVELOPMENT').toBoolean()
+ }
+ return true
+}
+
+def getReleaseRepositoryUrl() {
+ return hasProperty('RELEASE_REPOSITORY_URL') ? RELEASE_REPOSITORY_URL :
+ "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
+}
+
+def getSnapshotRepositoryUrl() {
+ return hasProperty('SNAPSHOT_REPOSITORY_URL') ? SNAPSHOT_REPOSITORY_URL :
+ "https://oss.sonatype.org/content/repositories/snapshots/"
+}
+
+def obtainMavenLocalUrl() {
+ return getRepositories().mavenLocal().getUrl()
+}
+
+def getRepositoryUsername() {
+ return hasProperty('USERNAME') ? USERNAME :
+ (hasProperty('NEXUS_USERNAME') ? NEXUS_USERNAME : "")
+}
+
+def getRepositoryPassword() {
+ return hasProperty('PASSWORD') ? PASSWORD :
+ (hasProperty('NEXUS_PASSWORD') ? NEXUS_PASSWORD : "")
+}
+
+afterEvaluate { project ->
+ uploadArchives {
+ repositories {
+ mavenDeployer {
+ beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
+
+ pom.groupId = GROUP
+ pom.artifactId = POM_ARTIFACT_ID
+ pom.version = VERSION_NAME
+
+ if (isLocalBuild()) {
+ repository(url: obtainMavenLocalUrl())
+ } else {
+ repository(url: getReleaseRepositoryUrl()) {
+ authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
+ }
+ snapshotRepository(url: getSnapshotRepositoryUrl()) {
+ authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
+ }
+ }
+
+ pom.project {
+ name POM_NAME
+ packaging POM_PACKAGING
+ description POM_DESCRIPTION
+ url POM_URL
+
+ scm {
+ url POM_SCM_URL
+ connection POM_SCM_CONNECTION
+ developerConnection POM_SCM_DEV_CONNECTION
+ }
+
+ licenses {
+ license {
+ name POM_LICENCE_NAME
+ url POM_LICENCE_URL
+ distribution POM_LICENCE_DIST
+ }
+ }
+
+ developers {
+ developer {
+ id POM_DEVELOPER_ID
+ name POM_DEVELOPER_NAME
+ }
+ }
+ }
+ }
+ }
+ }
+
+ signing {
+ required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
+ sign configurations.archives
+ }
+
+ task androidJavadocs(type: Javadoc) {
+ source = android.sourceSets.main.java.sourceFiles
+ classpath = files(android.bootClasspath)
+ }
+
+ task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
+ classifier = 'javadoc'
+ from androidJavadocs.destinationDir
+ }
+
+ task androidSourcesJar(type: Jar) {
+ classifier = 'sources'
+ from android.sourceSets.main.java.sourceFiles
+ }
+
+ artifacts {
+ archives androidSourcesJar
+ archives androidJavadocsJar
+ }
+}
+
+// See: https://github.com/chrisbanes/gradle-mvn-push/issues/43#issuecomment-84140513
+afterEvaluate { project ->
+ android.libraryVariants.all { variant ->
+ tasks.androidJavadocs.doFirst {
+ classpath += files(variant.javaCompile.classpath.files)
+ }
+ }
+}
diff --git a/platform/android/gradle/gradle-tests-staticblockremover.gradle b/platform/android/gradle/gradle-tests-staticblockremover.gradle
new file mode 100644
index 0000000000..523dc99dd1
--- /dev/null
+++ b/platform/android/gradle/gradle-tests-staticblockremover.gradle
@@ -0,0 +1,59 @@
+buildscript {
+ repositories {
+ mavenCentral()
+ mavenLocal()
+ }
+
+ dependencies {
+ classpath 'com.darylteo.gradle:javassist-plugin:0.4.1'
+ }
+}
+
+import com.darylteo.gradle.javassist.tasks.TransformationTask
+import com.darylteo.gradle.javassist.transformers.ClassTransformer
+import javassist.CtClass
+import javassist.CtConstructor
+
+class StaticBlockRemover extends ClassTransformer {
+
+ private static final NATIVE_MAP_VIEW = "com.mapbox.mapboxsdk.maps.NativeMapView";
+ private static
+ final NATIVE_CONNECTIVITY_LISTENER = "com.mapbox.mapboxsdk.net.NativeConnectivityListener";
+ private static final OFFLINE_MANAGER = "com.mapbox.mapboxsdk.offline.OfflineManager";
+ private static final OFFLINE_REGION = "com.mapbox.mapboxsdk.offline.OfflineRegion";
+
+ public void applyTransformations(CtClass clazz) throws Exception {
+ if (shouldFilter(clazz)) {
+ CtConstructor constructor = clazz.getClassInitializer()
+ if (constructor != null) {
+ clazz.removeConstructor(constructor)
+ }
+ }
+ }
+
+ public boolean shouldFilter(CtClass clazz) {
+ return hasAStaticBlock(clazz);
+ }
+
+ private boolean hasAStaticBlock(CtClass clazz) {
+ String name = clazz.getName();
+ boolean isNativeMapView = name.equals(NATIVE_MAP_VIEW);
+ boolean isNativeConnectivityListener = name.equals(NATIVE_CONNECTIVITY_LISTENER);
+ boolean isOfflineManager = name.equals(OFFLINE_MANAGER);
+ boolean isOfflineRegion = name.equals(OFFLINE_REGION);
+
+ return isNativeMapView || isNativeConnectivityListener || isOfflineManager || isOfflineRegion;
+ }
+}
+
+task removeStatic(type: TransformationTask) {
+ // TODO Find a better way to get output classes path
+ String fromToDirPath = buildDir.getAbsolutePath() + "/intermediates/classes/debug"
+ from fromToDirPath
+ transformation = new StaticBlockRemover()
+ into fromToDirPath
+}
+
+afterEvaluate {
+ compileDebugUnitTestSources.dependsOn(removeStatic)
+} \ No newline at end of file
diff --git a/platform/android/gradle/wrapper/gradle-wrapper.properties b/platform/android/gradle/wrapper/gradle-wrapper.properties
index 1d35abd7b2..bf1b63c346 100644
--- a/platform/android/gradle/wrapper/gradle-wrapper.properties
+++ b/platform/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,5 @@
-#Fri Mar 03 10:22:19 EST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip \ No newline at end of file
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip