This documents how CodeAssist is published to the IzzyOnDroid F-Droid repository, why the official F-Droid main repo is not used, and the exact steps to cut a release IzzyOnDroid can pick up.
The official F-Droid repo builds every app from source on its own buildserver, with no network access for arbitrary downloads and no prebuilt binaries. CodeAssist's on-device Android pipeline cannot meet that today:
- Prebuilt
aapt2(ide-android/src/main/jniLibs/<abi>/libaapt2.so, fetched from the ReVanced GitHub releases by thefetchAndroidBuildToolsGradle task). aapt2 is itself free software (AOSP, Apache-2.0) but building it from source on the F-Droid buildserver is infeasible, and F-Droid will not ship a binary it did not build. - Build-time network download (
fetchAndroidBuildTools) — forbidden on the buildserver. - Bundled
android.jar(ide-android/src/main/assets/android.jar) — the Android SDK platform stubs, shipped inside the APK as the on-device compiler boot classpath. The Android SDK is under Google's non-free SDK licence, so shipping it is a non-free asset.
IzzyOnDroid instead distributes the developer's own prebuilt, signed APK (pulled from GitHub Releases). It requires the app to be FOSS-licensed and free of proprietary trackers/libraries — which CodeAssist is — and discloses any binary blobs as Anti-Features rather than rejecting them.
- FOSS licence —
LICENSEis GPL-3.0-or-later; declared inREADME.md. - Fastlane metadata —
fastlane/metadata/android/en-US/holdstitle.txt,short_description.txt,full_description.txt, andchangelogs/<versionCode>.txt. IzzyOnDroid reads these for the listing. - Promo images (optional) — add to
fastlane/metadata/android/en-US/images/:icon.png(512×512, optional — IzzyOnDroid otherwise extracts it from the APK),featureGraphic.png(1024×500), andphoneScreenshots/1.png …(real device screenshots). - Public source — https://github.com/tyron12233/CodeAssist (branch
main).
The APK published to IzzyOnDroid is signed with the upload key
(keystore/upload-keystore.jks, alias upload-key) — the same key used for the Play upload.
Because Google Play uses Play App Signing (Google re-signs with a managed key), the Play-distributed build and the IzzyOnDroid build have different signatures. That is expected and unavoidable: a user cannot update across the two stores; they are independent installs. Keep using the same key for every IzzyOnDroid release so in-store updates work — if the signature ever changes, IzzyOnDroid users must uninstall/reinstall.
IzzyOnDroid's updater watches the GitHub Releases of the repo and picks up the APK asset whose
versionCode is newest.
-
Bump the version in
ide-android/build.gradle.kts(versionCodemust strictly increase;versionNameis the human label, e.g.3.0.0). -
Add a changelog
fastlane/metadata/android/en-US/changelogs/<versionCode>.txt. -
Build a signed release APK (not an AAB — IzzyOnDroid distributes APKs):
export JAVA_HOME="/Applications/IntelliJ IDEA.app/Contents/jbr/Contents/Home" ./gradlew :ide-android:assembleRelease # → ide-android/build/outputs/apk/release/ide-android-release.apk
-
Tag and publish a GitHub release, attaching the APK:
git tag v3.0.0 && git push origin v3.0.0 gh release create v3.0.0 \ ide-android/build/outputs/apk/release/ide-android-release.apk \ --title "CodeAssist 3.0" \ --notes-file fastlane/metadata/android/en-US/changelogs/31.txt
Open a Request For Packaging issue at the IzzyOnDroid repo: https://gitlab.com/IzzyOnDroid/repo/-/issues (use the "Request packaging of an app" template), with:
- App name: CodeAssist
- Source / repo: https://github.com/tyron12233/CodeAssist
- Releases (APK): https://github.com/tyron12233/CodeAssist/releases
- Licence: GPL-3.0-or-later
- applicationId:
com.tyron.code - Update mechanism: GitHub Releases (APK attached per release)
- Anti-Features (disclose up front): see below.
After the app is accepted once, every later GitHub release with a higher versionCode is picked up
automatically — no further requests needed.
IzzyOnDroid runs the F-Droid scanner over the APK. Declare these proactively so review is smooth:
- NonFreeAssets — the bundled
android.jar(Android SDK platform stubs, non-free SDK licence) shipped as the on-device compiler boot classpath. - Prebuilt component — the bundled
libaapt2.sobinaries (Apache-2.0 source, but shipped prebuilt).
Neither is a tracker and the app contains no analytics, ads, or proprietary libraries. The only
network use is the user-initiated Maven dependency download on the Dependencies screen (declared via the
INTERNET permission), and the optional install of the user's own built APK via PackageInstaller
(REQUEST_INSTALL_PACKAGES).