Skip to content

Commit 6589fc9

Browse files
committed
Fix ActivityInvoker$-CC class not found errors.
Builds using ActivityScenario with older androidx.test.core:1.5.X but the latest androidx.test:monitor:1.7.X will see ActivityInvoker$-CC class not found errors. This is because androidx.test.core:1.5.X effectively depends on internal classes generated by the desugaring tool. The latest androidx.test toolchain generates java8 bytecode and no longer generates these desugared classes. To fix the backwards compatibility issues, this commit introduces a placeholder class ActivityInvokerDesugar that gets renamed to the missing ActivityInvoker$-CC class at build time. Fixes #2259.
1 parent d4eff99 commit 6589fc9

File tree

3 files changed

+44
-0
lines changed

3 files changed

+44
-0
lines changed

runner/monitor/java/androidx/test/BUILD

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ kt_android_library(
3535
"internal/runner/runtime/ExposedInstrumentationApi.java",
3636
"internal/runner/hidden/ExposedInstrumentationApi.java",
3737
"internal/platform/app/ActivityInvoker$$CC.java",
38+
"internal/platform/app/ActivityInvokerDesugar.java",
3839
],
3940
),
4041
tags = ["alt_dep=//runner/monitor"],
@@ -81,6 +82,7 @@ android_library(
8182
srcs = [
8283
# only needed for external release backwards compatibility
8384
"internal/platform/app/ActivityInvoker$$CC.java",
85+
"internal/platform/app/ActivityInvokerDesugar.java",
8486
],
8587
custom_package = "androidx.test.monitor",
8688
manifest = "AndroidManifest.xml",
@@ -107,6 +109,7 @@ axt_android_aar(
107109
"androidx.test.platform",
108110
"androidx.test.runner",
109111
],
112+
jarjar_rule = ":jarjar.txt",
110113
included_dep = ":monitor_release_lib",
111114
)
112115

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package androidx.test.internal.platform.app;
2+
3+
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
4+
5+
import android.app.Activity;
6+
import android.content.ComponentName;
7+
import android.content.Intent;
8+
import androidx.annotation.RestrictTo;
9+
import androidx.annotation.RestrictTo.Scope;
10+
11+
/**
12+
* Handles default implementation for ActivityInvoker#getIntentForActivity
13+
*
14+
* <p> See the {@link ActivityInvoker$$CC} javadoc for prior history.
15+
*
16+
* <p> Starting in androidx.test:monitor:1.6.X, a new version of the desugar tooling was used
17+
* that generated a ActivityInvoker$-CC class. Class names with hyphens are rejected by javac,
18+
* so we cannot directly declare a ActivityInvoker$-CC class here. So instead we use a
19+
* placeholder name, and use jarjar to rename the class after the javac step.
20+
*
21+
* @hide
22+
*/
23+
@RestrictTo(Scope.LIBRARY_GROUP)
24+
public final class ActivityInvokerDesugar {
25+
26+
private ActivityInvokerDesugar() {}
27+
28+
public static Intent $default$getIntentForActivity(ActivityInvoker invoker,
29+
Class<? extends Activity> activityClass) {
30+
Intent intent =
31+
Intent.makeMainActivity(
32+
new ComponentName(getInstrumentation().getTargetContext(), activityClass));
33+
if (getInstrumentation().getTargetContext().getPackageManager().resolveActivity(intent, 0)
34+
!= null) {
35+
return intent;
36+
}
37+
return Intent.makeMainActivity(
38+
new ComponentName(getInstrumentation().getContext(), activityClass));
39+
}
40+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
rule androidx.test.internal.platform.app.ActivityInvokerDesugar androidx.test.internal.platform.app.ActivityInvoker$-CC

0 commit comments

Comments
 (0)