android / android/android-test
UI Tests fail to run with when using play-services-cast:21.3.0
- 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
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