Skip to content

Repository files navigation

Android TV Applet

Перший native Android TV аплет для Universal Media Portal.

Що вже є

  • читає Universal App Manifest з BuildConfig.MANIFEST_URL;
  • має fallback на app/src/main/assets/universal-showcase.manifest.json;
  • має імпортований fixture app/src/main/assets/river-city-public-media.manifest.json зі складного demo project;
  • показує manifest-driven screens, tabs, branded hero, rails, live/app/search/subscription blocks і details screen;
  • підтримує D-pad focus для TV-пульта;
  • програє mp4, hls і dash через AndroidX Media3;
  • передає captions і DRM config у Media3 для direct playback, якщо manifest це описує;
  • для youtube та external використовує platform intent policy;
  • підтримує app-specific offline cache для direct mp4, hls, dash;
  • має development auth/unlock gate для gated content і subscription blocks;
  • має search query state для manifest-driven search screens;
  • підтримує app shortcut policy через package/deep link/web fallback;
  • зберігає локальну resume position для direct playback;
  • відправляє opt-in playback telemetry, якщо manifest має analytics.enabled=true і eventEndpoint;
  • підтримує custom deep links universalmedia://open?contentId=... і universalmedia://play?contentId=...;
  • має compact phone layout для USB smoke-тестів на фізичному телефоні;
  • не читає CMS напряму і не зберігає secrets у manifest.

Запуск

cd android-tv-applet
./gradlew test assembleDebug

Release readiness smoke:

./tools/validate-release-inputs.sh
./tools/prepare-hosting-package.sh local-smoke
./tools/validate-hosting-package.sh --allow-placeholder-assetlinks
./gradlew testDebugUnitTest assembleDebug bundleRelease \
  -PAPP_LINK_HOST=apps.example.com \
  -PMANIFEST_URL=https://apps.example.com/universal-media/android-tv/stable/manifest.json
./tools/validate-release-aab.sh

Use strict ./tools/validate-hosting-package.sh only after replacing assetlinks.json with the Play App Signing SHA-256 fingerprint.

Release AAB smoke artifact:

app/build/outputs/bundle/release/app-release.aab

GitHub Actions workflow template:

google-play-publication/templates/github-actions/android-ci.yml

Move it to .github/workflows/android-ci.yml only when the GitHub token has workflow scope.

Android Studio

У Android Studio відкрий папку:

D:\Project\Specification_Universal_Media_Portal\android-tv-applet

Після Gradle Sync можна запускати конфігурацію app на Android TV emulator, Google TV device або звичайному Android device для smoke-перевірки.

Для підключення до live publish endpoint:

./gradlew assembleDebug -PMANIFEST_URL="http://10.0.2.2:3000/api/app-manifest/current?project=demo-youtube-channel"

На фізичному Android TV/телефоні заміни host на адресу dev-сервера в LAN, наприклад http://192.168.2.234:3000/....

Для перевірки конкретного bundled manifest:

./gradlew assembleDebug -PASSET_MANIFEST=river-city-public-media.manifest.json

Для release-style build із HTTPS manifest і App Links host:

./gradlew assembleDebug \
  -PMANIFEST_URL="https://apps.example.com/universal-media/android-tv/stable/manifest.json" \
  -PAPP_LINK_HOST="apps.example.com"

Default bundled manifest universal-showcase.manifest.json є "wide coverage" fixture: він покриває showcaseHub, liveNowGuide, appLauncher, searchKeyboardResults, bundleOffer, прямий playback, live stream, camera/WebRTC fallback, YouTube/external fallback і subscription/provider blocks.

Runtime notes

Telemetry is non-blocking. If eventEndpoint is missing or unavailable, playback continues.

Deep link smoke tests

adb shell am start -W -a android.intent.action.VIEW -d 'universalmedia://open?contentId=demo-hls' app.universalmedia.androidtv
adb shell am start -W -a android.intent.action.VIEW -d 'universalmedia://play?contentId=demo-hls' app.universalmedia.androidtv

On Windows from WSL, use the Windows SDK ADB when the phone is attached to Windows:

/mnt/c/Users/Main/AppData/Local/Android/Sdk/platform-tools/adb.exe shell am start -W -a android.intent.action.VIEW -d 'universalmedia://open?contentId=demo-hls' app.universalmedia.androidtv

Межі MVP

  • DRM потребує production license server policy; secrets не кладуться в APK або public manifest.
  • Google Play Billing purchase flow ще треба підключити до реальних Play Console products.
  • Production OAuth provider ще не підключений; поточний auth/unlock gate є runtime enforcement hook для тестів.
  • YouTube native SDK не доданий; поточна політика відкриває YouTube/external handler.
  • Offline cache поки manual app-specific cache без quota/eviction scheduler.

About

android-tv-app

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages