Robolectric 4.15 contains a lot of minor improvements, fidelity improvements, bug fixes, and shadow API enhancements. It also introduces the Robolectric Simulator, which makes it possible to launch an interactive preview of Android UI in a Robolectric environment.
NOTE Robolectric 4.15 does NOT support Android Baklava (SDK 36). Baklava will be supported in Robolectric 4.16.
If you encounter any issues, please file them on the GitHub issues page.
A huge thanks to @MGaetan89 and @utzcoz for all of their hard work that went into this release.
What's Changed
The following symbols have been removed in Robolectric 4.15.
Properly disable API 35 on Windows in graphics_tests.yml by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9720
Add @InDevelopment annotation to ShadowInputMethodManager#hideSoftInputFromWindow https://github.com/robolectric/robolectric/pull/9721
Run tests against API 35 by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9719
Update Ubuntu runners to use ubuntu-latest by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9725
Make ContextTest euicc tests work on device that doesn't support it by @utzcoz in https://github.com/robolectric/robolectric/pull/9726
Bump targetSdk to 35 as much as possible for integration_tests by @utzcoz in https://github.com/robolectric/robolectric/pull/9727
Bump error-prone from 2.34.0 to 2.35.1 by @dependabot in https://github.com/robolectric/robolectric/pull/9730
Bump com.diffplug.spotless:spotless-plugin-gradle from 7.0.0.BETA3 to 7.0.0.BETA4 by @dependabot in https://github.com/robolectric/robolectric/pull/9731
Bump com.ibm.icu:icu4j from 75.1 to 76.1 by @dependabot in https://github.com/robolectric/robolectric/pull/9729
Run more tests with api 35 by @utzcoz in https://github.com/robolectric/robolectric/pull/9724
Deprecate shadows-multidex by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9728
Remove unused dependency and TODO in errorprone by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9736
Add basic support for DirectAccessibilityConnection behind a flag https://github.com/robolectric/robolectric/pull/9739
Invoke real Android code when AccessibilityNodeInfo.setSource is called https://github.com/robolectric/robolectric/pull/9741
Remove unnecessary shadow methods in ShadowAccessibilityWindowInfo https://github.com/robolectric/robolectric/pull/9742
Update shadows to adapt to in development Android changes. https://github.com/robolectric/robolectric/pull/9743
Concat an ellipsis character when ellipsizing by @utzcoz in https://github.com/robolectric/robolectric/pull/9672
Add MotionEventTest#testNoLocationOffsetForNonPointerSource by @utzcoz in https://github.com/robolectric/robolectric/pull/7216
Fix ShadowPendingIntent.send() to forward the options passed in when starting activity. https://github.com/robolectric/robolectric/pull/9745
Invoke the real AccessibilityWindowInfo.obtain(AccessibilityWindowInfo) https://github.com/robolectric/robolectric/pull/9748
Bump roborazzi from 1.29.0 to 1.30.1 by @dependabot in https://github.com/robolectric/robolectric/pull/9753
Bump the android-gradle-plugin group with 3 updates by @dependabot in https://github.com/robolectric/robolectric/pull/9749
Bump com.googlecode.libphonenumber:libphonenumber from 8.13.48 to 8.13.49 by @dependabot in https://github.com/robolectric/robolectric/pull/9751
Bump org.bouncycastle:bcprov-jdk18on from 1.78.1 to 1.79 by @dependabot in https://github.com/robolectric/robolectric/pull/9752
Remove deepEquals and hashCode from ShadowAccessibilityWindowInfo https://github.com/robolectric/robolectric/pull/9754
Make resources to keep to a command line arg in JarInstrumentor https://github.com/robolectric/robolectric/pull/9755
Call AccessibilityNodeInfo.setSource when ShadowAccessibilityNodeInfo.obtain(View) is called https://github.com/robolectric/robolectric/pull/9756
Disable native graphics test on Windows in SDK 35 by @hoisie in https://github.com/robolectric/robolectric/pull/9757
Turn off fail-fast for the native graphics tests https://github.com/robolectric/robolectric/pull/9760
Use real AccessibilityNodeInfo code for AccessibilityNodeInfo.obtain(AccessibilityNodeInfo) https://github.com/robolectric/robolectric/pull/9762
Label shadow tests that require LEGACY graphics mode. https://github.com/robolectric/robolectric/pull/9763
Add back missing useRealAni check in AccessibilityNodeInfo.obtain(AccessibilityNodeInfo) https://github.com/robolectric/robolectric/pull/9765
Remove StrictEqualityWindowWrapper from ShadowAccessibilityWindowInfo https://github.com/robolectric/robolectric/pull/9767
Bump the androidx group with 5 updates by @dependabot in https://github.com/robolectric/robolectric/pull/9750
Add additional check for AccessibilityNodeInfo.setQueryFromProcessEnabled https://github.com/robolectric/robolectric/pull/9769
Remove boundsInScreen logic in ShadowAccessibilityNodeInfo https://github.com/robolectric/robolectric/pull/9770
Remove unused and incorrect APIs in ShadowAccessibilityNodeInfo https://github.com/robolectric/robolectric/pull/9771
Stop opening an AssetInputStream twice. https://github.com/robolectric/robolectric/pull/9772
Improve error reporting with AttributeSetBuilder + native resources. https://github.com/robolectric/robolectric/pull/9773
Support LEGACY graphics + NATIVE resources intersection. https://github.com/robolectric/robolectric/pull/9774
Disable AccessibililityNodeInfo shadow APIs for direct connections https://github.com/robolectric/robolectric/pull/9775
Use applyConfigurationToResources to update resources https://github.com/robolectric/robolectric/pull/9776
Sort Gradle modules by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9780
Remove the --info flag from Gradle tasks by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9782
Globally enable Gradle's parallel execution by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9783
ctesque: Wait display rotation with timeout before checking rotation by @utzcoz in https://github.com/robolectric/robolectric/pull/9781
Remove unused and incorrect APIs in ShadowAccessibilityNodeInfo https://github.com/robolectric/robolectric/pull/9784
Clear ShadowAccessibilityWindowInfo fields during recycle https://github.com/robolectric/robolectric/pull/9785
Revert "ci: Bump latest API level to 35 for Emulator testing" by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9787
Enable Gradle's File System Watching on CI by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9786
Merge :integration_tests:agp:testsupport into :integration_tests:agp by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9778
Bump roborazzi from 1.30.1 to 1.32.2 by @dependabot in https://github.com/robolectric/robolectric/pull/9789
Defer to real framework code for AccessibilityWindowInfo.getWindowId https://github.com/robolectric/robolectric/pull/9791
Update to Gradle 8.11 by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9790
Fix ShadowDisplayEventReceiver for Android Baklava. https://github.com/robolectric/robolectric/pull/9794
Update the Android V SDK to build 12650502 by @hoisie in https://github.com/robolectric/robolectric/pull/9796
Remove :integration_tests:agp module by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9788
Add missing :integration_tests:testparameterinjector by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9737
Test merge by @hoisie in https://github.com/robolectric/robolectric/pull/9797
Document support for V in readme by @yschimke in https://github.com/robolectric/robolectric/pull/9801
Use ClassName annotation for ShadowPackageInstaller.requestUserPreapp… by @hoisie in https://github.com/robolectric/robolectric/pull/9798
Fix SelfAssertion ErrorProne error in ShadowingTest by @hoisie in https://github.com/robolectric/robolectric/pull/9799
Mark AndroidVersions.V as released by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9800
Only checking getWindowId for Robolectric's AccessibilityNodeInfoTest by @utzcoz in https://github.com/robolectric/robolectric/pull/9805
Cleanup integration_tests/androidx module by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9803
Add tests to BuildCompatTest by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9804
Reset static state in ShadowLegacyChoreographer between tests https://github.com/robolectric/robolectric/pull/9806
Add shadow implementation of SubscriptionManager's APIs to convert from a slot ID -> subscription ID. https://github.com/robolectric/robolectric/pull/9807
test: Add compat test for retrieving PackageInstaller by @utzcoz in https://github.com/robolectric/robolectric/pull/9808
test: Simply Robolectric checking for AccessibilityNodeInfoTest by @utzcoz in https://github.com/robolectric/robolectric/pull/9810
Bump com.googlecode.libphonenumber:libphonenumber from 8.13.49 to 8.13.50 by @dependabot in https://github.com/robolectric/robolectric/pull/9813
Fix warnings in the junit module by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9814
Fix warnings in the nativeruntime module by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9815
Remove TODOs in Roborazzi tests by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9816
Fix regression in loading typefaces in legacy graphics by @hoisie in https://github.com/robolectric/robolectric/pull/9819
test: Add composeui integration testing module by @utzcoz in https://github.com/robolectric/robolectric/pull/9811
Replace use of ReflectionHelpers with reflector in ShadowPausedMessageQueue. https://github.com/robolectric/robolectric/pull/9820
Remove Multidex modules by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9809
Use the real WakeLock constructor in PowerManager.newWakeLock https://github.com/robolectric/robolectric/pull/9828
Remove unnecessary throws declarations in RoboMenuItemTest by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9827
Update google-java-format to 1.25.0 by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9829
Add get/setShape() support to ShadowGradientDrawable + ctesque by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9818
test: Update ComposeUI FontTest with custom font by @utzcoz in https://github.com/robolectric/robolectric/pull/9830
Add missing implementation in RoboMenuItem by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9822
Migrate nullability annotations to javax.annotation by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9832
Revert ellipsis supporting by @utzcoz in https://github.com/robolectric/robolectric/pull/9834
Fix NullPointerException in RoboMenuItem by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9837
Fix warnings in some integration_tests module by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9833
Bump androidx.compose:compose-bom from 2024.10.01 to 2024.11.00 in the androidx group by @dependabot in https://github.com/robolectric/robolectric/pull/9838
Bump roborazzi from 1.32.2 to 1.34.0 by @dependabot in https://github.com/robolectric/robolectric/pull/9840
Bump error-prone from 2.35.1 to 2.36.0 by @dependabot in https://github.com/robolectric/robolectric/pull/9839
Default robolectric.configurationChangeFix to true https://github.com/robolectric/robolectric/pull/9845
Add Compose test to check that FocusRequester is initialized by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9847
Invoke real framework code in ShadowCountDownTimer by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9848
Fix warnings in integration_tests:nativegraphics by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9849
Add tests for ShadowDisplayManager static fields by @Devashishbasu in https://github.com/robolectric/robolectric/pull/9359
Fix warnings in some integration_tests modules by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9850
Fix null checking warnings for ShadowFileIntegrityManagerTest by @utzcoz in https://github.com/robolectric/robolectric/pull/9851
Bump com.googlecode.libphonenumber:libphonenumber from 8.13.50 to 8.13.51 by @dependabot in https://github.com/robolectric/robolectric/pull/9853
Bump kotlin from 2.0.21 to 2.1.0 by @dependabot in https://github.com/robolectric/robolectric/pull/9854
Fix CatchFail warning for ShadowWifiP2pManagerTest by @utzcoz in https://github.com/robolectric/robolectric/pull/9852
Add a way to use the real TextUtils.ellipsize https://github.com/robolectric/robolectric/pull/9861
Add DeathRecipient methods to ShadowBinder https://github.com/robolectric/robolectric/pull/9862
Use nano second precision in PAUSED SystemClock. https://github.com/robolectric/robolectric/pull/9864
Fix warnings in integration_tests:androidx_test by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9867
Fix warnings in some modules by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9870
Migrate to Java8 APIs from the javax.lang.model package by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9871
Bump roborazzi from 1.34.0 to 1.36.0 by @dependabot in https://github.com/robolectric/robolectric/pull/9874
Bump the android-gradle-plugin group with 3 updates by @dependabot in https://github.com/robolectric/robolectric/pull/9873
Add setBroadcastSubscriber and getBroadcastSubscriberMap in ShadowStatsManager. https://github.com/robolectric/robolectric/pull/9869
Update google-java-format to 1.25.1 by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9881
Remove reflection calls in ShadowUsageStatsManager https://github.com/robolectric/robolectric/pull/9883
Make BroadcastSubscriberKey class public. https://github.com/robolectric/robolectric/pull/9885
Update google-java-format to 1.25.2 by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9886
Add a test case for scrolling a RecyclerView https://github.com/robolectric/robolectric/pull/9888
Disable ShadowTextUtils.ellipsize when RNG is enabled https://github.com/robolectric/robolectric/pull/9889
Migrate deprecated initMocks to openMocks by @utzcoz in https://github.com/robolectric/robolectric/pull/9891
Include trailing dots in packages to never acquire https://github.com/robolectric/robolectric/pull/9892
Allow shadow to function in aosp/main as well as goog/main. https://github.com/robolectric/robolectric/pull/9894
Add a hasMethod to ReflectionHelper for use in AssociationInfoBuilder. https://github.com/robolectric/robolectric/pull/9895
Bump roborazzi from 1.36.0 to 1.37.0 by @dependabot in https://github.com/robolectric/robolectric/pull/9897
Bump com.googlecode.libphonenumber:libphonenumber from 8.13.51 to 8.13.52 by @dependabot in https://github.com/robolectric/robolectric/pull/9898
Bump androidx.compose:compose-bom from 2024.11.00 to 2024.12.01 in the androidx group by @dependabot in https://github.com/robolectric/robolectric/pull/9896
Use reflection to call AssociationInfo.Builder#setTag. https://github.com/robolectric/robolectric/pull/9900
Update to Gradle 8.12 by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9902
Fix small warnings in the resources module by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9903
Bump org.jetbrains.kotlinx:kotlinx-coroutines-android from 1.9.0 to 1.10.1 by @dependabot in https://github.com/robolectric/robolectric/pull/9905
Bump guava-jre from 33.3.1-jre to 33.4.0-jre by @dependabot in https://github.com/robolectric/robolectric/pull/9904
Fix small warnings in the resources module by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9906
Fix typo in ActivityData#isClearTaskOnLaungh() by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9907
Use standard library methods and collection APIs by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9908
Bump roborazzi from 1.37.0 to 1.38.0 by @dependabot in https://github.com/robolectric/robolectric/pull/9910
Fix typo in ResourceIds by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9909
Remove unnecessary variables by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9911
Fix warnings in resources by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9872
Fix warnings in the shadowapi module by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9912
Fix warnings in the sandbox module by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9914
Fix warnings in the utils module by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9915
Fix typo in ShadowRangingResult. https://github.com/robolectric/robolectric/pull/9916
Fix warnings in :shadows:httpclient by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9918
Remove unused dependencies by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9919
Fix warnings in :shadows:playservices by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9920
Bump roborazzi from 1.38.0 to 1.39.0 by @dependabot in https://github.com/robolectric/robolectric/pull/9921
Update shadow TimeManager for Baklava. https://github.com/robolectric/robolectric/pull/9923
Update ShadowSecureElementService Channel implementation to throw IllegalStateException when closed. https://github.com/robolectric/robolectric/pull/9925
Sync with ag/main https://github.com/robolectric/robolectric/pull/9926
Adds support for shadowing ActivityManager.setDeviceLocales() https://github.com/robolectric/robolectric/pull/9927
Update parsing of res table for shared library entries https://github.com/robolectric/robolectric/pull/9922
Use WebSettings.getDefaultUserAgent() from RoboWebSetting if no custom User Agent is set. https://github.com/robolectric/robolectric/pull/9929
Return PERMISSION_GRANTED to IPermissionManager#getPermissionRequestState calls. https://github.com/robolectric/robolectric/pull/9931
Remove unnecessary throws declarations in robolectric by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9930
Adapt to DisplayManagerGlobal.EVENT_DISPLAY_CHANGED rename. https://github.com/robolectric/robolectric/pull/9936
Upstreaming of aosp/3436440 https://github.com/robolectric/robolectric/pull/9937
Switch to use java-version-file for action/setup-java by @utzcoz in https://github.com/robolectric/robolectric/pull/9932
Remove unused ResourceTestUtil by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9934
Fix typos in the :robolectric module by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9933
Add nullability annotation to the :robolectric module by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9935
Fix targetSdkVersion from Config/manifest override by @utzcoz in https://github.com/robolectric/robolectric/pull/9938
Update assertions in the :robolectric module by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9939
Remove unnecessary casts in the :robolectric module by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9941
Add/remove final/static modifiers in the :robolectric module by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9942
Fix various warnings in the :robolectric module by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9943
ci: Remove JDK version from step name by @utzcoz in https://github.com/robolectric/robolectric/pull/9946
Use ApplicationProvider.getApplicationContext() instead of buildActivity() by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9944
Bump the android-gradle-plugin group with 3 updates by @dependabot in https://github.com/robolectric/robolectric/pull/9947
Bump com.diffplug.spotless:spotless-plugin-gradle from 7.0.0.BETA4 to 7.0.1 by @dependabot in https://github.com/robolectric/robolectric/pull/9948
Temporaily define ro.vendor.api_level and register corresponding system features. https://github.com/robolectric/robolectric/pull/9951
Support getLatency() for ShadowAudioTrack https://github.com/robolectric/robolectric/pull/9954
Adds support for the set, get and remove widget preview methods. https://github.com/robolectric/robolectric/pull/9956
Add badly needed Javadoc for HelperTestRunner https://github.com/robolectric/robolectric/pull/9960
Clean up Truth assertions when using isTrue https://github.com/robolectric/robolectric/pull/9962
Add migration info to ShadowContentResolver deprecated methods by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9964
Use org.junit.Assert instead of junit.framework.Assert by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9963
Use lambdas and method references in :robolectric by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9957
Add ShadowArrayAdapter#getDropDownViewResourceId() by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9961
Use Truth's hasSize() to check iterable size by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9967
Enable native SQLite on Windows by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9924
Bump androidx.compose:compose-bom from 2024.12.01 to 2025.01.00 in the androidx group by @dependabot in https://github.com/robolectric/robolectric/pull/9971
Bump com.diffplug.spotless:spotless-plugin-gradle from 7.0.1 to 7.0.2 by @dependabot in https://github.com/robolectric/robolectric/pull/9973
Bump com.googlecode.libphonenumber:libphonenumber from 8.13.52 to 8.13.53 by @dependabot in https://github.com/robolectric/robolectric/pull/9974
Bump org.bouncycastle:bcprov-jdk18on from 1.79 to 1.80 by @dependabot in https://github.com/robolectric/robolectric/pull/9972
Fix various typos by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9970
Remove redundant @TextLayoutMode annotation by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9975
Avoid updating the SQLite mode in SandboxManager.getAndroidSandbox https://github.com/robolectric/robolectric/pull/9977
Add getWallpaperId(int witch) in ShadowWallpaperManager https://github.com/robolectric/robolectric/pull/9978
Bump Truth to 1.4.4 by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9981
Bump Jacoco to 0.8.12 by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9982
Upgrade Hamcrest to 3.0 by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9980
Update Mockk to 1.13.16 by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9985
Add basic @ClassRule support for Robolectric tests https://github.com/robolectric/robolectric/pull/9986
Lazily initialize member variables in RobolectricTestParameterInjector.DelegateHelperTestRunner https://github.com/robolectric/robolectric/pull/9987
Make Choreographer frame data more accurate. https://github.com/robolectric/robolectric/pull/9991
Support copies of bytes as well. https://github.com/robolectric/robolectric/pull/9992
Add missing final modifier in :shadows:framework by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9993
Remove redundant casts in :shadows:framework by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9994
Replace C-style array declaration with Java style in :shadows:framework by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9995
Remove explicit type declaration in :shadows:framework by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9996
Bump Gradle to 8.12.1 by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9997
Replace anonymous classes with lambdas in :shadows:framework by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9998
Update links to reference implementation in AOSP by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10005
Fix broken references in Javadoc in :shadows:framework by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10003
Add setMagnificationConfig and getMagnificationConfig in ShadowMagnificationController https://github.com/robolectric/robolectric/pull/10006
Fix task name in ShadowAlwaysOnHotwordDetector by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10000
Bump roborazzi from 1.39.0 to 1.40.1 by @dependabot in https://github.com/robolectric/robolectric/pull/10007
Bump kotlin from 2.1.0 to 2.1.10 by @dependabot in https://github.com/robolectric/robolectric/pull/10008
Add missing nullability annotations to :shadows:framework by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9999
Update outdated minSdk parameters by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10009
Bump mockito from 4.11.0 to 5.15.2 by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9984
ctesque: Extract application context to test class' initialization by @utzcoz in https://github.com/robolectric/robolectric/pull/10010
Remove redundant variable initialization in :shadows:framework by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10002
Add getIdleConnectionTimeout and getOpenParams to ShadowSQLiteOpenHelper https://github.com/robolectric/robolectric/pull/10004
Replace JavaX Annotation jsr250-api with javax.annotation-api by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9983
Update ShadowNativeColorSpaceTest from AOSP by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10011
Update generation of Shadows.java by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9917
Don't access static fields via instance in :shadows:framework by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10018
Use @RequiresApi instead of @TargetApi in :shadows:framework by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10019
Bump androidx.compose:compose-bom from 2025.01.00 to 2025.01.01 in the androidx group by @dependabot in https://github.com/robolectric/robolectric/pull/10020
Bump com.google.code.gson:gson from 2.11.0 to 2.12.1 by @dependabot in https://github.com/robolectric/robolectric/pull/10021
Bump com.googlecode.libphonenumber:libphonenumber from 8.13.53 to 8.13.54 by @dependabot in https://github.com/robolectric/robolectric/pull/10022
Add ContentResolver#notifyChange(Collection<Uri>, ContentObserver, int) by @MGaetan89 in https://github.com/robolectric/robolectric/pull/9966
Ignore error logs from FeatureFlagsImpl. https://github.com/robolectric/robolectric/pull/10034
Added some missing listeners notification when tests are not passing. https://github.com/robolectric/robolectric/pull/10039
Add a temporary way to trigger the back button via a right-click popup menu https://github.com/robolectric/robolectric/pull/10040
chore: Configure Renovate by @renovate in https://github.com/robolectric/robolectric/pull/10038
Set the default Choreographer frame delay in Robolectric to 15 ms (60 fps) https://github.com/robolectric/robolectric/pull/10042
Throws Exceptions when registerReceiver has unexpected exported flags by @utzcoz in https://github.com/robolectric/robolectric/pull/9940
Fix generic usage on AsyncTask shadows by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10043
Fix various warnings in :shadows:framework by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10028
Deprecate AsyncTask and AsyncTaskLoader shadows by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10044
Address a couple of warnings in :robolectric by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10045
Restrict snapshot release to the main repo by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10046
Update validate_commit_message.yml to use renovate[bot] by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10053
Update dependency com.googlecode.libphonenumber:libphonenumber to v8.13.55 by @renovate in https://github.com/robolectric/robolectric/pull/10049
Update Android Gradle Plugin by @renovate in https://github.com/robolectric/robolectric/pull/10048
Update roborazzi to v1.42.0 by @renovate in https://github.com/robolectric/robolectric/pull/10052
Update dependency org.yaml:snakeyaml to v2.4 by @renovate in https://github.com/robolectric/robolectric/pull/10051
Add FeatureFlagsImplExport to the list of unpreventable log tags. https://github.com/robolectric/robolectric/pull/10054
Ignore Play Services in Renovate by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10056
Update AndroidX by @renovate in https://github.com/robolectric/robolectric/pull/10050
ShadowMediaCodec must reset state in native_start https://github.com/robolectric/robolectric/pull/10059
Replace usages of ImmutableMap#build() with ImmutableMap#buildOrThrow() by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10064
Update dependency io.gitlab.arturbosch.detekt to v1.23.8 by @renovate in https://github.com/robolectric/robolectric/pull/10066
Remove dead code in Reflector and UnsafeAccess https://github.com/robolectric/robolectric/pull/10071
Fix ShadowUsageStatsManager in gradle environments https://github.com/robolectric/robolectric/pull/10073
Add test case to ShadowHandlerTest by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10076
Avoid using SetSystemPropertyRule in ctesque tests https://github.com/robolectric/robolectric/pull/10077
Add some small changes to AndroidConfigurer https://github.com/robolectric/robolectric/pull/10078
Add custom instrumentation configuration for the Simulator https://github.com/robolectric/robolectric/pull/10079
Install a fake MediaProvider in Robolectric for APIs >= Q. https://github.com/robolectric/robolectric/pull/10072
Use DisplayManager to get the default display in ShadowDisplay.getDefaultDisplay https://github.com/robolectric/robolectric/pull/10081
Update Renovate to not update Apache HttpComponents by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10082
Add ShadowTelephonyManager#getIccAuthentication() and ShadowTelephonyManager#setIccAuthentication() by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10065
Remove FsFile from :resources by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10047
Update Android Gradle Plugin by @renovate in https://github.com/robolectric/robolectric/pull/10084
Update dependency io.mockk:mockk to v1.13.17 by @renovate in https://github.com/robolectric/robolectric/pull/10086
Update roborazzi to v1.43.0 by @renovate in https://github.com/robolectric/robolectric/pull/10089
Update AndroidX by @renovate in https://github.com/robolectric/robolectric/pull/10087
Configure Renovate to ignore androidx.fragment:fragment in :shadows:playservices by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10091
Update dependency com.googlecode.libphonenumber:libphonenumber to v9 by @renovate in https://github.com/robolectric/robolectric/pull/10090
Update dependency gradle to v8.13 by @renovate in https://github.com/robolectric/robolectric/pull/10088
Add ShadowAudioTrack support for AudioTrack.getBufferSizeInFrames() https://github.com/robolectric/robolectric/pull/10093
Add support for CardEmulation pollingLoopPatternFilter methods https://github.com/robolectric/robolectric/pull/10092
Add a extension mechanism to the simulator to let you customize the popup menu https://github.com/robolectric/robolectric/pull/10097
Remove InvokeDynamicClassInstrumentor by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10083
Update mockito monorepo to v5.16.0 by @renovate in https://github.com/robolectric/robolectric/pull/10101
Update Android Gradle Plugin by @renovate in https://github.com/robolectric/robolectric/pull/10100
Update AGP group in Renovate configuration by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10102
Remove the deprecated ShadowMap.convertToShadowName(String) method by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10095
Remove deprecated DependencyResolver#getLocalArtifactUrls(DependencyJar) by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10099
Update dependency com.googlecode.libphonenumber:libphonenumber to v9.0.1 by @renovate in https://github.com/robolectric/robolectric/pull/10107
Update mockito monorepo to v5.16.1 by @renovate in https://github.com/robolectric/robolectric/pull/10108
Remove deprecated methods in AndroidManifest by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10098
Support Comment and Whitespace Stripping in Robolectric's PluginFinder for META-INF/services/* file reading https://github.com/robolectric/robolectric/pull/10110
Remove unused robolectric.disableInitialAwakenScrollBars flag https://github.com/robolectric/robolectric/pull/10111
Remove the SdkPicker class by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10105
Add isBackupServiceActive to ShadowBackupManager https://github.com/robolectric/robolectric/pull/10109
Remove the RemoteAnimationTarget parameter from BackMotionEvent's call. https://github.com/robolectric/robolectric/pull/10112
Add an API to disable Robolectric's ShadowView.AnimationRunner https://github.com/robolectric/robolectric/pull/10113
Update PackageManager shadows to correctly perform getApplicationInfo() contract when th package is not present. https://github.com/robolectric/robolectric/pull/10114
Remove deprecated methods in Fs by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10106
Update deprecation message for Robolectric.AttributeSetBuilder by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10115
Enable realistic View animations in the simulator https://github.com/robolectric/robolectric/pull/10117
Inject a Motion event at simulator startup https://github.com/robolectric/robolectric/pull/10118
Update kotlin monorepo to v2.1.20 by @renovate in https://github.com/robolectric/robolectric/pull/10127
Update roborazzi to v1.43.1 by @renovate in https://github.com/robolectric/robolectric/pull/10129
Update dependency androidx.compose:compose-bom to v2025.03.00 by @renovate in https://github.com/robolectric/robolectric/pull/10130
Update dependency com.ibm.icu:icu4j to v77 by @renovate in https://github.com/robolectric/robolectric/pull/10131
Update error.prone to v2.37.0 by @renovate in https://github.com/robolectric/robolectric/pull/10132
Update Dockerfile for devcontainer by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10133
CellIdentityNrBuilder's default NCI should be UNAVAILABLE_LONG https://github.com/robolectric/robolectric/pull/10134
Fix function signature of BackMotionEvent for B and the Parcel of StorageStats https://github.com/robolectric/robolectric/pull/10135
Fixes pulled from Android Google. https://github.com/robolectric/robolectric/pull/10136
Simplify jar arguments to SimulatorMain https://github.com/robolectric/robolectric/pull/10139
Add support to ShadowSurfaceView to emit onSurfaceChanged() calls https://github.com/robolectric/robolectric/pull/10137
Add support for CellInfo construction for GSM and WCDMA https://github.com/robolectric/robolectric/pull/10142
Update test case in FocusRequesterTest by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10144
Remove deprecated ManifestIdentifier constructor by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10121
Update guava monorepo to v33.4.6-jre by @renovate in https://github.com/robolectric/robolectric/pull/10126
ShadowParcelFileDescriptor: Improve dup() for CreatePipe by reopening the file https://github.com/robolectric/robolectric/pull/10145
Update to google-java-format 1.26.0 by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10146
Update Android Gradle Plugin by @renovate in https://github.com/robolectric/robolectric/pull/10147
Update dependency androidx.compose:compose-bom to v2025.03.01 by @renovate in https://github.com/robolectric/robolectric/pull/10148
Update dependency com.googlecode.libphonenumber:libphonenumber to v9.0.2 by @renovate in https://github.com/robolectric/robolectric/pull/10150
Update asm to v9.8 by @renovate in https://github.com/robolectric/robolectric/pull/10151
Add a unit test for CollectionInfo.obtain() by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10152
Replace deprecated usages of ExpectedException.none() by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10149
ShadowServiceManager gets Bluetooth service name from BluetoothAdapter if needed https://github.com/robolectric/robolectric/pull/10153
Fix order of for processing ShadowMediaCodec buffer queues https://github.com/robolectric/robolectric/pull/10155
Remove unnecessary Lollipop references by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10157
Deprecate the :shadows:playservices module by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10124
Add receiver export flag validation behind a flag by @hoisie in https://github.com/robolectric/robolectric/pull/10160
Use fully-qualified RuntimeEnvironment class name in ShadowProviderGenerator by @hoisie in https://github.com/robolectric/robolectric/pull/10159
Fix shadows for AlwaysOnHotwordDetector.RefreshAvailabil{,i}tyTask by @hoisie in https://github.com/robolectric/robolectric/pull/10162
Shadow of TelephonyManager: Add isDeviceVoiceCapable, getVoiceActivationState, and getDataActivationState methods. https://github.com/robolectric/robolectric/pull/10140
Update dependency org.jacoco:org.jacoco.agent to v0.8.13 by @renovate in https://github.com/robolectric/robolectric/pull/10163
Update mockito monorepo to v5.17.0 by @renovate in https://github.com/robolectric/robolectric/pull/10165
Update dependency androidx.recyclerview:recyclerview to v1.4.0 by @renovate in https://github.com/robolectric/robolectric/pull/10164
Update ShadowSatelliteManager for new Android B function changes. https://github.com/robolectric/robolectric/pull/10170
Add a builder function to set the SDK instead of always taking latest. https://github.com/robolectric/robolectric/pull/10172
Update ShadowCameraDeviceImpl constructor to apply to baklava+. https://github.com/robolectric/robolectric/pull/10177
Extend support of ShadowRoleManager to additional API https://github.com/robolectric/robolectric/pull/10178
Add test to PersistableBundle by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10180
Fix RobolectricTestRunnerMultiApiTest by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10167
Remove deprecated methods in Qualifiers by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10179
Use Objects.requireNonNull() instead of Preconditions.checkNotNull() from Guava by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10175
Update error on AttributeSetBuilderImpl to point users towards API level. https://github.com/robolectric/robolectric/pull/10181
Remove the deprecated XmlResourceParserImpl constructor. by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10182
Remove some deprecated methods in ShadowApplication by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10183
Update dependency com.googlecode.libphonenumber:libphonenumber to v9.0.3 by @renovate in https://github.com/robolectric/robolectric/pull/10186
Update dependency com.diffplug.spotless:spotless-plugin-gradle to v7.0.3 by @renovate in https://github.com/robolectric/robolectric/pull/10185
Remove deprecated ShadowApplication#getAppWidgetManager() method by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10184
Migrate to Objects#requireNonNull() by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10188
Get advertisement data from ShadowBluetoothAdvertiser. https://github.com/robolectric/robolectric/pull/10189
Remove deprecated RoboSettings by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10187
fixed negative ids that which cause ArrayOutOfBounds by @alphapaca in https://github.com/robolectric/robolectric/pull/10104
Remove deprecated PackageItemData#getClassName() method by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10190
Remove deprecated ShadowApplication#getBluetoothAdapter() method by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10191
Fix two potential ConcurrentModificationExceptions in ShadowLauncherApps https://github.com/robolectric/robolectric/pull/10194
Use CopyOnWriteArrayList for ShadowDisplayManagerGlobal.callbacks https://github.com/robolectric/robolectric/pull/10195
Simulator misc improvements by @utzcoz in https://github.com/robolectric/robolectric/pull/10277
Reland SDK35 for Android Emulator testing on CI by @utzcoz in https://github.com/robolectric/robolectric/pull/9945
fix(deps): update dependency com.googlecode.libphonenumber:libphonenumber to v9.0.5 by @renovate in https://github.com/robolectric/robolectric/pull/10280
chore(deps): update dependency com.android.library to v8.10.0 by @renovate in https://github.com/robolectric/robolectric/pull/10281
fix(deps): update dependency com.android.tools:common to v31.10.0 by @renovate in https://github.com/robolectric/robolectric/pull/10283
fix(deps): update dependency androidx.compose:compose-bom to v2025.05.00 by @renovate in https://github.com/robolectric/robolectric/pull/10282
Increase PR limit for Renovate by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10284
integration_tests: Exclude androidTest for modules that not required by @utzcoz in https://github.com/robolectric/robolectric/pull/10279
Add getDefaultSensor(int type, boolean wakeUpSensor) and corresponding tests. https://github.com/robolectric/robolectric/pull/10276
Define a builder for telephony.SignalStrength https://github.com/robolectric/robolectric/pull/10286
Use Gradle Kotlin DSL in Simulator Gradle Plugin by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10278
Remove nonsensical helper method from ShadowAlertDialog https://github.com/robolectric/robolectric/pull/10290
Synchronize RenderNodeAnimator with Robolectric's Choreographer https://github.com/robolectric/robolectric/pull/10289
Adjust to post-Baklava indevelopment Android framework changes. https://github.com/robolectric/robolectric/pull/10293
Remove the release-notes-template.md template by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10304
Remove the update-cpp.sh script by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10303
Remove useRealScrolling check in ShadowAbsListView https://github.com/robolectric/robolectric/pull/10306
Change ShadowSensorManager.getDefaultSensor to retrieve the sensor based on wakeUpSensor flag instead of setting. https://github.com/robolectric/robolectric/pull/10307
Add functionality to block shadow BluetoothSocket connections until other events. https://github.com/robolectric/robolectric/pull/10308
Fix failing test on master by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10305
Add method for injecting custom IOExceptions. https://github.com/robolectric/robolectric/pull/10309
Add property to allow tests to declare platform permissions https://github.com/robolectric/robolectric/pull/10312
Add configuration for Gemini Code Assist by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10311
Add a top-level Choreographer frame callback while the simulator is running https://github.com/robolectric/robolectric/pull/10313
Update dependency com.googlecode.libphonenumber:libphonenumber to v9.0.6 by @renovate in https://github.com/robolectric/robolectric/pull/10317
Update dependency gradle to v8.14.1 by @renovate in https://github.com/robolectric/robolectric/pull/10318
Add write descriptor function for API 33 in ShadowBluetoothGatt by @KeithYokoma in https://github.com/robolectric/robolectric/pull/10310
Update mockito monorepo to v5.18.0 by @renovate in https://github.com/robolectric/robolectric/pull/10319
Update AndroidX by @renovate in https://github.com/robolectric/robolectric/pull/10316
Update @Config's minSdk in some tests by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10321
Remove obsolete InDevelopment annotation from shadow methods. https://github.com/robolectric/robolectric/pull/10322
Merge branch 'google' into 'master' by @hoisie in https://github.com/robolectric/robolectric/pull/10323
Make Robolectric simulator background white and clear the screen. https://github.com/robolectric/robolectric/pull/10274
Update technique to locate the local resource apk by @hoisie in https://github.com/robolectric/robolectric/pull/10326
Add some additional JVM flags for the simulator by @hoisie in https://github.com/robolectric/robolectric/pull/10327
Fix Java code style by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10328
Add implementation for removeBond to ShadowCompanionDeviceManager. https://github.com/robolectric/robolectric/pull/10325
Use Config.OLDEST_SDK in tests instead of hardcoded value by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10331
Add more meaningful comments for ShadowUIModeManagerTest by @utzcoz in https://github.com/robolectric/robolectric/pull/10332
Reduce public fields for ShadowUIModeManager by @utzcoz in https://github.com/robolectric/robolectric/pull/10333
Update Android Gradle Plugin by @renovate in https://github.com/robolectric/robolectric/pull/10334
Update mcr.microsoft.com/devcontainers/base Docker tag to v2 by @renovate in https://github.com/robolectric/robolectric/pull/10338
Update roborazzi to v1.44.0 by @renovate in https://github.com/robolectric/robolectric/pull/10337
Update dependency com.diffplug.spotless:spotless-plugin-gradle to v7.0.4 by @renovate in https://github.com/robolectric/robolectric/pull/10336
Enable SpannedString assertion in ResourcesTest by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10341
Remove v14 qualifier by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10345
Replace PowerMock's Xstream module with Objenesis by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10346
Fix variable name in GetInstallerPackageNameModeConfigurer#valueFrom() by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10344
Update ActivityData#getTargetAttr() to use its xmlns argument by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10343
Add missing SCM metadata when generating POM files by @hoisie in https://github.com/robolectric/robolectric/pull/10348
Rename ShadowUIModeManager to ShadowUiModeManager by @utzcoz in https://github.com/robolectric/robolectric/pull/10340
Update the SimulatorPlugin for publishing in the Gradle Plugin Portal by @hoisie in https://github.com/robolectric/robolectric/pull/10349
Allow for a gradual migration from ShadowUIModeManager to ShadowUiModeManager by @hoisie in https://github.com/robolectric/robolectric/pull/10352
Refactor test configuration into a shared function by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10351
Reuse ShadowUiModeManager in ShadowUiModeManagerTest by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10356
Deduplicate MetaData#getColor() and ResourceHelper#getColor() by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10355
Provide an initial value for DeprecatedTestRunnerDefaultConfigProvider.globalConfig https://github.com/robolectric/robolectric/pull/10357
Wire up the VirtualDevice#getDisplayIds() in the ShadowVirtualDeviceManager. https://github.com/robolectric/robolectric/pull/10358
Remove unused field in Sandbox by @MGaetan89 in https://github.com/robolectric/robolectric/pull/10354
Remove the call to setAlwaysConsumeSystemBars in ShadowWindowManagerImpl https://github.com/robolectric/robolectric/pull/10363
Revert recent ShadowUIManager rename changes by @utzcoz in https://github.com/robolectric/robolectric/pull/10362
Temporarily make ShadowUIModeManager.currentModeType public by @hoisie in https://github.com/robolectric/robolectric/pull/10364
Set the simulator-gradle-plugin version to 1.0-SNAPSHOT by @hoisie in https://github.com/robolectric/robolectric/pull/10366
New Contributors
@yschimke made their first contribution in https://github.com/robolectric/robolectric/pull/9801
@renovate made their first contribution in https://github.com/robolectric/robolectric/pull/10038
@alphapaca made their first contribution in https://github.com/robolectric/robolectric/pull/10104
@KeithYokoma made their first contribution in https://github.com/robolectric/robolectric/pull/10310
Full Changelog: https://github.com/robolectric/robolectric/compare/robolectric-4.14.1...robolectric-4.15