This comprehensive guide explains how to version your app and publish it on F-Droid and other Android app distribution platforms.
- App Versioning
- Publishing on F-Droid
- Publishing on IzzyOnDroid
- Publishing on GitHub Releases
- Alternative Distribution Platforms
- Fastlane Metadata Setup
Android apps use two version identifiers in app/build.gradle.kts:
defaultConfig {
versionCode = 1 // Integer: Internal version (must increment each release)
versionName = "1.0.0" // String: User-visible version (follows semver)
}versionCode: An integer that must increase with every release. This is what Google Play, F-Droid, and other stores use to determine if an update is available.versionName: A string shown to users (e.g., "1.0.0", "1.2", "2.0-beta").
Format: MAJOR.MINOR.PATCH (e.g., 1.2.3)
| Part | When to Increment | Example |
|---|---|---|
| MAJOR | Breaking changes, major redesign, min SDK bump | 1.0.0 → 2.0.0 |
| MINOR | New features (backwards-compatible) | 1.0.0 → 1.1.0 |
| PATCH | Bug fixes, minor improvements | 1.0.0 → 1.0.1 |
You can also use simpler formats:
| Format | Examples | Use Case |
|---|---|---|
X.Y |
v1.0, v1.1, v1.2, v2.0 | Simple, user-friendly versions |
X.YZ |
v1.01, v1.02, v1.10 | Two-digit minor versioning |
X.Y.Z |
v1.0.0, v1.2.3 | Semantic versioning (recommended) |
X.Y.Z-tag |
v1.0.0-beta, v2.0.0-rc1 | Pre-release versions |
For Year Dots:
| versionCode | versionName | Description |
|---|---|---|
| 1 | 1.0.0 | Initial release |
| 2 | 1.0.1 | Bug fix release |
| 3 | 1.1.0 | Added widget support |
| 4 | 1.2.0 | Added export feature |
| 5 | 2.0.0 | Major redesign with new UI |
-
Edit
app/build.gradle.kts:defaultConfig { versionCode = 2 // Increment by 1 versionName = "1.0.1" // Update version string } -
Update
CHANGELOG.mdwith release notes -
Commit and tag:
git add app/build.gradle.kts CHANGELOG.md git commit -m "chore: bump version to 1.0.1" git tag -a v1.0.1 -m "Release v1.0.1" git push origin main --tags
F-Droid is the leading open-source Android app repository. It's completely free and emphasizes privacy and security.
- ✅ Your app is open source (hosted on GitHub, GitLab, etc.)
- ✅ App uses only FOSS (Free and Open Source Software) dependencies
- ✅ No proprietary services (Google Play Services, Firebase Analytics, etc.)
- ✅ No tracking or analytics
- ✅ Build is reproducible from source
Year Dots meets all these requirements! ✅
F-Droid uses fastlane-style metadata. Create this directory structure:
fastlane/
└── metadata/
└── android/
└── en-US/
├── full_description.txt
├── short_description.txt
├── title.txt
├── changelogs/
│ └── 1.txt # Changelog for versionCode 1
│ └── 2.txt # Changelog for versionCode 2
└── images/
├── icon.png # 512x512 app icon
├── featureGraphic.png # 1024x500 banner (optional)
└── phoneScreenshots/
├── 1.png
├── 2.png
└── 3.png
fastlane/metadata/android/en-US/title.txt:
Year Dots
fastlane/metadata/android/en-US/short_description.txt:
Minimalist wallpaper showing your year as 365 dots
fastlane/metadata/android/en-US/full_description.txt:
Year Dots transforms your phone's wallpaper into a daily reminder of time's passage.
Each day of the year is represented by a single dot in a 365-dot grid.
Features:
• 365-dot calendar grid - Visual representation of your year
• Automatic daily updates - Wallpaper refreshes at midnight
• Fully customizable colors - Choose colors for past, present, and future
• Four dot shapes - Circle, Rounded Square, Square, and Pill
• Four size options - Tiny, Small, Medium, and Large
• Live preview - See changes before applying
Privacy:
• 100% offline - No internet permission required
• No tracking or analytics
• No ads
• Open source under MIT License
- Go to F-Droid RFP Issues
- Click "New Issue"
- Use the "Request For Packaging" template
- Fill in:
- App name: Year Dots
- Homepage: https://github.com/ikrishanaa/Yeardots
- Source code: https://github.com/ikrishanaa/Yeardots
- License: MIT
- Description: Brief description of your app
- Submit the issue
F-Droid maintainers will review and add your app to the repository.
If you're comfortable with Git:
-
Fork the F-Droid Data Repository:
git clone https://gitlab.com/fdroid/fdroiddata.git cd fdroiddata -
Create metadata file
metadata/com.krishana.onedot.yml:Categories: - Customization - Theming License: MIT AuthorName: Krishana AuthorEmail: krishanaindia773@gmail.com SourceCode: https://github.com/ikrishanaa/Yeardots IssueTracker: https://github.com/ikrishanaa/Yeardots/issues Changelog: https://github.com/ikrishanaa/Yeardots/blob/main/CHANGELOG.md AutoName: Year Dots RepoType: git Repo: https://github.com/ikrishanaa/Yeardots.git Builds: - versionName: '1.0.0' versionCode: 1 commit: v1.0.0 subdir: app gradle: - yes AutoUpdateMode: Version UpdateCheckMode: Tags CurrentVersion: 1.0.0 CurrentVersionCode: 1
-
Test locally:
fdroid lint com.krishana.onedot fdroid build com.krishana.onedot
-
Submit merge request on GitLab
Once accepted:
- Your app will appear on F-Droid within 1-2 weeks
- F-Droid will automatically build new versions when you create tags
- Users can install/update via F-Droid app
Ensure your app doesn't have these anti-features:
- ❌ Ads
- ❌ Tracking
- ❌ Non-Free Network Services
- ❌ Non-Free Dependencies
- ❌ Promoting Non-Free Addons
Year Dots has NONE of these! ✅
IzzyOnDroid is a faster F-Droid-compatible repository. Apps get added within days instead of weeks.
- Go to IzzyOnDroid Application Inclusion Request
- Or open an issue at: https://apt.izzysoft.de/fdroid/
Requirements:
- Open source
- Signed APK available in GitHub Releases
- No tracking/ads
IzzyOnDroid downloads APKs directly from your GitHub Releases, so ensure you have proper release workflows set up.
Year Dots already has GitHub Releases configured! Here's how it works:
- Update version in
app/build.gradle.kts - Update CHANGELOG.md
- Create and push tag:
git tag -a v1.1.0 -m "Release v1.1.0" git push origin v1.1.0 - GitHub Actions automatically:
- Builds the APK
- Signs it (if secrets are configured)
- Creates a GitHub Release with the APK attached
- Build APK:
./gradlew assembleRelease - Go to GitHub → Releases → "Create a new release"
- Create tag (e.g.,
v1.1.0) - Upload APK
- Add release notes
- Publish
Obtainium lets users track GitHub releases directly.
No action required! Users can add your repo URL and get automatic updates.
Submit your APK to these popular APK hosting sites:
Free to publish:
- Create Amazon Developer Account
- Submit APK via the Developer Console
- Free to list
For Samsung devices:
- Register at Samsung Developer Portal
- Submit app via Seller Portal
- No fee for registration
Large Chinese/international market:
- Register at Huawei Developer
- Submit via AppGallery Connect
- No Google services dependency (good for Year Dots!)
Complete setup for F-Droid and automated metadata:
mkdir -p fastlane/metadata/android/en-US/{changelogs,images/phoneScreenshots}# Title
echo "Year Dots" > fastlane/metadata/android/en-US/title.txt
# Short description (max 80 chars)
echo "Minimalist wallpaper showing your year as 365 dots" > fastlane/metadata/android/en-US/short_description.txt
# Full description
cat > fastlane/metadata/android/en-US/full_description.txt << 'EOF'
Year Dots transforms your phone's wallpaper into a daily reminder of time's passage. Each day of the year is represented by a single dot in a 365-dot grid that updates automatically at midnight.
Features:
• 365-dot calendar grid - Visual representation of the entire year
• Automatic daily updates - Wallpaper refreshes at midnight
• Fully customizable colors - Choose colors for past, present, future, and background
• Four dot shapes - Circle, Rounded Square, Square, and Pill
• Four size options - Tiny, Small, Medium, and Large dot densities
• Live preview - See changes in real-time before applying
Privacy & Performance:
• 100% Offline - No internet permission, no tracking
• Battery Efficient - Optimized background tasks
• AMOLED-Friendly - Dark backgrounds save battery
• No Data Collection - Your privacy is guaranteed
Inspired by life calendar visualizations and the philosophy that awareness of time's finite nature helps us live more intentionally.
Open source under MIT License.
EOF
# Changelog for version 1 (versionCode)
cat > fastlane/metadata/android/en-US/changelogs/1.txt << 'EOF'
Initial release:
• 365-dot calendar wallpaper
• Four dot shapes: Circle, Rounded, Square, Pill
• Four size densities
• Full color customization
• Live preview
• Automatic daily updates
EOFAdd PNG screenshots to fastlane/metadata/android/en-US/images/phoneScreenshots/:
- Name them
1.png,2.png,3.png, etc. - Recommended size: 1080x1920 or 1440x2560
- Show main features of the app
Add your 512x512 icon to:
fastlane/metadata/android/en-US/images/icon.png
- Set up Fastlane metadata structure
- Add screenshots and icon
- Configure GitHub Actions for releases
- Generate release keystore
- Update
versionCode(increment by 1) - Update
versionName(follow semver) - Update
CHANGELOG.md - Create changelog file in
fastlane/metadata/android/en-US/changelogs/{versionCode}.txt - Create and push git tag
- Verify GitHub Release is created
- Submit to F-Droid (first time only)
- F-Droid (open RFP or submit MR)
- IzzyOnDroid (automatic from GitHub)
- GitHub Releases (automatic)
- Optional: APKPure, Amazon, Samsung
- F-Droid Documentation: https://f-droid.org/en/docs/
- F-Droid Forum: https://forum.f-droid.org/
- IzzyOnDroid: https://apt.izzysoft.de/fdroid/
- Year Dots Issues: https://github.com/ikrishanaa/Yeardots/issues
Happy Publishing! 🚀