From c96df6055e5851a76723041d6afb278d26e350ef Mon Sep 17 00:00:00 2001 From: Ted Xie Date: Tue, 26 May 2026 15:02:14 -0400 Subject: [PATCH 1/2] Possible repro for #455 See #455 for overall scenario. These minimal-ish changes cause the following stack trace if you launch the basic app and click on the "fizz" button. ``` 05-26 13:32:58.269 1150 1178 E ActivityControllerCore: java.lang.NoSuchMethodError: No virtual method convert(Ljava/time/Duration;)J in class Ljava/util/concurrent/TimeUnit; or its super cl asses (declaration of 'java.util.concurrent.TimeUnit' appears in /apex/com.android.art/javalib/core-oj.jar) 05-26 13:32:58.269 1150 1178 E ActivityControllerCore: at com.basicapp.basicdep.BasicDep.toLong(Unknown Source:4) 05-26 13:32:58.269 1150 1178 E ActivityControllerCore: at com.basicapp.basicdep.BasicDep.toString(Unknown Source:0) 05-26 13:32:58.269 1150 1178 E ActivityControllerCore: at com.basicapp.BasicActivity$1.onClick(Unknown Source:35) 05-26 13:32:58.269 1150 1178 E ActivityControllerCore: at android.view.View.performClick(View.java:7448) 05-26 13:32:58.269 1150 1178 E ActivityControllerCore: at android.view.View.performClickInternal(View.java:7425) 05-26 13:32:58.269 1150 1178 E ActivityControllerCore: at android.view.View.access$3600(View.java:810) 05-26 13:32:58.269 1150 1178 E ActivityControllerCore: at android.view.View$PerformClick.run(View.java:28305) 05-26 13:32:58.269 1150 1178 E ActivityControllerCore: at android.os.Handler.handleCallback(Handler.java:938) 05-26 13:32:58.269 1150 1178 E ActivityControllerCore: at android.os.Handler.dispatchMessage(Handler.java:99) 05-26 13:32:58.269 1150 1178 E ActivityControllerCore: at android.os.Looper.loop(Looper.java:223) 05-26 13:32:58.269 1150 1178 E ActivityControllerCore: at android.app.ActivityThread.main(ActivityThread.java:7656) 05-26 13:32:58.269 1150 1178 E ActivityControllerCore: at java.lang.reflect.Method.invoke(Native Method) 05-26 13:32:58.269 1150 1178 E ActivityControllerCore: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 05-26 13:32:58.269 1150 1178 E ActivityControllerCore: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) ``` Repro command: ``` bazelisk build java/com/basicapp:basic_app --nodesugar_java8_libs && \ adb install bazel-bin/java/com/basicapp/basic_app.apk && \ adb logcat ``` --- examples/basicapp/java/com/basicapp/BUILD | 15 +++++++++++ .../java/com/basicapp/BasicActivity.java | 5 +++- .../basicapp/java/com/basicapp/BasicDep.java | 25 +++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 examples/basicapp/java/com/basicapp/BasicDep.java diff --git a/examples/basicapp/java/com/basicapp/BUILD b/examples/basicapp/java/com/basicapp/BUILD index 5d65d8fc1..c4ef98ca9 100644 --- a/examples/basicapp/java/com/basicapp/BUILD +++ b/examples/basicapp/java/com/basicapp/BUILD @@ -4,11 +4,19 @@ load( "android_library", "android_application", ) +load("@rules_java//java:java_library.bzl", "java_library") + +genrule( + name = "proguard_cfg", + outs = ["proguard.cfg"], + cmd = "echo > $@", +) android_binary( name = "basic_app", manifest = "AndroidManifest.xml", deps = [":basic_lib"], + proguard_specs = [":proguard_cfg"], ) android_library( @@ -16,6 +24,13 @@ android_library( srcs = ["BasicActivity.java"], manifest = "AndroidManifest.xml", resource_files = glob(["res/**"]), + deps = [":basic_dep"], +) + +java_library( + name = "basic_dep", + srcs = ["BasicDep.java"], + # manifest = "AndroidManifest.xml", ) android_application( diff --git a/examples/basicapp/java/com/basicapp/BasicActivity.java b/examples/basicapp/java/com/basicapp/BasicActivity.java index 006648eec..6d55311ab 100644 --- a/examples/basicapp/java/com/basicapp/BasicActivity.java +++ b/examples/basicapp/java/com/basicapp/BasicActivity.java @@ -20,6 +20,8 @@ import android.view.View; import android.widget.Button; import android.widget.TextView; +import com.basicapp.basicdep.BasicDep; +import java.time.Duration; /** * The main activity of the Basic Sample App. @@ -41,7 +43,8 @@ protected void onCreate(Bundle savedInstanceState) { public void onClick(View v) { TextView tv = findViewById(R.id.text_hello); if (v.getId() == R.id.button_id_fizz) { - tv.setText("fizz"); + BasicDep bd = new BasicDep(Duration.ofMillis(System.currentTimeMillis())); + tv.setText("fizz" + bd.toString()); } else if (v.getId() == R.id.button_id_buzz) { tv.setText("buzz"); } diff --git a/examples/basicapp/java/com/basicapp/BasicDep.java b/examples/basicapp/java/com/basicapp/BasicDep.java new file mode 100644 index 000000000..e12851572 --- /dev/null +++ b/examples/basicapp/java/com/basicapp/BasicDep.java @@ -0,0 +1,25 @@ +package com.basicapp.basicdep; + +import java.time.Duration; +import java.util.concurrent.TimeUnit; + +public class BasicDep { + Duration d; + public BasicDep(Duration d_) { + this.d = d_; + } + public BasicDep() { + this(Duration.ZERO); + } + public Duration getDuration() { + return this.d; + } + public String toString() { + // return this.d.toString(); + return Long.toString(this.toLong()); + } + public long toLong() { + // return TimeUnit.MILLISECONDS.convert(this.d.toMillis(), TimeUnit.MILLISECONDS); + return TimeUnit.MILLISECONDS.convert(this.d); + } +} \ No newline at end of file From bc6e00f8f7a40276e83416bc9169f12abbb15fa4 Mon Sep 17 00:00:00 2001 From: Ted Xie Date: Tue, 26 May 2026 16:38:06 -0400 Subject: [PATCH 2/2] some updates --- examples/basicapp/.bazelrc | 13 +++++++++++++ examples/basicapp/MODULE.bazel | 1 + .../basicapp/java/com/basicapp/AndroidManifest.xml | 2 +- examples/basicapp/java/com/basicapp/BUILD | 9 +-------- examples/basicapp/java/com/basicapp/proguard.cfg | 2 ++ rules/min_sdk_version.bzl | 2 +- 6 files changed, 19 insertions(+), 10 deletions(-) create mode 100644 examples/basicapp/java/com/basicapp/proguard.cfg diff --git a/examples/basicapp/.bazelrc b/examples/basicapp/.bazelrc index 08999d781..6c08d9394 100644 --- a/examples/basicapp/.bazelrc +++ b/examples/basicapp/.bazelrc @@ -35,3 +35,16 @@ build:windows --define=protobuf_allow_msvc=true common --enable_platform_specific_config +common \ + --incremental_dexing=true \ + --define=android_dexmerger_tool=d8_dexmerger \ + --define=android_incremental_dexing_tool=d8_dexbuilder \ + --define=android_standalone_dexing_tool=d8_compat_dx \ + --experimental_use_dex_splitter_for_incremental_dexing=true \ + --experimental_incremental_dexing_after_proguard_by_default=true \ + --experimental_incremental_dexing_after_proguard=50 \ + --java_language_version=11 --tool_java_language_version=11 \ + --java_runtime_version=21 --tool_java_runtime_version=21 \ + --desugar_java8_libs --experimental_check_desugar_deps=false \ + --@rules_android//rules/flags:manifest_merge_order=legacy + diff --git a/examples/basicapp/MODULE.bazel b/examples/basicapp/MODULE.bazel index cebe1c647..67bafe008 100644 --- a/examples/basicapp/MODULE.bazel +++ b/examples/basicapp/MODULE.bazel @@ -26,6 +26,7 @@ remote_android_extensions = use_extension( use_repo(remote_android_extensions, "android_tools") android_sdk_repository_extension = use_extension("@rules_android//rules/android_sdk_repository:rule.bzl", "android_sdk_repository_extension") +android_sdk_repository_extension.configure(api_level = 32) use_repo(android_sdk_repository_extension, "androidsdk") register_toolchains("@androidsdk//:sdk-toolchain", "@androidsdk//:all") diff --git a/examples/basicapp/java/com/basicapp/AndroidManifest.xml b/examples/basicapp/java/com/basicapp/AndroidManifest.xml index ef27259ad..f3a75f350 100644 --- a/examples/basicapp/java/com/basicapp/AndroidManifest.xml +++ b/examples/basicapp/java/com/basicapp/AndroidManifest.xml @@ -3,7 +3,7 @@ package="com.basicapp" >