From 1c9c7812ec1bbe2e434020fcc7a05ba20f5a4b0b Mon Sep 17 00:00:00 2001 From: anhappdev Date: Tue, 22 Jul 2025 10:00:57 +0700 Subject: [PATCH 01/16] Update Firebase and Android Gradle plugin versions - Bump Firebase BoM to 34.0.0 - Add Crashlytics and Crashlytics NDK dependencies - Upgrade Android Gradle plugin to 8.1.4 - Update Google Services and Crashlytics plugin versions --- flutter/android/app/build.gradle | 5 ++++- flutter/android/settings.gradle | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/flutter/android/app/build.gradle b/flutter/android/app/build.gradle index f0364a001..a6326efd2 100644 --- a/flutter/android/app/build.gradle +++ b/flutter/android/app/build.gradle @@ -97,7 +97,10 @@ dependencies { // firebase-bom v32.8.1 is required to use minSdkVersion 21 // https://firebase.google.com/support/release-notes/android#2024-05-02 - implementation(platform("com.google.firebase:firebase-bom:32.8.1")) + implementation(platform("com.google.firebase:firebase-bom:34.0.0")) + // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-appcheck-playintegrity") implementation("com.google.firebase:firebase-appcheck-debug") + implementation("com.google.firebase:firebase-crashlytics") + implementation("com.google.firebase:firebase-crashlytics-ndk") } diff --git a/flutter/android/settings.gradle b/flutter/android/settings.gradle index c5cd08c29..59223aa10 100644 --- a/flutter/android/settings.gradle +++ b/flutter/android/settings.gradle @@ -18,10 +18,10 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false + id "com.android.application" version "8.1.4" apply false id "org.jetbrains.kotlin.android" version "1.7.10" apply false - id "com.google.gms.google-services" version "4.4.0" apply false - id "com.google.firebase.crashlytics" version "2.9.9" apply false + id "com.google.gms.google-services" version "4.4.3" apply false + id "com.google.firebase.crashlytics" version "3.0.5" apply false } include ":app" From 82b9934d9bc1c61388d2811d2b53682a41b0e204 Mon Sep 17 00:00:00 2001 From: anhappdev Date: Tue, 22 Jul 2025 11:10:02 +0700 Subject: [PATCH 02/16] Enable native symbol uploads for Crashlytics This change enables the `nativeSymbolUploadEnabled` flag in `build.gradle` when `FIREBASE_CRASHLYTICS_ENABLED` is true. This allows Firebase Crashlytics to process native crash reports and provide more detailed information for debugging. --- flutter/android/app/build.gradle | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/flutter/android/app/build.gradle b/flutter/android/app/build.gradle index a6326efd2..1c072f28f 100644 --- a/flutter/android/app/build.gradle +++ b/flutter/android/app/build.gradle @@ -75,11 +75,13 @@ android { // By default we do not upload mapping file to Firebase firebaseCrashlytics { if (System.env['FIREBASE_CRASHLYTICS_ENABLED'] == 'true') { - println 'mappingFileUploadEnabled set to true' + println 'mappingFileUploadEnabled and nativeSymbolUploadEnabled set to true' mappingFileUploadEnabled true + nativeSymbolUploadEnabled true } else { - println 'mappingFileUploadEnabled set to false' + println 'mappingFileUploadEnabled and nativeSymbolUploadEnabled set to false' mappingFileUploadEnabled false + nativeSymbolUploadEnabled false } } } From 2a52161c74eb86764cb8c0b5f314b720134516ee Mon Sep 17 00:00:00 2001 From: anhappdev Date: Tue, 22 Jul 2025 12:00:04 +0700 Subject: [PATCH 03/16] Update Gradle to 8.2 The Gradle distribution URL has been updated from `gradle-7.6.3-all.zip` to `gradle-8.2-all.zip` in `flutter/android/gradle/wrapper/gradle-wrapper.properties`. Additionally: - The namespace for the Android application has been set to "org.mlcommons.android.mlperfbench" in `flutter/android/app/build.gradle`. - A `subprojects` block has been added to `flutter/android/build.gradle` to set the namespace for subprojects if it's not already defined. - The `android.bundle.enableUncompressedNativeLibs=false` line has been removed from `flutter/android/gradle.properties`. --- flutter/android/app/build.gradle | 1 + flutter/android/build.gradle | 9 +++++++++ flutter/android/gradle.properties | 1 - flutter/android/gradle/wrapper/gradle-wrapper.properties | 2 +- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/flutter/android/app/build.gradle b/flutter/android/app/build.gradle index 1c072f28f..295b78ad6 100644 --- a/flutter/android/app/build.gradle +++ b/flutter/android/app/build.gradle @@ -25,6 +25,7 @@ if (flutterVersionName == null) { } android { + namespace "org.mlcommons.android.mlperfbench" compileSdkVersion 34 compileOptions { diff --git a/flutter/android/build.gradle b/flutter/android/build.gradle index b42eb3a73..3808a284f 100644 --- a/flutter/android/build.gradle +++ b/flutter/android/build.gradle @@ -8,6 +8,15 @@ allprojects { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" + afterEvaluate { project -> + if (project.hasProperty('android')) { + project.android { + if (namespace == null) { + namespace project.group + } + } + } + } project.evaluationDependsOn(':app') } diff --git a/flutter/android/gradle.properties b/flutter/android/gradle.properties index 4efbcd2b0..94adc3a3f 100644 --- a/flutter/android/gradle.properties +++ b/flutter/android/gradle.properties @@ -1,4 +1,3 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true -android.bundle.enableUncompressedNativeLibs=false \ No newline at end of file diff --git a/flutter/android/gradle/wrapper/gradle-wrapper.properties b/flutter/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef..b5fc5a7b8 100644 --- a/flutter/android/gradle/wrapper/gradle-wrapper.properties +++ b/flutter/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip From 308ac1faa0b11d952f7907309e44acc2974028cd Mon Sep 17 00:00:00 2001 From: anhappdev Date: Tue, 22 Jul 2025 12:56:23 +0700 Subject: [PATCH 04/16] Downgrade Firebase BoM to 33.16.0 and update Kotlin plugin to 1.9.25 --- flutter/android/app/build.gradle | 5 ++--- flutter/android/settings.gradle | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/flutter/android/app/build.gradle b/flutter/android/app/build.gradle index 295b78ad6..53529d79f 100644 --- a/flutter/android/app/build.gradle +++ b/flutter/android/app/build.gradle @@ -98,9 +98,8 @@ dependencies { androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - // firebase-bom v32.8.1 is required to use minSdkVersion 21 - // https://firebase.google.com/support/release-notes/android#2024-05-02 - implementation(platform("com.google.firebase:firebase-bom:34.0.0")) + // https://firebase.google.com/support/release-notes/android + implementation(platform("com.google.firebase:firebase-bom:33.16.0")) // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-appcheck-playintegrity") implementation("com.google.firebase:firebase-appcheck-debug") diff --git a/flutter/android/settings.gradle b/flutter/android/settings.gradle index 59223aa10..c3d9379b6 100644 --- a/flutter/android/settings.gradle +++ b/flutter/android/settings.gradle @@ -19,7 +19,7 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "com.android.application" version "8.1.4" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "org.jetbrains.kotlin.android" version "1.9.25" apply false id "com.google.gms.google-services" version "4.4.3" apply false id "com.google.firebase.crashlytics" version "3.0.5" apply false } From 7358a6a4cccc5c73e36f0b20ef7f659d6fd126ac Mon Sep 17 00:00:00 2001 From: anhappdev Date: Tue, 22 Jul 2025 13:11:37 +0700 Subject: [PATCH 05/16] Enable legacy packaging for JNI libraries in build.gradle to resolve potential issues with native libraries. --- flutter/android/app/build.gradle | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/flutter/android/app/build.gradle b/flutter/android/app/build.gradle index 53529d79f..b3f448138 100644 --- a/flutter/android/app/build.gradle +++ b/flutter/android/app/build.gradle @@ -33,6 +33,13 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } + // https://stackoverflow.com/a/70873876 + packagingOptions { + jniLibs { + useLegacyPackaging = true + } + } + kotlinOptions { jvmTarget = '1.8' } From 705f4240cfc45323e978b740f5c7afcce5cc460f Mon Sep 17 00:00:00 2001 From: anhappdev Date: Tue, 22 Jul 2025 14:53:11 +0700 Subject: [PATCH 06/16] Auto upload Crashlytics symbol file for release builds Configure `assembleRelease` and `bundleRelease` tasks in build.gradle to finalize with `uploadCrashlyticsSymbolFileRelease` when `FIREBASE_CRASHLYTICS_ENABLED` is set to true. --- flutter/android/app/build.gradle | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/flutter/android/app/build.gradle b/flutter/android/app/build.gradle index b3f448138..84d08a887 100644 --- a/flutter/android/app/build.gradle +++ b/flutter/android/app/build.gradle @@ -113,3 +113,13 @@ dependencies { implementation("com.google.firebase:firebase-crashlytics") implementation("com.google.firebase:firebase-crashlytics-ndk") } + +afterEvaluate { + if (System.env['FIREBASE_CRASHLYTICS_ENABLED'] == 'true') { + tasks.configureEach { + if (name == 'assembleRelease' || name == 'bundleRelease') { + finalizedBy 'uploadCrashlyticsSymbolFileRelease' + } + } + } +} From c3ef64b71f5a6685801d95dfd20fc88f4568d0bb Mon Sep 17 00:00:00 2001 From: anhappdev Date: Tue, 22 Jul 2025 17:38:16 +0700 Subject: [PATCH 07/16] Set unstripped native libs directory for Crashlytics in build.gradle --- flutter/android/app/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/flutter/android/app/build.gradle b/flutter/android/app/build.gradle index 84d08a887..1e4f59e7e 100644 --- a/flutter/android/app/build.gradle +++ b/flutter/android/app/build.gradle @@ -86,6 +86,7 @@ android { println 'mappingFileUploadEnabled and nativeSymbolUploadEnabled set to true' mappingFileUploadEnabled true nativeSymbolUploadEnabled true + unstrippedNativeLibsDir file("../../../bazel-bin") } else { println 'mappingFileUploadEnabled and nativeSymbolUploadEnabled set to false' mappingFileUploadEnabled false From eb4ce83733054de61e91121261955f76bb739b07 Mon Sep 17 00:00:00 2001 From: anhappdev Date: Wed, 23 Jul 2025 12:04:31 +0700 Subject: [PATCH 08/16] Ensure `generateCrashlyticsSymbolFileRelease` depends on `mergeReleaseNativeLibs` in build.gradle --- flutter/android/app/build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/flutter/android/app/build.gradle b/flutter/android/app/build.gradle index 1e4f59e7e..9dc1abb83 100644 --- a/flutter/android/app/build.gradle +++ b/flutter/android/app/build.gradle @@ -117,6 +117,9 @@ dependencies { afterEvaluate { if (System.env['FIREBASE_CRASHLYTICS_ENABLED'] == 'true') { + tasks.named('generateCrashlyticsSymbolFileRelease') { + dependsOn 'mergeReleaseNativeLibs' + } tasks.configureEach { if (name == 'assembleRelease' || name == 'bundleRelease') { finalizedBy 'uploadCrashlyticsSymbolFileRelease' From e640b49c50259c96be195b55c1d1ad22e0f3156d Mon Sep 17 00:00:00 2001 From: anhappdev Date: Wed, 23 Jul 2025 13:27:05 +0700 Subject: [PATCH 09/16] Set `debugSymbolLevel` to `FULL` in build.gradle --- flutter/android/app/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/flutter/android/app/build.gradle b/flutter/android/app/build.gradle index 9dc1abb83..39757c08e 100644 --- a/flutter/android/app/build.gradle +++ b/flutter/android/app/build.gradle @@ -58,6 +58,7 @@ android { ndk { abiFilters "arm64-v8a", "armeabi-v7a" + debugSymbolLevel 'FULL' } } From a19bdf52f4424c5904d09efe32020185fa607f42 Mon Sep 17 00:00:00 2001 From: anhappdev Date: Wed, 23 Jul 2025 20:02:38 +0700 Subject: [PATCH 10/16] Set `ndkVersion` to 25.2.9519653 in build.gradle --- flutter/android/app/build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/flutter/android/app/build.gradle b/flutter/android/app/build.gradle index 39757c08e..f13df2501 100644 --- a/flutter/android/app/build.gradle +++ b/flutter/android/app/build.gradle @@ -28,6 +28,8 @@ android { namespace "org.mlcommons.android.mlperfbench" compileSdkVersion 34 + ndkVersion "25.2.9519653" + compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 From 47032d133ef0259732fff21de255106474324d17 Mon Sep 17 00:00:00 2001 From: anhappdev Date: Wed, 23 Jul 2025 20:27:48 +0700 Subject: [PATCH 11/16] Set `symbolGeneratorType` to `csym` for Crashlytics in build.gradle --- flutter/android/app/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/flutter/android/app/build.gradle b/flutter/android/app/build.gradle index f13df2501..845ac7e16 100644 --- a/flutter/android/app/build.gradle +++ b/flutter/android/app/build.gradle @@ -90,6 +90,7 @@ android { mappingFileUploadEnabled true nativeSymbolUploadEnabled true unstrippedNativeLibsDir file("../../../bazel-bin") + symbolGeneratorType "csym" } else { println 'mappingFileUploadEnabled and nativeSymbolUploadEnabled set to false' mappingFileUploadEnabled false From 4431b3434c05fcb6e08ddffe5331e4182aeec309 Mon Sep 17 00:00:00 2001 From: anhappdev Date: Wed, 23 Jul 2025 20:32:42 +0700 Subject: [PATCH 12/16] Update Gradle distribution to 8.14.3 in `gradle-wrapper.properties` --- flutter/android/gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/android/gradle/wrapper/gradle-wrapper.properties b/flutter/android/gradle/wrapper/gradle-wrapper.properties index b5fc5a7b8..74b269f35 100644 --- a/flutter/android/gradle/wrapper/gradle-wrapper.properties +++ b/flutter/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-all.zip From a9529732a63fa6aa8f23519df58ecfc6581c5744 Mon Sep 17 00:00:00 2001 From: anhappdev Date: Wed, 23 Jul 2025 21:25:20 +0700 Subject: [PATCH 13/16] Update unstripped native libs directory for Crashlytics in build.gradle --- flutter/android/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/android/app/build.gradle b/flutter/android/app/build.gradle index 845ac7e16..37fb325b2 100644 --- a/flutter/android/app/build.gradle +++ b/flutter/android/app/build.gradle @@ -89,7 +89,7 @@ android { println 'mappingFileUploadEnabled and nativeSymbolUploadEnabled set to true' mappingFileUploadEnabled true nativeSymbolUploadEnabled true - unstrippedNativeLibsDir file("../../../bazel-bin") + unstrippedNativeLibsDir file("${buildDir}/intermediates/merged_native_libs/release/out/lib/") symbolGeneratorType "csym" } else { println 'mappingFileUploadEnabled and nativeSymbolUploadEnabled set to false' From 16aa0e7c5289b5e6d28bd82f5589befa9031887a Mon Sep 17 00:00:00 2001 From: anhappdev Date: Wed, 23 Jul 2025 21:32:35 +0700 Subject: [PATCH 14/16] Remove legacy packaging options for JNI libraries in build.gradle --- flutter/android/app/build.gradle | 7 ------- 1 file changed, 7 deletions(-) diff --git a/flutter/android/app/build.gradle b/flutter/android/app/build.gradle index 37fb325b2..4fba3d056 100644 --- a/flutter/android/app/build.gradle +++ b/flutter/android/app/build.gradle @@ -35,13 +35,6 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } - // https://stackoverflow.com/a/70873876 - packagingOptions { - jniLibs { - useLegacyPackaging = true - } - } - kotlinOptions { jvmTarget = '1.8' } From 0e7931fa87d6fd9a766c1735d9acb98ae0e8d96c Mon Sep 17 00:00:00 2001 From: anhappdev Date: Wed, 23 Jul 2025 22:31:05 +0700 Subject: [PATCH 15/16] Increase Gradle JVM memory allocation to 2048m in `gradle.properties`. --- flutter/android/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/android/gradle.properties b/flutter/android/gradle.properties index 94adc3a3f..ff5389fdb 100644 --- a/flutter/android/gradle.properties +++ b/flutter/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx1536M +org.gradle.jvmargs=-Xmx2048m android.useAndroidX=true android.enableJetifier=true From ec1b984d35509e844aa8fbc1aec933eb67835d37 Mon Sep 17 00:00:00 2001 From: anhappdev Date: Tue, 29 Jul 2025 23:16:18 +0700 Subject: [PATCH 16/16] Update `debugSymbolLevel` to `SYMBOL_TABLE` in build.gradle --- flutter/android/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/android/app/build.gradle b/flutter/android/app/build.gradle index 4fba3d056..195e82052 100644 --- a/flutter/android/app/build.gradle +++ b/flutter/android/app/build.gradle @@ -53,7 +53,7 @@ android { ndk { abiFilters "arm64-v8a", "armeabi-v7a" - debugSymbolLevel 'FULL' + debugSymbolLevel 'SYMBOL_TABLE' } }