{"id":21847534,"url":"https://github.com/scribd/armadillo","last_synced_at":"2025-04-14T13:33:39.350Z","repository":{"id":45745615,"uuid":"375130964","full_name":"scribd/armadillo","owner":"scribd","description":"A delightful audio player for Android.","archived":false,"fork":false,"pushed_at":"2025-03-02T19:28:05.000Z","size":1811,"stargazers_count":11,"open_issues_count":2,"forks_count":5,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-03-28T02:45:38.568Z","etag":null,"topics":["android","kotlin","managed-by-terraform","mobile-build-tooling"],"latest_commit_sha":null,"homepage":"https://github.com/scribd/armadillo","language":"Kotlin","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/scribd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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,"publiccode":null,"codemeta":null}},"created_at":"2021-06-08T20:04:10.000Z","updated_at":"2025-03-02T19:28:07.000Z","dependencies_parsed_at":"2024-06-05T00:55:06.317Z","dependency_job_id":"9861b4d6-e09d-4548-b97c-bda91ccabe4f","html_url":"https://github.com/scribd/armadillo","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scribd%2Farmadillo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scribd%2Farmadillo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scribd%2Farmadillo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scribd%2Farmadillo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scribd","download_url":"https://codeload.github.com/scribd/armadillo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248888942,"owners_count":21178136,"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","kotlin","managed-by-terraform","mobile-build-tooling"],"created_at":"2024-11-27T23:18:28.567Z","updated_at":"2025-04-14T13:33:39.310Z","avatar_url":"https://github.com/scribd.png","language":"Kotlin","readme":"![](armadillo.webp)\n\nWelcome to Project Armadillo, a delightful audio player for Android.\n\n## Features\n\n- [x] Playback and downloading\n- [x] HLS or MP4 audio\n- [x] Encryption\n- [x] Analytics support\n- [x] Error Propagation\n- [x] Playback while the app is backgrounded\n- [x] Immediate solution for playing track based / chapterized audio content\n- [x] Configurable foreground notifications for playback and downloading. Conforms to Oreo+ notification requirements.\n- [x] State object with regular updates for keeping the UI in sync\n- [x] Support for [Android Auto](https://developer.android.com/training/cars)\n- [x] Implements [MediaBrowserService](https://developer.android.com/guide/topics/media-apps/audio-app/building-a-mediabrowserservice) and [MediaSession](https://developer.android.com/guide/topics/media-apps/working-with-a-media-session#init-session) apis\n- [x] Test app to see it in action\n\n## What is Armadillo?\n\nArmadillo is a fully featured audio player. Armadillo leverages [Google's Exoplayer](https://github.com/google/ExoPlayer/) library for \nits audio engine. Exoplayer wraps a variety of low level audio and video apis but has few opinions of its own for actually using \ninternet based audio in an Android app. The leap required from Exoplayer to audio player is enormous both in terms of the amount of code \nneeded as well as the amount of domain knowledge required about complex audio related subjects. Armadillo provides a turn key solution for powering an audio player and providing the information to update a UI.\n\n- **Easy-to-use** because it outputs state updates with everything needed for a UI or analytics. Works in the background state.\n- **Effective** because it uses [Google's Exoplayer](https://github.com/google/ExoPlayer/) as the playback engine.\n- **Ready-to-go** out of the box usage for a developer looking to use an audio player.\n- **Robust** because it contains numerous configuration options for supporting most any requirement and includes a number of other android apis required for a high quality audio player.\n\n## What Armadillo does not provide\n\n- No UI or controls\n- The state of a download will need to be tracked in the app ex. (downloaded, not downloaded)\n- The player will need to be managed as a singleton, this is best done with a DI framework such as [Dagger](https://dagger.dev/)\n- The app or server must configure the manifests and provide formatted audio content\n\n\n## Basic Usage\n\nThe library is hosted with Github packages so you will need to add the Github registry with authentication to your build.gradle file. See\n the official docs on authenticating \n [here](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-gradle-registry#authenticating-to-github-packages). But you will need to:\n\n1. Generate a personal access token from your Github account.\n2. Add the Github package registry with authentication to your `build.gradle` file.\n3. For Armadillo version 1.4.1: Add a gradle dependency for com.google.android.exoplayer:exoplayer-core:2.19.1. If you wish to use \n   downloading in Android 14 you will need to use a forked version of this dependency since Exoplayer does not support Android 14.\n\n```kotlin\nmaven {\n   name = \"GitHubPackages\"\n   url = uri(\"https://maven.pkg.github.com/scribd/armadillo-and\")\n   credentials {\n       username = \"github_username\"\n       password = \"github_access_token\"\n   }\n}\n```\n\nIt's easy to get started. Head over to the TestApp for more details.\n\n```kotlin\n// construct your media\nval media = AudioPlayable(\n    id = 0,\n    title = \"Google Hosted Mp3\",\n    request = AudioPlayable.MediaRequest.createHttpUri(\"https://storage.googleapis.com/exoplayer-test-media-0/play.mp3\"),\n    chapters = emptyList()\n)\n\n// initialize the player\nval armadilloPlayer = ArmadilloPlayerFactory.init()\n\n// begin playback\narmadilloPlayer.beginPlayback(media)\n        \n// listen for state updates\narmadilloPlayer.armadilloStateObservable.subscribe {\n    \n    // update your UI here\n\n}\n```\n\n## Other Features\n- Armadillo supports adding custom headers to HLS media requests. In order to use this feature, audio URLs must have a unique numerical ID\nthat is in the  master playlist URL.\n\n### Armadillo Library\nYou can build the library with the command `./gradlew :Armadillo:assembleRelease`.\n\n### Contributing\nSee the guide [here](https://github.com/scribd/armadillo/blob/main/CONTRIBUTING.md)\n\n## Architecture Explained\n\n![armadillo](armadillo_arch.png \"Armadillo Architecture\")\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscribd%2Farmadillo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscribd%2Farmadillo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscribd%2Farmadillo/lists"}