A simple, offline Android video player that plays everything — built on libVLC, so it handles whatever format you throw at it. No streaming, no accounts, no ads. Just your videos, in a clean AMOLED-black interface.
Most stock players choke on something — an odd codec, an MKV, a high-bitrate file — and half the alternatives are bloated with logins, cloud features and ads. I wanted a plain, offline player that just opens the videos already on my phone and plays them, regardless of format, and remembers where I left off. So I wrapped libVLC (the engine behind VLC) in a clean Kotlin app, gave it a proper dark theme and gesture controls, and kept everything else out of the way. It's built and tuned for a Samsung A73-class device, but runs on anything from Android 7.0 up.
You'll need Android Studio (or a local Android SDK) with JDK 17.
git clone https://github.com/0iroN/videoplayer.git
cd videoplayerAndroid Studio: open the project folder, let Gradle sync, then Run (or Build > Build Bundle(s) / APK(s) > Build APK(s)).
Command line:
./gradlew assembleDebug # builds app/build/outputs/apk/debug/app-debug.apkThen install the APK on a connected device:
adb install app/build/outputs/apk/debug/app-debug.apkNote: the build targets arm64-v8a only, which covers modern phones (Samsung A73 and the like). The first sync pulls libVLC from Maven Central, so it can take a little while.
Launch the app and grant the media-read permission on first run. The library screen lists every video on the device; tap one to play, long-press to delete it.
- Filter by folder with the top spinner (each folder shows its video count).
- Sort by name, duration, date added, or file size.
- Play — tap a video to open the full-screen player.
In the player, everything is gesture- and tap-driven:
- Single tap — show/hide the control bar (it auto-hides after a few seconds).
- Double-tap left or right half — jump back / forward 10 seconds.
- Drag horizontally — scrub, with a live thumbnail preview of the target frame.
- Drag vertically on the left — adjust screen brightness.
- Drag vertically on the right — adjust volume.
The control bar itself carries play/pause, previous, next, shuffle, playback speed, aspect/zoom, orientation, audio track, subtitle, and A/V sync.
- Plays everything — playback is handled by libVLC, so practically any container or codec works (MKV, AVI, MP4, MOV, and more) without extra plugins.
- Fully offline — videos are discovered from your device via Android's MediaStore. No network access at all; the app requests only media-read permission.
- AMOLED dark UI — a true-black theme with a card-based library list, crisp vector icons throughout, and an adaptive launcher icon.
- Resume where you left off — playback position is remembered per video and restored on reopen; finished videos are cleared automatically.
- Playback speed — cycle through 0.5×, 0.75×, 1×, 1.25×, 1.5×, and 2×.
- Audio & subtitle tracks — pick from the embedded audio and subtitle tracks, or load an external
.srtfrom a file. - Aspect ratio / zoom — cycle fit, fill, and common ratios to match your screen.
- Orientation — auto-fits portrait or landscape to the video, or lock it manually.
- A/V sync control — nudge audio delay in 50 ms steps, with a software-decode fallback for stubborn audio drift.
- Brightness & volume gestures — swipe vertically on the left or right half of the screen.
- Scrub with preview — drag to seek and see a thumbnail of the frame you're landing on.
- Folder filter with counts — group videos by their folder (bucket); each shows how many it holds.
- Sorting — by name, duration, date added, or file size.
- Long-press to delete — remove a video from the device straight from the list, with a confirmation dialog.
- Playlist controls — next, previous, shuffle, and auto-advance to the next video when one ends.
- Full-screen player — tap-to-toggle, auto-hiding controls, and keep-screen-on while playing.
- Grant the media permission on first launch (
READ_MEDIA_VIDEOon Android 13+,READ_EXTERNAL_STORAGEon older versions) so the app can list your videos. - Deleting a video removes it from the device permanently; the app uses the system's own delete confirmation on Android 10+.
- This is a local-files player — it does not stream from the internet and has no network permission.
- Minimum Android 7.0 (API 24); built and tested against API 34.
MIT © Osman Demir · osmandemir.net