Three API levels answer three questions. compileSdk (37) picks the API stubs the compiler sees, minSdk (26, Android 8.0) the oldest Android that may install the app, and targetSdk (36, Android 16) the release whose runtime behavior the app has been tested against. compileSdk changes nothing at run time, but it must be at least what your libraries were built against, and Compose 1.12.1 234 demands 37. Set it to 36 and the build stops:
./gradlew assembleDebug > 11 issues were found when checking AAR metadata:
...
:app is currently compiled against android-36.
Recommended action: Update this project to use a newer compileSdk
of at least 37, for example 37.2.targetSdk opts the app into each release's behavior changes, and Google Play 1 enforces it: since 31 August 2026, new apps and updates must target API 36 (extensions to 1 November 2026 on request). minSdk decides your audience; 26 gives BookNest adaptive icons and java.time without desugaring. aapt2 dump badging on the APK reads back minSdkVersion:'26', targetSdkVersion:'36' and compileSdkVersion='37', and the app runs on the API 36 emulator because only minSdk limits installation.