Flutter Release模式编译失败:android:attr/lStar资源未找到
Flutter Release/Profile模式编译失败:
android:attr/lStar 资源未找到 问题现象
Debug模式下项目可正常编译运行,但切换到Release或Profile模式时,执行任务:cached_video_player:verifyReleaseResources失败,报错AAPT: error: resource android:attr/lStar not found.。但执行flutter build appbundle命令构建App Bundle可成功完成:
stephanedeluca@Angelantonio2019-2:~/development/shokaze/shokaze/functions$ flutter build appbundle Changing current working directory to: /Users/stephanedeluca/development/shokaze/shokaze Font asset "CupertinoIcons.ttf" was tree-shaken, reducing it from 283452 to 912 bytes (99.7% reduction). Tree-shaking can be disabled by providing the --no-tree-shake-icons flag when building your app. Font asset "MaterialIcons-Regular.otf" was tree-shaken, reducing it from 1645184 to 16824 bytes (99.0% reduction). Tree-shaking can be disabled by providing the --no-tree-shake-icons flag when building your app. Running Gradle task 'bundleRelease'... 180,1s ✓ Built build/app/outputs/bundle/release/app-release.aab (68.3MB).
已尝试的无效解决方案
- 将
cached_video_player从2.0.3升级至2.0.4:cached_video_player: ^2.0.4 #^2.0.3 - 在
android/build.gradle中将kotlin_version从1.8.22升级至1.9.0:buildscript { ext.kotlin_version = '1.9.0' //'1.8.22'//'1.6.10' repositories { - 尝试添加依赖
implementation "androidx.core:core-ktx:1.6.0"
完整Gradle报错日志
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':cached_video_player:verifyReleaseResources'. > A failure occurred while executing com.android.build.gradle.tasks.VerifyLibraryResourcesTask$Action > Android resource linking failed ERROR:/Users/stephanedeluca/.gradle/caches/transforms-3/fb7be7b58c0779ade2219e6b1355257d/transformed/core-1.7.0/res/values/values.xml:105:5-114:25: AAPT: error: resource android:attr/lStar not found. * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 1m 34s Exception: Gradle task assembleRelease failed with exit code 1 #0 throwToolExit (package:flutter_tools/src/base/common.dart:10:3) #1 AndroidGradleBuilder.buildGradleApp (package:flutter_tools/src/android/gradle.dart:456:9) <asynchronous suspension> #2 AndroidGradleBuilder.buildApk (package:flutter_tools/src/android/gradle.dart:208:5) <asynchronous suspension> #3 AndroidDevice.startApp (package:flutter_tools/src/android/android_device.dart:578:7) <asynchronous suspension> #4 FlutterDevice.runCold (package:flutter_tools/src/resident_runner.dart:524:33) <asynchronous suspension> #5 ColdRunner.run (package:flutter_tools/src/run_cold.dart:57:28) <asynchronous suspension> #6 AppDomain.launch.<anonymous closure> (package:flutter_tools/src/commands/daemon.dart:648:9) <asynchronous suspension> #7 AppDomain.launch (package:flutter_tools/src/commands/daemon.dart:646:5) <asynchronous suspension> #8 RunCommand.runCommand (package:flutter_tools/src/commands/run.dart:638:15) <asynchronous suspension> #9 FlutterCommand.run.<anonymous closure> (package:flutter_tools/src/runner/flutter_command.dart:1336:27) <asynchronous suspension> #10 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:150:19) <asynchronous suspension> #11 CommandRunner.runCommand command_runner.dart:212 <asynchronous suspension> #12 FlutterCommandRunner.runCommand.<anonymous closure> (package:flutter_tools/src/runner/flutter_command_runner.dart:296:9) <asynchronous suspension> #13 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:150:19) <asynchronous suspension> #14 FlutterCommandRunner.runCommand (package:flutter_tools/src/runner/flutter_command_runner.dart:244:5) <asynchronous suspension> #15 run.<anonymous closure>.<anonymous closure> (package:flutter_tools/runner.dart:91:9) <asynchronous suspension> #16 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:150:19) <asynchronous suspension> #17 main (package:flutter_tools/executable.dart:91:3) <asynchronous suspension>
当前android/app/build.gradle配置
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 new 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 plugin: 'com.android.application' // START: FlutterFire Configuration apply plugin: 'com.google.gms.google-services' // END: FlutterFire Configuration apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" def keystoreProperties = new Properties() def keystorePropertiesFile = rootProject.file('key.properties') if (keystorePropertiesFile.exists()) { keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) } android { compileSdkVersion 33 //flutter.compileSdkVersion ndkVersion flutter.ndkVersion compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } sourceSets { main.java.srcDirs += 'src/main/kotlin' } defaultConfig { // TODO: Specify your own unique Application ID applicationId "com.shokaze.shokaze" minSdkVersion 24 //flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName } signingConfigs { release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null storePassword keystoreProperties['storePassword'] } } buildTypes { release { signingConfig signingConfigs.release } } } flutter { source '../..' } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" // 曾尝试添加的依赖 //implementation "androidx.core:core-ktx:1.6.0" def billing_version = "5.1.0" implementation "com.android.billingclient:billing:$billing_version" }
解决方案
核心原因
android:attr/lStar是Android 12(API 31)新增的资源属性,当依赖库引入androidx.core:core-ktx:1.7.0+版本,但项目依赖链中存在版本冲突时,会触发资源验证失败。APK构建的资源验证逻辑比App Bundle更严格,因此出现两者结果不一致的情况。
修复步骤
- 强制统一
androidx.core版本
在android/build.gradle的allprojects块中添加版本约束,强制所有依赖使用兼容版本:
allprojects { repositories { google() mavenCentral() } // 新增版本约束 configurations.all { resolutionStrategy { // 若compileSdk为33,可改用1.10.1等适配高版本的稳定版 force 'androidx.core:core-ktx:1.6.0' } } }
- 升级
cached_video_player到最新稳定版
旧版本可能存在依赖兼容问题,升级到最新版(如2.7.0)可解决部分冲突:
cached_video_player: ^2.7.0
- 清理缓存后重新构建
执行以下命令清除缓存,避免旧依赖残留:
flutter clean rm -rf ~/.gradle/caches # Mac/Linux环境;Windows需手动删除C:\Users\[用户名]\.gradle\caches目录 flutter pub get flutter build apk --release
内容的提问来源于stack exchange,提问作者Stéphane de Luca
相关产品推荐
相关产品推荐

