You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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更严格,因此出现两者结果不一致的情况。

修复步骤

  1. 强制统一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'
        }
    }
}
  1. 升级cached_video_player到最新稳定版
    旧版本可能存在依赖兼容问题,升级到最新版(如2.7.0)可解决部分冲突:
cached_video_player: ^2.7.0
  1. 清理缓存后重新构建
    执行以下命令清除缓存,避免旧依赖残留:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 03:55:55