Before uploading app-release.aab, install what Play will build from it. Bundletool's --local-testing flag makes the Play Feature Delivery library use a local fake instead of the Play Store, so the on-demand module installs even on an emulator without a store:
$BT build-apks --local-testing --bundle=$AAB --output=booknest-local.apks \
--ks=$HOME/keys/booknest-kt-upload.jks --ks-key-alias=upload \
--ks-pass=pass:$BOOKNEST_UPLOAD_PASSWORD
$BT install-apks --apks=booknest-local.apks --device-id=emulator-5556
adb -s emulator-5556 shell pm path com.example.booknest
adb -s emulator-5556 shell am start -n com.example.booknest/.MainActivity --ez bookClub true
adb -s emulator-5556 logcat -d -s BookNestSplit:V SplitCompat:V... Pushed "/sdcard/Android/data/com.example.booknest/files/local_testing/bookclub-master_3.apk" ADB >> run-as: package not debuggable: com.example.booknest package:/data/app/~~e-LmyJdwnaPsP9BweHBLAA==/.../base.apk ... I BookNestSplit: installed modules: [] I BookNestSplit: status=1 bytes=0/16588 I BookNestSplit: status=2 bytes=5529/16588 ... I BookNestSplit: status=5 bytes=16588/16588
pm path listed the base plus one split each for the phone's language, ABI and density; the rest waited in local_testing. Asked for the module, the fake went through PENDING (1), DOWNLOADING (2) and INSTALLED (5) in 3.5 seconds, and SplitCompat loaded it into the running app. The run-as failure is harmless on a first install: a release won't let bundletool 4,040 clear old local splits.

The catalog shows the practice API's sale price for Salt and Saffron ($21.60); the Book Club reads the bundled catalog, since a feature module can't use Hilt's graph directly, so it shows the list price. Against the same app from earlier chapters:
| BookNest release | Capacitor 243,123 (4.18.3) | React Native 36,878 (3.29.12) | Native Kotlin |
|---|---|---|---|
| Universal APK | 18.4 MB | 98 MB | 4.4 MB |
| Download for one phone | under 10 MB | about 38 MB | about 3.3 MB |
| Release build here | 1m 45s | 37m 11s | 11m 57s |
| Native libraries | 4 ABIs, SQLCipher 566,000 | 31 arm64, Hermes 11,328 | 4 tiny AndroidX 234 |
With the screenshots cropped for the listing (Store Listings and Screenshots), the upload key backed up, and the app signing key's fingerprint added to assetlinks.json, BookNest is ready for the internal track of Testing Tracks and, after closed testing, for its first production release.