{"id":17335682,"url":"https://github.com/malinskiy/adam","last_synced_at":"2025-05-15T09:08:05.225Z","repository":{"id":40331273,"uuid":"200235738","full_name":"Malinskiy/adam","owner":"Malinskiy","description":"Adam (or adm) is a coroutine-friendly Android Debug Bridge client written in Kotlin","archived":false,"fork":false,"pushed_at":"2025-02-10T01:41:40.000Z","size":9758,"stargazers_count":481,"open_issues_count":4,"forks_count":33,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-05-15T09:07:54.799Z","etag":null,"topics":["adam","adb","adblib","adm","android","coroutines","ddmlib","hacktoberfest","instrumentation","kotlin","testing","testing-tools"],"latest_commit_sha":null,"homepage":"https://malinskiy.github.io/adam/","language":"Kotlin","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/Malinskiy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["Malinskiy"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2019-08-02T13:03:07.000Z","updated_at":"2025-04-19T08:50:15.000Z","dependencies_parsed_at":"2024-01-21T06:30:03.228Z","dependency_job_id":"d822c9fd-269b-4262-91ed-3f647594151e","html_url":"https://github.com/Malinskiy/adam","commit_stats":null,"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Malinskiy%2Fadam","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Malinskiy%2Fadam/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Malinskiy%2Fadam/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Malinskiy%2Fadam/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Malinskiy","download_url":"https://codeload.github.com/Malinskiy/adam/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254310520,"owners_count":22049470,"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":["adam","adb","adblib","adm","android","coroutines","ddmlib","hacktoberfest","instrumentation","kotlin","testing","testing-tools"],"created_at":"2024-10-15T15:11:49.836Z","updated_at":"2025-05-15T09:08:00.214Z","avatar_url":"https://github.com/Malinskiy.png","language":"Kotlin","funding_links":["https://github.com/sponsors/Malinskiy"],"categories":[],"sub_categories":[],"readme":"![Maven Central](https://img.shields.io/maven-central/v/com.malinskiy.adam/adam)\n![Codecov](https://img.shields.io/codecov/c/github/Malinskiy/adam)\n![Documentation](https://img.shields.io/badge/docs-documentation-green?link=https://malinskiy.github.io/adam/)\n\n# adam\nAndroid Debug Bridge helper written in Kotlin\n\n## Motivation\nThe only way to get access to the adb programmatically from java world currently is to use the ddmlib java project. Unfortunately it has several limitations, namely:\n\n1. Sub-optimal resources usage\n2. Code is not tested properly\n3. Limitations of adb server are propagated to the user of ddmlib\n\nTo optimize the resources usage adam uses coroutines instead of blocking threads. This reduced the load dramatically for scenarios where dozens of devices are connected and are communicated with.\nFull E2E testing with at least Android emulator is also used to guarantee stability.\n\n## Supported functionality\n* Shell\n    * Basic `shell:` support (with stdout and patched exit code)\n    * shell_v2 support (with separated stdout, stderr and exit code as well as stdin)\n    * Exec shell with stdin on legacy devices without shell_v2 support\n* Package install, uninstall, list\n    * Streaming installation\n    * Atomic multi-package installation\n    * Apk split installation\n    * Supports APEX\n    * Sideload (with pre-KitKat support)\n    * Install sessions support\n* Device management\n    * List connected devices\n    * Monitor connected devices continuously\n    * Fetch device features\n    * Connect/disconnect/reconnect device\n    * adb over WiFi pairing setup\n    * Reboot device\n* Files\n    * List file using `ls`\n    * Push/pull files and folders(recursive)\n    * Stat, list, pull and push using `sync:`\n    * Support for stat_v2, sendrecv_v2, ls_v2\n* Emulator commands (`gsm call`, `rotate`, etc)\n* Props\n    * Get single prop\n    * Get all props\n* Instrumented tests\n    * Raw output parsing\n    * Proto output parsing\n* Screen capture\n    * Dynamic adapters with raw buffer and fast BufferedImage conversion\n    * Supports legacy devices as well as new sRGB and DCI-P3 ones\n* Logcat\n    * Fetch logcat log\n    * Monitor logcat continuously\n* Port-forwarding (including reverse port-forwarding)\n    * List ports\n    * Add rule\n    * Remove rule\n    * Remove all rules\n* Android Binder Bridge: \"abb\" and \"abb_exec\"\n* Restart adbd on device: \"root:\", \"unroot:\", as well as switching transport \"usb:\", \"tcpip:\"\n* Miscellaneous\n  * Fetch adb server version\n  * Kill adb server\n  * Remount partition\n  * Enable/disable dm-verity checking on userdebug builds\n  * Fetch host features\n  * Check if mDNS discovery is available\n  * List all mDNS discovered services\n\nNot to mention any device shell commands.\n\n## API compatibility\n\nUntil v1.0.0 release, there is no guarantee that the interfaces and requests will not change.\n\nLicense\n-------\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmalinskiy%2Fadam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmalinskiy%2Fadam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmalinskiy%2Fadam/lists"}