From a2408943631bbce8bee1a50639cfca36d43f4806 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Fri, 18 Jan 2019 13:44:06 +0100 Subject: Bring back "[android] - add library loading to peer objects" and required unit test setup --- platform/android/MapboxGLAndroidSDK/build.gradle | 1 + .../com/mapbox/mapboxsdk/style/layers/Layer.java | 5 ++ .../com/mapbox/mapboxsdk/style/sources/Source.java | 6 ++ .../gradle/gradle-tests-staticblockremover.gradle | 66 ++++++++++++++++++++++ 4 files changed, 78 insertions(+) create mode 100644 platform/android/gradle/gradle-tests-staticblockremover.gradle diff --git a/platform/android/MapboxGLAndroidSDK/build.gradle b/platform/android/MapboxGLAndroidSDK/build.gradle index 25008de919..ae81203fc3 100644 --- a/platform/android/MapboxGLAndroidSDK/build.gradle +++ b/platform/android/MapboxGLAndroidSDK/build.gradle @@ -164,4 +164,5 @@ configurations { 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-dependencies-graph.gradle" \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Layer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Layer.java index 75388ec32c..d290c093a7 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Layer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Layer.java @@ -5,6 +5,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.google.gson.JsonElement; +import com.mapbox.mapboxsdk.LibraryLoader; import com.mapbox.mapboxsdk.style.expressions.Expression; import com.mapbox.mapboxsdk.style.types.Formatted; import com.mapbox.mapboxsdk.utils.ThreadUtils; @@ -20,6 +21,10 @@ public abstract class Layer { private boolean invalidated; private boolean detached; + static { + LibraryLoader.load(); + } + @Keep protected Layer(long nativePtr) { checkThread(); diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/Source.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/Source.java index 6e8c521a78..9667a33e09 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/Source.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/Source.java @@ -3,6 +3,8 @@ package com.mapbox.mapboxsdk.style.sources; import android.support.annotation.Keep; import android.support.annotation.NonNull; + +import com.mapbox.mapboxsdk.LibraryLoader; import com.mapbox.mapboxsdk.utils.ThreadUtils; /** @@ -15,6 +17,10 @@ public abstract class Source { protected boolean detached; + static { + LibraryLoader.load(); + } + /** * Internal use * diff --git a/platform/android/gradle/gradle-tests-staticblockremover.gradle b/platform/android/gradle/gradle-tests-staticblockremover.gradle new file mode 100644 index 0000000000..b29ec3b0e7 --- /dev/null +++ b/platform/android/gradle/gradle-tests-staticblockremover.gradle @@ -0,0 +1,66 @@ +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 SOURCE = "com.mapbox.mapboxsdk.style.sources.Source"; + private static final LAYER = "com.mapbox.mapboxsdk.style.layers.Layer"; + 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"; + private static final List excludes = new ArrayList<>(); + + static { + excludes.add(SOURCE) + excludes.add(LAYER) + excludes.add(NATIVE_CONNECTIVITY_LISTENER) + excludes.add(OFFLINE_MANAGER) + excludes.add(OFFLINE_REGION) + } + + 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(); + return excludes.contains(name); + } +} + +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 { + compileDebugUnitTestJavaWithJavac.doLast { + tasks.removeStatic.execute() + } +} \ No newline at end of file -- cgit v1.2.1