From d5f0fb156776a16caf98617f2c61f13ee4b0ab23 Mon Sep 17 00:00:00 2001 From: John Carlson Date: Mon, 26 Apr 2021 10:20:30 -0500 Subject: [PATCH] Updates and remove gcm module --- bolts-tasks/build.gradle | 3 +- build.gradle | 11 +-- coroutines/build.gradle | 4 +- facebook/build.gradle | 6 +- fcm/build.gradle | 4 +- fcm/src/main/java/com/parse/fcm/ParseFCM.java | 2 +- gcm/.gitignore | 1 - gcm/README.md | 85 ---------------- gcm/build.gradle | 40 -------- gcm/proguard-rules.pro | 21 ---- gcm/src/main/AndroidManifest.xml | 18 ---- gcm/src/main/java/com/parse/gcm/ParseGCM.java | 97 ------------------- .../ParseGCMInstanceIDListenerService.java | 15 --- .../com/parse/gcm/ParseGCMJobService.java | 87 ----------------- .../parse/gcm/ParseGCMListenerService.java | 34 ------- google/build.gradle | 4 +- gradle/wrapper/gradle-wrapper.properties | 2 +- ktx/build.gradle | 2 - parse/build.gradle | 36 +++---- rxjava/build.gradle | 4 +- settings.gradle | 2 +- twitter/build.gradle | 6 +- 22 files changed, 36 insertions(+), 448 deletions(-) delete mode 100644 gcm/.gitignore delete mode 100644 gcm/README.md delete mode 100644 gcm/build.gradle delete mode 100644 gcm/proguard-rules.pro delete mode 100644 gcm/src/main/AndroidManifest.xml delete mode 100644 gcm/src/main/java/com/parse/gcm/ParseGCM.java delete mode 100644 gcm/src/main/java/com/parse/gcm/ParseGCMInstanceIDListenerService.java delete mode 100644 gcm/src/main/java/com/parse/gcm/ParseGCMJobService.java delete mode 100644 gcm/src/main/java/com/parse/gcm/ParseGCMListenerService.java diff --git a/bolts-tasks/build.gradle b/bolts-tasks/build.gradle index 22bcb8bdb..6e7db14c3 100644 --- a/bolts-tasks/build.gradle +++ b/bolts-tasks/build.gradle @@ -4,7 +4,6 @@ // LICENSE file in the root directory of this source tree. apply plugin: 'java' -apply plugin: 'maven' configurations { provided @@ -18,7 +17,7 @@ sourceSets { dependencies { provided 'com.google.android:android:4.1.1.4' - testImplementation 'junit:junit:4.12' + testImplementation 'junit:junit:4.13.2' } diff --git a/build.gradle b/build.gradle index 586f69f2c..7af27442f 100644 --- a/build.gradle +++ b/build.gradle @@ -1,25 +1,24 @@ buildscript { - ext.kotlin_version = "1.4.10" + ext.kotlin_version = "1.4.32" repositories { google() - jcenter() + mavenCentral() } dependencies { - classpath "com.android.tools.build:gradle:3.6.2" + classpath "com.android.tools.build:gradle:4.1.3" classpath "org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.8.3" - classpath "com.github.dcendents:android-maven-gradle-plugin:2.1" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } plugins { - id "com.github.ben-manes.versions" version "0.28.0" + id "com.github.ben-manes.versions" version "0.38.0" } allprojects { repositories { google() - jcenter() + mavenCentral() } } diff --git a/coroutines/build.gradle b/coroutines/build.gradle index 00e93ae2a..c32c42fca 100644 --- a/coroutines/build.gradle +++ b/coroutines/build.gradle @@ -29,7 +29,7 @@ android { } ext { - coroutinesVersion = "1.3.9" + coroutinesVersion = "1.4.3" } dependencies { @@ -38,5 +38,3 @@ dependencies { api "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion" implementation project(":parse") } - -apply from: "https://raw.githubusercontent.com/Commit451/gradle-android-javadocs/1.1.0/gradle-android-javadocs.gradle" diff --git a/facebook/build.gradle b/facebook/build.gradle index 08627f308..18b60096b 100644 --- a/facebook/build.gradle +++ b/facebook/build.gradle @@ -20,12 +20,10 @@ android { } dependencies { - api "com.facebook.android:facebook-login:6.3.0" + api "com.facebook.android:facebook-login:9.1.0" implementation project(":parse") - testImplementation "junit:junit:4.13" + testImplementation "junit:junit:4.13.2" testImplementation "org.mockito:mockito-core:1.10.19" testImplementation "org.robolectric:robolectric:3.8" } - -apply from: "https://raw.githubusercontent.com/Commit451/gradle-android-javadocs/1.1.0/gradle-android-javadocs.gradle" diff --git a/fcm/build.gradle b/fcm/build.gradle index 48b8ff812..673b7fc13 100644 --- a/fcm/build.gradle +++ b/fcm/build.gradle @@ -28,8 +28,6 @@ android { } dependencies { - api "com.google.firebase:firebase-messaging:20.1.5" + api "com.google.firebase:firebase-messaging:21.1.0" implementation project(":parse") } - -apply from: "https://raw.githubusercontent.com/Commit451/gradle-android-javadocs/1.1.0/gradle-android-javadocs.gradle" diff --git a/fcm/src/main/java/com/parse/fcm/ParseFCM.java b/fcm/src/main/java/com/parse/fcm/ParseFCM.java index 5efd90bad..fcea28400 100644 --- a/fcm/src/main/java/com/parse/fcm/ParseFCM.java +++ b/fcm/src/main/java/com/parse/fcm/ParseFCM.java @@ -17,7 +17,7 @@ public class ParseFCM { static final String TAG = "ParseFCM"; - private static final String PUSH_TYPE = "gcm"; // Backwards compatability with Parse servers + private static final String PUSH_TYPE = "gcm"; // Backwards compatibility with Parse servers /** * You can call this manually if you are overriding the {@link com.google.firebase.messaging.FirebaseMessagingService} diff --git a/gcm/.gitignore b/gcm/.gitignore deleted file mode 100644 index 796b96d1c..000000000 --- a/gcm/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/gcm/README.md b/gcm/README.md deleted file mode 100644 index 825f97307..000000000 --- a/gcm/README.md +++ /dev/null @@ -1,85 +0,0 @@ -# Parse SDK Android GCM -GCM support for Parse Android apps - -## Deprecated -Please note that GCM is deprecated in favor of FCM. This module exists as a backwards compatible solution for projects already using GCM. New apps should instead use FCM. Note that if your app targets Android Q or later, [GCM will not function](https://developers.google.com/cloud-messaging/faq) - -## Dependency - -After including JitPack: -```gradle -dependencies { - implementation "com.github.parse-community.Parse-SDK-Android:gcm:latest.version.here" -} -``` - -You will then need to register some things in your manifest, firstly, the GCM sender ID: -```xml - -``` -The sender ID should be all numbers. Make sure you are keeping the `id:` in the front. - -Next you will register the GcmReceiver: -```xml - - - - - - -``` -And to listen for the pushes from GCM: -```xml - - - - - -``` -And finally, to register the device for GCM pushes: -```xml - - - - - -``` - -After these services are registered in the Manifest, you then need to register your push broadcast receiver: -```xml - - - - - - - -``` - -After this, you are all set. Adding the `parse-gcm-android` package will include a [ParseGCMJobService](https://github.com/parse-community/Parse-SDK-Android/blob/master/gcm/src/main/java/com/parse/gcm/ParseGCMJobService.java) in the `AndroidManifest.xml` file that will register for a GCM token when the app starts. You should see `ParseGCM: GCM registration success` messages assuming you have enabled logging: - -```java -Parse.setLogLevel(Parse.LOG_LEVEL_DEBUG); -``` - -## Custom Notifications -If you need to customize the notification that is sent out from a push, you can do so easily by extending `ParsePushBroadcastReceiver` with your own class and registering it instead in the Manifest. - -## License - Copyright (c) 2015-present, Parse, LLC. - All rights reserved. - - This source code is licensed under the BSD-style license found in the - LICENSE file in the root directory of this source tree. An additional grant - of patent rights can be found in the PATENTS file in the same directory. diff --git a/gcm/build.gradle b/gcm/build.gradle deleted file mode 100644 index 4da70e8f2..000000000 --- a/gcm/build.gradle +++ /dev/null @@ -1,40 +0,0 @@ -apply plugin: "com.android.library" - -android { - compileSdkVersion rootProject.ext.compileSdkVersion - - defaultConfig { - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 - versionName "1.0" - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - - } - - packagingOptions { - exclude "**/BuildConfig.class" - } - - lintOptions { - abortOnError false - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" - } - } - -} - -dependencies { - // last version for GCM to be supported - api "com.google.android.gms:play-services-gcm:12.0.1" - api "com.firebase:firebase-jobdispatcher:0.8.6" - implementation project(":parse") -} - -apply from: "https://raw.githubusercontent.com/Commit451/gradle-android-javadocs/1.1.0/gradle-android-javadocs.gradle" diff --git a/gcm/proguard-rules.pro b/gcm/proguard-rules.pro deleted file mode 100644 index f1b424510..000000000 --- a/gcm/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile diff --git a/gcm/src/main/AndroidManifest.xml b/gcm/src/main/AndroidManifest.xml deleted file mode 100644 index 2c9bcc51c..000000000 --- a/gcm/src/main/AndroidManifest.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/gcm/src/main/java/com/parse/gcm/ParseGCM.java b/gcm/src/main/java/com/parse/gcm/ParseGCM.java deleted file mode 100644 index 699e5015c..000000000 --- a/gcm/src/main/java/com/parse/gcm/ParseGCM.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2015-present, Parse, LLC. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ -package com.parse.gcm; - -import android.content.Context; -import android.os.Bundle; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.firebase.jobdispatcher.FirebaseJobDispatcher; -import com.firebase.jobdispatcher.GooglePlayDriver; -import com.firebase.jobdispatcher.Job; -import com.parse.ManifestInfo; -import com.parse.PLog; - -/** - * Entry point into setting up Parse GCM Push - */ -public class ParseGCM { - - static final String TAG = "ParseGCM"; - - private static final String SENDER_ID_EXTRA = "com.parse.push.gcm_sender_id"; - - /** - * Register your app to start receiving GCM pushes - * - * @param context context - */ - public static void register(@NonNull Context context) { - //kicks off the background job - PLog.d(TAG, "Scheduling job to register Parse GCM"); - FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(context.getApplicationContext())); - Job job = ParseGCMJobService.createJob(dispatcher, gcmSenderFromManifest(context)); - dispatcher.mustSchedule(job); - } - - @Nullable - private static String gcmSenderFromManifest(Context context) { - // Look for an element like this as a child of the element: - // - // - // - // The reason why the "id:" prefix is necessary is because Android treats any metadata value - // that is a string of digits as an integer. So the call to Bundle.getString() will actually - // return null for `android:value="567327206255"`. Additionally, Bundle.getInteger() returns - // a 32-bit integer. For `android:value="567327206255"`, this returns a truncated integer - // because 567327206255 is larger than the largest 32-bit integer. - Bundle metaData = ManifestInfo.getApplicationMetadata(context); - String senderID = null; - - if (metaData != null) { - Object senderIDExtra = metaData.get(SENDER_ID_EXTRA); - - if (senderIDExtra != null) { - senderID = actualSenderIDFromExtra(senderIDExtra); - - if (senderID == null) { - PLog.e(TAG, "Found " + SENDER_ID_EXTRA + " element with value \"" + - senderIDExtra.toString() + "\", but the value is missing the expected \"id:\" " + - "prefix."); - return null; - } - } - } - - if (senderID == null) { - PLog.e(TAG, "You must provide " + SENDER_ID_EXTRA + " in your AndroidManifest.xml\n" + - "Make sure to prefix with the value with id:\n\n" + - "\" />"); - return null; - } - return senderID; - } - - private static String actualSenderIDFromExtra(Object senderIDExtra) { - if (!(senderIDExtra instanceof String)) { - return null; - } - - String senderID = (String) senderIDExtra; - if (!senderID.startsWith("id:")) { - return null; - } - - return senderID.substring(3); - } -} diff --git a/gcm/src/main/java/com/parse/gcm/ParseGCMInstanceIDListenerService.java b/gcm/src/main/java/com/parse/gcm/ParseGCMInstanceIDListenerService.java deleted file mode 100644 index fe371a989..000000000 --- a/gcm/src/main/java/com/parse/gcm/ParseGCMInstanceIDListenerService.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.parse.gcm; - -import com.google.android.gms.iid.InstanceIDListenerService; - -/** - * Listens for GCM token refreshes and kicks off a background job to save the token - */ -public class ParseGCMInstanceIDListenerService extends InstanceIDListenerService { - - @Override - public void onTokenRefresh() { - super.onTokenRefresh(); - ParseGCM.register(getApplicationContext()); - } -} diff --git a/gcm/src/main/java/com/parse/gcm/ParseGCMJobService.java b/gcm/src/main/java/com/parse/gcm/ParseGCMJobService.java deleted file mode 100644 index 113d935f7..000000000 --- a/gcm/src/main/java/com/parse/gcm/ParseGCMJobService.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2015-present, Parse, LLC. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ -package com.parse.gcm; - -import android.os.Bundle; - -import com.firebase.jobdispatcher.Constraint; -import com.firebase.jobdispatcher.FirebaseJobDispatcher; -import com.firebase.jobdispatcher.Job; -import com.firebase.jobdispatcher.JobParameters; -import com.firebase.jobdispatcher.JobService; -import com.firebase.jobdispatcher.RetryStrategy; -import com.google.android.gms.gcm.GoogleCloudMessaging; -import com.google.android.gms.iid.InstanceID; -import com.parse.PLog; -import com.parse.ParseInstallation; - -import java.util.concurrent.Callable; - -import com.parse.boltsinternal.Task; - -/** - * Handles saving the GCM token to the Parse Installation - */ -public class ParseGCMJobService extends JobService { - - private static final String JOB_TAG_REGISTER = "register"; - private static final String KEY_GCM_SENDER_ID = "gcm_sender_id"; - private static final String PUSH_TYPE = "gcm"; - - static Job createJob(FirebaseJobDispatcher dispatcher, String gcmSenderId) { - Bundle extras = new Bundle(); - extras.putString(KEY_GCM_SENDER_ID, gcmSenderId); - return dispatcher.newJobBuilder() - .setExtras(extras) - .setRecurring(false) - .setReplaceCurrent(true) - // retry with exponential backoff - .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL) - .setConstraints( - // only run on a network - Constraint.ON_ANY_NETWORK - ) - .setService(ParseGCMJobService.class) // the JobService that will be called - .setTag(JOB_TAG_REGISTER) // uniquely identifies the job - .build(); - } - - @Override - public boolean onStartJob(final JobParameters job) { - PLog.d(ParseGCM.TAG, "Updating GCM token"); - - Task.callInBackground(new Callable() { - @Override - public Void call() { - try { - InstanceID instanceID = InstanceID.getInstance(getApplicationContext()); - String senderId = job.getExtras().getString(KEY_GCM_SENDER_ID); - String token = instanceID.getToken(senderId, - GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); - ParseInstallation installation = ParseInstallation.getCurrentInstallation(); - installation.setDeviceToken(token); - //even though this is FCM, calling it gcm will work on the backend - installation.setPushType(PUSH_TYPE); - installation.save(); - PLog.d(ParseGCM.TAG, "GCM registration success"); - } catch (Exception e) { - PLog.e(ParseGCM.TAG, "GCM registration failed", e); - jobFinished(job, true); - } - return null; - } - }); - return true; // Answers the question: "Is there still work going on?" - } - - @Override - public boolean onStopJob(JobParameters job) { - return true; // Answers the question: "Should this job be retried?" - } -} diff --git a/gcm/src/main/java/com/parse/gcm/ParseGCMListenerService.java b/gcm/src/main/java/com/parse/gcm/ParseGCMListenerService.java deleted file mode 100644 index e379a531e..000000000 --- a/gcm/src/main/java/com/parse/gcm/ParseGCMListenerService.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.parse.gcm; - -import android.os.Bundle; - -import com.google.android.gms.gcm.GcmListenerService; -import com.parse.PLog; -import com.parse.PushRouter; - -import org.json.JSONException; -import org.json.JSONObject; - -public class ParseGCMListenerService extends GcmListenerService { - - @Override - public void onMessageReceived(String s, Bundle bundle) { - super.onMessageReceived(s, bundle); - String pushId = bundle.getString("push_id"); - String timestamp = bundle.getString("time"); - String dataString = bundle.getString("data"); - String channel = bundle.getString("channel"); - - JSONObject data = null; - if (dataString != null) { - try { - data = new JSONObject(dataString); - } catch (JSONException e) { - PLog.e(ParseGCM.TAG, "Ignoring push because of JSON exception while processing: " + dataString, e); - return; - } - } - - PushRouter.getInstance().handlePush(pushId, timestamp, channel, data); - } -} diff --git a/google/build.gradle b/google/build.gradle index 32a100232..d163ebf0f 100644 --- a/google/build.gradle +++ b/google/build.gradle @@ -22,8 +22,6 @@ android { dependencies { api "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - api "com.google.android.gms:play-services-auth:18.0.0" + api "com.google.android.gms:play-services-auth:19.0.0" implementation project(":parse") } - -apply from: "https://raw.githubusercontent.com/Commit451/gradle-android-javadocs/1.1.0/gradle-android-javadocs.gradle" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0ebb3108e..3c4101c3e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/ktx/build.gradle b/ktx/build.gradle index b60b1fcd1..b1e17de5d 100644 --- a/ktx/build.gradle +++ b/ktx/build.gradle @@ -36,5 +36,3 @@ dependencies { api "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation project(":parse") } - -apply from: "https://raw.githubusercontent.com/Commit451/gradle-android-javadocs/1.1.0/gradle-android-javadocs.gradle" diff --git a/parse/build.gradle b/parse/build.gradle index 303f7a27a..33a24486e 100644 --- a/parse/build.gradle +++ b/parse/build.gradle @@ -33,8 +33,8 @@ ext { } dependencies { - api "androidx.annotation:annotation:1.1.0" - api "androidx.core:core:1.2.0" + api "androidx.annotation:annotation:1.2.0" + api "androidx.core:core:1.3.2" api "com.squareup.okhttp3:okhttp:$okhttpVersion" api project(':bolts-tasks') @@ -56,21 +56,25 @@ task jacocoTestReport(type: JacocoReport, dependsOn: "testDebugUnitTest") { group = "Reporting" description = "Generate Jacoco coverage reports" - classDirectories = fileTree( - dir: "${buildDir}/intermediates/classes/debug", - excludes: ['**/R.class', - '**/R$*.class', - '**/*$ViewInjector*.*', - '**/BuildConfig.*', - '**/Manifest*.*'] + getClassDirectories().setFrom( + fileTree( + dir: "${buildDir}/intermediates/classes/debug", + excludes: ['**/R.class', + '**/R$*.class', + '**/*$ViewInjector*.*', + '**/BuildConfig.*', + '**/Manifest*.*'] + ) ) - sourceDirectories = files("${buildDir.parent}/src/main/java") - additionalSourceDirs = files([ - "${buildDir}/generated/source/buildConfig/debug", - "${buildDir}/generated/source/r/debug" - ]) - executionData = files("${buildDir}/jacoco/testDebugUnitTest.exec") + sourceDirectories.setFrom(files("${buildDir.parent}/src/main/java")) + additionalSourceDirs.setFrom( + files([ + "${buildDir}/generated/source/buildConfig/debug", + "${buildDir}/generated/source/r/debug" + ]) + ) + executionData.setFrom(files("${buildDir}/jacoco/testDebugUnitTest.exec")) reports { xml.enabled = true @@ -85,5 +89,3 @@ task jacocoTestReport(type: JacocoReport, dependsOn: "testDebugUnitTest") { coveralls.jacocoReportPath = "${buildDir}/reports/jacoco/jacocoTestReport/jacocoTestReport.xml" //endregion - -apply from: "https://raw.githubusercontent.com/Commit451/gradle-android-javadocs/1.1.0/gradle-android-javadocs.gradle" diff --git a/rxjava/build.gradle b/rxjava/build.gradle index e1c160fc3..271d0fde4 100644 --- a/rxjava/build.gradle +++ b/rxjava/build.gradle @@ -30,8 +30,6 @@ android { dependencies { api "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - api "io.reactivex.rxjava3:rxjava:3.0.4" + api "io.reactivex.rxjava3:rxjava:3.0.11" implementation project(":parse") } - -apply from: "https://raw.githubusercontent.com/Commit451/gradle-android-javadocs/1.1.0/gradle-android-javadocs.gradle" diff --git a/settings.gradle b/settings.gradle index 93b9b130f..9a8336c06 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,2 @@ -include ':parse', ':fcm', ':gcm', ':ktx', ':coroutines', 'rxjava', ':google', ':facebook', ':twitter', ':bolts-tasks' +include ':parse', ':fcm', ':ktx', ':coroutines', 'rxjava', ':google', ':facebook', ':twitter', ':bolts-tasks' diff --git a/twitter/build.gradle b/twitter/build.gradle index 76e3a3404..746c57516 100644 --- a/twitter/build.gradle +++ b/twitter/build.gradle @@ -20,13 +20,11 @@ android { } dependencies { - api "androidx.appcompat:appcompat:1.1.0" + api "androidx.appcompat:appcompat:1.2.0" api "oauth.signpost:signpost-core:1.2.1.2" api "se.akerfeldt:okhttp-signpost:1.1.0" implementation project(":parse") - testImplementation "junit:junit:4.13" + testImplementation "junit:junit:4.13.2" testImplementation "org.mockito:mockito-core:1.10.19" } - -apply from: "https://raw.githubusercontent.com/Commit451/gradle-android-javadocs/1.1.0/gradle-android-javadocs.gradle"