From bca3ac657f507c77525e9e899d037805179080b2 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Wed, 10 Jan 2018 19:39:47 +0100 Subject: [android] - move gradle files to dedicated folder --- Makefile | 46 +++---- circle.yml | 4 +- platform/android/.gitignore | 2 +- platform/android/MapboxGLAndroidSDK/build.gradle | 16 +-- .../MapboxGLAndroidSDK/gradle-checkstyle.gradle | 22 ---- .../MapboxGLAndroidSDK/gradle-javadoc.gradle | 21 ---- .../MapboxGLAndroidSDK/gradle-publish.gradle | 137 --------------------- .../gradle-tests-staticblockremover.gradle | 59 --------- .../android/MapboxGLAndroidSDKTestApp/build.gradle | 8 +- .../gradle-checkstyle.gradle | 19 --- .../MapboxGLAndroidSDKTestApp/gradle-config.gradle | 23 ---- .../MapboxGLAndroidSDKTestApp/gradle-make.gradle | 18 --- platform/android/build.gradle | 6 +- platform/android/dependencies.gradle | 49 -------- platform/android/gradle-lint.gradle | 30 ----- platform/android/gradle/dependencies.gradle | 49 ++++++++ platform/android/gradle/gradle-checkstyle.gradle | 24 ++++ platform/android/gradle/gradle-config.gradle | 23 ++++ platform/android/gradle/gradle-javadoc.gradle | 21 ++++ platform/android/gradle/gradle-lint.gradle | 30 +++++ platform/android/gradle/gradle-make.gradle | 18 +++ platform/android/gradle/gradle-publish.gradle | 137 +++++++++++++++++++++ .../gradle/gradle-tests-staticblockremover.gradle | 59 +++++++++ 23 files changed, 402 insertions(+), 419 deletions(-) delete mode 100644 platform/android/MapboxGLAndroidSDK/gradle-checkstyle.gradle delete mode 100644 platform/android/MapboxGLAndroidSDK/gradle-javadoc.gradle delete mode 100644 platform/android/MapboxGLAndroidSDK/gradle-publish.gradle delete mode 100644 platform/android/MapboxGLAndroidSDK/gradle-tests-staticblockremover.gradle delete mode 100644 platform/android/MapboxGLAndroidSDKTestApp/gradle-checkstyle.gradle delete mode 100644 platform/android/MapboxGLAndroidSDKTestApp/gradle-config.gradle delete mode 100644 platform/android/MapboxGLAndroidSDKTestApp/gradle-make.gradle delete mode 100644 platform/android/dependencies.gradle delete mode 100644 platform/android/gradle-lint.gradle create mode 100644 platform/android/gradle/dependencies.gradle create mode 100644 platform/android/gradle/gradle-checkstyle.gradle create mode 100644 platform/android/gradle/gradle-config.gradle create mode 100644 platform/android/gradle/gradle-javadoc.gradle create mode 100644 platform/android/gradle/gradle-lint.gradle create mode 100644 platform/android/gradle/gradle-make.gradle create mode 100644 platform/android/gradle/gradle-publish.gradle create mode 100644 platform/android/gradle/gradle-tests-staticblockremover.gradle diff --git a/Makefile b/Makefile index 656a2772ec..2b5931e0e3 100644 --- a/Makefile +++ b/Makefile @@ -490,7 +490,7 @@ android-style-code: style-code: android-style-code # Configuration file for running CMake from Gradle within Android Studio. -platform/android/configuration.gradle: +platform/android/gradle/configuration.gradle: @echo "ext {\n node = '`command -v node || command -v nodejs`'\n npm = '`command -v npm`'\n ccache = '`command -v ccache`'\n}" > $@ define ANDROID_RULES @@ -498,17 +498,17 @@ define ANDROID_RULES # $2 = armeabi-v7a (internal arch) .PHONY: android-test-lib-$1 -android-test-lib-$1: platform/android/configuration.gradle +android-test-lib-$1: platform/android/gradle/configuration.gradle cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=$2 -Pmapbox.with_test=true :MapboxGLAndroidSDKTestApp:assemble$(BUILDTYPE) # Build SDK for for specified abi .PHONY: android-lib-$1 -android-lib-$1: platform/android/configuration.gradle +android-lib-$1: platform/android/gradle/configuration.gradle cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=$2 :MapboxGLAndroidSDK:assemble$(BUILDTYPE) # Build test app and SDK for for specified abi .PHONY: android-$1 -android-$1: platform/android/configuration.gradle +android-$1: platform/android/gradle/configuration.gradle cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=$2 :MapboxGLAndroidSDKTestApp:assemble$(BUILDTYPE) # Build the core test for specified abi @@ -550,29 +550,29 @@ run-android-core-test-$1: run-android-core-test-$1-* # Run the test app on connected android device with specified abi .PHONY: run-android-$1 -run-android-$1: platform/android/configuration.gradle +run-android-$1: platform/android/gradle/configuration.gradle -adb uninstall com.mapbox.mapboxsdk.testapp 2> /dev/null cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=$2 :MapboxGLAndroidSDKTestApp:install$(BUILDTYPE) && adb shell am start -n com.mapbox.mapboxsdk.testapp/.activity.FeatureOverviewActivity # Build test app instrumentation tests apk and test app apk for specified abi .PHONY: android-ui-test-$1 -android-ui-test-$1: platform/android/configuration.gradle +android-ui-test-$1: platform/android/gradle/configuration.gradle cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=$2 :MapboxGLAndroidSDKTestApp:assembleDebug :MapboxGLAndroidSDKTestApp:assembleAndroidTest # Run test app instrumentation tests on a connected android device or emulator with specified abi .PHONY: run-android-ui-test-$1 -run-android-ui-test-$1: platform/android/configuration.gradle +run-android-ui-test-$1: platform/android/gradle/configuration.gradle -adb uninstall com.mapbox.mapboxsdk.testapp 2> /dev/null cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=$2 :MapboxGLAndroidSDKTestApp:connectedAndroidTest # Run Java Instrumentation tests on a connected android device or emulator with specified abi and test filter -run-android-ui-test-$1-%: platform/android/configuration.gradle +run-android-ui-test-$1-%: platform/android/gradle/configuration.gradle -adb uninstall com.mapbox.mapboxsdk.testapp 2> /dev/null cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=$2 :MapboxGLAndroidSDKTestApp:connectedAndroidTest -Pandroid.testInstrumentationRunnerArguments.class="$$*" # Symbolicate native stack trace with the specified abi .PHONY: android-ndk-stack-$1 -android-ndk-stack-$1: platform/android/configuration.gradle +android-ndk-stack-$1: platform/android/gradle/configuration.gradle adb logcat | ndk-stack -sym platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/debug/obj/$2/ endef @@ -603,30 +603,30 @@ run-android-ui-test-%: run-android-ui-test-arm-v7-% # Run Java Unit tests on the JVM of the development machine executing this .PHONY: run-android-unit-test -run-android-unit-test: platform/android/configuration.gradle +run-android-unit-test: platform/android/gradle/configuration.gradle cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=none :MapboxGLAndroidSDK:testDebugUnitTest -run-android-unit-test-%: platform/android/configuration.gradle +run-android-unit-test-%: platform/android/gradle/configuration.gradle cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=none :MapboxGLAndroidSDK:testDebugUnitTest --tests "$*" # Builds a release package of the Android SDK .PHONY: apackage -apackage: platform/android/configuration.gradle +apackage: platform/android/gradle/configuration.gradle make android-lib-arm-v5 && make android-lib-arm-v7 && make android-lib-arm-v8 && make android-lib-x86 && make android-lib-x86-64 && make android-lib-mips cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=all assemble$(BUILDTYPE) # Build test app instrumentation tests apk and test app apk for all abi's .PHONY: android-ui-test -android-ui-test: platform/android/configuration.gradle +android-ui-test: platform/android/gradle/configuration.gradle cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=all :MapboxGLAndroidSDKTestApp:assembleDebug :MapboxGLAndroidSDKTestApp:assembleAndroidTest # Uploads the compiled Android SDK to Maven .PHONY: run-android-upload-archives -run-android-upload-archives: platform/android/configuration.gradle +run-android-upload-archives: platform/android/gradle/configuration.gradle cd platform/android && export IS_LOCAL_DEVELOPMENT=false && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=all :MapboxGLAndroidSDK:uploadArchives # Uploads the compiled Android SDK to ~/.m2/repository/com/mapbox/mapboxsdk .PHONY: run-android-upload-archives-local -run-android-upload-archives-local: platform/android/configuration.gradle +run-android-upload-archives-local: platform/android/gradle/configuration.gradle cd platform/android && export IS_LOCAL_DEVELOPMENT=true && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=all :MapboxGLAndroidSDK:uploadArchives # Dump system graphics information for the test app @@ -645,22 +645,22 @@ android-check : android-checkstyle android-lint-sdk android-lint-test-app # Runs checkstyle on the Android code .PHONY: android-checkstyle -android-checkstyle: platform/android/configuration.gradle +android-checkstyle: platform/android/gradle/configuration.gradle cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=none checkstyle # Runs lint on the Android SDK code .PHONY: android-lint-sdk -android-lint-sdk: platform/android/configuration.gradle +android-lint-sdk: platform/android/gradle/configuration.gradle cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=none :MapboxGLAndroidSDK:lint # Runs lint on the Android test app code .PHONY: android-lint-test-app -android-lint-test-app: platform/android/configuration.gradle +android-lint-test-app: platform/android/gradle/configuration.gradle cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=none :MapboxGLAndroidSDKTestApp:lint # Generates javadoc from the Android SDK .PHONY: android-javadoc -android-javadoc: platform/android/configuration.gradle +android-javadoc: platform/android/gradle/configuration.gradle cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=none :MapboxGLAndroidSDK:javadocrelease # Symbolicate ndk stack traces for the arm-v7 abi @@ -670,14 +670,14 @@ android-ndk-stack: android-ndk-stack-arm-v7 # Open Android Studio if machine is macos ifeq ($(HOST_PLATFORM), macos) .PHONY: aproj -aproj: platform/android/configuration.gradle +aproj: platform/android/gradle/configuration.gradle open -b com.google.android.studio platform/android endif # Creates the configuration needed to build with Android Studio .PHONY: android-configuration -android-configuration: platform/android/configuration.gradle - cat platform/android/configuration.gradle +android-configuration: platform/android/gradle/configuration.gradle + cat platform/android/gradle/configuration.gradle #### Miscellaneous targets ##################################################### @@ -693,7 +693,7 @@ codestyle: .PHONY: clean clean: -rm -rf ./build \ - ./platform/android/configuration.gradle \ + ./platform/android/gradle/configuration.gradle \ ./platform/android/MapboxGLAndroidSDK/build \ ./platform/android/MapboxGLAndroidSDK/.externalNativeBuild \ ./platform/android/MapboxGLAndroidSDKTestApp/build \ diff --git a/circle.yml b/circle.yml index 3378eb18ae..080feb28d1 100644 --- a/circle.yml +++ b/circle.yml @@ -66,10 +66,10 @@ step-library: - &restore-gradle-cache restore_cache: keys: - - 'v3/{{ checksum "platform/android/dependencies.gradle" }}/{{ checksum "platform/android/build.gradle" }}/{{ checksum "platform/android/gradle/wrapper/gradle-wrapper.properties" }}' + - 'v3/{{ checksum "platform/android/gradle/dependencies.gradle" }}/{{ checksum "platform/android/build.gradle" }}/{{ checksum "platform/android/gradle/wrapper/gradle-wrapper.properties" }}' - &save-gradle-cache save_cache: - key: 'v3/{{ checksum "platform/android/dependencies.gradle" }}/{{ checksum "platform/android/build.gradle" }}/{{ checksum "platform/android/gradle/wrapper/gradle-wrapper.properties" }}' + key: 'v3/{{ checksum "platform/android/gradle/dependencies.gradle" }}/{{ checksum "platform/android/build.gradle" }}/{{ checksum "platform/android/gradle/wrapper/gradle-wrapper.properties" }}' paths: [ "/root/.gradle" ] - &reset-ccache-stats diff --git a/platform/android/.gitignore b/platform/android/.gitignore index 4abd458378..3194c43ca8 100644 --- a/platform/android/.gitignore +++ b/platform/android/.gitignore @@ -16,7 +16,7 @@ MapboxGLAndroidSDK/src/main/assets/ # Local settings local.properties -/configuration.gradle +gradle/configuration.gradle # Token file MapboxGLAndroidSDKTestApp/src/main/res/values/developer-config.xml diff --git a/platform/android/MapboxGLAndroidSDK/build.gradle b/platform/android/MapboxGLAndroidSDK/build.gradle index 70c98f534a..707bc80f57 100644 --- a/platform/android/MapboxGLAndroidSDK/build.gradle +++ b/platform/android/MapboxGLAndroidSDK/build.gradle @@ -108,8 +108,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } lintOptions { @@ -120,7 +120,7 @@ android { } testOptions { - unitTests{ + unitTests { returnDefaultValues = true } } @@ -149,8 +149,8 @@ configurations { all*.exclude group: 'commons-collections', module: 'commons-collections' } -apply from: 'gradle-javadoc.gradle' -apply from: 'gradle-publish.gradle' -apply from: 'gradle-checkstyle.gradle' -apply from: 'gradle-tests-staticblockremover.gradle' -apply from: '../gradle-lint.gradle' +apply from: "${rootDir}/gradle/gradle-javadoc.gradle" +apply from: "${rootDir}/gradle/gradle-publish.gradle" +apply from: "${rootDir}/gradle/gradle-checkstyle.gradle" +apply from: "${rootDir}/gradle/gradle-tests-staticblockremover.gradle" +apply from: "${rootDir}/gradle/gradle-lint.gradle" diff --git a/platform/android/MapboxGLAndroidSDK/gradle-checkstyle.gradle b/platform/android/MapboxGLAndroidSDK/gradle-checkstyle.gradle deleted file mode 100644 index 420ccb473a..0000000000 --- a/platform/android/MapboxGLAndroidSDK/gradle-checkstyle.gradle +++ /dev/null @@ -1,22 +0,0 @@ -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/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/MapboxGLAndroidSDK/gradle-javadoc.gradle b/platform/android/MapboxGLAndroidSDK/gradle-javadoc.gradle deleted file mode 100644 index 39372b4378..0000000000 --- a/platform/android/MapboxGLAndroidSDK/gradle-javadoc.gradle +++ /dev/null @@ -1,21 +0,0 @@ -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("© 2015–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/MapboxGLAndroidSDK/gradle-publish.gradle b/platform/android/MapboxGLAndroidSDK/gradle-publish.gradle deleted file mode 100644 index 9805763a99..0000000000 --- a/platform/android/MapboxGLAndroidSDK/gradle-publish.gradle +++ /dev/null @@ -1,137 +0,0 @@ -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/MapboxGLAndroidSDK/gradle-tests-staticblockremover.gradle b/platform/android/MapboxGLAndroidSDK/gradle-tests-staticblockremover.gradle deleted file mode 100644 index 523dc99dd1..0000000000 --- a/platform/android/MapboxGLAndroidSDK/gradle-tests-staticblockremover.gradle +++ /dev/null @@ -1,59 +0,0 @@ -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/MapboxGLAndroidSDKTestApp/build.gradle b/platform/android/MapboxGLAndroidSDKTestApp/build.gradle index 765b346669..42b0a629e8 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/build.gradle +++ b/platform/android/MapboxGLAndroidSDKTestApp/build.gradle @@ -80,9 +80,9 @@ dependencies { androidTestImplementation rootProject.ext.dep.testEspressoIntents } -apply from: 'gradle-make.gradle' -apply from: 'gradle-config.gradle' -apply from: 'gradle-checkstyle.gradle' -apply from: '../gradle-lint.gradle' +apply from: "${rootDir}/gradle/gradle-make.gradle" +apply from: "${rootDir}/gradle/gradle-config.gradle" +apply from: "${rootDir}/gradle/gradle-checkstyle.gradle" +apply from: "${rootDir}/gradle/gradle-lint.gradle" diff --git a/platform/android/MapboxGLAndroidSDKTestApp/gradle-checkstyle.gradle b/platform/android/MapboxGLAndroidSDKTestApp/gradle-checkstyle.gradle deleted file mode 100644 index e4e1ba0453..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/gradle-checkstyle.gradle +++ /dev/null @@ -1,19 +0,0 @@ -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' - classpath = files() - ignoreFailures = false -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/gradle-config.gradle b/platform/android/MapboxGLAndroidSDKTestApp/gradle-config.gradle deleted file mode 100644 index 8346806633..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/gradle-config.gradle +++ /dev/null @@ -1,23 +0,0 @@ -// -// 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 = "\n" + - "\n" + - " " + mapboxAccessToken + "\n" + - "" - tokenFile.write(tokenFileContents) - } -} - -gradle.projectsEvaluated { - preBuild.dependsOn('accessToken') -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/gradle-make.gradle b/platform/android/MapboxGLAndroidSDKTestApp/gradle-make.gradle deleted file mode 100644 index 65d971cc96..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/gradle-make.gradle +++ /dev/null @@ -1,18 +0,0 @@ -// -// 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/build.gradle b/platform/android/build.gradle index 28d5363797..88b65e6c80 100644 --- a/platform/android/build.gradle +++ b/platform/android/build.gradle @@ -20,8 +20,8 @@ task wrapper(type: Wrapper) { gradleVersion = '3.2.1' } -apply from: rootProject.file('dependencies.gradle') +apply from: "${rootDir}/gradle/dependencies.gradle" // Load build system information. If this file does not exist, run -// `make platform/android/configuration.gradle` -apply from: rootProject.file('configuration.gradle') +// `make platform/android/gradle/configuration.gradle` +apply from: "${rootDir}/gradle/configuration.gradle" diff --git a/platform/android/dependencies.gradle b/platform/android/dependencies.gradle deleted file mode 100644 index a32e18166d..0000000000 --- a/platform/android/dependencies.gradle +++ /dev/null @@ -1,49 +0,0 @@ -ext { - minSdkVersion = 14 - targetSdkVersion = 25 - compileSdkVersion = 25 - buildToolsVersion = "26.0.3" - - versionCode = 12 - versionName = "6.0.0" - - mapboxServicesVersion = "2.2.9" - supportLibVersion = "25.4.0" - espressoVersion = '3.0.1' - testRunnerVersion = '1.0.1' - leakCanaryVersion = '1.5.1' - - dep = [ - // mapbox - mapboxJavaServices : "com.mapbox.mapboxsdk:mapbox-java-services:${mapboxServicesVersion}@jar", - mapboxJavaGeoJSON : "com.mapbox.mapboxsdk:mapbox-java-geojson:${mapboxServicesVersion}@jar", - mapboxAndroidTelemetry : "com.mapbox.mapboxsdk:mapbox-android-telemetry:${mapboxServicesVersion}@aar", - - // mapzen lost - lost : 'com.mapzen.android:lost:3.0.4', - - // unit test - junit : 'junit:junit:4.12', - mockito : 'org.mockito:mockito-core:2.10.0', - robolectric : 'org.robolectric:robolectric:3.5.1', - - // instrumentation test - testRunner : "com.android.support.test:runner:${testRunnerVersion}", - testRules : "com.android.support.test:rules:${testRunnerVersion}", - testEspressoCore : "com.android.support.test.espresso:espresso-core:${espressoVersion}", - testEspressoIntents : "com.android.support.test.espresso:espresso-intents:${espressoVersion}", - - // support - supportAnnotations : "com.android.support:support-annotations:${supportLibVersion}", - supportAppcompatV7 : "com.android.support:appcompat-v7:${supportLibVersion}", - supportFragmentV4 : "com.android.support:support-fragment:${supportLibVersion}", - supportDesign : "com.android.support:design:${supportLibVersion}", - supportRecyclerView : "com.android.support:recyclerview-v7:${supportLibVersion}", - - // square crew - timber : 'com.jakewharton.timber:timber:4.5.1', - okhttp3 : 'com.squareup.okhttp3:okhttp:3.9.1', - leakCanaryDebug : "com.squareup.leakcanary:leakcanary-android:${leakCanaryVersion}", - leakCanaryRelease : "com.squareup.leakcanary:leakcanary-android-no-op:${leakCanaryVersion}" - ] -} \ No newline at end of file diff --git a/platform/android/gradle-lint.gradle b/platform/android/gradle-lint.gradle deleted file mode 100644 index cbebeaa74a..0000000000 --- a/platform/android/gradle-lint.gradle +++ /dev/null @@ -1,30 +0,0 @@ -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/dependencies.gradle b/platform/android/gradle/dependencies.gradle new file mode 100644 index 0000000000..a32e18166d --- /dev/null +++ b/platform/android/gradle/dependencies.gradle @@ -0,0 +1,49 @@ +ext { + minSdkVersion = 14 + targetSdkVersion = 25 + compileSdkVersion = 25 + buildToolsVersion = "26.0.3" + + versionCode = 12 + versionName = "6.0.0" + + mapboxServicesVersion = "2.2.9" + supportLibVersion = "25.4.0" + espressoVersion = '3.0.1' + testRunnerVersion = '1.0.1' + leakCanaryVersion = '1.5.1' + + dep = [ + // mapbox + mapboxJavaServices : "com.mapbox.mapboxsdk:mapbox-java-services:${mapboxServicesVersion}@jar", + mapboxJavaGeoJSON : "com.mapbox.mapboxsdk:mapbox-java-geojson:${mapboxServicesVersion}@jar", + mapboxAndroidTelemetry : "com.mapbox.mapboxsdk:mapbox-android-telemetry:${mapboxServicesVersion}@aar", + + // mapzen lost + lost : 'com.mapzen.android:lost:3.0.4', + + // unit test + junit : 'junit:junit:4.12', + mockito : 'org.mockito:mockito-core:2.10.0', + robolectric : 'org.robolectric:robolectric:3.5.1', + + // instrumentation test + testRunner : "com.android.support.test:runner:${testRunnerVersion}", + testRules : "com.android.support.test:rules:${testRunnerVersion}", + testEspressoCore : "com.android.support.test.espresso:espresso-core:${espressoVersion}", + testEspressoIntents : "com.android.support.test.espresso:espresso-intents:${espressoVersion}", + + // support + supportAnnotations : "com.android.support:support-annotations:${supportLibVersion}", + supportAppcompatV7 : "com.android.support:appcompat-v7:${supportLibVersion}", + supportFragmentV4 : "com.android.support:support-fragment:${supportLibVersion}", + supportDesign : "com.android.support:design:${supportLibVersion}", + supportRecyclerView : "com.android.support:recyclerview-v7:${supportLibVersion}", + + // square crew + timber : 'com.jakewharton.timber:timber:4.5.1', + okhttp3 : 'com.squareup.okhttp3:okhttp:3.9.1', + leakCanaryDebug : "com.squareup.leakcanary:leakcanary-android:${leakCanaryVersion}", + leakCanaryRelease : "com.squareup.leakcanary:leakcanary-android-no-op:${leakCanaryVersion}" + ] +} \ 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 = "\n" + + "\n" + + " " + mapboxAccessToken + "\n" + + "" + 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("© 2015–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 -- cgit v1.2.1