Skip to content

Commit 4eea47f

Browse files
authored
Fix vendoring plugin issues in future AGP versions (#3995)
1. Transform jar inputs in addition to directory inputs. Future AGP will generate r_classes.jar instead of creating R classes in a directory. 2. Replace Lazy with Provider to avoid vendoring issues. It looks like AGP has stopped "transforming" test classes, so switching to Provider instead of `dagger.Lazy` to avoid the problem. It's not an issue since the injected classes are effectively singletons.
1 parent c4f03b6 commit 4eea47f

File tree

9 files changed

+35
-17
lines changed

9 files changed

+35
-17
lines changed

buildSrc/src/main/java/com/google/firebase/gradle/plugins/VendorPlugin.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,15 @@ class VendorTransform(
139139
Format.DIRECTORY)
140140
directoryInput.file.copyRecursively(directoryOutput, overwrite = true)
141141
}
142+
for (jarInput in input.jarInputs) {
143+
val jarOutput = transformInvocation.outputProvider.getContentLocation(
144+
jarInput.name,
145+
setOf(QualifiedContent.DefaultContentType.CLASSES),
146+
mutableSetOf(QualifiedContent.Scope.PROJECT),
147+
Format.JAR)
148+
149+
jarInput.file.copyTo(jarOutput, overwrite = true)
150+
}
142151
}
143152
return
144153
}
@@ -177,6 +186,9 @@ class VendorTransform(
177186
for (directoryInput in input.directoryInputs) {
178187
directoryInput.file.copyRecursively(unzippedDir)
179188
}
189+
for (jarInput in input.jarInputs) {
190+
unzipJar(jarInput.file, unzippedDir)
191+
}
180192
}
181193

182194
val ownPackageNames = inferPackages(unzippedDir)

firebase-inappmessaging/src/androidTest/java/com/google/firebase/inappmessaging/TestApiClientModule.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626
import com.google.firebase.inappmessaging.internal.injection.scopes.FirebaseAppScope;
2727
import com.google.firebase.inappmessaging.internal.time.Clock;
2828
import com.google.firebase.installations.FirebaseInstallationsApi;
29-
import dagger.Lazy;
3029
import dagger.Module;
3130
import dagger.Provides;
31+
import javax.inject.Provider;
3232
import javax.inject.Singleton;
3333

3434
/** Test bindings for API client */
@@ -77,7 +77,9 @@ TestDeviceHelper providesTestDeviceHelper() {
7777
@Provides
7878
@FirebaseAppScope
7979
ApiClient providesApiClient(
80-
Lazy<GrpcClient> grpcClient, Application application, ProviderInstaller providerInstaller) {
80+
Provider<GrpcClient> grpcClient,
81+
Application application,
82+
ProviderInstaller providerInstaller) {
8183
return new ApiClient(grpcClient, firebaseApp, application, clock, providerInstaller);
8284
}
8385
}

firebase-inappmessaging/src/main/java/com/google/firebase/inappmessaging/internal/ApiClient.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@
2727
import com.google.internal.firebase.inappmessaging.v1.sdkserving.ClientAppInfo;
2828
import com.google.internal.firebase.inappmessaging.v1.sdkserving.FetchEligibleCampaignsRequest;
2929
import com.google.internal.firebase.inappmessaging.v1.sdkserving.FetchEligibleCampaignsResponse;
30-
import dagger.Lazy;
3130
import java.util.Locale;
3231
import java.util.TimeZone;
3332
import java.util.concurrent.TimeUnit;
3433
import javax.annotation.Nullable;
34+
import javax.inject.Provider;
3535

