Mulai Agustus 2025, Google Play mewajibkan semua aplikasi baru & update untuk target API level 35 (Android 15). Berikut sharing pengalaman saya dalam mengupgrade project Flutter agar sesuai requirement terbaru Play Store.
🔧 Perubahan Utama
1. Update compileSdkVersion & targetSdkVersion
Di file android/app/build.gradle:
android {
compileSdkVersion 35 // Sebelumnya: 34 atau lebih lama
defaultConfig {
targetSdkVersion 35 // Sebelumnya: 34 atau lebih lama
// ... config lainnya
}
}
2. Konfigurasi untuk Flutter Local Notifications (Jika Digunakan)
⚠️ Catatan Penting: Langkah ini hanya diperlukan jika project Anda menggunakan plugin flutter_local_notifications. Jika tidak menggunakan plugin ini, skip ke langkah 3.
A. Tambahkan Core Library Desugaring
Di file android/app/build.gradle:
android {
compileSdkVersion 35
compileOptions {
coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
targetSdkVersion 35
minSdkVersion 21 // Pastikan minimum SDK 21 atau lebih tinggi
// ... config lainnya
}
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:2.0.4"
}
B. Update Permission untuk Notifications
Di file android/app/src/main/AndroidManifest.xml:
<!-- Existing notifications permissions -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.VIBRATE" />
<!-- Required for API 35+ -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
Dan update service configuration:
<application>
<!-- ... existing config ... -->
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ActionBroadcastReceiver" />
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" />
</application>
3. Update Android Gradle Plugin
Di file android/build.gradle:
dependencies {
classpath 'com.android.tools.build:gradle:8.3.2' // Update ke versi terbaru
// ... dependencies lainnya
}
4. Update Gradle Wrapper
Di file android/gradle/wrapper/gradle-wrapper.properties:
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip
5. Tambah Build Logger (Opsional)
Jika ingin me-log detail versi Flutter/Dart saat build untuk memudahkan developer baru setup local environment, tambahkan di android/build.gradle:
// BUILD LOGGER - Untuk tracking versi environment
def buildId = UUID.randomUUID().toString().substring(0, 8)
def buildStartTime = new Date()
def buildStatus = "SUCCESS"
def hasLoggedThisBuild = false
gradle.taskGraph.afterTask { task, state ->
if (state.failure) {
buildStatus = "FAILED"
}
def mainTasks = ['assembleRelease', 'assembleDebug', 'bundleRelease', 'bundleDebug']
if (task.name in mainTasks && !hasLoggedThisBuild) {
def endTime = new Date()
def duration = (endTime.time - buildStartTime.time) / 1000
def pubspec = new File("${rootDir.parent}/pubspec.yaml")
def versionLine = pubspec.readLines().find { it.startsWith("version:") }
def appVersion = versionLine?.replace("version:", "")?.trim() ?: "unknown"
def flutterVersion = "flutter --version".execute().text.trim()
def logFile = new File("${rootDir.parent}/build_history.md")
if (!logFile.exists()) {
logFile.text = "# Build History\n\n"
}
def buildLog = """
## Build ${buildId}
- **App Version:** ${appVersion}
- **Date:** ${endTime.format("dd/MM/yyyy HH:mm:ss")}
- **Build Type:** ${task.name}
- **Duration:** ${duration}s
- **Status:** ${buildStatus}
- **Flutter Version:** ${flutterVersion.split('\n')[0]}
---
"""
logFile.text = buildLog + logFile.text
hasLoggedThisBuild = true
}
}
🚨 Hal yang Perlu Diperhatikan
- Backup project sebelum melakukan upgrade
- Test di berbagai device Android setelah upgrade
- Perhatikan breaking changes di dependencies yang digunakan
- Update semua plugin ke versi terbaru yang support API 35
- Core library desugaring hanya diperlukan jika menggunakan plugin tertentu seperti
flutter_local_notifications
💡 Tips Troubleshooting
- Jika ada error
AAPT2, hapus folderandroid/.gradledan build ulang - Pastikan Android SDK Platform 35 sudah terinstall di Android Studio
- Gunakan
flutter doctoruntuk memastikan environment sudah benar - Jika tidak menggunakan
flutter_local_notifications, skip konfigurasi desugaring - Jika ada error terkait desugaring, pastikan Java 8 compatibility sudah benar
🎯 Kesimpulan
Upgrade ke API 35 sangat straightforward untuk kebanyakan project Flutter - cukup update compileSdkVersion dan targetSdkVersion ke 35. Konfigurasi tambahan seperti core library desugaring hanya diperlukan jika menggunakan plugin tertentu yang memerlukan fitur Java 8+.
Yang paling penting adalah testing menyeluruh setelah upgrade untuk memastikan semua fitur masih berjalan dengan baik.
📚 Referensi
- Android 15 Compatibility Guide
- Flutter Android Build Configuration
- Google Play Requirements
- Core Library Desugaring
Artikel ini berdasarkan pengalaman upgrade project Flutter production ke target API 35. Jika ada pertanyaan atau kendala lain, feel free to discuss!