Android release
By default waid build --target android produces a debug APK, which is perfect for
testing, but not uploadable to the Play Store. This page covers versioning, signing a
release, and building a Play Store bundle.
Debug vs release#
waid build --target android # debug APK (debug-signed)waid build --target android --release --mode production # signed release (needs a keystore)Debug is the default; a configured keystore never forces a release. Add --release
with an explicit --mode production when you want a signed release using production configuration.
APK vs AAB#
waid build --target android --format apk # APK (default)waid build --target android --release --mode production --format aab # App Bundle for the Play StoreNew Play Store uploads must be an Android App Bundle (--format aab), not an APK.
Pair it with --release for an uploadable, signed bundle.
Versioning#
Set the version once at the top level of waid.config.json, a Flutter-style
"<name>+<build>" string that applies to every platform. On Android the name becomes
versionName and the build number becomes versionCode:
{ "version": "1.1.0+2"}Every Play Store upload needs a higher build number (versionCode) than the last.
Need an Android-only value? Override the global version with versionCode /
versionName under androidBuildProfile; these win for Android only:
"androidBuildProfile": { "packageName": "com.acme.app", "versionCode": 2, "versionName": "1.1.0"}See App configuration → Version for the full mapping.
Sign a release#
You only touch config + two gitignored files. No Gradle or native code.
Create a keystore (once)#
keytool -genkeypair -v -keystore release.jks -alias upload \ -keyalg RSA -keysize 2048 -validity 10000 -storetype PKCS12Point the config at it#
In androidBuildProfile:
"keystore": "release.jks","keyAlias": "upload"The keystore path and alias aren't secret, so they're safe to commit.
Put passwords in waid.local.properties#
A gitignored file at the project root (waid new scaffolds a
waid.local.properties.example to copy):
WAID_ANDROID_KEYSTORE_PASSWORD=your-store-passwordWAID_ANDROID_KEY_PASSWORD=your-key-password # omit for a PKCS12 keystoreBuild with --release#
WAID loads the passwords automatically:
waid build --target android --release --mode production --format aabPasswords never go in waid.config.json. The real environment overrides
waid.local.properties, so CI can inject the true secrets. Bump versionCode on
every upload.
Run on the emulator#
The default build targets arm64-v8a. To also run on the standard Android emulator,
add x86_64 to your ABIs:
"androidBuildProfile": { "abis": ["arm64-v8a", "x86_64"] }