3636
/**
3737
* Interface to speak to the fiam backend
@@ -43,14 +43,14 @@ public class ApiClient {
4343

4444
private static final String FETCHING_CAMPAIGN_MESSAGE = "Fetching campaigns from service.";
4545

46-
private final Lazy<GrpcClient> grpcClient;
46+
private final Provider<GrpcClient> grpcClient;
4747
private final FirebaseApp firebaseApp;
4848
private final Application application;
4949
private final Clock clock;
5050
private final ProviderInstaller providerInstaller;
5151

5252
public ApiClient(
53-
Lazy<GrpcClient> grpcClient,
53+
Provider<GrpcClient> grpcClient,
5454
FirebaseApp firebaseApp,
5555
Application application,
5656
Clock clock,

firebase-inappmessaging/src/main/java/com/google/firebase/inappmessaging/internal/injection/modules/ApiClientModule.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626
import com.google.firebase.inappmessaging.internal.injection.scopes.FirebaseAppScope;
2727
import com.google.firebase.inappmessaging.internal.time.Clock;
2828
import com.google.firebase.installations.FirebaseInstallationsApi;
29-
import dagger.Lazy;
3029
import dagger.Module;
3130
import dagger.Provides;
31+
import javax.inject.Provider;
3232

3333
/**
3434
* Provider for ApiClient
@@ -77,7 +77,9 @@ TestDeviceHelper providesTestDeviceHelper(SharedPreferencesUtils sharedPreferenc
7777
@Provides
7878
@FirebaseAppScope
7979
ApiClient providesApiClient(
80-
Lazy<GrpcClient> grpcClient, Application application, ProviderInstaller providerInstaller) {
80+
Provider<GrpcClient> grpcClient,
81+
Application application,
82+
ProviderInstaller providerInstaller) {
8183
return new ApiClient(grpcClient, firebaseApp, application, clock, providerInstaller);
8284
}
8385
}

transport/transport-runtime/src/androidTest/java/com/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStoreTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@
3333
import com.google.android.datatransport.runtime.time.TestClock;
3434
import com.google.android.datatransport.runtime.time.UptimeClock;
3535
import com.google.common.truth.Correspondence;
36-
import dagger.Lazy;
3736
import java.nio.charset.Charset;
3837
import java.util.Arrays;
3938
import java.util.Collections;
4039
import java.util.HashMap;
4140
import java.util.Map;
4241
import java.util.UUID;
42+
import javax.inject.Provider;
4343
import org.junit.Test;
4444
import org.junit.runner.RunWith;
4545

@@ -115,12 +115,12 @@ public class SQLiteEventStoreTest {
115115
private static final String LOG_SOURCE_3 = "source3";
116116

117117
private final TestClock clock = new TestClock(1);
118-
private final Lazy<String> packageName =
118+
private final Provider<String> packageName =
119119
() -> ApplicationProvider.getApplicationContext().getPackageName();
120120
private final SQLiteEventStore store = newStoreWithConfig(clock, CONFIG, packageName);
121121

122122
private static SQLiteEventStore newStoreWithConfig(
123-
Clock clock, EventStoreConfig config, Lazy<String> packageName) {
123+
Clock clock, EventStoreConfig config, Provider<String> packageName) {
124124
return new SQLiteEventStore(
125125
clock,
126126
new UptimeClock(),

transport/transport-runtime/src/androidTest/java/com/google/android/datatransport/runtime/scheduling/persistence/SpyEventStoreModule.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@
2222
import com.google.android.datatransport.runtime.time.Monotonic;
2323
import com.google.android.datatransport.runtime.time.WallTime;
2424
import dagger.Binds;
25-
import dagger.Lazy;
2625
import dagger.Module;
2726
import dagger.Provides;
2827
import javax.inject.Named;
28+
import javax.inject.Provider;
2929
import javax.inject.Singleton;
3030

3131
@Module
@@ -42,7 +42,7 @@ static SQLiteEventStore sqliteEventStore(
4242
@Monotonic Clock clock,
4343
EventStoreConfig config,
4444
SchemaManager schemaManager,
45-
@Named("PACKAGE_NAME") Lazy<String> packageName) {
45+
@Named("PACKAGE_NAME") Provider<String> packageName) {
4646
return spy(new SQLiteEventStore(wallClock, clock, config, schemaManager, packageName));
4747
}
4848

transport/transport-runtime/src/main/java/com/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import dagger.Module;
2121
import dagger.Provides;
2222
import javax.inject.Named;
23+
import javax.inject.Singleton;
2324

2425
@Module
2526
public abstract class EventStoreModule {
@@ -51,6 +52,7 @@ static String dbName() {
5152
}
5253

5354
@Provides
55+
@Singleton
5456
@Named("PACKAGE_NAME")
5557
static String packageName(Context context) {
5658
return context.getPackageName();

transport/transport-runtime/src/main/java/com/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
import com.google.android.datatransport.runtime.time.Monotonic;
4343
import com.google.android.datatransport.runtime.time.WallTime;
4444
import com.google.android.datatransport.runtime.util.PriorityMapping;
45-
import dagger.Lazy;
4645
import java.util.ArrayList;
4746
import java.util.Arrays;
4847
import java.util.HashMap;
@@ -54,6 +53,7 @@
5453
import java.util.Set;
5554
import javax.inject.Inject;
5655
import javax.inject.Named;
56+
import javax.inject.Provider;
5757
import javax.inject.Singleton;
5858

5959
/** {@link EventStore} implementation backed by a SQLite database. */
@@ -73,15 +73,15 @@ public class SQLiteEventStore
7373
private final Clock wallClock;
7474
private final Clock monotonicClock;
7575
private final EventStoreConfig config;
76-
private final Lazy<String> packageName;
76+
private final Provider<String> packageName;
7777

7878
@Inject
7979
SQLiteEventStore(
8080
@WallTime Clock wallClock,
8181
@Monotonic Clock clock,
8282
EventStoreConfig config,
8383
SchemaManager schemaManager,
84-
@Named("PACKAGE_NAME") Lazy<String> packageName) {
84+
@Named("PACKAGE_NAME") Provider<String> packageName) {
8585

8686
this.schemaManager = schemaManager;
8787
this.wallClock = wallClock;

transport/transport-runtime/src/test/java/com/google/android/datatransport/runtime/scheduling/persistence/SchemaManagerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@
2828
import com.google.android.datatransport.runtime.time.TestClock;
2929
import com.google.android.datatransport.runtime.time.UptimeClock;
3030
import com.google.android.datatransport.runtime.util.PriorityMapping;
31-
import dagger.Lazy;
3231
import java.nio.charset.Charset;
3332
import java.util.Map;
33+
import javax.inject.Provider;
3434
import org.junit.Assert;
3535
import org.junit.Test;
3636
import org.junit.runner.RunWith;
@@ -71,7 +71,7 @@ public class SchemaManagerTest {
7171
EventStoreConfig.DEFAULT.toBuilder().setLoadBatchSize(5).setEventCleanUpAge(HOUR).build();
7272

7373
private final TestClock clock = new TestClock(1);
74-
private final Lazy<String> packageName =
74+
private final Provider<String> packageName =
7575
() -> ApplicationProvider.getApplicationContext().getPackageName();
7676

7777
@Test

0 commit comments

Comments
 (0)