Flutter适配API 34后构建APK时R8任务执行失败求助
适配Android 14(API 34)后Flutter构建APK报错R8缺失类
为适配Android 14(API 34)升级Flutter应用后,模拟器运行正常,但执行flutter build apk时触发R8缺失类错误,具体报错如下:
ERROR: Missing classes detected while running R8. Please add the missing classes or apply additional keep rules that are generated in /Users/username/Desktop/DV_AppMobile/build/app/outputs/mapping/stagingRelease/missing_rules.txt. ERROR: R8: Missing class com.google.android.play.core.splitcompat.SplitCompatApplication (referenced from: void io.flutter.app.FlutterPlayStoreSplitApplication.<init>() and 5 other contexts) Missing class com.google.android.play.core.splitinstall.SplitInstallException (referenced from: void io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager.lambda$installDeferredComponent$1(int, java.lang.String, java.lang.Exception)) Missing class com.google.android.play.core.splitinstall.SplitInstallManager (referenced from: com.google.android.play.core.splitinstall.SplitInstallManager io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager.splitInstallManager and 5 other contexts) Missing class com.google.android.play.core.splitinstall.SplitInstallManagerFactory (referenced from: void io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager.<init>(android.content.Context, io.flutter.embedding.engine.FlutterJNI)) Missing class com.google.android.play.core.splitinstall.SplitInstallRequest$Builder (referenced from: void io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager.installDeferredComponent(int, java.lang.String)) Missing class com.google.android.play.core.splitinstall.SplitInstallRequest (referenced from: void io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager.installDeferredComponent(int, java.lang.String)) Missing class com.google.android.play.core.splitinstall.SplitInstallSessionState (referenced from: void io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager$FeatureInstallStateUpdatedListener.onStateUpdate(com.google.android.play.core.splitinstall.SplitInstallSessionState) and 1 other context) Missing class com.google.android.play.core.splitinstall.SplitInstallStateUpdatedListener (referenced from: void io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager.<init>(android.content.Context, io.flutter.embedding.engine.FlutterJNI) and 2 other contexts) Missing class com.google.android.play.core.tasks.OnFailureListener (referenced from: void io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager.installDeferredComponent(int, java.lang.String)) Missing class com.google.android.play.core.tasks.OnSuccessListener (referenced from: void io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager.installDeferredComponent(int, java.lang.String)) Missing class com.google.android.play.core.tasks.Task (referenced from: void io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager.installDeferredComponent(int, java.lang.String) and 1 other context) Missing class com.huawei.android.os.BuildEx$VERSION (referenced from: boolean com.huawei.hms.framework.common.EmuiUtil.isUpPVersion()) Missing class com.huawei.hianalytics.process.HiAnalyticsConfig$Builder (referenced from: void com.huawei.hms.utils.HMSBIInitializer.a(java.lang.String)) Missing class com.huawei.hianalytics.process.HiAnalyticsConfig (referenced from: void com.huawei.hms.utils.HMSBIInitializer.a(java.lang.String)) Missing class com.huawei.hianalytics.process.HiAnalyticsInstance$Builder (referenced from: void com.huawei.hms.utils.HMSBIInitializer.a(java.lang.String)) Missing class com.huawei.hianalytics.process.HiAnalyticsInstance (referenced from: com.huawei.hianalytics.process.HiAnalyticsInstance com.huawei.hms.framework.common.hianalytics.HianalyticsHelper.hInstance and 11 other contexts) Missing class com.huawei.hianalytics.process.HiAnalyticsManager (referenced from: void com.huawei.hms.framework.common.hianalytics.HianalyticsHelper.<init>() and 5 other contexts) Missing class com.huawei.hianalytics.util.HiAnalyticTools (referenced from: void com.huawei.hms.support.hianalytics.HiAnalyticsUtils.enableLog(android.content.Context)) Missing class com.huawei.libcore.io.ExternalStorageFile (referenced from: java.io.File com.huawei.hms.framework.common.CreateFileUtil.newFile(java.lang.String)) Missing class com.huawei.libcore.io.ExternalStorageFileInputStream (referenced from: java.io.FileInputStream com.huawei.hms.framework.common.CreateFileUtil.newFileInputStream(java.lang.String)) Missing class com.huawei.libcore.io.ExternalStorageFileOutputStream (referenced from: java.io.FileOutputStream com.huawei.hms.framework.common.CreateFileUtil.newFileOutputStream(java.io.File)) Missing class com.huawei.libcore.io.ExternalStorageRandomAccessFile (referenced from: java.io.RandomAccessFile com.huawei.hms.framework.common.CreateFileUtil.newRandomAccessFile(java.lang.String, java.lang.String)) Missing class org.bouncycastle.crypto.BlockCipher (referenced from: java.security.SecureRandom com.huawei.secure.android.common.encrypt.utils.EncryptUtil.a()) Missing class org.bouncycastle.crypto.engines.AESEngine (referenced from: java.security.SecureRandom com.huawei.secure.android.common.encrypt.utils.EncryptUtil.a()) Missing class org.bouncycastle.crypto.prng.SP800SecureRandom (referenced from: java.security.SecureRandom com.huawei.secure.android.common.encrypt.utils.EncryptUtil.a()) Missing class org.bouncycastle.crypto.prng.SP800SecureRandomBuilder (referenced from: java.security.SecureRandom com.huawei.secure.android.common.encrypt.utils.EncryptUtil.a()) FAILURE: Build failed with an exception. What went wrong: Execution failed for task ':app:minifyStagingReleaseWithR8'. A failure occurred while executing com.android.build.gradle.internal.tasks.R8Task$R8Runnable Compilation failed to complete
已尝试的操作:
- 将Gradle版本从8.1.1降级至8.0.2
- 尝试谷歌官方解决方案,问题未解决
环境配置信息
Flutter Doctor 结果
Android toolchain - develop for Android devices (Android SDK version 34.0.0) Xcode - develop for iOS and macOS (Xcode 15.4) Android Studio (version 2024.1) No issues found!
android/build.gradle 配置
buildscript { ext.kotlin_version = '1.9.20' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:8.0.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.14' } } ...
android/app/build.gradle 配置
plugins { id "com.android.application" id "kotlin-android" id "com.google.gms.google-services" } def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { localPropertiesFile.withReader('UTF-8') { reader -> localProperties.load(reader) } } def flutterRoot = localProperties.getProperty('flutter.sdk') if (flutterRoot == null) { throw GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") } def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' } def flutterVersionName = localProperties.getProperty('flutter.versionName') if (flutterVersionName == null) { flutterVersionName = '1.0' } apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { namespace 'com.appname.app' compileSdk 34 ndkVersion "27.0.12077973" sourceSets { main.java.srcDirs += 'src/main/kotlin' } compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } defaultConfig { applicationId "com.appname.app" minSdk 22 targetSdk 34 versionCode flutterVersionCode.toInteger() versionName flutterVersionName resourceConfigurations += ['en', 'it'] } kotlinOptions { jvmTarget = '17' } signingConfigs { release { keyAlias="appname" keyPassword="br7Tuphetr\$f" // storeFile file(System.getenv("HOME") + "/Desktop/DV_AppMobile/appname.keystore") storeFile file("appname.keystore") storePassword="br7Tuphetr\$f" } } buildTypes { release { signingConfig signingConfigs.release minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } buildscript { repositories { google() jcenter() } dependencies { classpath 'com.dipien:bye-bye-jetifier:1.2.1' } } packagingOptions { resources { excludes += ['META-INF/com.android.tools/proguard/coroutines.pro'] } } lint { checkReleaseBuilds false } } flutter { source '../..' } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" //implementation "androidx.annotation:annotation-experimental:1.1.0" implementation 'androidx.annotation:annotation:1.8.1' implementation platform('com.google.firebase:firebase-bom:28.1.0') }
gradle-wrapper.properties 配置
#Thu Jul 13 11:44:22 CEST 2023 distributionBase=GRADLE_USER_HOME distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME
解决方案
1. 补充缺失的依赖库
报错中缺失的类分为Google Play Core和华为HMS两类,根据应用需求添加对应依赖:
- Google Play Core 依赖:在
android/app/build.gradle的dependencies块中添加:implementation 'com.google.android.play:core:1.10.3' - 华为HMS 依赖:若应用不需要华为服务,可跳过;若需要,添加HMS分析依赖:
implementation 'com.huawei.hms:hianalytics:6.11.0.300'
2. 添加ProGuard/R8 保留规则
若不想添加冗余依赖,可在proguard-rules.pro中添加以下规则,让R8忽略这些缺失类:
# Google Play Core 相关 -dontwarn com.google.android.play.core.splitcompat.** -dontwarn com.google.android.play.core.splitinstall.** -dontwarn com.google.android.play.core.tasks.** # 华为HMS 相关 -dontwarn com.huawei.android.os.BuildEx$VERSION -dontwarn com.huawei.hianalytics.process.** -dontwarn com.huawei.hianalytics.util.** -dontwarn com.huawei.libcore.io.** -dontwarn com.huawei.secure.android.common.encrypt.utils.** -dontwarn org.bouncycastle.crypto.**
3. 检查Flutter版本兼容性
确保Flutter版本与Gradle、Android SDK版本兼容,可尝试升级到稳定版:
flutter upgrade
4. 清理构建缓存
执行以下命令清理缓存后重新构建:
flutter clean cd android && ./gradlew clean cd .. && flutter build apk
内容的提问来源于stack exchange,提问作者calle_prime
相关产品推荐
相关产品推荐

