## Summary
The issue arises when using both `compileSdkPreview "CinnamonBun"` and `targetSdkPreview "CinnamonBun"` in an Android project. Attempts to compile yield the error:
**"Requires libraries and applications that depend on it to compile against version 35 or later of the Android APIs."**
:app is configured to compile against `android-CinnamonBun`, but the system requires compatibility with higher versions.
---
## Root Cause
- **Preview SDK Constraints**: `targetSdkPreview "CinnamonBun"` enforces compatibility with preview-specific libraries.
- **Version Mismatch**: The project's dependencies are compiled against an older API version (e.g., 34) but the preview SDK requires a higher version (e.g., 35).
- **Library Linkage**: Libraries referenced in the project have not been updated to the minimum required preview version.
---
## Why This Happens in Real Systems
- Preview SDK configurations (**compileSdkVersion**, **compileSdkPreview**, **targetSdkPreview**, **targetSdkVersion**) set varying API version requirements.
- Gradle resolves dependencies based on the lowest configured SDK preview version, leading to constraint collisions.
- Incorrect library dependency versions that do not match the preview SDK's minimum requirements.
---
## Real-World Impact
- **Build Failure**: Errors during compilation preventing deployment or testing.
- **Increased Technical Debt**: Delayed updates to dependencies and project configurations.
- **Regression Testing Overhead**: Need to validate fixes across preview SDK environments.
---
## How Senior Engineers Fix It
**Step 1**: **Align SDK Versions**
- Configure `compileSdkVersion` and `compileSdkPreview` to point to the same version (`CinnamonBun`).
- Example:
```properties
android {
compileSdkVersion "CinnamonBun"
compileSdkPreview "CinnamonBun"
targetSdkVersion "CinnamonBun"
}
Step 2: Update Project Dependencies
- Ensure all dependencies support
compileSdkVersion "CinnamonBun". - Replace outdated dependencies with preview-aware versions.
Step 3: Adjust Library Links
- Force newer library versions if they support the preview SDK:
android { packagingOptions { preferLibraryConfigMerging = true } compileOptions { targetCompatibility = JavaVersion.VERSION_17 } defaultConfig { minSdkVersion "CinnamonBun" } }
Step 4: Gradle Plugin Updates
- Use a compatible Android Gradle plugin (e.g.,
gradle-plugin-android-0.3+for CinnamonBun support).
Why Juniors Miss It
- Developers often configure
compileSdkVersiontoCinnamonBunbut neglectcompileSdkPreview, allowing Gradle to fall back to older SDK versions. - Margin calls are ignored, assuming Gradle will resolve version conflicts automatically without manual intervention.
- Teams may overlook library compatibility headers, jumping directly to WorkManager/Context bugs while ignoring SDK-layered errors.