Publishing the Native BookNest

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:

Installing the bundle as Play would, then opening the Book ClubKotlin
$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
Output
...
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.

BookNest 1.0.0 from the signed release bundle: the catalog, a book, and the Book Club module installed on demand
BookNest 1.0.0 from the signed release bundle: the catalog, a book, and the Book Club module installed on demand

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:

The same BookNest, released three ways on this machine
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.