- Kotlin 96.1%
- HTML 2.8%
- Shell 0.8%
- Dockerfile 0.3%
|
|
||
|---|---|---|
| .forgejo/workflows | ||
| app | ||
| design | ||
| docker | ||
| docs | ||
| gradle | ||
| scripts | ||
| .dockerignore | ||
| .gitignore | ||
| AGENTS.md | ||
| build.gradle.kts | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| keystore.properties.example | ||
| PLAN.md | ||
| README.md | ||
| settings.gradle.kts | ||
Invio Android
Invio Android is the Android shell for Invio, a personal Invidious-first video app. It is built with
Kotlin, Jetpack Compose, Media3, WorkManager, Android WebView, and the shared Rust core from
../invio-core.
The app is meant to browse, watch, and organize YouTube content through configured Invidious instances. The Android repo owns the native app experience; reusable product behavior belongs in the shared core.
What It Does
- Shows a subscription feed backed by Invidious and the shared core.
- Searches videos and channels.
- Plays videos through native Media3 playback.
- Keeps Invidious as the preferred path for feeds, metadata, comments, and playback.
- Solves Invidious browser checks with a hidden/minimal WebView, then reuses those cookies for native requests.
- Supports Shorts, channel pages, library lists, playlists, watch history, downloads, and settings.
- Integrates SponsorBlock and Return YouTube Dislike through the shared core.
- Imports and exports app data so installs can be moved or restored.
Screenshots
Repository Role
This repo should stay Android-specific:
- Compose UI and navigation.
- Android lifecycle, permissions, storage access, notifications, and picture-in-picture.
- Media3 playback and download integration.
- WorkManager background jobs.
- Android WebView challenge solving.
- Packaging and Gradle configuration.
Shared logic such as Invidious parsing, instance handling, stream resolution, SponsorBlock,
Return YouTube Dislike, persistence models, and sync belongs in ../invio-core.
Building
Use the Docker-based workflow. The host machine is not expected to have Java or the Android SDK.
scripts/dbuild.sh ./gradlew :app:testDebugUnitTest
scripts/dbuild.sh ./gradlew :app:assembleDebug
The app consumes checked-in generated Kotlin bindings and native .so files from invio-core:
app/src/main/java/uniffi/invio_core/invio_core.ktapp/src/main/jniLibs/<abi>/libinvio_core.so
After changing the Rust public API in ../invio-core, regenerate bindings and rebuild the Android
native libraries before testing this app.
Project Status
This is a personal project. It is built for the author's own use and experimentation, so it does not come with warranty, support commitments, compatibility guarantees, or release promises.
Invio is not affiliated with YouTube, Google, Invidious, SponsorBlock, or Return YouTube Dislike.
Source Availability
The code is currently source available for reading and reference. It is not open source licensed. Unless a separate license is added, no permission is granted to reuse, redistribute, or relicense the code.

