{"id":13516776,"url":"https://github.com/robolectric/robolectric","last_synced_at":"2026-01-21T02:10:24.019Z","repository":{"id":1038403,"uuid":"867564","full_name":"robolectric/robolectric","owner":"robolectric","description":"Android Unit Testing Framework","archived":false,"fork":false,"pushed_at":"2026-01-16T20:22:13.000Z","size":65557,"stargazers_count":5993,"open_issues_count":476,"forks_count":1380,"subscribers_count":190,"default_branch":"master","last_synced_at":"2026-01-18T17:48:25.052Z","etag":null,"topics":["android","java","robolectric","unit-testing"],"latest_commit_sha":null,"homepage":"https://robolectric.org","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robolectric.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2010-08-28T00:28:25.000Z","updated_at":"2026-01-17T07:46:24.000Z","dependencies_parsed_at":"2023-10-16T19:52:42.730Z","dependency_job_id":"ba5323f8-4d1c-479c-afaa-56e843048181","html_url":"https://github.com/robolectric/robolectric","commit_stats":{"total_commits":10084,"total_committers":766,"mean_commits":"13.164490861618798","dds":0.8514478381594606,"last_synced_commit":"4ec63b6d4aff15a221c4ba3621499567144f0c33"},"previous_names":["pivotal/robolectric"],"tags_count":147,"template":false,"template_full_name":null,"purl":"pkg:github/robolectric/robolectric","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robolectric%2Frobolectric","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robolectric%2Frobolectric/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robolectric%2Frobolectric/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robolectric%2Frobolectric/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robolectric","download_url":"https://codeload.github.com/robolectric/robolectric/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robolectric%2Frobolectric/sbom","scorecard":{"id":781092,"data":{"date":"2025-08-11","repo":{"name":"github.com/robolectric/robolectric","commit":"2836668d62738d8951681df1fbb41d131ac16763"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6.6,"checks":[{"name":"Code-Review","score":3,"reason":"Found 10/30 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 14 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":9,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'packages' permission set to 'read': .github/workflows/codeql.yml:39","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:42","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:43","Info: topLevel 'contents' permission set to 'read': .github/workflows/check_code_style.yml:19","Warn: no topLevel permission defined: .github/workflows/codeql.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/copybara_build_and_test.yml:12","Info: topLevel 'contents' permission set to 'read': .github/workflows/gradle_tasks_validation.yml:19","Info: topLevel 'contents' permission set to 'read': .github/workflows/graphics_tests.yml:18","Info: topLevel 'contents' permission set to 'read': .github/workflows/tests.yml:19","Info: topLevel 'contents' permission set to 'read': .github/workflows/validate_commit_message.yml:12","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/check_code_style.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/check_code_style.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/check_code_style.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/check_code_style.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:71: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/codeql.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/codeql.yml:84: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:103: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/copybara_build_and_test.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/copybara_build_and_test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/copybara_build_and_test.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/copybara_build_and_test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/copybara_build_and_test.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/copybara_build_and_test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gradle_tasks_validation.yml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/gradle_tasks_validation.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gradle_tasks_validation.yml:70: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/gradle_tasks_validation.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/gradle_tasks_validation.yml:75: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/gradle_tasks_validation.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gradle_tasks_validation.yml:90: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/gradle_tasks_validation.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gradle_tasks_validation.yml:93: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/gradle_tasks_validation.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/gradle_tasks_validation.yml:98: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/gradle_tasks_validation.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gradle_tasks_validation.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/gradle_tasks_validation.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gradle_tasks_validation.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/gradle_tasks_validation.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/gradle_tasks_validation.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/gradle_tasks_validation.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gradle_tasks_validation.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/gradle_tasks_validation.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gradle_tasks_validation.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/gradle_tasks_validation.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gradle_tasks_validation.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/gradle_tasks_validation.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/gradle_tasks_validation.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/gradle_tasks_validation.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/graphics_tests.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/graphics_tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/graphics_tests.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/graphics_tests.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/graphics_tests.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/graphics_tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/graphics_tests.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/graphics_tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/tests.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tests.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/tests.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tests.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:75: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/tests.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tests.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:99: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:102: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/tests.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tests.yml:107: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/tests.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tests.yml:135: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/tests.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tests.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:163: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:178: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:181: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/tests.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tests.yml:186: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/validate_commit_message.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/robolectric/robolectric/validate_commit_message.yml/master?enable=pin","Warn: containerImage not pinned by hash: .devcontainer/Dockerfile:3: pin your Docker image by updating mcr.microsoft.com/devcontainers/base:2-ubuntu-24.04 to mcr.microsoft.com/devcontainers/base:2-ubuntu-24.04@sha256:daa08ddb48ad4e4e7367c348e0a6f250762f1f0d8348f1f9acbef5f884ce093d","Info:   0 out of  32 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  14 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/gradle_tasks_validation.yml:63"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":7,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 7 commits out of 25 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T04:56:24.325Z","repository_id":1038403,"created_at":"2025-08-23T04:56:24.325Z","updated_at":"2025-08-23T04:56:24.325Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28622475,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T23:49:58.628Z","status":"online","status_checked_at":"2026-01-21T02:00:08.227Z","response_time":86,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","java","robolectric","unit-testing"],"created_at":"2024-08-01T05:01:25.741Z","updated_at":"2026-01-21T02:10:24.014Z","avatar_url":"https://github.com/robolectric.png","language":"Java","funding_links":[],"categories":["Java","Unit Test","测试","Android Kotlin Project Showcase","Test","Cross-Platform Mobile Guide for Native iOS \u0026 Android Developers"],"sub_categories":["Framework","Android"],"readme":"\u003ca name=\"README\"\u003e\u003c/a\u003e\n[![robolectric logo](https://raw.githubusercontent.com/robolectric/robolectric/master/images/robolectric-horizontal.png)](https://robolectric.org)\n\n[![Build Status](https://github.com/robolectric/robolectric/actions/workflows/tests.yml/badge.svg)](https://github.com/robolectric/robolectric/actions?query=workflow%3Atests)\n[![GitHub release](https://img.shields.io/github/release/robolectric/robolectric.svg?maxAge=60)](https://github.com/robolectric/robolectric/releases)\n\nRobolectric is the industry-standard unit testing framework for Android. With Robolectric, your tests run in a simulated Android environment inside a JVM, without the overhead and flakiness of an emulator. Robolectric tests routinely run 10x faster than those on cold-started emulators.\n\nRobolectric supports running unit tests for *14* different versions of Android, ranging from M (API level 23) to Baklava (API level 36).\n\n## Usage\n\nTo use Robolectric in your project, simply add the necessary dependencies to your module's `build.gradle`/`build.gradle.kts` file:\n\n```groovy\ntestImplementation(\"junit:junit:4.13.2\")\ntestImplementation(\"org.robolectric:robolectric:4.16\")\ntestImplementation(\"androidx.test.ext:junit:1.3.0\")\n```\n\nThen you can write your tests using Robolectric, like the following example:\n\n```java\n@RunWith(AndroidJUnit4.class)\npublic class MyActivityTest {\n  @Test\n  public void clickingButton_shouldChangeMessage() {\n    try (ActivityController\u003cMyActivity\u003e controller = Robolectric.buildActivity(MyActivity.class)) {\n      controller.setup(); // Moves the Activity to the RESUMED state\n      MyActivity activity = controller.get();\n\n      activity.findViewById(R.id.button).performClick();\n      assertEquals(((TextView) activity.findViewById(R.id.text)).getText(), \"Robolectric Rocks!\");\n    }\n  }\n}\n```\n\nFor more information about how to install and use Robolectric in your project, extend its functionality, and join the community of contributors, you can visit [robolectric.org](https://robolectric.org).\n\n## Building and Contributing\n\nRobolectric is built using Gradle. Both Android Studio and IntelliJ can import the top-level `build.gradle.kts` file and will automatically generate their project files from it.\n\nTo get Robolectric up and running on your machine, check out\n[this guide](https://robolectric.org/building-robolectric/).\n\nTo get a high-level overview of Robolectric's architecture, check out\n[robolectric.org](https://robolectric.org/architecture).\n\n## Development model\n\nRobolectric is actively developed in several locations. The primary location is\nthis GitHub repository, which is considered the *source-of-truth* for\nRobolectric code. It is where contributions from the broader Android developer\ncommunity occur. There is also an active development tree of Robolectric\ninternally at Google, where contributions from first-party Android developers\noccur. By having a development tree of Robolectric internally at Google, it\nenables first-party Android developers to more efficiently make contributions\nto Robolectric. This tree is synced directly to the [`google`\nbranch](https://github.com/robolectric/robolectric/tree/google) every\ntime a change occurs using the [`Copybara`](https://github.com/google/copybara)\ncode sync tool. Bidirectional merges of this branch and the\n[`master`](https://github.com/robolectric/robolectric/tree/master) branch occur\nregularly.\n\nRobolectric also has usage in the Android platform via the\n[external/robolectric](https://cs.android.com/android/platform/superproject/main/+/main:external/robolectric/)\nrepo project. Contributions to this source tree are typically related to new\nSDK support and evolving platform APIs. Changes from this branch are upstreamed\nto the internal Robolectric tree at Google, which eventually propagate to the\nGitHub branches.\n\nAlthough complex, this distributed development model enables Android developers\nin different environments to use and contribute to Robolectric, while allowing\nchanges to eventually make their way to public Robolectric releases.\n\n\u003e [!TIP]\n\u003e You can trigger the\n\u003e [`sync_google_master`](https://github.com/robolectric/robolectric/actions/workflows/sync_google_master.yml)\n\u003e workflow to create a PR to sync the `google` branch into `master`.\n\n## Using Snapshots\n\nIf you would like to live on the bleeding edge, you can try running against a snapshot build. Keep in mind that snapshots represent the most recent changes on the `master` and may contain bugs.\n\n### `build.gradle`\n\n```groovy\nrepositories {\n    maven { url \"https://central.sonatype.com/repository/maven-snapshots/\" }\n}\n\ndependencies {\n    testImplementation \"org.robolectric:robolectric:4.17-SNAPSHOT\"\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobolectric%2Frobolectric","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobolectric%2Frobolectric","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobolectric%2Frobolectric/lists"}