{"id":13841406,"url":"https://github.com/ooni/probe-android","last_synced_at":"2025-04-09T13:09:47.180Z","repository":{"id":28871857,"uuid":"32396114","full_name":"ooni/probe-android","owner":"ooni","description":"OONI Probe Android","archived":false,"fork":false,"pushed_at":"2024-04-12T07:12:19.000Z","size":37547,"stargazers_count":171,"open_issues_count":22,"forks_count":43,"subscribers_count":27,"default_branch":"master","last_synced_at":"2024-04-14T04:07:48.298Z","etag":null,"topics":["ooniprobe"],"latest_commit_sha":null,"homepage":"https://ooni.org","language":"Java","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ooni.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2015-03-17T13:49:21.000Z","updated_at":"2024-04-15T22:38:18.469Z","dependencies_parsed_at":"2024-01-18T12:32:26.090Z","dependency_job_id":"47d69915-adf6-4d50-9db1-9d2e0f715dbf","html_url":"https://github.com/ooni/probe-android","commit_stats":{"total_commits":1636,"total_committers":22,"mean_commits":74.36363636363636,"dds":0.4627139364303179,"last_synced_commit":"4bc7e61d1568a27bb40d9f82ff53fa1b9967c103"},"previous_names":[],"tags_count":97,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ooni%2Fprobe-android","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ooni%2Fprobe-android/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ooni%2Fprobe-android/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ooni%2Fprobe-android/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ooni","download_url":"https://codeload.github.com/ooni/probe-android/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247948586,"owners_count":21023189,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["ooniprobe"],"created_at":"2024-08-04T17:01:10.194Z","updated_at":"2025-04-09T13:09:47.154Z","avatar_url":"https://github.com/ooni.png","language":"Java","funding_links":[],"categories":["Java","Java (504)"],"sub_categories":[],"readme":"# OONI Probe Android\n\n[![OONI Probe Android](assets/OONIProbeLogo.png)](https://ooni.org)\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://slack.openobservatory.org/\"\u003e\n        \u003cimg src=\"https://slack.openobservatory.org/badge.svg\"\n            alt=\"chat on Slack\"\u003e\u003c/a\u003e\n\n  \u003ca href=\"https://github.com/ooni/probe/issues?q=label%3Aooni%2Fprobe-android\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/issues/ooni/probe/ooni/probe-android\" alt=\"open issues\"\u003e\n  \u003c/a\u003e\n\n  \u003cimg src=\"https://github.com/ooni/probe-android/workflows/emulator/badge.svg\" alt=\"Emulator Tests Status\"\u003e\n\n  \u003ca href=\"https://twitter.com/intent/follow?screen_name=OpenObservatory\"\u003e\n    \u003cimg src=\"https://img.shields.io/twitter/follow/OpenObservatory?style=social\u0026logo=twitter\"\n    alt=\"follow on Twitter\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cdiv align=\"left\"\u003e\n\n\u003ca href=\"https://f-droid.org/packages/org.openobservatory.ooniprobe/\" target=\"_blank\"\u003e\n\u003cimg src=\"assets/F-Droid-badge.png\" alt=\"Get it on F-Droid\" height=\"60px\"/\u003e\n\u003c/a\u003e\n\n\u003ca href=\"https://play.google.com/store/apps/details?id=org.openobservatory.ooniprobe\" target=\"_blank\"\u003e\n\u003cimg src=\"assets/Google-Play-badge.png\" alt=\"Get it on Google Play\" height=\"60px\"/\u003e\n\u003c/a\u003e\n\n\u003c/div\u003e\n\nOONI Probe is free and open source software designed to measure internet\ncensorship and other forms of network interference.\n\n[Click here to report a bug](https://github.com/ooni/probe/issues/new)\n\nOther supported platforms: [iOS](https://github.com/ooni/probe-ios),\n[Desktop](https://github.com/ooni/probe-desktop), [CLI](https://github.com/ooni/probe-cli)\n\n## Developer information\n\nThis application requires Android Studio. We use Gradle and, as part of the\ninitial gradle sync, Android studio will download all the required\ndependencies.\n\nThe most important dependency is `oonimkall`. This dependency contains\nthe network measurement engine. Its sources are at\n[ooni/probe-cli](https://github.com/ooni/probe-cli).\n\nWhen using Gradle from the command line, you will need to set the\n`ANDROID_SDK_ROOT` environment variable to point to the directory in\nwhich you have installed the Android SDK.\n\n## Build variants\n\nWe use the classic `debug` and `release` build types. We also\nimplement the following flavours:\n\n- `stable`, `dev`, and `experimental` (dimension: `testing`);\n\n- `full` and `fdroid` (dimension: `license`).\n\n- `ooni` and `dw` (dimension: `brand`).\n\nThe `testing` dimension controls whether we're building a release\nor a more unstable version. We build releases using the `stable`\nflavour. The `dev` flavour builds the version of the app that should\nbe released on the store as the beta channel. The `experimental`\nflavour, instead, allows a developer to build a one-off version of\nthe app that uses a custom build of the `oonimkall` library.\n\nThe `license` dimension controls which proprietary libraries to include\ninto the build. The `full` flavour includes all such dependencies,\nwhile the `fdroid` flavour does not include any of them.\n\nThe `brand` dimension controls the branding of the application. The `ooni` flavour is the default branding, while the `dw` flavour is for the \"News Media Scan\" branding.\n\nThe variant names are therefore:\n\n- `ooniExperimentalFullDebug`\n- `ooniExperimentalFullRelease`\n- `ooniDevFullDebug`\n- `ooniDevFullRelease`\n- `ooniStableFullDebug`\n- `ooniStableFullRelease`\n- `dwExperimentalFullDebug`\n- `dwExperimentalFullRelease`\n- `dwDevFullDebug`\n- `dwDevFullRelease`\n- `dwStableFullDebug`\n- `dwStableFullRelease`\n\nWe additionally have `ooniStableFdroidDebug`, `ooniStableFdroidRelease`, `dwStableFdroidDebug` and `dwStableFdroidRelease`.\n\nAll of this is controlled by [app/build.gradle](app/build.gradle).\n\n## Gradle modules\n\n- [app](app) contains the mobile app;\n- [engine](engine) contains wrappers for `oonimkall`, the measurement engine library;\n- [engine-experimental](engine-experimental) allows us to implement the `experimental` build flavour where you put the `oonimkall.aar` file you built inside `engine-experimental` rather than downloading it from Maven Central.\n\n## Building an apk\n\nEnsure you have Android Studio and Android SDK installed. Build the `ooniDevFullRelease`\nvariant using Android Studio or this command line:\n\n```sh\n./gradlew assembleOoniDevFullRelease\n```\n\n## Building the app for f-droid\n\nInstead to build the app to stay compliant to F-Droid use `fdroid`, which contains small tweaks required to have the app accepted by [f-droid](https://f-droid.org/).\n\n```sh\n./gradlew assembleOoniDevFullRelease\n```\n\n## Testing\n\nRun unit tests/\n\n```sh\n./gradlew testOoniStableFullDebug\n```\n\nRun instrumented tests\n\n_Note: To also run the automation tests (to generate screenshots), set the Build Config flag `RUN_AUTOMATION` as true._\n\n```sh\n./gradlew connectedOoniStableFullDebugAndroidTest\n```\n\nGenerate code coverage report (after all unit and instrumented tests successfully passed)\n\n```sh\n./gradlew jacocoAndroidTestReport\n```\n\n## Managing translations\n\nTo manage translations check out our [translation repo](https://github.com/ooni/translations)\nand follow the instructions there.\n\n## Contributing\n\n* Write some code\n\n* Open a pull request\n\n* Have fun!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fooni%2Fprobe-android","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fooni%2Fprobe-android","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fooni%2Fprobe-android/lists"}