Android app for reading Dilbert comics with a native interface backed by the Daily Dilbert image API.
- Android Studio (latest stable)
- Android SDK 35
- JDK 17
- Open this folder in Android Studio.
- Let Gradle sync complete.
- Run the
appconfiguration on an emulator or device.
- Loads comic images directly from
https://dilbert.xo.nl/api/current.php(compatible with date/latest queries). - Automatically falls back to legacy
get_comics.php+/comics/...endpoints when API endpoints are unavailable on a host. - Sends browser-like request headers for API and legacy requests to improve compatibility with servers/CDNs that filter bot-like clients.
- Shows a native comic reader UI optimized for phones.
- Supports
Latest, date picker lookup, and previous/next comic navigation. - Supports swipe navigation on the comic area:
- swipe left = next comic, swipe right = previous comic (default)
- optional
Invert swipe directionsetting swaps this behavior
- When loading another comic, the reader resets scroll position back to the top.
- Decodes and renders GIF comic images natively.
- Includes a Settings screen to change API base URL at runtime.
- Supports two comic display modes via Settings:
Auto-split comic into panels(default): detects separator bars/gutters and renders panels in reading order (top-left to bottom-right).Full image: always renders the original comic image without splitting.
- First launch starts at
1989-04-16; subsequent launches resume the user's last viewed comic.
- Launcher icon uses
logo/droidbert.webpas source image. - App resources reference
app/src/main/res/drawable/droidbert.webpwith adaptive and legacy launcher mappings. - Foreground logo is centered with
20dpinset padding viaapp/src/main/res/drawable/ic_launcher_logo_inset.xml. - Logo WebP assets are kept free of embedded EXIF/XMP/ICC metadata for release compliance.
- Open the GitHub Releases page for this repository.
- Download the
droidbert-<version>.apkasset from the latest release. - Install it on your Android device.
If Android reports the APK is blocked by an installed app, the installed app was signed with a different key. Uninstall the currently installed Droidbert once, then install the new APK.
For local development builds, release now falls back to debug signing when release keystore environment variables are not configured, so locally built release APKs remain installable.
This repository includes a GitHub Actions workflow at .github/workflows/release-apk.yml.
- Trigger: push a tag matching
v*(for examplev0.1.0). - Result: GitHub builds a signed
releaseAPK and creates a release withdroidbert-<version>.apkattached.
Required GitHub repository secrets for signing:
ANDROID_KEYSTORE_BASE64(base64-encoded keystore file)ANDROID_KEYSTORE_PASSWORDANDROID_KEY_ALIASANDROID_KEY_PASSWORD
Example commands:
git tag -a v0.3.0 -m "Release v0.3.0"
git push origin v0.3.0- Run the Bump Version workflow (
.github/workflows/bump-version.yml) manually from GitHub Actions. - Provide a semantic version (example:
0.2.0). - The workflow will:
- increment
versionCode - set
versionName - add a new dated section in
CHANGELOG.md - create and push tag
v<version>
- increment
- The Version and Changelog Guard workflow (
.github/workflows/version-changelog-guard.yml) enforces:CHANGELOG.mdmust be updated whenapp/build.gradle.ktschanges in PRsCHANGELOG.mdmust include## [Unreleased]- pushed release tags (
v*) must matchversionName - changelog must contain the matching version section
- completed releases must include APK asset
droidbert-<version>.apk
This repository contains metadata and helper files to simplify submission to the official F-Droid fdroiddata repository.
- App metadata template:
fdroid/com.droidbert.yml - Submission checklist and MR text:
fdroid/SUBMISSION.md - Quickstart commands:
fdroid/FDROIDDATA_QUICKSTART.md - Helper script to copy metadata into a local
fdroiddatacheckout:fdroid/copy-to-fdroiddata.sh - Fastlane listing metadata:
fastlane/metadata/android/en-US/
Keep Builds, CurrentVersion, and CurrentVersionCode in fdroid/com.droidbert.yml aligned with app/build.gradle.kts and the latest release tag.
Use AutoUpdateMode: Version with UpdateCheckMode: Tags for tag-based F-Droid update detection.
Current metadata is aligned to v0.3.12 / versionCode 27.
Example helper usage:
./fdroid/copy-to-fdroiddata.sh /path/to/fdroiddataSee CHANGELOG.md for release notes.
Run local JVM unit tests:
./gradlew :app:testDebugUnitTestRun Android instrumentation tests (emulator/device required):
./gradlew :app:connectedDebugAndroidTestMaintenance policy: every functional or workflow/configuration change should include matching updates to README.md and CHANGELOG.md.