diff --git a/build.gradle b/build.gradle index 1e51f78801a..ffe066ff25e 100644 --- a/build.gradle +++ b/build.gradle @@ -50,7 +50,7 @@ ext { errorproneVersion = '2.3.2' errorproneJavacVersion = '9+181-r4173-1' googleTruthVersion = '0.45' - robolectricVersion = '4.1' + robolectricVersion = '4.3.1' } apply plugin: com.google.firebase.gradle.plugins.publish.PublishingPlugin diff --git a/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/ClosureUtil.java b/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/ClosureUtil.java new file mode 100644 index 00000000000..5a22a81520d --- /dev/null +++ b/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/ClosureUtil.java @@ -0,0 +1,34 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.firebase.gradle.plugins; + +import groovy.lang.Closure; +import java.util.function.Consumer; + +public final class ClosureUtil { + + private static final Object FAKE_THIS = new Object(); + + private ClosureUtil() {} + + /** Create a groovy closure backed by a lambda. */ + public static Closure closureOf(Consumer action) { + return new Closure(FAKE_THIS) { + void doCall(T t) { + action.accept(t); + } + }; + } +} diff --git a/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.java b/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.java index e58b2d90b5a..1a1d3d6acc8 100644 --- a/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.java +++ b/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.java @@ -14,6 +14,8 @@ package com.google.firebase.gradle.plugins; +import static com.google.firebase.gradle.plugins.ClosureUtil.closureOf; + import com.android.build.gradle.LibraryExtension; import com.android.build.gradle.api.AndroidSourceSet; import com.google.common.collect.ImmutableList; @@ -51,6 +53,20 @@ public void apply(Project project) { .getByName("release") .setSigningConfig(types.getByName("debug").getSigningConfig())); + // see https://github.com/robolectric/robolectric/issues/5456 + android.testOptions( + options -> + options + .getUnitTests() + .all( + closureOf( + test -> { + test.systemProperty("robolectric.dependency.repo.id", "central"); + test.systemProperty( + "robolectric.dependency.repo.url", "https://repo1.maven.org/maven2"); + test.systemProperty("javax.net.ssl.trustStoreType", "JKS"); + }))); + // skip debug tests in CI // TODO(vkryachko): provide ability for teams to control this if needed if (System.getenv().containsKey("FIREBASE_CI")) { diff --git a/buildSrc/src/test/groovy/com/google/firebase/gradle/plugins/license/LicenseResolverPluginSpec.groovy b/buildSrc/src/test/groovy/com/google/firebase/gradle/plugins/license/LicenseResolverPluginSpec.groovy index 23c0a2a7745..45eb09c8c15 100644 --- a/buildSrc/src/test/groovy/com/google/firebase/gradle/plugins/license/LicenseResolverPluginSpec.groovy +++ b/buildSrc/src/test/groovy/com/google/firebase/gradle/plugins/license/LicenseResolverPluginSpec.groovy @@ -29,7 +29,7 @@ class LicenseResolverPluginSpec extends Specification { @Rule TemporaryFolder testProjectDir = new TemporaryFolder() File buildFile - final String buildConfig = """ + String buildConfig = """ buildscript { repositories { google() diff --git a/buildSrc/src/test/groovy/com/google/firebase/gradle/plugins/publish/PublishingPluginSpec.groovy b/buildSrc/src/test/groovy/com/google/firebase/gradle/plugins/publish/PublishingPluginSpec.groovy index df5b1206bcf..feccf67dbd5 100644 --- a/buildSrc/src/test/groovy/com/google/firebase/gradle/plugins/publish/PublishingPluginSpec.groovy +++ b/buildSrc/src/test/groovy/com/google/firebase/gradle/plugins/publish/PublishingPluginSpec.groovy @@ -89,7 +89,7 @@ class PublishingPluginSpec extends Specification { List subprojects = [] - final String rootProject = """ + String rootProject = """ buildscript { repositories { google() diff --git a/firebase-abt/firebase-abt.gradle b/firebase-abt/firebase-abt.gradle index 13ab5423d81..617c31f750e 100644 --- a/firebase-abt/firebase-abt.gradle +++ b/firebase-abt/firebase-abt.gradle @@ -91,7 +91,7 @@ dependencies { testImplementation 'com.google.truth:truth:0.44' testImplementation 'junit:junit:4.13-beta-2' testImplementation 'androidx.test:runner:1.2.0' - testImplementation 'org.robolectric:robolectric:4.2' + testImplementation "org.robolectric:robolectric:$robolectricVersion" testImplementation 'io.grpc:grpc-testing:1.12.0' testImplementation 'androidx.test.espresso:espresso-core:3.2.0' diff --git a/firebase-config/bandwagoner/bandwagoner.gradle b/firebase-config/bandwagoner/bandwagoner.gradle index f51f035471e..f8c0da4139d 100644 --- a/firebase-config/bandwagoner/bandwagoner.gradle +++ b/firebase-config/bandwagoner/bandwagoner.gradle @@ -18,7 +18,7 @@ apply plugin: 'com.android.application' apply plugin: com.google.firebase.gradle.plugins.ci.device.FirebaseTestLabPlugin android { - compileSdkVersion 28 + compileSdkVersion project.targetSdkVersion lintOptions { abortOnError false } @@ -27,7 +27,7 @@ android { defaultConfig { applicationId "com.googletest.firebase.remoteconfig.bandwagoner" minSdkVersion 16 - targetSdkVersion 28 + targetSdkVersion project.targetSdkVersion versionCode 1 versionName "1.0" multiDexEnabled true diff --git a/firebase-config/firebase-config.gradle b/firebase-config/firebase-config.gradle index 8fffaad6da0..dc8531303f4 100644 --- a/firebase-config/firebase-config.gradle +++ b/firebase-config/firebase-config.gradle @@ -97,7 +97,7 @@ dependencies { testImplementation 'org.mockito:mockito-core:2.25.0' testImplementation 'com.google.truth:truth:0.44' testImplementation 'junit:junit:4.12' - testImplementation 'org.robolectric:robolectric:4.2' + testImplementation "org.robolectric:robolectric:$robolectricVersion" testImplementation "org.skyscreamer:jsonassert:1.5.0" androidTestImplementation 'androidx.test:runner:1.2.0' diff --git a/firebase-crashlytics-ndk/firebase-crashlytics-ndk.gradle b/firebase-crashlytics-ndk/firebase-crashlytics-ndk.gradle index ae7b93c836f..e998be79321 100644 --- a/firebase-crashlytics-ndk/firebase-crashlytics-ndk.gradle +++ b/firebase-crashlytics-ndk/firebase-crashlytics-ndk.gradle @@ -21,17 +21,15 @@ firebaseLibrary { publishJavadoc = false } -def androidVersion = 28 - android { adbOptions { timeOutInMs 60 * 1000 } - compileSdkVersion androidVersion + compileSdkVersion project.targetSdkVersion defaultConfig { minSdkVersion 16 - targetSdkVersion androidVersion + targetSdkVersion project.targetSdkVersion versionName version consumerProguardFiles 'firebase-crashlytics-ndk-proguard.txt' @@ -63,7 +61,7 @@ dependencies { implementation 'com.google.android.gms:play-services-basement:17.0.0' testImplementation 'androidx.test:runner:1.2.0' - testImplementation 'org.robolectric:robolectric:4.2' + testImplementation "org.robolectric:robolectric:$robolectricVersion" testImplementation 'junit:junit:4.12' testImplementation 'org.mockito:mockito-core:1.10.19' diff --git a/firebase-crashlytics/firebase-crashlytics.gradle b/firebase-crashlytics/firebase-crashlytics.gradle index f7362ea8a80..ee24b51f057 100644 --- a/firebase-crashlytics/firebase-crashlytics.gradle +++ b/firebase-crashlytics/firebase-crashlytics.gradle @@ -20,17 +20,15 @@ firebaseLibrary { testLab.enabled = true } -def androidVersion = 28 - android { adbOptions { timeOutInMs 60 * 1000 } - compileSdkVersion androidVersion + compileSdkVersion project.targetSdkVersion defaultConfig { minSdkVersion 16 - targetSdkVersion androidVersion + targetSdkVersion project.targetSdkVersion versionName version multiDexEnabled true @@ -72,7 +70,7 @@ dependencies { annotationProcessor 'com.google.auto.value:auto-value:1.6.5' testImplementation 'androidx.test:runner:1.2.0' - testImplementation 'org.robolectric:robolectric:4.2' + testImplementation "org.robolectric:robolectric:$robolectricVersion" testImplementation 'junit:junit:4.12' testImplementation 'org.mockito:mockito-core:1.10.19' diff --git a/firebase-database/src/main/java/com/google/firebase/database/tubesock/WebSocket.java b/firebase-database/src/main/java/com/google/firebase/database/tubesock/WebSocket.java index c996a16bf23..526b6a6dba3 100644 --- a/firebase-database/src/main/java/com/google/firebase/database/tubesock/WebSocket.java +++ b/firebase-database/src/main/java/com/google/firebase/database/tubesock/WebSocket.java @@ -14,7 +14,6 @@ package com.google.firebase.database.tubesock; -import android.net.SSLCertificateSocketFactory; import android.net.SSLSessionCache; import androidx.annotation.Nullable; import com.google.firebase.database.connection.ConnectionContext; @@ -314,8 +313,10 @@ private Socket createSocket() { logger.debug("Failed to initialize SSL session cache", e); } try { + @SuppressWarnings("deprecation") SocketFactory factory = - SSLCertificateSocketFactory.getDefault(SSL_HANDSHAKE_TIMEOUT_MS, sessionCache); + android.net.SSLCertificateSocketFactory.getDefault( + SSL_HANDSHAKE_TIMEOUT_MS, sessionCache); SSLSocket sslSocket = (SSLSocket) factory.createSocket(host, port); // TODO: the default hostname verifier on the JVM always returns false. // For the JVM we will need a different solution. diff --git a/firebase-firestore/firebase-firestore.gradle b/firebase-firestore/firebase-firestore.gradle index 33a66743644..c30ab8e4cdc 100644 --- a/firebase-firestore/firebase-firestore.gradle +++ b/firebase-firestore/firebase-firestore.gradle @@ -140,7 +140,7 @@ dependencies { testImplementation 'junit:junit:4.12' testImplementation 'androidx.test:core:1.2.0' testImplementation 'org.mockito:mockito-core:2.25.0' - testImplementation ('org.robolectric:robolectric:4.2') { + testImplementation ("org.robolectric:robolectric:$robolectricVersion") { exclude group: 'com.google.protobuf', module: 'protobuf-java' } testImplementation "com.google.truth:truth:$googleTruthVersion" diff --git a/firebase-firestore/ktx/ktx.gradle b/firebase-firestore/ktx/ktx.gradle index 58e8a62cd6d..da9af0dfc6b 100644 --- a/firebase-firestore/ktx/ktx.gradle +++ b/firebase-firestore/ktx/ktx.gradle @@ -23,7 +23,7 @@ firebaseLibrary { } android { - compileSdkVersion 28 + compileSdkVersion project.targetSdkVersion defaultConfig { minSdkVersion project.minSdkVersion multiDexEnabled true diff --git a/firebase-firestore/src/main/java/com/google/firebase/firestore/remote/AndroidConnectivityMonitor.java b/firebase-firestore/src/main/java/com/google/firebase/firestore/remote/AndroidConnectivityMonitor.java index 228aabbd33a..9a1d17d7f29 100644 --- a/firebase-firestore/src/main/java/com/google/firebase/firestore/remote/AndroidConnectivityMonitor.java +++ b/firebase-firestore/src/main/java/com/google/firebase/firestore/remote/AndroidConnectivityMonitor.java @@ -23,7 +23,6 @@ import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.Network; -import android.net.NetworkInfo; import android.os.Build; import androidx.annotation.Nullable; import com.google.firebase.firestore.util.Consumer; @@ -124,10 +123,11 @@ private class NetworkReceiver extends BroadcastReceiver { private boolean isConnected = false; @Override + @SuppressWarnings("deprecation") public void onReceive(Context context, Intent intent) { ConnectivityManager conn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - NetworkInfo networkInfo = conn.getActiveNetworkInfo(); + android.net.NetworkInfo networkInfo = conn.getActiveNetworkInfo(); boolean wasConnected = isConnected; isConnected = networkInfo != null && networkInfo.isConnected(); if (isConnected && !wasConnected) { diff --git a/firebase-inappmessaging-display/firebase-inappmessaging-display.gradle b/firebase-inappmessaging-display/firebase-inappmessaging-display.gradle index c011a2f257a..ede75645915 100644 --- a/firebase-inappmessaging-display/firebase-inappmessaging-display.gradle +++ b/firebase-inappmessaging-display/firebase-inappmessaging-display.gradle @@ -88,7 +88,7 @@ dependencies { annotationProcessor 'com.google.auto.value:auto-value:1.6.5' annotationProcessor 'com.ryanharter.auto.value:auto-value-parcel:0.2.6' - testImplementation "org.robolectric:robolectric:4.2" + testImplementation "org.robolectric:robolectric:$robolectricVersion" testImplementation "junit:junit:4.12" testImplementation "org.mockito:mockito-core:2.25.0" testImplementation "com.google.truth:truth:1.0" diff --git a/firebase-inappmessaging-display/ktx/ktx.gradle b/firebase-inappmessaging-display/ktx/ktx.gradle index 304b56594e6..3ffc2c77b2d 100644 --- a/firebase-inappmessaging-display/ktx/ktx.gradle +++ b/firebase-inappmessaging-display/ktx/ktx.gradle @@ -38,6 +38,7 @@ android { srcDir 'src/test/kotlin' } } + testOptions.unitTests.includeAndroidResources = true } diff --git a/firebase-inappmessaging/firebase-inappmessaging.gradle b/firebase-inappmessaging/firebase-inappmessaging.gradle index c65badd342d..4084732eacd 100644 --- a/firebase-inappmessaging/firebase-inappmessaging.gradle +++ b/firebase-inappmessaging/firebase-inappmessaging.gradle @@ -144,7 +144,7 @@ dependencies { testImplementation "com.google.truth:truth:$googleTruthVersion" testImplementation 'junit:junit:4.12' testImplementation 'androidx.test:runner:1.2.0' - testImplementation ('org.robolectric:robolectric:4.2') { + testImplementation ("org.robolectric:robolectric:$robolectricVersion") { exclude group: 'com.google.protobuf', module: 'protobuf-java' } testImplementation 'io.grpc:grpc-testing:1.21.0' diff --git a/firebase-storage/src/main/java/com/google/firebase/storage/network/NetworkRequest.java b/firebase-storage/src/main/java/com/google/firebase/storage/network/NetworkRequest.java index f9d8c4c126c..fec125db034 100644 --- a/firebase-storage/src/main/java/com/google/firebase/storage/network/NetworkRequest.java +++ b/firebase-storage/src/main/java/com/google/firebase/storage/network/NetworkRequest.java @@ -18,7 +18,6 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.net.ConnectivityManager; -import android.net.NetworkInfo; import android.net.Uri; import android.text.TextUtils; import android.util.Log; @@ -224,6 +223,7 @@ public JSONObject getResultBody() { return resultBody; } + @SuppressWarnings("deprecation") public void performRequestStart(String token) { if (mException != null) { resultCode = INITIALIZATION_EXCEPTION; @@ -235,7 +235,7 @@ public void performRequestStart(String token) { } ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); + android.net.NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); if (networkInfo == null || !networkInfo.isConnected()) { resultCode = NETWORK_UNAVAILABLE; mException = new SocketException("Network subsystem is unavailable"); @@ -286,10 +286,11 @@ public void performRequest(@Nullable String authToken, @NonNull Context applicat performRequest(authToken); } + @SuppressWarnings("deprecation") private boolean ensureNetworkAvailable(Context context) { ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); + android.net.NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); if (networkInfo == null || !networkInfo.isConnected()) { mException = new SocketException("Network subsystem is unavailable"); resultCode = NETWORK_UNAVAILABLE; diff --git a/sdkProperties.gradle b/sdkProperties.gradle index 4b9b817acea..417372ecc34 100644 --- a/sdkProperties.gradle +++ b/sdkProperties.gradle @@ -13,6 +13,6 @@ // limitations under the License. ext { - targetSdkVersion = 28 + targetSdkVersion = 29 minSdkVersion = 14 } \ No newline at end of file diff --git a/smoke-tests/build.gradle b/smoke-tests/build.gradle index 7c3d75b76b7..90067c62e4d 100644 --- a/smoke-tests/build.gradle +++ b/smoke-tests/build.gradle @@ -31,7 +31,7 @@ buildscript { apply plugin: "com.android.application" android { - compileSdkVersion 28 + compileSdkVersion 29 defaultConfig { minSdkVersion 16 diff --git a/tools/errorprone/errorprone.gradle b/tools/errorprone/errorprone.gradle index 1b0de230fa5..f8be3518dbf 100644 --- a/tools/errorprone/errorprone.gradle +++ b/tools/errorprone/errorprone.gradle @@ -22,10 +22,5 @@ dependencies { testImplementation 'junit:junit:4.12' testImplementation 'com.google.errorprone:error_prone_test_helpers:2.3.3' - testCompile 'com.google.errorprone:javac:9+181-r4173-1' -} - - -test { - jvmArgs "-Xbootclasspath/p:${-> project.configurations.testCompile.find { it.name.startsWith("javac-") }}" + testImplementation 'com.google.errorprone:javac:9+181-r4173-1' } diff --git a/transport/transport-api/transport-api.gradle b/transport/transport-api/transport-api.gradle index 7219860df6f..d4bb3a1af10 100644 --- a/transport/transport-api/transport-api.gradle +++ b/transport/transport-api/transport-api.gradle @@ -21,10 +21,10 @@ firebaseLibrary{ } android { - compileSdkVersion 28 + compileSdkVersion project.targetSdkVersion defaultConfig { minSdkVersion 14 - targetSdkVersion 28 + targetSdkVersion project.targetSdkVersion testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/transport/transport-backend-cct/transport-backend-cct.gradle b/transport/transport-backend-cct/transport-backend-cct.gradle index b5f13683733..cbe0fc5bf5f 100644 --- a/transport/transport-backend-cct/transport-backend-cct.gradle +++ b/transport/transport-backend-cct/transport-backend-cct.gradle @@ -37,10 +37,10 @@ protobuf { } android { - compileSdkVersion 28 + compileSdkVersion project.targetSdkVersion defaultConfig { - minSdkVersion 14 - targetSdkVersion 28 + minSdkVersion project.minSdkVersion + targetSdkVersion project.targetSdkVersion testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" versionName version } @@ -70,7 +70,7 @@ dependencies { testImplementation 'com.github.tomakehurst:wiremock:2.26.3' //Android compatible version of Apache httpclient. testImplementation 'org.apache.httpcomponents:httpclient-android:4.3.5.1' - testImplementation 'org.robolectric:robolectric:4.3.1' + testImplementation "org.robolectric:robolectric:$robolectricVersion" testImplementation 'junit:junit:4.13-beta-2' androidTestImplementation 'androidx.test:runner:1.2.0' diff --git a/transport/transport-runtime/transport-runtime.gradle b/transport/transport-runtime/transport-runtime.gradle index c5ba8ae8956..a7b8d3fcbf0 100644 --- a/transport/transport-runtime/transport-runtime.gradle +++ b/transport/transport-runtime/transport-runtime.gradle @@ -35,10 +35,10 @@ firebaseLibrary { } android { - compileSdkVersion 28 + compileSdkVersion project.targetSdkVersion defaultConfig { - minSdkVersion 14 - targetSdkVersion 28 + minSdkVersion project.minSdkVersion + targetSdkVersion project.targetSdkVersion testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } compileOptions { @@ -52,7 +52,9 @@ android { } } } - testOptions.unitTests.includeAndroidResources = true + testOptions.unitTests { + includeAndroidResources = true + } } dependencies { @@ -69,7 +71,7 @@ dependencies { testImplementation "com.google.truth:truth:$googleTruthVersion" testImplementation 'androidx.test:core:1.2.0' testImplementation 'androidx.test.ext:junit:1.1.1' - testImplementation 'org.robolectric:robolectric:4.2' + testImplementation "org.robolectric:robolectric:$robolectricVersion" testImplementation 'org.mockito:mockito-core:2.25.0' androidTestImplementation 'junit:junit:4.13-beta-3'