Building Creamoid
=================

Requirements
------------

- JDK 17. Gradle 8.9 fails on newer JDKs.
- Android SDK platform 35 and build-tools 35.0.0.

Setup
-----

	export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
	export ANDROID_HOME=~/android-sdk
	$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --sdk_root=$ANDROID_HOME \
		"platforms;android-35" "build-tools;35.0.0" platform-tools

Install the command line tools into `$ANDROID_HOME/cmdline-tools/latest`
first. Android Studio does all of this for you.

Build
-----

	./gradlew assembleDebug        # app/build/outputs/apk/debug/app-debug.apk
	./gradlew testDebugUnitTest    # unit tests

Install
-------

	adb install -r app/build/outputs/apk/debug/app-debug.apk

Release
-------

	./gradlew assembleRelease      # app/build/outputs/apk/release/app-release.apk

The release build is minified, and signed with the debug key. It installs,
but it is not for distribution. Use it to judge speed: debug builds are much
slower with Compose.

Signing
-------

Create the key once, and keep it. Every update must be signed with the same
key.

	keytool -genkeypair -v -keystore creamoid.jks -alias creamoid \
		-keyalg RSA -keysize 4096 -validity 10000
	apksigner sign --ks creamoid.jks --out creamoid.apk \
		app/build/outputs/apk/release/app-release.apk
	apksigner verify creamoid.apk

Notes
-----

- Key derivation (Argon2) is memory-hungry. The app sets `largeHeap`.
- The first build is slow (Gradle, Kotlin, Compose). Later builds are faster.
- `./gradlew clean` removes `app/build`.
