)]}'
{
  "log": [
    {
      "commit": "2e372627d0ec70e67721d18566be21bf18fdf860",
      "tree": "6fab9fd0574975aa2bb03d0220dce38f8b0e4528",
      "parents": [
        "26d5dc6063e1c87919d1f85d4ee6d4250241c624"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Fri Aug 14 15:46:50 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Fri Aug 14 16:06:02 2026"
      },
      "message": "Update Renovate to have a single PR for AGP \u0026 Lint\n\nFollow-up of #11435\n"
    },
    {
      "commit": "26d5dc6063e1c87919d1f85d4ee6d4250241c624",
      "tree": "08bee9a565e93556858a5cf474f4fc3d7d8a1763",
      "parents": [
        "6a3cfca5cd3429c139faa8a2452aff8ca9b5dfe9"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Fri Aug 14 14:23:05 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Fri Aug 14 15:04:54 2026"
      },
      "message": "Use a single Renovate group for all AGP packages\n\nThis PR fixes the duplicated Renovate PRs related to AGP (for example https://github\n.com/robolectric/robolectric/pull/11360 and https://github.com/robolectric/robolectric/pull/11361).\nThis properly use `matchDepNames` for dependencies, instead of `matchPackageNames`, which is for packages.\n"
    },
    {
      "commit": "6a3cfca5cd3429c139faa8a2452aff8ca9b5dfe9",
      "tree": "32f51a3affe9f2adab69a4615633ac0c8018d280",
      "parents": [
        "61f190105d51d1154cc80b7e71f662f694497000"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 03 18:38:16 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Fri Aug 14 14:42:06 2026"
      },
      "message": "Optimize `SortedVector.indexOf` using binary search\n\nReplace O(N) linear search in `SortedVector.indexOf` with O(log N) binary search using `Collections.binarySearch`.\n\n**Results**\n\nReduced lookup execution time from 4,946 ms to 46 ms (~105x speedup) for 600,000 queries on 5,000 elements.\n\n**Note:** this was reported and fixed by Gemini.\n"
    },
    {
      "commit": "61f190105d51d1154cc80b7e71f662f694497000",
      "tree": "c32108fa7892e0f04ec7a12c0f9341a667f852cd",
      "parents": [
        "d1cda2b3bf098594298dc0e4dd171529a6b12083"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 10 20:54:57 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Fri Aug 14 07:29:17 2026"
      },
      "message": "Update `graphics_tests.yml` to run Roborazzi tests\n\nSince 593166466feddc80d82021cb4a958f90b44ff1f9, Roborazzi tests were no longer ran. This PR restore these tests.\nI\u0027ve simplified `RoborazziCaptureTest` by removing the `hardwareRendererEnvironment` wrapper, which didn\u0027t do anything.\nI\u0027ve also removed the `org.gradle.workers.max` property to let Gradle handle it by itself.\n"
    },
    {
      "commit": "d1cda2b3bf098594298dc0e4dd171529a6b12083",
      "tree": "1f3bea0590a695e742dde55f25bd9fa97ca6bdb2",
      "parents": [
        "adb25ccb3f6d1a024f40ec98d42387c086c7535e"
      ],
      "author": {
        "name": "utzcoz",
        "email": "utzcoz@outlook.com",
        "time": "Thu Aug 13 14:53:44 2026"
      },
      "committer": {
        "name": "Michael Hoisie",
        "email": "hoisie@gmail.com",
        "time": "Thu Aug 13 21:55:05 2026"
      },
      "message": "Update Conscrypt to 2.6.2\n\n2.6.2 is the first 2.6.x release whose native libraries are built against an\nolder GLIBC again, which is what makes reverting the 2.5.2 pin safe:\n\n  $ objdump -T libconscrypt_openjdk_jni-linux-*.so | grep -o \u0027GLIBC_[0-9.]*\u0027 | sort -uV | tail -1\n                  linux-x86_64   linux-aarch_64\n  2.6.0/2.6.1 -\u003e  GLIBC_2.35     GLIBC_2.34\n  2.6.2       -\u003e  GLIBC_2.14     GLIBC_2.17\n\nThe JNI library therefore loads again on RHEL 9, Rocky Linux 9 and other\ndistributions in that family, which ship GLIBC 2.34.\n\nFor #11362\n\nSigned-off-by: utzcoz \u003cutzcoz@outlook.com\u003e\n"
    },
    {
      "commit": "adb25ccb3f6d1a024f40ec98d42387c086c7535e",
      "tree": "3c4d421b44b61adbe83f3eedd51685e5f2f9f15e",
      "parents": [
        "01abfb88df63a481495858929650903358e6ea5f"
      ],
      "author": {
        "name": "utzcoz",
        "email": "utzcoz@outlook.com",
        "time": "Thu Aug 13 14:52:15 2026"
      },
      "committer": {
        "name": "Michael Hoisie",
        "email": "hoisie@gmail.com",
        "time": "Thu Aug 13 21:55:05 2026"
      },
      "message": "Revert \"Downgrade Conscrypt to 2.5.2 to restore GLIBC 2.34 compatibility\"\n\nThis reverts commit 93d50dbc1678c688cca6e2fa855dbd04a85e2349.\n\nUpstream Conscrypt has moved its release build to an older toolchain, so the\nGLIBC 2.35 requirement that motivated the pin is gone as of 2.6.2:\n\n  $ objdump -T libconscrypt_openjdk_jni-linux-x86_64.so | grep -o \u0027GLIBC_[0-9.]*\u0027 | sort -uV | tail -1\n  2.6.0 -\u003e GLIBC_2.35\n  2.6.2 -\u003e GLIBC_2.14\n\nThe 2.6.2 uber jar also ships a libconscrypt_openjdk_jni osx-aarch_64 prebuilt\nagain, so ConscryptModeConfigurer can go back to defaulting to\nConscryptMode.Mode.ON everywhere, and org.conscrypt:conscrypt-openjdk-uber no\nlonger needs to sit in Renovate\u0027s ignoreDeps.\n\nThis restores the 2.6.1 baseline; the bump to 2.6.2 follows in the next commit.\n\nThe revert conflicted in .github/renovate.json because 488a66bad (\"Remove the\n`:shadows:httpclient` module\") dropped the org.apache.httpcomponents entries\nfrom ignoreDeps after the pin landed. Only the conscrypt entry is removed here;\nthe httpcomponents entries stay removed.\n\nFor #11362\n\nSigned-off-by: utzcoz \u003cutzcoz@outlook.com\u003e\n"
    },
    {
      "commit": "01abfb88df63a481495858929650903358e6ea5f",
      "tree": "d47d40e8836fc3785b1029267dbc696e79d2d070",
      "parents": [
        "83dd1094791d666ac7c2baa7c027dfe8962fab13"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Wed Aug 12 15:12:43 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Wed Aug 12 15:57:23 2026"
      },
      "message": "Run graphics tests on macOS 26 Intel\n\nRun the graphics tests on macOS 26 Intel (instead of macOS 15 Intel).\n\nHere are the tools on macOS 15: https://github.com/actions/runner-images/blob/main/images/macos/macos-15-Readme.md\nHere are the tools on macOS 26: https://github.com/actions/runner-images/blob/main/images/macos/macos-26-Readme.md\n"
    },
    {
      "commit": "83dd1094791d666ac7c2baa7c027dfe8962fab13",
      "tree": "3936e28d6791ec362eda74794ad772a64ae0f2b7",
      "parents": [
        "db92eb63f209a8342785bf5f43dae4d9aa1bc85f"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Wed Aug 12 13:39:35 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Wed Aug 12 15:11:10 2026"
      },
      "message": "Update `tests.yml`\n\nThe tests artifacts are now only uploaded if tests fail. Let me know if there was a need to have them when tests pass.\nI\u0027ve also removed the `org.gradle.workers.max` property to let Gradle handle it by itself.\n"
    },
    {
      "commit": "db92eb63f209a8342785bf5f43dae4d9aa1bc85f",
      "tree": "ec255045218adc010cc0b971238fbdee9bef2585",
      "parents": [
        "2d0739acafaec24e8b751eb94d1239941abb7838"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 10 15:48:45 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 10 18:48:15 2026"
      },
      "message": "Use caching and parallel mode in `gradle_tasks_validation.yml`\n\nIn the `gradle_tasks_validation.yml` workflow, this PR enables:\n- caching for the `:aggregateDocs` task.\n- caching for the `:javadocJar` task.\n\nIt also uses explicit names for each step.\n"
    },
    {
      "commit": "2d0739acafaec24e8b751eb94d1239941abb7838",
      "tree": "8fcc3c998936fb3834c7849ce2b195473d452775",
      "parents": [
        "60947713ed3162ff0ce9a429e054c7d1c1e527e0"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Aug 06 12:27:56 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 10 15:34:26 2026"
      },
      "message": "Optimize `AarDepsPlugin` using Gradle configuration avoidance\n\n- Replace `afterEvaluate` and eager `forEach` on configurations with lazy `configureEach`.\n- Use `configureEach` instead of `forEach` for `JavaCompile` tasks to leverage Task Configuration Avoidance.\n- Clean up variable allocations in `TransformOutputs`.\n"
    },
    {
      "commit": "60947713ed3162ff0ce9a429e054c7d1c1e527e0",
      "tree": "3f402c58947e42c0fb02362986e141b12064261a",
      "parents": [
        "d42425fb3bd717e441982df8aa57338840372bc1"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 10 14:46:49 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 10 15:04:05 2026"
      },
      "message": "Add `gradle/actions/setup-gradle` to `check_code_style`\n\nThis PR adds the `gradle/actions/setup-gradle` step to the `check_code_style` workflow.\nThis allows Gradle cache to be stored and reused between workflow runs.\n"
    },
    {
      "commit": "d42425fb3bd717e441982df8aa57338840372bc1",
      "tree": "7934b31247b81da8875a0bd9bed3da91ba08250e",
      "parents": [
        "9a7f0bfad8baef23e60ad3c2aeb982d5adc8f560"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "c_Gaetan.MULLER@swissquote.ch",
        "time": "Fri Nov 21 06:34:43 2025"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 10 14:22:45 2026"
      },
      "message": "Adjust Gradle\u0027s properties\n\nI\u0027ve asked Gemini 3 how to improve Robolectric build time with Gradle, and this is what it suggested:\n- Enable Gradle\u0027s Configuration Cache\n- Enable Gradle\u0027s Configuration on Demand\n- Enable Gradle\u0027s Parallelism for the Tooling API\n- Increase the memory limit\n"
    },
    {
      "commit": "9a7f0bfad8baef23e60ad3c2aeb982d5adc8f560",
      "tree": "708f6961513b522da4f5004342fcafa17666a5c4",
      "parents": [
        "488a66bad96bf9149858a0b4a9d9fd81dfc20880"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Wed Aug 05 12:47:30 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 10 11:41:08 2026"
      },
      "message": "Run Android Lint last in `check_code_style.yml`\n\nThe Android Lint step takes 4 or 5min to complete, while Spotless and Detekt need about 20seconds.\nThis moves Android Lint as the last step of the workflow, so formatting issues are reported faster.\n"
    },
    {
      "commit": "488a66bad96bf9149858a0b4a9d9fd81dfc20880",
      "tree": "4a99c606284ea0aa673813b7e61faaf342e2e79a",
      "parents": [
        "6fcb6f859eb8b8bac4232805cf2d812051e943f6"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 23 16:00:18 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 10 09:40:16 2026"
      },
      "message": "Remove the `:shadows:httpclient` module\n\nIt was unmaintained for many years and deprecated in Robolectric 4.17.\nIt is time to properly say goodbye to Apache\u0027s HTTP client on Android.\n"
    },
    {
      "commit": "6fcb6f859eb8b8bac4232805cf2d812051e943f6",
      "tree": "42a235b196cc2014b18f4598ee4ae7f2e7e37162",
      "parents": [
        "1acb14f46b4c3efe6069c761ac284764b09c7b53"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Aug 10 09:00:33 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 10 09:21:06 2026"
      },
      "message": "Update ksp monorepo to v2.3.11"
    },
    {
      "commit": "1acb14f46b4c3efe6069c761ac284764b09c7b53",
      "tree": "b886cb1397144c66c76880d30f2b5fb3dbe502ef",
      "parents": [
        "c6eb5aca23042381139748027288fa9e97c55d7f"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Aug 10 08:25:08 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 10 08:58:41 2026"
      },
      "message": "Update dependency org.bouncycastle:bc-jdk18on-bom to v1.85.2"
    },
    {
      "commit": "c6eb5aca23042381139748027288fa9e97c55d7f",
      "tree": "8f01ab1cb8d4cc91c2f3e062bfefbe2db93b2869",
      "parents": [
        "0b7b5d26595454e874c8cea51cc1ff07460dfaef"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Aug 10 07:51:40 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 10 08:23:53 2026"
      },
      "message": "Update dependency org.junit:junit-bom to v6.1.3"
    },
    {
      "commit": "0b7b5d26595454e874c8cea51cc1ff07460dfaef",
      "tree": "a3f2ce77ac2d59bdd07b0bdb466c4e47b8e4aaf2",
      "parents": [
        "c511dde5b15fe7b923acb4837fa429320d1277e4"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Aug 10 07:29:32 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 10 07:50:24 2026"
      },
      "message": "Update Gradle to v9.7.0"
    },
    {
      "commit": "c511dde5b15fe7b923acb4837fa429320d1277e4",
      "tree": "88d62463f9efb603beeb77dc0fd0b8d27cd82b7b",
      "parents": [
        "d6cd4e4da64b5c1db593a7ca6c909537f5668dce"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Aug 10 02:03:56 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 10 07:03:48 2026"
      },
      "message": "Update roborazzi to v1.71.0"
    },
    {
      "commit": "d6cd4e4da64b5c1db593a7ca6c909537f5668dce",
      "tree": "9e1b4639c90a6c4ec18ff2cd01a39be674f02d7d",
      "parents": [
        "7b81334f933e6ef2d8acbc22db5f3fee624c529d"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Aug 06 08:28:28 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Aug 06 09:35:54 2026"
      },
      "message": "Define custom `CommandLineArgumentProvider` to define `jvmArgs` in `TestTaskConfiguration`\n\nThis PR creates two `CommandLineArgumentProvider` implementation in `TestTaskConfiguration` to set up JVM args lazily:\n- `RobolectricJvmArgumentsProvider` reads the `robolectric.*` system properties and formats them as `-D\u003ckey\u003e\u003d\u003cvalue\u003e`.\n- `DefaultJvmArgumentsProvider` returns the previously `DEFAULT_JVM_ARGS` hardcoded list of arguments.\n"
    },
    {
      "commit": "7b81334f933e6ef2d8acbc22db5f3fee624c529d",
      "tree": "ddc424d008c770681d168a6fa73473e1b0a7be1a",
      "parents": [
        "adaef339b3af1dd0af04b64bc871d27ff1de8b3b"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Wed Aug 05 07:41:23 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Wed Aug 05 13:24:01 2026"
      },
      "message": "Use Spotless to format Java files\n\nInstead of manually downloading `google-java-format` in the GitHub Action, we now use Spotless to validate Java code\nstyle.\nThe advantage is that we can now run the `spotlessCheck`/`spotlessApply` Gradle task for any Java or Kotlin change, not\nonly Kotlin.\nThe main difference is that we now validate every Java source file (except for the defined exclusions), and not just the\n modified ones.\n\nThe dedicated `google-java-format` configuration for Renovate was update to work with this new setup.\n"
    },
    {
      "commit": "adaef339b3af1dd0af04b64bc871d27ff1de8b3b",
      "tree": "35e738f59171f387aa63a93100fcbcf155aa0280",
      "parents": [
        "e8c2cca5a2487e4a8c39dc9e9b5b86c4b631e112"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Wed Aug 05 08:03:58 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Wed Aug 05 08:22:40 2026"
      },
      "message": "Update ktfmt to its latest version\n\nktfmt was pinned to version `0.49` in `SpotlessPlugin`.\nI\u0027ve bumped it to its latest version (`0.64`), and configured Renovate so it can submit PRs for it in the future.\nI\u0027ve run `:spotlessApply` to make sure that all files are compliant with the latest version.\n"
    },
    {
      "commit": "e8c2cca5a2487e4a8c39dc9e9b5b86c4b631e112",
      "tree": "92ccf243f19057fd06fad81164340d19f2bf38f7",
      "parents": [
        "6848da304ff3fae3f408ae61ca306976d229f0b1"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Tue Aug 04 06:37:02 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Tue Aug 04 18:44:50 2026"
      },
      "message": "Switch `actions/setup-java` from `adopt` to `temurin`\n\nThe former is not updated anymore, and should be replaced by the latter.\nSee the [official documentation](https://github.com/actions/setup-java#supported-distributions).\n\u003cimg width\u003d\"784\" height\u003d\"78\" alt\u003d\"Screenshot 2026-07-27 at 07 23 32\" src\u003d\"https://github.com/user-attachments/assets/523cd5b2-79f7-4859-81a4-4b261a04beaf\" /\u003e\n"
    },
    {
      "commit": "6848da304ff3fae3f408ae61ca306976d229f0b1",
      "tree": "6808fea8829d860b9485d5181c4d9c4a0a0957c6",
      "parents": [
        "84055821f0ffdc690ebb332ff546036072e5852e"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Tue Aug 04 05:15:08 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Tue Aug 04 05:49:49 2026"
      },
      "message": "Optimize `XmlResourceParserImpl.isWhitespace` performance\n\nReplace regex splitting (`text.split(\"\\\\s\")`) in `isWhitespace` with a direct `Character.isWhitespace` character scan\nloop to eliminate regular expression compilation and string array allocations during XML parsing.\n\n**Results**\n\nReduced whitespace check execution time from 1,676 ms to 65 ms (~25.9x speedup) for 7,000,000 calls.\n\n**Note:** this was reported and fixed by Gemini.\n"
    },
    {
      "commit": "84055821f0ffdc690ebb332ff546036072e5852e",
      "tree": "471ea4929a1a9d7f7ef99fc8625fd4de2321e271",
      "parents": [
        "5f0dfcf31b2e322f53e78e611a517df27855c437"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 03 13:02:07 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 03 15:59:52 2026"
      },
      "message": "Pre-compile regex pattern in `ResName`\n\nPre-compile `STRIP_PREFIX_PATTERN` constant in `qualifyResName` and replace `split` usage in `qualifyFromFilePath` with\n`indexOf` and `substring` to eliminate regex pattern compilation on resource name qualification and file path parsing.\n\n**Results**\n\n| Metric                        | Before Optimization | Last Optimized Run | Difference       |\n|-------------------------------|---------------------|--------------------|------------------|\n| Total Execution Time (2M Ops) | 612.84 ms           | 445.08 ms          | 27.4% reduction  |\n| Average Latency per Operation | 306.42 ns/op        | 222.54 ns/op       | 1.38x throughput |\n\n**Note:** this was reported and fixed by Gemini.\n"
    },
    {
      "commit": "5f0dfcf31b2e322f53e78e611a517df27855c437",
      "tree": "e261d495faecb41e6af6c4dbad9b2fe1bfe4b645",
      "parents": [
        "d93938a2a3fdcf0dd5211297d95ad89379982841"
      ],
      "author": {
        "name": "Brett Chabot",
        "email": "brettchabot@google.com",
        "time": "Wed Jul 29 00:44:42 2026"
      },
      "committer": {
        "name": "brettchabot",
        "email": "brettchabot@google.com",
        "time": "Mon Aug 03 15:34:22 2026"
      },
      "message": "Handle main looper death due to Throwable.\n\nPreviously ShadowPausedLooper.loop only caught Exceptions.\nIf a Looper task threw an Error or other Throwable this would\ncircumvent all the LooperControlService handling, which\ncould lead to deadlocks when calling Looper control operations\nlike idle().\n\nThis commit fixes the issue by catching and storing Throwable\ninstead of just Exception.\n\nPiperOrigin-RevId: 955568725\n"
    },
    {
      "commit": "d93938a2a3fdcf0dd5211297d95ad89379982841",
      "tree": "fd9edd5e69ac3f9cdc562c40f77b7947d58c8982",
      "parents": [
        "07429eb9f599aa55fc9319a4a9b228b80cfe826f"
      ],
      "author": {
        "name": "Brett Chabot",
        "email": "brettchabot@google.com",
        "time": "Wed Jul 29 00:44:07 2026"
      },
      "committer": {
        "name": "brettchabot",
        "email": "brettchabot@google.com",
        "time": "Mon Aug 03 15:34:22 2026"
      },
      "message": "Fix jank log spam on SDK 37+ by translating FrameInfo timestamps.\n\nIn SDK 37+, real draw traversals are enabled by default, causing the native\nrenderer to run and JankTracker to calculate frame durations. However, the\ninput timestamps in FrameInfo (like IntendedVsync) were in Robolectric\u0027s\nsimulated clock domain, while native completion timestamps were in the host\u0027s\nreal monotonic clock domain. This mismatch resulted in massive calculated frame\ndurations (e.g., hours/days), spamming the logs with warnings from JankTracker.\n\nThis change shadows syncAndDrawFrame(FrameInfo) in\nShadowNativeHardwareRenderer to translate Java-populated timestamps to the host\nclock domain before calling native, and translate them (plus native-populated\ntimestamps) back to Robolectric\u0027s clock domain after native execution.\n\nWe explicitly exclude Vsync (index 3) from the adjustment to avoid visual\nregressions in screenshot tests (e.g., HyphenationScreenshotTest), which\nwere observed when Vsync was adjusted to large host times.\n\nPiperOrigin-RevId: 955568508\n"
    },
    {
      "commit": "07429eb9f599aa55fc9319a4a9b228b80cfe826f",
      "tree": "f26ef15159d2285c09e8463197939dd53377bec1",
      "parents": [
        "fc9911ccdff64c7ad4f91825a177fd9eb881e701"
      ],
      "author": {
        "name": "Googler",
        "email": "noreply@google.com",
        "time": "Mon Jul 27 23:14:13 2026"
      },
      "committer": {
        "name": "brettchabot",
        "email": "brettchabot@google.com",
        "time": "Mon Aug 03 15:34:22 2026"
      },
      "message": "Add `ShadowProcess.setStartElapsedRealtime`.\n\nThis allows testing interactions with `Process.getStartElapsedRealtime` directly without wrappers.\n\nPiperOrigin-RevId: 954886041\n"
    },
    {
      "commit": "fc9911ccdff64c7ad4f91825a177fd9eb881e701",
      "tree": "d946715dbec145eda26f7cd32acb057cd3b7f07b",
      "parents": [
        "be8282c87d447c7a46a0c08a505e1e8fbe62270d"
      ],
      "author": {
        "name": "Googler",
        "email": "noreply@google.com",
        "time": "Thu Jul 23 22:31:23 2026"
      },
      "committer": {
        "name": "brettchabot",
        "email": "brettchabot@google.com",
        "time": "Mon Aug 03 15:34:22 2026"
      },
      "message": "Add cross-SIM calling support to ShadowImsMmTelManager.\n\n- Implement isCrossSimCallingEnabled and setCrossSimCallingEnabled in ShadowImsMmTelManager.\n- Add unit tests in ShadowImsMmTelManagerTest.\n\nPiperOrigin-RevId: 952990053\n"
    },
    {
      "commit": "be8282c87d447c7a46a0c08a505e1e8fbe62270d",
      "tree": "db03ef27474ec9efc8b7b13c63cef406bcbbea39",
      "parents": [
        "b83d7781b942dde05ba695ddf0e04d7507e9547a"
      ],
      "author": {
        "name": "Googler",
        "email": "noreply@google.com",
        "time": "Wed Jul 22 18:30:22 2026"
      },
      "committer": {
        "name": "brettchabot",
        "email": "brettchabot@google.com",
        "time": "Mon Aug 03 15:34:22 2026"
      },
      "message": "Delete ShadowRemoteCallbackList\n\nRenamed ShadowRemoteCallbackListTest to RemoteCallbackListTest\nIt continues to pass even with the shadow deleted, which means we don\u0027t\nneed the shadow.\n\nPiperOrigin-RevId: 952237056\n"
    },
    {
      "commit": "b83d7781b942dde05ba695ddf0e04d7507e9547a",
      "tree": "20f9d8e95cbe928236255724ec19be5a4c5756e9",
      "parents": [
        "677b4f7d660b1bb4846e800b9b571fda4d4a66c7"
      ],
      "author": {
        "name": "Adrian Boziloff",
        "email": "boziloff@google.com",
        "time": "Fri Jul 17 21:44:20 2026"
      },
      "committer": {
        "name": "brettchabot",
        "email": "brettchabot@google.com",
        "time": "Mon Aug 03 15:34:22 2026"
      },
      "message": "Halt resource_files.zip generation for Robolectric builds to enable skipping aapt2 convert.\n\nresource_files.zip is unused by Robolectric builds. We can forego its creation.\n\nBy using a lack of resource_files.zip as a marker, ResourceLinker can skip the costly \u0027aapt2 convert\u0027 step.\n\nPiperOrigin-RevId: 949770100\n"
    },
    {
      "commit": "677b4f7d660b1bb4846e800b9b571fda4d4a66c7",
      "tree": "ec658cef27ecd9de97b2eeb4dc819bd906286c88",
      "parents": [
        "b8a412eed88f3d195cb8aa13472afd9d0ad7cc26"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 03 12:48:35 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 03 15:05:21 2026"
      },
      "message": "Pre-compile regex pattern in `RobolectricTestRunner`\n\nPre-compile `SANITIZE_DIR_PATTERN` in `RobolectricTestRunner` to avoid compiling the regular expression `[^a-zA-Z0-9.-]`\non every test temporary directory generation (`getTempDirName`).\n\n**Results**\n\n| Metric                        | Before Optimization | Last Optimized Run | Difference       |\n|-------------------------------|---------------------|--------------------|------------------|\n| Total Execution Time (1M Ops) | 601.89 ms           | 415.35 ms          | 31.0%            |\n| Average Latency per Operation | 601.89 ns/op        | 415.35 ns/op       | 1.45x throughput |\n\n**Note:** this was reported and fixed by Gemini.\n"
    },
    {
      "commit": "b8a412eed88f3d195cb8aa13472afd9d0ad7cc26",
      "tree": "93836944284aae82b525a84f6d6f25858c255c12",
      "parents": [
        "7e46e93fd86bb21a9ff0d9e19dedc6fcaf516937"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 03 08:19:49 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 03 14:27:55 2026"
      },
      "message": "Pre-compile regex patterns in `InstrumentationConfiguration`\n\nPre-compile `ANDROID_R_PATTERN` (`android.R` and `com.android.internal.R`) and `classesToNotInstrumentPattern`\nconstants in `InstrumentationConfiguration` to avoid compiling regular expressions on every class acquisition\n(`shouldAcquire`) and instrumentation check (`shouldInstrument`).\n\n**Results**\n\n| Metric                        | Before Optimization | Last Optimized Run | Difference       |\n|-------------------------------|---------------------|--------------------|------------------|\n| Total Execution Time (4M Ops) | 1,863.37 ms         | 742.18 ms          | 60.2% reduction  |\n| Average Latency per Operation | 465.84 ns/op        | 185.54 ns/op       | 2.51x throughput |\n\n**Note:** this was reported and fixed by Gemini.\n"
    },
    {
      "commit": "7e46e93fd86bb21a9ff0d9e19dedc6fcaf516937",
      "tree": "12c22048e36df2ea9da5b8eac664c51eaec166b0",
      "parents": [
        "c790bc618e278da95e8c962db230f8e1757756c5"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Aug 03 07:49:01 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 03 08:17:28 2026"
      },
      "message": "Update dependency androidx.constraintlayout:constraintlayout to v2.2.2"
    },
    {
      "commit": "c790bc618e278da95e8c962db230f8e1757756c5",
      "tree": "9297fee53a44d6b6788839fe3499d6aef0bdacd8",
      "parents": [
        "7dcc451b5e3a2f14af159849c4c494991b515c76"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Aug 03 07:16:34 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 03 07:45:54 2026"
      },
      "message": "Update dependency com.diffplug.spotless:spotless-plugin-gradle to v8.9.0"
    },
    {
      "commit": "7dcc451b5e3a2f14af159849c4c494991b515c76",
      "tree": "23eadc192771464893f9ac44f3794822adb117ec",
      "parents": [
        "3a27e4039ad48900742c723c1ffa7ff71ffbe1dc"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Aug 03 06:41:46 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 03 07:12:54 2026"
      },
      "message": "Update dependency google/google-java-format to v1.36.1"
    },
    {
      "commit": "3a27e4039ad48900742c723c1ffa7ff71ffbe1dc",
      "tree": "610ee940c9dc321d100fce5e14834b6d41a5c2ae",
      "parents": [
        "5f13a00cb76e834194b95c2721ff93fbbe357b08"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Aug 03 06:14:20 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 03 06:40:18 2026"
      },
      "message": "Update dependency org.jspecify:jspecify to v1.0.1"
    },
    {
      "commit": "5f13a00cb76e834194b95c2721ff93fbbe357b08",
      "tree": "a6d7df6871cd6fd57c849da38818d7504f3aa07c",
      "parents": [
        "93d50dbc1678c688cca6e2fa855dbd04a85e2349"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Aug 03 00:51:24 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Aug 03 06:12:54 2026"
      },
      "message": "Update dependency com.googlecode.libphonenumber:libphonenumber to v9.0.36"
    },
    {
      "commit": "93d50dbc1678c688cca6e2fa855dbd04a85e2349",
      "tree": "b29fd8c6bda2bdab131cbeec0da3c58dcf1cdc8e",
      "parents": [
        "adcb52d8b79f866940c3d807daedee4b5b518509"
      ],
      "author": {
        "name": "utzcoz",
        "email": "utzcoz@outlook.com",
        "time": "Sat Jul 25 18:36:51 2026"
      },
      "committer": {
        "name": "Michael Hoisie",
        "email": "hoisie@gmail.com",
        "time": "Sat Aug 01 15:53:56 2026"
      },
      "message": "Downgrade Conscrypt to 2.5.2 to restore GLIBC 2.34 compatibility\n\nThe native libraries shipped in conscrypt-openjdk-uber 2.6.0 and later are\nbuilt against a newer toolchain and require GLIBC_2.35:\n\n  $ objdump -T libconscrypt_openjdk_jni-linux-x86_64.so | grep -o \u0027GLIBC_[0-9.]*\u0027 | sort -uV | tail -1\n  2.5.2 -\u003e GLIBC_2.16\n  2.6.0 -\u003e GLIBC_2.35\n  2.6.1 -\u003e GLIBC_2.35\n\nRHEL 9, Rocky Linux 9 and other distributions in that family ship GLIBC 2.34,\nso loading the JNI library fails there during Robolectric initialization:\n\n  java.lang.UnsatisfiedLinkError: /tmp/...libconscrypt_openjdk_jni.so:\n  /lib64/libc.so.6: version `GLIBC_2.35\u0027 not found\n  (required by libconscrypt_openjdk_jni.so)\n\nPin Conscrypt back to 2.5.2 and add it to Renovate\u0027s ignoreDeps so the bump is\nnot reapplied automatically. Once upstream Conscrypt publishes libraries built\nagainst an older GLIBC (google/conscrypt is moving its release build to Ubuntu\n20.04), this pin can be lifted.\n\nReverting the version bump also reverts commit 4395a552e9 (\"Enable Conscrypt\nfor Mac arm64 by default\"): 2.5.2 does not contain a libconscrypt_openjdk_jni\nosx-aarch_64 prebuilt, so ConscryptModeConfigurer has to default to\nConscryptMode.Mode.OFF on Mac arm64 again.\n\nThe XDH KeyPairGenerator removal added in d3df22513a is kept as-is. 2.5.2 does\nnot register that service, so Provider.remove(\"KeyPairGenerator.XDH\") is simply\na no-op there and XDH generation keeps falling back to the JDK provider.\n\nFor #11362\n"
    },
    {
      "commit": "adcb52d8b79f866940c3d807daedee4b5b518509",
      "tree": "170476c13d72de8f6694c8dcce64ec298569b4ab",
      "parents": [
        "fa7704111a06eff4990725853607d4aa1c7b6f22"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Fri Jul 31 09:45:36 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Fri Jul 31 10:08:12 2026"
      },
      "message": "Make Renovate update `google-java-format`\n\nSecond attempt, following on #11387\n"
    },
    {
      "commit": "fa7704111a06eff4990725853607d4aa1c7b6f22",
      "tree": "e51655bdbeb308ef8026d6cc717d8db6ee7704f1",
      "parents": [
        "6833f2cc8c9e810268cfcb3e30bb78a57c9337da"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 30 05:19:25 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Fri Jul 31 09:28:36 2026"
      },
      "message": "Tell Renovate to update `google-java-format`\n\nThis adds a custom manager to Renovate\u0027s configuration so it can update `google-java-format` in te `check_code_style\n.yml` workflow.\n"
    },
    {
      "commit": "6833f2cc8c9e810268cfcb3e30bb78a57c9337da",
      "tree": "77fdc083f657e1b9175de5aae9b887cfaa6fc259",
      "parents": [
        "232680ee8cbe4dbae65689e3cdf1ed21ed56f185"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 30 13:46:32 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Fri Jul 31 06:37:05 2026"
      },
      "message": "Fix Lint errors in `:testapp`\n\nThis PR addresses or ignores Lint errors in the `:testapp` module.\nSince there are no errors left, I\u0027ve enabled build failures on errors in that module.\n\n**Note:** there are still warnings it the module, but those don\u0027t fail the build.\n"
    },
    {
      "commit": "232680ee8cbe4dbae65689e3cdf1ed21ed56f185",
      "tree": "7564afa9f33aa834959bc89bc422dbcc89afe330",
      "parents": [
        "c4e77f33ec4271a1c5f35b627928e2781c5942c3"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Jul 27 07:52:41 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Jul 27 12:20:51 2026"
      },
      "message": "Enable strict plugins validation in `:build-logic:convention`\n\nThis applied the same validation as for the `:simulator-gradle-plugin` plugin.\n"
    },
    {
      "commit": "c4e77f33ec4271a1c5f35b627928e2781c5942c3",
      "tree": "e370d5ef340ccdbc9a5584a0e9bf1ef9f0733245",
      "parents": [
        "913c25dc974d47a785d7ccad591ac5609a97ae0b"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Jul 27 07:44:31 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Jul 27 11:54:15 2026"
      },
      "message": "Simplify shared test setup with Gradle\u0027s lazy API\n\nThis PR simplifies the configuration of shared tests in the `:integration_tests` module for `:androidx_test` and\n`:ctesque`.\n\n- Create a common `configurationAction` to apply to each test source set.\n- Use Gradle\u0027s lazy APIs to access the test source sets.\n"
    },
    {
      "commit": "913c25dc974d47a785d7ccad591ac5609a97ae0b",
      "tree": "81a9b876d1485552ea40c8092b71d0fe5ab8ce1c",
      "parents": [
        "d3fc28b5104164801368caf9f771c14c675445ea"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Jul 27 01:36:25 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Jul 27 04:56:14 2026"
      },
      "message": "Update roborazzi to v1.70.0"
    },
    {
      "commit": "d3fc28b5104164801368caf9f771c14c675445ea",
      "tree": "9dafae093d816bffc5d6aeaccfebd3a0407053e3",
      "parents": [
        "8b2a1b51f0c587ee73b70b790a9925c2e6f5ea9e"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 23 14:39:11 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Fri Jul 24 08:30:56 2026"
      },
      "message": "Fix eager `sdk\u003capi-level\u003e` configuration resolution\n\nFollowing the merge of #11370, we started getting some warnings saying that the `sdk\u003capi-level\u003e` is resolved eagerly.\nThis fixes that by using lazy APIs to configure the `ProvideBuildClasspathTask` task.\n"
    },
    {
      "commit": "8b2a1b51f0c587ee73b70b790a9925c2e6f5ea9e",
      "tree": "2afda01ecb70e67ed2e572333747ce9e3001ab02",
      "parents": [
        "34e68db404102c3a8233ecef165676fd5b4cd702"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Fri Jul 24 06:14:45 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Fri Jul 24 06:42:20 2026"
      },
      "message": "Fail the build if Lint reports an error in `:integration_tests:ctesque`\n\nCurrently, this setting was disabled. But since there are no error, we can safely turn it on.\n\nPart of #10957\n"
    },
    {
      "commit": "34e68db404102c3a8233ecef165676fd5b4cd702",
      "tree": "2066bbcda9dcd9618def5e42e2c24cc90f8e7bec",
      "parents": [
        "5196c7dc52ff2928ee5402ffdcd9a742c57415c0"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 23 13:43:43 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 23 15:05:25 2026"
      },
      "message": "Fix `NoSuchFileException` spam in unit tests logs\n\nWhen running the unit tests, we often get spammed by stacktraces similar to:\n```console\njava.nio.file.NoSuchFileException: /tmp/robolectric-temp_dir4809833000115193958\n\tat java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)\n\tat java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)\n\tat java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)\n\tat java.base/sun.nio.fs.UnixFileAttributeViews$Basic.readAttributes(UnixFileAttributeViews.java:55)\n\tat java.base/sun.nio.fs.UnixFileSystemProvider.readAttributes(UnixFileSystemProvider.java:171)\n\tat java.base/sun.nio.fs.LinuxFileSystemProvider.readAttributes(LinuxFileSystemProvider.java:99)\n\tat java.base/java.nio.file.Files.readAttributes(Files.java:1854)\n\tat java.base/java.nio.file.FileTreeWalker.getAttributes(FileTreeWalker.java:220)\n\tat java.base/java.nio.file.FileTreeWalker.visit(FileTreeWalker.java:277)\n\tat java.base/java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:323)\n\tat java.base/java.nio.file.Files.walkFileTree(Files.java:2792)\n\tat java.base/java.nio.file.Files.walkFileTree(Files.java:2870)\n\tat org.robolectric.util.TempDirectory.clearDirectory(TempDirectory.java:158)\n\tat org.robolectric.util.TempDirectory.destroy(TempDirectory.java:141)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)\n\tat java.base/java.lang.Thread.run(Thread.java:1583)\n```\n\nIt seems that sometimes the temp directory does not exist, so `Files.walkFileTree` throws an exception.\nThis adds a safety check to ensure that we only call `Files.walkFileTree` when the temp directory exists.\n"
    },
    {
      "commit": "5196c7dc52ff2928ee5402ffdcd9a742c57415c0",
      "tree": "954286b301f2abafe4e014e4e5d8697522e35b01",
      "parents": [
        "59f7e081acbab0211512a870d4196755ae35ad92"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 23 12:57:40 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 23 13:27:18 2026"
      },
      "message": "Make the `ProvideBuildClasspathTask` task compatible with Gradle\u0027s Configuration Cache\n\nThis adds necessary inputs/outputs on the `ProvideBuildClasspathTask` so it can work with Configuration Cache.\nI\u0027ve tested this locally both from `master` and with Configuration Cache enabled using the following command:\n```bash\n./gradlew :integration_tests:androidx:provideBuildClasspath\n```\n"
    },
    {
      "commit": "59f7e081acbab0211512a870d4196755ae35ad92",
      "tree": "b502c0ff928a57d21fab802c4941a77ca602071d",
      "parents": [
        "ee63a8ad9512883a4caca8cc6d151a34009c337c"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 23 10:28:22 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 23 11:31:41 2026"
      },
      "message": "Fix Javadoc for `VersionCalculator`\n\nThe Javadoc was badly formatting, so it couldn\u0027t be displayed properly.\n"
    },
    {
      "commit": "ee63a8ad9512883a4caca8cc6d151a34009c337c",
      "tree": "5be666f1e9de3a7c2209910e5c058dd28a2fbb8f",
      "parents": [
        "166d5136a2da781ea226d3e9daa13cd7660e15ec"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Wed Jul 22 09:16:24 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Wed Jul 22 11:05:11 2026"
      },
      "message": "Fix the `:aggregateJavadocs` not found error\n\nWhen Configuration Cache is enabled, the build fails because the `:aggregateJavadocs` task can not be found.\n\nThis PR fixes that by:\n- Always registering the `:aggregateJavadocs` in `AggregateJavadocPlugin`.\n- Removing the `rootProject.gradle.projectsEvaluated` wrapper in `AggregateJavadocPlugin`.\n- Moving the `:aggregateJsondocs` definition out of the `gradle.projectsEvaluated` block.\n\n**Note:** I\u0027ve also moved the `isFailOnError` option inside `AggregateJavadocPlugin`.\nSince the plugin is only applied on the root project, we can get rid of a `rootProject.gradle.projectsEvaluated` block.\n"
    },
    {
      "commit": "166d5136a2da781ea226d3e9daa13cd7660e15ec",
      "tree": "ef204ccf96449a45912e3a70087f90e404327b67",
      "parents": [
        "4d6a476eea0fb445317b93fc84c2f58ef7a7172d"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Wed Jul 22 07:54:31 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Wed Jul 22 08:25:34 2026"
      },
      "message": "Remove Gemini Code Assist\n\nGemini Code Assist has been sunset: https://github.com/robolectric/robolectric.github.io/pull/635#issuecomment-5043242481\n"
    },
    {
      "commit": "4d6a476eea0fb445317b93fc84c2f58ef7a7172d",
      "tree": "0a897c063cb77c41091136a69d3d254bfb0b0ce4",
      "parents": [
        "791ebb9a9ad66245953ff86354878f00970c7ca3"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Fri Jul 17 12:56:28 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Wed Jul 22 08:03:21 2026"
      },
      "message": "Make the `:preinstrumented:instrumentAll` task compatible with Gradle\u0027s Configuration Cache\n\nThe approach is similar to what was done in #11347.\nI\u0027ve created a dedicated `InstrumentTask` task, registered once per API level.\nThe `:instrumentAll` task depends on these new tasks.\nGradle can now run each instrumentation in parallel, or instrument a specific SDK only.\n"
    },
    {
      "commit": "791ebb9a9ad66245953ff86354878f00970c7ca3",
      "tree": "740f094eaa9a4e22f4e5353f6e3356a6ed3ed718",
      "parents": [
        "004db5867b6819e0bc09fd997a6fabd9f8e36578"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Sun Jul 19 11:51:28 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Tue Jul 21 07:57:33 2026"
      },
      "message": "Fix `:processor:generateSdksFile` task not found\n\nThe `ShadowsPlugin` now explicitly depends on the `:generateSdksFile` being available in the `:processor` module.\nThis change adds a check to ensure that the `:processor` module is evaluated before the current project.\n"
    },
    {
      "commit": "004db5867b6819e0bc09fd997a6fabd9f8e36578",
      "tree": "f2f0257c5e1e5bd7ee5a0207697def24bb1c60aa",
      "parents": [
        "8209580118c666726ff70fb3fbeda55fc3c7b6a5"
      ],
      "author": {
        "name": "Simon Marquis",
        "email": "contact@simon-marquis.fr",
        "time": "Mon Jul 20 13:41:30 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Tue Jul 21 06:58:39 2026"
      },
      "message": "Apply suggestion from @gemini-code-assist[bot]\n\nCo-authored-by: gemini-code-assist[bot] \u003c176961590+gemini-code-assist[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "8209580118c666726ff70fb3fbeda55fc3c7b6a5",
      "tree": "f4988168f11116a7ae0fef9760127b293da5af04",
      "parents": [
        "337107d0c7169cef843fcad58023a7644b7da94e"
      ],
      "author": {
        "name": "Simon Marquis",
        "email": "contact@simon-marquis.fr",
        "time": "Mon Jul 20 13:34:40 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Tue Jul 21 06:58:39 2026"
      },
      "message": "Expose BouncyCastle BoM as api dependency\n\nFixes #11363"
    },
    {
      "commit": "337107d0c7169cef843fcad58023a7644b7da94e",
      "tree": "cb878e111f62dca86d055418d2c0b6b15357e33a",
      "parents": [
        "3b5f3657c92e08785f53fa3d76867145704e84ac"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Jul 20 07:03:08 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Jul 20 07:56:28 2026"
      },
      "message": "Update kotlin monorepo to v2.4.10"
    },
    {
      "commit": "3b5f3657c92e08785f53fa3d76867145704e84ac",
      "tree": "4f1ceda29a3da5fa283ef2c7ba1afa322d6afad0",
      "parents": [
        "b1057d20d4e15a67e3094526ae8e89316c2661b7"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Jul 20 06:40:59 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Jul 20 07:01:23 2026"
      },
      "message": "Update dependency org.conscrypt:conscrypt-openjdk-uber to v2.6.1"
    },
    {
      "commit": "b1057d20d4e15a67e3094526ae8e89316c2661b7",
      "tree": "2b1faddfee061f14b3606bc5a5524211b622eb67",
      "parents": [
        "5028e76c4e2db902370ae1455a6ffcca6d3fefc6"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Jul 20 03:04:36 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Jul 20 06:39:52 2026"
      },
      "message": "Update dependency com.googlecode.libphonenumber:libphonenumber to v9.0.35"
    },
    {
      "commit": "5028e76c4e2db902370ae1455a6ffcca6d3fefc6",
      "tree": "16ecde337c15b7b835ad1de3926130ad40b2ca50",
      "parents": [
        "88051db6066d6f792b6d3a5907f921b10c83249a"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Tue Jul 14 07:04:44 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Sun Jul 19 09:16:17 2026"
      },
      "message": "Fix warnings in Gradle files\n\nWe had a bunch of deprecation warnings in our Gradle files, mostly coming from the recent Gradle 9.6.0 update.\n"
    },
    {
      "commit": "88051db6066d6f792b6d3a5907f921b10c83249a",
      "tree": "00be8e47544dbefb5102bfb84184230a5fa32141",
      "parents": [
        "614f9714fb351f172c9aea4305c59bb04b99c5de"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Jul 06 03:11:38 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Sun Jul 19 08:46:00 2026"
      },
      "message": "Update roborazzi to v1.65.0"
    },
    {
      "commit": "614f9714fb351f172c9aea4305c59bb04b99c5de",
      "tree": "838e2cc38de2640c5b468cfdc16b0697ba3457d3",
      "parents": [
        "dc8d94928593a05e386c886ec14c26c0e4b13969"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Jul 06 08:15:22 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Sun Jul 19 08:46:00 2026"
      },
      "message": "Update dependency org.jetbrains.kotlin.plugin.compose to v2.4.0"
    },
    {
      "commit": "dc8d94928593a05e386c886ec14c26c0e4b13969",
      "tree": "5fde3e2cf057f8395471ad8b80fe5740e2cd38a3",
      "parents": [
        "5d8fbae2bfcb0df637138cfb5e306cb4551eaf68"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 16 07:45:00 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Sun Jul 19 08:26:05 2026"
      },
      "message": "Make `:preinstrumented:clean` compatible with Gradle\u0027s Configuration Cache\n\nI\u0027ve removed the `doFirst` wrapper to directly use the provided `delete` method.\n"
    },
    {
      "commit": "5d8fbae2bfcb0df637138cfb5e306cb4551eaf68",
      "tree": "cca194be3cd1c650a1c55ea0e101d4dca658bbd3",
      "parents": [
        "f6c38a41a23123c0954e26c28a0699dbcc539a99"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Fri Jul 17 07:25:42 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Sun Jul 19 08:08:35 2026"
      },
      "message": "Make `:integration_tests:jacoco-offline:classes` compatible with Gradle\u0027s Configuration Cache\n\nI\u0027ve created a new dedicated `JacocoInstrumentTask` task, which properly declares its inputs and output.\n\nI\u0027ve also replaced some eager property declarations with the corresponding lazy ones.\n"
    },
    {
      "commit": "f6c38a41a23123c0954e26c28a0699dbcc539a99",
      "tree": "704e7fd67c0f3100938239cf6ae2c9495e15d935",
      "parents": [
        "9e8e6a21b059446f05e4f97d2ea985b88c30ca24"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Fri Jul 17 11:27:50 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Sun Jul 19 07:50:44 2026"
      },
      "message": "Make `:prefetchSdks` and `:prefetchInstrumentedSdks` compatible with Gradle\u0027s Configuration Cache\n\nI\u0027ve introduced a `PrefetchSdkTask` to replace the previous `prefetchSdk` function.\nNow we have one task per API level to prefect the (instrumented) SDK.\nThis allows Gradle to parallelize the work of `:prefetchSdks` and `:prefetchInstrumentedSdks`.\n"
    },
    {
      "commit": "9e8e6a21b059446f05e4f97d2ea985b88c30ca24",
      "tree": "4c01e673c2975d720e9f824d357170d064538512",
      "parents": [
        "94b0858a4ae02a17dbcb99f726c96cea9998bbc4"
      ],
      "author": {
        "name": "utzcoz",
        "email": "utzcoz@outlook.com",
        "time": "Sun Jul 19 06:25:57 2026"
      },
      "committer": {
        "name": "utzcoz",
        "email": "43091780+utzcoz@users.noreply.github.com",
        "time": "Sun Jul 19 07:14:41 2026"
      },
      "message": "ci: let the emulator finish saving its AVD snapshot before hard kill\n\nThe Android emulator hard-kills itself 20 seconds (the default\nANDROID_EMULATOR_WAIT_TIME_BEFORE_KILL) after receiving a shutdown\nrequest:\n\n  INFO | Wait for emulator (pid 15318) 20 seconds to shutdown gracefully\n  before kill; you can set environment variable\n  ANDROID_EMULATOR_WAIT_TIME_BEFORE_KILL(in seconds) to change the\n  default value (20 seconds)\n\nThe \"Create AVD and generate snapshot for caching\" step relies on that\nshutdown to write the first-boot quickboot snapshot (the test step\npasses -no-snapshot-save, this step deliberately does not). Writing that\nsnapshot takes longer than 20 seconds on GitHub\u0027s 2-core runners, so the\nemulator was killed mid-write, a truncated snapshot was cached, and\nevery subsequent \"Run device tests\" step booted the corrupt snapshot\n(force-avd-creation: false), leaving the emulator unstable and tests\ngetting killed.\n\nRaise the graceful-shutdown window to 120 seconds for the\ninstrumentation-tests job (both emulator steps inherit it), and bump the\nAVD cache-version to v4 so snapshot caches written under the old\n20-second window are discarded and regenerated. cache-version is only\nused by the AVD cache key, so nothing else is invalidated.\n\nSigned-off-by: utzcoz \u003cutzcoz@outlook.com\u003e\n"
    },
    {
      "commit": "94b0858a4ae02a17dbcb99f726c96cea9998bbc4",
      "tree": "977ab80fdaad06001c46436d8dbca07fcb745cb8",
      "parents": [
        "93a307e044581406a9cfbde5caa0cdbc76b14dc1"
      ],
      "author": {
        "name": "greyphoton",
        "email": "ali.modiri.1998@gmail.com",
        "time": "Wed Jul 15 05:40:33 2026"
      },
      "committer": {
        "name": "utzcoz",
        "email": "43091780+utzcoz@users.noreply.github.com",
        "time": "Sun Jul 19 05:32:54 2026"
      },
      "message": "\"fixed ResTable_package.SIZEOF value\n\nto avoid \u0027RES_TABLE_PACKAGE_TYPE type ID offset too large.\u0027 error in some cases\n\nClose: https://github.com/robolectric/robolectric/issues/11331.\n"
    },
    {
      "commit": "93a307e044581406a9cfbde5caa0cdbc76b14dc1",
      "tree": "a59f10d3483a01b08ce8d0e8d2c870869eb1c2ad",
      "parents": [
        "64eb47f792adc191a96ff7e37b79f561de7859b3"
      ],
      "author": {
        "name": "utzcoz",
        "email": "utzcoz@outlook.com",
        "time": "Sat Jun 27 12:25:30 2026"
      },
      "committer": {
        "name": "utzcoz",
        "email": "43091780+utzcoz@users.noreply.github.com",
        "time": "Sat Jul 18 16:54:59 2026"
      },
      "message": "feat: Add KSP processor (processor-ksp) with integration tests\n\nAdd a KSP SymbolProcessor in a new processor-ksp module that generates\nthe same ShadowProvider as the javac processor, including shadowOf()\nhelpers. It is a separate module so the javac processor stays pure Java\nand javac/kapt consumers avoid the Kotlin/KSP version coupling. Publish\nit with DeployedRoboKotlinModulePlugin and add a rap-ksp integration\ntest module wired to processor-ksp.\n\nSigned-off-by: utzcoz \u003cutzcoz@outlook.com\u003e\n"
    },
    {
      "commit": "64eb47f792adc191a96ff7e37b79f561de7859b3",
      "tree": "dd130131bd953c96469134bd4a315cfee98a5fa0",
      "parents": [
        "d17ca8c9daf053984413272d5623f3e997157cd2"
      ],
      "author": {
        "name": "utzcoz",
        "email": "utzcoz@outlook.com",
        "time": "Sat Jun 27 12:25:29 2026"
      },
      "committer": {
        "name": "utzcoz",
        "email": "43091780+utzcoz@users.noreply.github.com",
        "time": "Sat Jul 18 16:54:59 2026"
      },
      "message": "build: Add deployed Kotlin module publishing plugin\n\nExtract the deployed-module Maven publishing logic from\nDeployedRoboJavaModulePlugin into a reusable configureDeployedModule()\nextension, and add DeployedRoboKotlinModulePlugin that reuses it to\npackage Kotlin (allSource) sources JARs for published Kotlin modules.\nJava module publishing is unchanged; the new plugin is not applied by\nany module yet.\n\nSigned-off-by: utzcoz \u003cutzcoz@outlook.com\u003e\n"
    },
    {
      "commit": "d17ca8c9daf053984413272d5623f3e997157cd2",
      "tree": "81bc6ae65517464706847e3ed33cce3550da3a97",
      "parents": [
        "b296cd7a76cadb50beb42943f296ad67eb5cb2d7",
        "4395a552e965cf51e1e56ec4c13119cff0b8e773"
      ],
      "author": {
        "name": "Michael Hoisie",
        "email": "hoisie@google.com",
        "time": "Fri Jul 17 21:27:11 2026"
      },
      "committer": {
        "name": "Michael Hoisie",
        "email": "hoisie@google.com",
        "time": "Fri Jul 17 21:27:11 2026"
      },
      "message": "Merge branch \u0027google\u0027 into \u0027master\u0027\n"
    },
    {
      "commit": "4395a552e965cf51e1e56ec4c13119cff0b8e773",
      "tree": "c6a6ee745f87e0e56a805a7aec3854005f4a19e8",
      "parents": [
        "71819b1d38c8c394e498a57a390c2f982362da32"
      ],
      "author": {
        "name": "Michael Hoisie",
        "email": "hoisie@google.com",
        "time": "Fri Jul 17 18:29:55 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 17 18:30:50 2026"
      },
      "message": "Enable Conscrypt for Mac arm64 by default\n\nAs of Conscrypt 2.6.0, there are prebuilt libraries for Mac arm64 contained in\nthe UberJar. Update the ConscryptModeConfigurer to default to ON for\nall platforms.\n\nPiperOrigin-RevId: 949673707\n"
    },
    {
      "commit": "71819b1d38c8c394e498a57a390c2f982362da32",
      "tree": "027ec782efc6945739b7286fcdcefbea8dd445c1",
      "parents": [
        "ea4cf1592df569b7cfac2b6f7f9dd5e677f698ed"
      ],
      "author": {
        "name": "Michael Hoisie",
        "email": "hoisie@google.com",
        "time": "Fri Jul 17 17:36:55 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 17 17:37:38 2026"
      },
      "message": "Remove misleading comment from MavenArtifactFetcher\n\nMavenArtifactFetcher uses whatever the highest-priority\nsecurity provider is, and not specifically Sun JSSE.\n\nPiperOrigin-RevId: 949645697\n"
    },
    {
      "commit": "ea4cf1592df569b7cfac2b6f7f9dd5e677f698ed",
      "tree": "e1d8eea71ad1e3c1a174ffa05c71ebd782c4cd73",
      "parents": [
        "d3df22513ac56c5e4bdf1828cbe188ff15d7a190"
      ],
      "author": {
        "name": "Googler",
        "email": "noreply@google.com",
        "time": "Fri Jul 17 17:29:59 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 17 17:30:49 2026"
      },
      "message": "Update tests to run on API 24+\n\nThis is in preparation to bump the min sdk level for Robolectric to 24.\n\nPiperOrigin-RevId: 949642308\n"
    },
    {
      "commit": "d3df22513ac56c5e4bdf1828cbe188ff15d7a190",
      "tree": "900f3cbffcfb73fa30cadcb86d4722f38e4da204",
      "parents": [
        "d8dd1de08ee9d3d76ac9a8a4416236b116a20a97"
      ],
      "author": {
        "name": "Michael Hoisie",
        "email": "hoisie@google.com",
        "time": "Fri Jul 17 16:53:59 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 17 16:54:47 2026"
      },
      "message": "Remove Conscrypt\u0027s XDH KeyPairGenerator to fix TLS issues\n\nConscrypt\u0027s implementation of KeyPairGenerator.XDH cannot be initialized with a\nNamedParameterSpec, which can cause issues with TLS handshakes in the JVM. This\nchange removes the KeyPairGenerator.XDH service from the Conscrypt provider\nwhen Robolectric installs it, allowing the JDK\u0027s provider to handle XDH key\ngeneration. This is compatible with Conscrypt\u0027s other crypto services. A\nregression test is added to verify that XDH key generation and agreement work\ncorrectly.\n\nFixes #11345\n\nPiperOrigin-RevId: 949622802\n"
    },
    {
      "commit": "d8dd1de08ee9d3d76ac9a8a4416236b116a20a97",
      "tree": "5c4a151fdb356b0ccab092152432f42e684c2da5",
      "parents": [
        "1266c60ed95b95e91b2942406e4a8ab1db6797de"
      ],
      "author": {
        "name": "Googler",
        "email": "noreply@google.com",
        "time": "Thu Jul 16 11:23:34 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 16 11:24:32 2026"
      },
      "message": "Let shadows for the SafetyCenterManager check permissions correctly.\n\nThese checks are disabled by default (existing behavior), but it\u0027s useful\nto have the option to enable permission checks in certain testing scenarios.\n\nPiperOrigin-RevId: 948891602\n"
    },
    {
      "commit": "b296cd7a76cadb50beb42943f296ad67eb5cb2d7",
      "tree": "cd5c8450f1d459bf6e1619ae960ff307d0820b43",
      "parents": [
        "452c5e196af421ded8050cb9313411a0509577c8"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 09 06:11:50 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 16 06:44:07 2026"
      },
      "message": "Make `:shadows:framework:compileJava` compatible with Gradle\u0027s configuration cache\n\nI\u0027ve updated `GenerateSdksFileTask` to explicitly declare its input and output.\nI\u0027ve updated `ShadowsPlugin` to use a `CommandLineArgumentProvider`, instead of using `doFirst`.\n"
    },
    {
      "commit": "452c5e196af421ded8050cb9313411a0509577c8",
      "tree": "4978cee8ef646c945918441d34743f51364a1f37",
      "parents": [
        "cddebdff0c372c331e01075aac7026923e217f23"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Tue Jul 14 06:32:52 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 16 05:44:11 2026"
      },
      "message": "Update AGP internals copies\n\nThe `ExtractAarTransform` class was updated to include an additional check.\n"
    },
    {
      "commit": "cddebdff0c372c331e01075aac7026923e217f23",
      "tree": "4f57d22a42ea546944000bf08017099a20729f8d",
      "parents": [
        "db687b71aad033bb418266879b9b1b93c81f1b8d"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Tue Jul 14 07:57:05 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 16 05:24:51 2026"
      },
      "message": "Add missing `@Deprecated` annotation in `SQLiteMode`\n\nIt looks like the annotation was forgotten in #10653.\n"
    },
    {
      "commit": "db687b71aad033bb418266879b9b1b93c81f1b8d",
      "tree": "140c59d0fb6e4dc299f3badcc24d5cb0a3a5a16f",
      "parents": [
        "902c850912605e68c0ce35462a5cdf02792bbc4b"
      ],
      "author": {
        "name": "Brett Chabot",
        "email": "brettchabot@google.com",
        "time": "Wed Jul 15 18:51:15 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 16 05:00:33 2026"
      },
      "message": "Fix aggregateDocs gradle task.\n\n./gradlew aggregateDocs was failing with a IllegalResolutionException on\n:integration_tests:firebase.\n\nTrying to build javadoc from a integration_tests subproject doesn\u0027t make\nsense.\nThis commit addresses the issue by filtering the aggregateDocs task\nso it only applies to projects with the DeployedRoboJavaModulePlugin\nplugin.\n"
    },
    {
      "commit": "902c850912605e68c0ce35462a5cdf02792bbc4b",
      "tree": "b8b58cf7c34ec45a13432b6f3f128f53a62fa49a",
      "parents": [
        "f40381a1d6dc09a353d2b43c1862a95a417b142d"
      ],
      "author": {
        "name": "Brett Chabot",
        "email": "brettchabot@google.com",
        "time": "Wed Jul 15 22:02:31 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 16 04:36:25 2026"
      },
      "message": "Update version number in README to 4.18-SNAPSHOT.\n\nThis is necessary to get the latest snapshot builds.\n"
    },
    {
      "commit": "f40381a1d6dc09a353d2b43c1862a95a417b142d",
      "tree": "a8e4dc16417dec9f34bc32c31172464823dede8c",
      "parents": [
        "c15928d2358d5969f55135b26a0da0967fb752ab"
      ],
      "author": {
        "name": "Brett Chabot",
        "email": "brettchabot@google.com",
        "time": "Wed Jul 15 17:56:28 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 16 04:36:25 2026"
      },
      "message": "Bump version to 4.18-SNAPSHOT.\n\nNow that 4.17-x branch is created, bump the version on master to 4.18.\n"
    },
    {
      "commit": "1266c60ed95b95e91b2942406e4a8ab1db6797de",
      "tree": "a088700cc39e8fd47f5345540e4f00889ac92306",
      "parents": [
        "f7ba1a9a2c75da0097838474385bb40fd1262de5"
      ],
      "author": {
        "name": "Googler",
        "email": "noreply@google.com",
        "time": "Thu Jul 16 00:04:11 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 16 00:04:45 2026"
      },
      "message": "Add device-specific permission support to Robolectric shadows.\n\nModify ShadowInstrumentation, ShadowContextImpl, and ShadowContextWrapper to\ntrack and check permissions per deviceId. This enables testing scenarios\nwhere different virtual devices have different permission states than the\ndefault device.\n\nPiperOrigin-RevId: 948626288\n"
    },
    {
      "commit": "f7ba1a9a2c75da0097838474385bb40fd1262de5",
      "tree": "56cecf05b5f3508ae6486d88c269925d8949c569",
      "parents": [
        "9c4b9c5c77a96b23408d79c945276caa9978fa85"
      ],
      "author": {
        "name": "Googler",
        "email": "noreply@google.com",
        "time": "Wed Jul 15 16:52:17 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 15 16:53:04 2026"
      },
      "message": "Fix Robolectric fontScale config being reset on SDK 24+.\n\nApply the configuration to resources before creating the system context in AndroidTestEnvironment.\nPreviously, it was applied after creating the system context, which caused\nContextImpl.createSystemContext to use the default configuration from ResourcesManager\n(which has fontScale\u003d1.0) and overwrite the bootstrap configuration.\n\nPiperOrigin-RevId: 948392033\n"
    },
    {
      "commit": "c15928d2358d5969f55135b26a0da0967fb752ab",
      "tree": "bf51bf8769bf6d3aaab0f4deb6f55b020fb01005",
      "parents": [
        "6f310d4adc3d26fa6898b1503d2028e28833c478"
      ],
      "author": {
        "name": "Brett Chabot",
        "email": "brettchabot@google.com",
        "time": "Mon Jul 13 23:05:18 2026"
      },
      "committer": {
        "name": "brettchabot",
        "email": "brettchabot@google.com",
        "time": "Tue Jul 14 17:43:55 2026"
      },
      "message": "Sign all  .module  metadata files.\n\nAttempting to publish the 4.17-beta-1 release was failing with\nerrors like \u0027Missing signature for file: sandbox-4.17-beta-1.module\u0027.\n\nThis commit attempts to address the issue by modifying Robolectric\u0027s\nplugin sign in logic to pass the entire publications container to\nbe signed.\n"
    },
    {
      "commit": "6f310d4adc3d26fa6898b1503d2028e28833c478",
      "tree": "3e887b8138fb6ad2c25121821eba4d5b18deadff",
      "parents": [
        "559110a3c2b30bf87d037db5258a173c29782d6e"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "c_Gaetan.MULLER@swissquote.ch",
        "time": "Fri Nov 21 06:57:52 2025"
      },
      "committer": {
        "name": "brettchabot",
        "email": "brettchabot@google.com",
        "time": "Mon Jul 13 19:42:08 2026"
      },
      "message": "Make `:shadows:framework:copySqliteNatives` compatible with Configuration Cache\n\nBased on #10817, and Gradle\u0027s problem report, `:shadows:framework:copySqliteNatives`\nis not compatible with Configuration Cache.\nThis PR fixes that by:\n- Using Gradle\u0027s Lazy API:\n  - Register the `sqlite4java` configuration instead of creating it.\n  - Use a `Provider` for `sqlite4javaVersion` instead of directly accessing the version.\n- Don\u0027t make `copySqliteNatives` a `Copy` task, but use the `copy {}` builder instead.\n- Removing the unnecessary `project.file()` wrapper for the copy destination.\n\nI\u0027ve run the `copySqliteNatives` task locally, and the files appear to be created in the right location.\n"
    },
    {
      "commit": "559110a3c2b30bf87d037db5258a173c29782d6e",
      "tree": "aa59c416418707dff570839364bd11377135547d",
      "parents": [
        "2f689d985519cee3c0f0300d54503708446340ea"
      ],
      "author": {
        "name": "utzcoz",
        "email": "utzcoz@outlook.com",
        "time": "Sat Jul 04 05:03:29 2026"
      },
      "committer": {
        "name": "brettchabot",
        "email": "brettchabot@google.com",
        "time": "Mon Jul 13 19:42:08 2026"
      },
      "message": "chore: Add API 37 suppport for GMD\n\n1. API 37 doesn\u0027t have aosp, aosp-atd and google-atd now, use google\n   now.\n2. API 37 only has 64kb images, and enable force 64kb for API 37.\n3. \u003d is enough than \u003e\u003d, we need to consider whether switch to \u003e\u003d at API\n   38.\n\nSigned-off-by: utzcoz \u003cutzcoz@outlook.com\u003e\n"
    },
    {
      "commit": "2f689d985519cee3c0f0300d54503708446340ea",
      "tree": "43a9d3fe87e925f67956f4b6bc1f32c63552e644",
      "parents": [
        "34697073db9da5fe779a0bf5a7660dc76af52730"
      ],
      "author": {
        "name": "utzcoz",
        "email": "utzcoz@outlook.com",
        "time": "Sat Jul 04 05:10:23 2026"
      },
      "committer": {
        "name": "brettchabot",
        "email": "brettchabot@google.com",
        "time": "Mon Jul 13 19:42:08 2026"
      },
      "message": "chore: Bump commandline tools and build tools version in Docker\n\nSigned-off-by: utzcoz \u003cutzcoz@outlook.com\u003e\n"
    },
    {
      "commit": "34697073db9da5fe779a0bf5a7660dc76af52730",
      "tree": "215227e7bfac07770f8ee8ca6e7946adc8a06498",
      "parents": [
        "6ac9eb36be3a49c8919e81f5634feebc1dce8462"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Jul 13 08:31:23 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Jul 13 08:55:27 2026"
      },
      "message": "Update dependency org.bouncycastle:bcprov-jdk18on to v1.85"
    },
    {
      "commit": "6ac9eb36be3a49c8919e81f5634feebc1dce8462",
      "tree": "3ac03a0acb78c6f1e973fb9e8fe55d64a5d485d8",
      "parents": [
        "dd26024fecadaa97de9e00d262bc05230aef41f8"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Jul 13 07:46:17 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Jul 13 08:30:03 2026"
      },
      "message": "Update dependency org.conscrypt:conscrypt-openjdk-uber to v2.6.0"
    },
    {
      "commit": "dd26024fecadaa97de9e00d262bc05230aef41f8",
      "tree": "dce0940b2173930c006d8716359bcf16b8ccee12",
      "parents": [
        "cd873fb0cc2d4a039b0398a4f262cfd5323fc822"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Jul 13 06:34:37 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Jul 13 07:44:21 2026"
      },
      "message": "Update dependency com.diffplug.spotless:spotless-plugin-gradle to v8.8.0"
    },
    {
      "commit": "cd873fb0cc2d4a039b0398a4f262cfd5323fc822",
      "tree": "7d3f53c3244ed9126148d744582082bbf2612f25",
      "parents": [
        "2d5e4132b79a80932b27b1ade22d579fa93f4ef4"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Jul 13 05:22:41 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Jul 13 06:33:34 2026"
      },
      "message": "Update dependency androidx.compose:compose-bom to v2026.06.01"
    },
    {
      "commit": "2d5e4132b79a80932b27b1ade22d579fa93f4ef4",
      "tree": "cdc4affa2a76c227bd14bb5d189b3e67bf92c4e2",
      "parents": [
        "f895ebadb58c5c95deb1dd2d13cf7bf8cf1207da"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Jul 13 01:47:28 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Mon Jul 13 04:53:13 2026"
      },
      "message": "Update dependency org.junit:junit-bom to v6.1.2"
    },
    {
      "commit": "f895ebadb58c5c95deb1dd2d13cf7bf8cf1207da",
      "tree": "d6fadc0d6a010420a4c97b79115ef1ef5108e9ad",
      "parents": [
        "3cb036e7ab7e30dbf8819343357e827719e7c98d",
        "9c4b9c5c77a96b23408d79c945276caa9978fa85"
      ],
      "author": {
        "name": "Brett Chabot",
        "email": "brettchabot@google.com",
        "time": "Fri Jul 10 21:35:31 2026"
      },
      "committer": {
        "name": "Brett Chabot",
        "email": "brettchabot@google.com",
        "time": "Fri Jul 10 21:37:20 2026"
      },
      "message": "Merge branch \u0027google\u0027 into \u0027master\u0027\n\nThis commit merges commits from the google branch into master,\nincluding the SDK 37 support commit.\n"
    },
    {
      "commit": "9c4b9c5c77a96b23408d79c945276caa9978fa85",
      "tree": "d94b1539d02c11027ca556b5ab944fd11e2984b8",
      "parents": [
        "3291c6b24ce5c0a34bb3a63bb9faff2e0b607087"
      ],
      "author": {
        "name": "Brett Chabot",
        "email": "brettchabot@google.com",
        "time": "Fri Jul 10 21:14:42 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 21:15:06 2026"
      },
      "message": "Add CINNAMON_BUN/SDK 37 as a default supported SDK.\n\nThis adds SDK 37 as a supported SDK in Robolectric, unlocking\nthe ability to run tests on this SDK, and compiling the shadows\nagainst this target\n\nPiperOrigin-RevId: 945887169\n"
    },
    {
      "commit": "3291c6b24ce5c0a34bb3a63bb9faff2e0b607087",
      "tree": "677bbae4da885c3183fa054775bc5bf813be2cc9",
      "parents": [
        "eece41b2f7033c5a4d23a5b06a3f49e58714e0d7"
      ],
      "author": {
        "name": "Michael Hoisie",
        "email": "hoisie@google.com",
        "time": "Thu Jul 09 22:37:05 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 22:37:37 2026"
      },
      "message": "Avoid potential Integer autoboxing DynamicRefTable.lookupResourceId\n\nPreviously in DynamicRefTable.lookupResourceId, Integer autoboxing could occur\nwhen getting the alias for a resource id. Because aliases are uncommon, this\nlogic can be gated on an if statement.\n\nPiperOrigin-RevId: 945351727\n"
    },
    {
      "commit": "eece41b2f7033c5a4d23a5b06a3f49e58714e0d7",
      "tree": "b935937fdd8325355fc19710997d136dcd5ac044",
      "parents": [
        "55e31b100cdad15981bf16b3422f64cacc6053a8"
      ],
      "author": {
        "name": "Brett Chabot",
        "email": "brettchabot@google.com",
        "time": "Thu Jul 09 21:36:34 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 21:37:35 2026"
      },
      "message": "Add additional logging for android-all release packaging script.\n\nThis makes it easier to capture and record tmp directories needed\nas part of the release flow.\n\nPiperOrigin-RevId: 945321415\n"
    },
    {
      "commit": "3cb036e7ab7e30dbf8819343357e827719e7c98d",
      "tree": "f9ae7537e8aa9dea9c45bef2dd889f61ba1030b8",
      "parents": [
        "007f7bf050fc848f84dfec21433176fc10b44479"
      ],
      "author": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Wed Jul 08 16:35:27 2026"
      },
      "committer": {
        "name": "Gaëtan Muller",
        "email": "m.gaetan89@gmail.com",
        "time": "Thu Jul 09 05:04:43 2026"
      },
      "message": "Update to `google-java-format` 1.35.0\n\nThe release notes are here:\n- 1.33.0 - https://github.com/google/google-java-format/releases/tag/v1.33.0\n- 1.34.0 - https://github.com/google/google-java-format/releases/tag/v1.34.0\n- 1.34.1 - https://github.com/google/google-java-format/releases/tag/v1.34.1\n- 1.35.0 - https://github.com/google/google-java-format/releases/tag/v1.35.0\n\nThis also fixed the existing formatting issues.\n"
    },
    {
      "commit": "007f7bf050fc848f84dfec21433176fc10b44479",
      "tree": "65b70badc51dadbbaddc5441e2093ac5521c9242",
      "parents": [
        "d80dc466001d6704a718c0ea1db4f345027cbb4a"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Mon Jul 06 07:08:43 2026"
      },
      "committer": {
        "name": "utzcoz",
        "email": "43091780+utzcoz@users.noreply.github.com",
        "time": "Thu Jul 09 02:58:26 2026"
      },
      "message": "Update dependency com.googlecode.libphonenumber:libphonenumber to v9.0.34"
    },
    {
      "commit": "55e31b100cdad15981bf16b3422f64cacc6053a8",
      "tree": "7ba568479633d1dee879560d3d0430f7ad10ec3c",
      "parents": [
        "8179e8f2d8e518c49661828941c31c2d2f2e6ed8"
      ],
      "author": {
        "name": "Googler",
        "email": "noreply@google.com",
        "time": "Thu Jul 09 02:11:30 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 02:11:55 2026"
      },
      "message": "Fix ShadowVirtualDeviceManager to avoid NPE.\n\nSupport older createVirtualDisplay signature.\n\nPiperOrigin-RevId: 944831410\n"
    },
    {
      "commit": "8179e8f2d8e518c49661828941c31c2d2f2e6ed8",
      "tree": "5a6c673a8cc04b134f53a9561aa291fb751af39a",
      "parents": [
        "f9f3ca591a8350f8bd963f96aaa4db15d61b22bd"
      ],
      "author": {
        "name": "Brett Chabot",
        "email": "brettchabot@google.com",
        "time": "Wed Jul 08 19:27:51 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 08 19:28:14 2026"
      },
      "message": "Internal\n\nPiperOrigin-RevId: 944638214\n"
    }
  ],
  "next": "f9f3ca591a8350f8bd963f96aaa4db15d61b22bd"
}
