Pengalaman Mengupgrade Flutter Project ke Target API 35: Mengikuti Requirement Play Store Terbaru

Panduan lengkap upgrade Flutter project ke target API 35 untuk memenuhi requirement Google Play Store terbaru mulai Agustus 2025.

Tags:
  • #Flutter
  • #Android
  • #API 35
  • #Google Play Store
  • #Mobile Development
  • #Upgrade Guide
Learning Path: Not Found | Category: Mobile Development

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

  1. Backup project sebelum melakukan upgrade
  2. Test di berbagai device Android setelah upgrade
  3. Perhatikan breaking changes di dependencies yang digunakan
  4. Update semua plugin ke versi terbaru yang support API 35
  5. Core library desugaring hanya diperlukan jika menggunakan plugin tertentu seperti flutter_local_notifications

💡 Tips Troubleshooting

🎯 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


Artikel ini berdasarkan pengalaman upgrade project Flutter production ke target API 35. Jika ada pertanyaan atau kendala lain, feel free to discuss!

Logo Adib

© 2025 Adib

GitHub