base on Android TV Client for Jellyfin <h1 align="center">Jellyfin Android TV</h1> <h3 align="center">Part of the <a href="https://jellyfin.org">Jellyfin Project</a></h3> --- <p align="center"> <img alt="Logo banner" src="https://raw.githubusercontent.com/jellyfin/jellyfin-ux/master/branding/SVG/banner-logo-solid.svg?sanitize=true"/> <br/><br/> <a href="https://github.com/jellyfin/jellyfin-androidtv"> <img alt="GPL 2.0 License" src="https://img.shields.io/github/license/jellyfin/jellyfin-androidtv.svg"/> </a> <a href="https://github.com/jellyfin/jellyfin-androidtv/releases"> <img alt="Current Release" src="https://img.shields.io/github/release/jellyfin/jellyfin-androidtv.svg"/> </a> <a href="https://translate.jellyfin.org/projects/jellyfin-android/jellyfin-androidtv/"> <img alt="Translation Status" src="https://translate.jellyfin.org/widgets/jellyfin-android/-/jellyfin-androidtv/svg-badge.svg"/> </a> <br/> <a href="https://opencollective.com/jellyfin"> <img alt="Donate" src="https://img.shields.io/opencollective/all/jellyfin.svg?label=backers"/> </a> <a href="https://features.jellyfin.org"> <img alt="Feature Requests" src="https://img.shields.io/badge/fider-vote%20on%20features-success.svg"/> </a> <a href="https://matrix.to/#/+jellyfin:matrix.org"> <img alt="Chat on Matrix" src="https://img.shields.io/matrix/jellyfin:matrix.org.svg?logo=matrix"/> </a> <br/> <a href="https://play.google.com/store/apps/details?id=org.jellyfin.androidtv"> <img width="153" alt="Jellyfin on Google Play" src="https://jellyfin.org/images/store-icons/google-play.png"/> </a> <a href="https://www.amazon.com/gp/aw/d/B07TX7Z725"> <img width="153" alt="Jellyfin on Amazon Appstore" src="https://jellyfin.org/images/store-icons/amazon.png"/> </a> <a href="https://f-droid.org/en/packages/org.jellyfin.androidtv/"> <img width="153" alt="Jellyfin on F-Droid" src="https://jellyfin.org/images/store-icons/fdroid.png"/> </a> <br/> <a href="https://repo.jellyfin.org/releases/client/androidtv/">Download archive</a> </p> Jellyfin Android TV is a Jellyfin client for Android TV, Nvidia Shield, and Amazon Fire TV devices. We welcome all contributions and pull requests! If you have a larger feature in mind please open an issue so we can discuss the implementation before you start. ## Building The app uses Gradle and requires the Android SDK. We recommend using Android Studio, which includes all required dependencies, for development and building. For manual building without Android Studio make sure a compatible JDK and Android SDK are installed and in your PATH, then use the Gradle wrapper (`./gradlew`) to build the project with the `assembleDebug` Gradle task to generate an apk file: ```shell ./gradlew assembleDebug ``` The task will create an APK file in the `/app/build/outputs/apk/debug` directory. This APK file uses a different app-id from our stable builds and can be manually installed to your device. ## Branching The `master` branch is the primary development branch and the target for all pull requests. It is **unstable** and may contain breaking changes or unresolved bugs. For production deployments and forks, always use the latest `release-x.y.z` branch. Do not base production work or long-lived forks on `master`. Release branches are created at the start of a beta cycle and are kept up to date with each published release. Maintainers will cherry-pick selected changes into release branches as needed for backports. These branches are reused for subsequent patch releases. ## Translating Translations can be improved very easily from our [Weblate](https://translate.jellyfin.org/projects/jellyfin-android/jellyfin-androidtv) instance. Look through the following graphic to see if your native language could use some work! We cannot accept changes to translation files via pull requests. <p align="center"> <a href="https://translate.jellyfin.org/engage/jellyfin-android/"> <img alt="Detailed Translation Status" src="https://translate.jellyfin.org/widgets/jellyfin-android/-/jellyfin-androidtv/multi-auto.svg"/> </a> </p> ", Assign "at most 3 tags" to the expected json: {"id":"4867","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"