android / android/android-test

UI Tests fail to run with when using play-services-cast:21.3.0

Open
#1,831 1 comment 1 reaction 0 assignees View on GitHub
Dominant language
Java
Stars
1.2k
Forks
342
Avg merge
11h 29m
Merged PRs (30d)
2

Description

### Description

My Android app depends on `protobuf-java:3.17.2`, and uses `espresso:3.5.1` for UI testing. `espresso-contrib:3.5.1` depends on `com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework:3.1.2` depends on `com.google.protobuf:protobuf-lite:3.0.1`

When I try to run my UI tests, my app immediate crashes with:
```
java.lang.NoClassDefFoundError: com.google.android.gms.internal.cast.zzrz
at com.google.android.gms.internal.cast.zzth.zza(com.google.android.gms:play-services-cast@@21.3.0:8)
at com.google.android.gms.internal.cast.zztx.zzb(com.google.android.gms:play-services-cast@@21.3.0:3)
at com.google.android.gms.internal.cast.zzsh.zzE(com.google.android.gms:play-services-cast@@21.3.0:1)
at com.google.android.gms.internal.cast.zzse.zzq(com.google.android.gms:play-services-cast@@21.3.0:2)
at com.google.android.gms.internal.cast.zzse.zzp(com.google.android.gms:play-services-cast@@21.3.0:1)
at com.google.android.gms.internal.cast.zzr.zzc(com.google.android.gms:play-services-cast-framework@@21.3.0:7)
at com.google.android.gms.internal.cast.zzq.run(Unknown Source:2)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7872)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
Caused by: java.lang.ExceptionInInitializerError
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:454)
at java.lang.Class.forName(Class.java:379)
at com.google.android.gms.internal.cast.zzrz.(com.google.android.gms:play-services-cast@@21.3.0:1)
at com.google.android.gms.internal.cast.zzrz.zzb(Unknown Source:0)
at com.google.android.gms.internal.cast.zzth.zza(com.google.android.gms:play-services-cast@@21.3.0:8)
at com.google.android.gms.internal.cast.zztx.zzb(com.google.android.gms:play-services-cast@@21.3.0:3)
at com.google.android.gms.internal.cast.zzsh.zzE(com.google.android.gms:play-services-cast@@21.3.0:1)
at com.google.android.gms.internal.cast.zzse.zzq(com.google.android.gms:play-services-cast@@21.3.0:2)
at com.google.android.gms.internal.cast.zzse.zzp(com.google.android.gms:play-services-cast@@21.3.0:1)
at com.google.android.gms.internal.cast.zzr.zzc(com.google.android.gms:play-services-cast-framework@@21.3.0:7)
at com.google.android.gms.internal.cast.zzq.run(Unknown Source:2)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at androidx.test.espresso.base.Interrogator.loopAndInterrogate(Interrogator.java:14)
at androidx.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:8)
at androidx.test.espresso.base.UiControllerImpl.loopMainThreadUntilIdle(UiControllerImpl.java:16)
at androidx.test.espresso.ViewInteraction$2.call(ViewInteraction.java:6)
at androidx.test.espresso.ViewInteraction$2.call(ViewInteraction.java:1)
at java.util.concurrent.FutureTask.run(FutureTask.java:264)
... 8 more
Caused by: java.lang.IllegalStateException: Unable to lookup extension field offset
at com.google.protobuf.ExtensionSchemaFull.getExtensionsFieldOffset(ExtensionSchemaFull.java:52)
at com.google.protobuf.ExtensionSchemaFull.(ExtensionSchemaFull.java:45)
... 28 more
```

If I remove this dependency with gradle, things seem to work fine:
```
configurations.all {
resolutionStrategy.dependencySubstitution {
substitute module("com.google.protobuf:protobuf-lite") \
using module("com.google.protobuf:protobuf-java:3.21.12") \
because "Only espresso-contrib (via accessibility-test-framework) needs protobuf-lite, but everything else needs protobuf-java"
}
}
```

### Steps to Reproduce

Create a project that uses `play-services-cast:21.3.0` and `protobuf-java:3.21.12`. Then try to run a UI test with `espresso-contrib:3.5.1`

### Expected Results

UI Tests run

### Actual Results

App immediately crashes with the above stack trace

### AndroidX Test and Android OS Versions

Android API 33. Espresso `3.5.1`

### Link to a public git repo demonstrating the problem:

Contributor guide

Open the contributing guide

Research direction

No source files or test paths are provided. Reproduce with play-services-cast:21.3.0, protobuf-java:3.21.12, and espresso-contrib:3.5.1 on Android API 33, then inspect the resolved protobuf dependencies and the crash stack trace. Done means the UI test runs without the NoClassDefFoundError or initializer crash.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, java
Domain
mobile, testing
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.