{"id":18915222,"url":"https://github.com/uber-common/android-build-eval","last_synced_at":"2025-04-15T08:31:47.093Z","repository":{"id":46809254,"uuid":"294831672","full_name":"uber-common/android-build-eval","owner":"uber-common","description":"This project includes Uber-agnostic auto-generated project(s) with a comparable complexity to existing Uber Production mobile apps. These are buildable on Buck, Bazel and Gradle- therefore enable build time benchmarking.","archived":false,"fork":false,"pushed_at":"2023-02-06T19:35:39.000Z","size":271301,"stargazers_count":88,"open_issues_count":6,"forks_count":11,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-03-28T18:55:18.310Z","etag":null,"topics":["android","bazel","buck","build-time","gradle"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/uber-common.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-09-11T23:27:37.000Z","updated_at":"2024-12-22T10:00:38.000Z","dependencies_parsed_at":"2022-08-30T18:23:03.378Z","dependency_job_id":null,"html_url":"https://github.com/uber-common/android-build-eval","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uber-common%2Fandroid-build-eval","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uber-common%2Fandroid-build-eval/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uber-common%2Fandroid-build-eval/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uber-common%2Fandroid-build-eval/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/uber-common","download_url":"https://codeload.github.com/uber-common/android-build-eval/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249035604,"owners_count":21202121,"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":["android","bazel","buck","build-time","gradle"],"created_at":"2024-11-08T10:14:55.002Z","updated_at":"2025-04-15T08:31:42.061Z","avatar_url":"https://github.com/uber-common.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"### Intro\n\nThis repository is for community collaboration.\n\nIt includes Uber-agnostic auto-generated projects (via Android Studio Poet), with comparable complexity to existing Uber Production mobile apps.(*)\n\nThese projects are buildable on Buck, Bazel and Gradle, therefore it enables build time benchmarking across different build systems.\n\nAny PR to enable speeding up any of these builds is welcome!\n\n### Project details\n\nAuto-generated project(s) offer similar complexity to existing Uber Production mobile apps in terms of :\n\n- number of modules, classes and (some) resources\n- interdependency between modules\n- java Vs kotlin code\n- dependencies on external libraries\n\nWhen building these project, we voluntarily disable lint, error prone (**) and annotation processors for each build system for better build time measurement parity.\n\nAlso, we're not using build network cache, nor remote build execution (Bazel).\n\n### Setup\n\n- Make sure Bazel 3.7+ is installed, and is on the PATH (\u003chttps://docs.bazel.build/versions/master/install.html\u003e)\n- Change directory to mobile app folder : `cd mobile_app1`\n- Generate OkBuck files : `./setup_buck.sh`\n\n### How to build a project\n\n- (Gradle) `./gradlew rootModule:assembleDebug`\n- (Bazel) `bazel build rootModule`\n- (Buck) `./buckw build rootModule:src_debug`\n\n### How to run benchmark for a project\n\n- `./benchmark.sh`\n\nBuild time report will be generated in the /output/\u003ctimestamp\u003e folder.\n\nNote :\n\n- In order to 'clean' builds between runs for Bazel and Buck, we're using a fork for android-profiler that will be installed automatically from \u003chttps://github.com/sunyal/gradle-profiler\u003e\n\n### Scenario description\n\nWe used special naming for a couple of modules, these can be used to simulate different incremental builds :\n\n- rootModule : the top project module (i.e any module in the project is a transitive dependency on this module)\n- leafModule(Min|Avg|Max) : these are modules on which some other modules depend on. Min = only a few modules depends on this module, Max = a lot of modules depends on this module (i.e ABI change of this module will cause a somehow large part of the build graph to be rebuilt)\n\nTo simulate incremental builds (ABI and non-ABI changes alike), you can modify manually source files of these modules.\n\nBenchmark scenario are as follow :\n\n- fullLocalCache : clean build of the app (with external artifacts/toolchain already cached locally)\n- abiChangeWith(Min|Avg|Max)LeafLocalCache : abi-change incremental build with (large|medium|small) part of the build graph rebuilt\n- nonAbiChangeWithMaxLeafLocalCache : non abi-change incremental build\n- androidResourceChangeWithRootLocalCache : incremental build with resources changes to root module\n- noOpLocalCache : no-op build\n\n### Benchmark results\n\n#### Conditions\n\n- Bazel : 3.7.0, persistent workers, sandboxing disabled, JAVA header generation disabled\n- Gradle : 6.8, file watcher and configuration cache enabled\n- Buck : latest version (as specified by OkBuck)\n- Java : Java 8 compiler is used (pulled from JAVA_HOME env variable)\n- Host machine : benchmark is ran on powerful linux server (***). Slower build times are expected on Macbook Pros, for instance.\n- Last run : 02/02/2021 (code changes made after that are not reflected yet in result below)\n\n#### Current results\n\n![apps_presidio_helix_app results](/results/mobile_app1.png)\n\n### License\n\n```\nCopyright 2020 Uber Technologies\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\nin compliance with the License. You may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under the License\nis distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\nor implied. See the License for the specific language governing permissions and limitations under\nthe License.\n```\n\n(*) The generated code is not representative of Uber's existing production mobile apps.\n\n(**) For Bazel, Error Prone is still running as it doesn't seem possible to disable it.\n\n(***) Architecture:       x86_64\nCPU op-mode(s):     32-bit, 64-bit\nCPU(s):             96\nThread(s) per core: 2\nCore(s) per socket: 24\nModel name:         Intel(R) Xeon(R) CPU @ 2.00GHz\nRAM:                396gb\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuber-common%2Fandroid-build-eval","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fuber-common%2Fandroid-build-eval","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuber-common%2Fandroid-build-eval/lists"}