You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Before AGP 9, the app build renamed APKs and AABs inside AGP's output directories through applicationVariants, BaseVariantOutputImpl.outputFileName, and FinalizeBundleTask. AGP 9 removes those legacy and internal APIs. There is no supported way to keep writing the established bitkit-* names into AGP's native output directories.
#1127 replaces them with the supported SingleArtifact.APK, SingleArtifact.BUNDLE, and BuiltArtifactsLoader APIs. The resulting artifact-listener tasks run whenever Gradle produces the corresponding app artifact, including direct assemble* and bundle* commands, and publish copies under app/build/outputs/bitkit/<variant>/. Dependent consumers that still search the old AGP paths must update with that producer move.
Producer contract
Every assemble<Variant> invocation automatically publishes the established versioned bitkit-*.apk copies under app/build/outputs/bitkit/<variant>.
Every bundle<Variant> invocation automatically publishes the established versioned bitkit-*.aab copy under app/build/outputs/bitkit/<variant>.
The artifact-listener wiring is the build trigger for these compatibility outputs across direct Gradle commands, Android Studio builds, just commands, and CI.
Each compatibility directory contains only the current APK or AAB set for its variant.
AGP's native app-* artifacts and metadata remain owned by AGP under app/build/outputs/apk and app/build/outputs/bundle.
Consumer delivery
Update the two consumers against the AGP 9 producer path. Track both changes through this issue.
Resolve exactly one universal APK from app/build/outputs/bitkit/devDebug or app/build/outputs/bitkit/mainnetDebug after the existing assemble* command.
Continue writing aut/bitkit_e2e.apk for local and regtest runs.
Continue writing aut/bitkit_e2e_mainnet.apk for mainnet runs.
Prefer a same-named companion branch as the android PR (chore/agp-9-upgrade) so default E2E branch resolution picks it up.
Resolve exactly one universal APK from app/build/outputs/bitkit/mainnetDebug after assembleMainnetDebug.
Continue writing and uploading probe-apk/bitkit_e2e.apk.
Consumers hard-cut to the new compatibility directory. A dual-path legacy fallback is not required: the old in-place rename contract cannot be preserved under AGP 9, and coordinating the consumer updates with #1127 is enough.
Why this is required
Before AGP 9, the app build renamed APKs and AABs inside AGP's output directories through
applicationVariants,BaseVariantOutputImpl.outputFileName, andFinalizeBundleTask. AGP 9 removes those legacy and internal APIs. There is no supported way to keep writing the establishedbitkit-*names into AGP's native output directories.#1127 replaces them with the supported
SingleArtifact.APK,SingleArtifact.BUNDLE, andBuiltArtifactsLoaderAPIs. The resulting artifact-listener tasks run whenever Gradle produces the corresponding app artifact, including directassemble*andbundle*commands, and publish copies underapp/build/outputs/bitkit/<variant>/. Dependent consumers that still search the old AGP paths must update with that producer move.Producer contract
assemble<Variant>invocation automatically publishes the established versionedbitkit-*.apkcopies underapp/build/outputs/bitkit/<variant>.bundle<Variant>invocation automatically publishes the established versionedbitkit-*.aabcopy underapp/build/outputs/bitkit/<variant>.justcommands, and CI.app-*artifacts and metadata remain owned by AGP underapp/build/outputs/apkandapp/build/outputs/bundle.Consumer delivery
Update the two consumers against the AGP 9 producer path. Track both changes through this issue.
bitkit-e2e-tests/scripts/build-android-apk.sh— fix: locate apk in agp 9 output dir bitkit-e2e-tests#203app/build/outputs/bitkit/devDebugorapp/build/outputs/bitkit/mainnetDebugafter the existingassemble*command.aut/bitkit_e2e.apkfor local and regtest runs.aut/bitkit_e2e_mainnet.apkfor mainnet runs.chore/agp-9-upgrade) so default E2E branch resolution picks it up.bitkit-nightly/.github/workflows/mainnet-probe.yml— synonymdev/bitkit-nightly#45app/build/outputs/bitkit/mainnetDebugafterassembleMainnetDebug.probe-apk/bitkit_e2e.apk.Consumers hard-cut to the new compatibility directory. A dual-path legacy fallback is not required: the old in-place rename contract cannot be preserved under AGP 9, and coordinating the consumer updates with #1127 is enough.
Delivery order
bitkit-e2e-testscompatibility update (fix: locate apk in agp 9 output dir bitkit-e2e-tests#203), ideally on a same-named branch as the android PR until merge.bitkit-nightlycompatibility update (synonymdev/bitkit-nightly#45).Acceptance criteria
./gradlew assembleDevDebugpublishes exactly onebitkit-dev-debug-*-universal.apkunderapp/build/outputs/bitkit/devDebug../gradlew assembleMainnetDebugpublishes exactly onebitkit-mainnet-debug-*-universal.apkunderapp/build/outputs/bitkit/mainnetDebug../gradlew bundleMainnetReleasepublishes exactly one currentbitkit-mainnet-release-*.aabunderapp/build/outputs/bitkit/mainnetRelease.bitkit-e2e-testsAndroid build helper succeeds against an AGP 9 android ref for local, regtest, and mainnet builds.aut/.bitkit-nightlymainnet probe reaches the upload step withprobe-apk/bitkit_e2e.apkpresent against an AGP 9 android ref.