【问题标题】:Android: Resource linking fails on test execution even when nothing has been changedAndroid:即使没有任何更改,资源链接在测试执行时也会失败
【发布时间】:2021-10-31 07:15:26
【问题描述】:

当我为始终正常工作的发布变体执行测试时,我开始遇到错误。代码始终在 Docker 容器中执行,因此我们可以确保构建始终是干净的。

今天由于某种原因,代码完全没有变化,我开始在测试运行中看到错误:

Execution failed for task:
am:processReleaseResources'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
   > Android resource linking failed
     /.gradle/caches/transforms-2/files-2.1/ff28653768e2ccb1135467db3600af3a/core-1.7.0-alpha02/res/values/values.xml:105:5-114:25: AAPT: error: resource android:attr/lStar not found.

我对该错误进行了一些研究,但我只发现与另一个资源相关的错误,但没有发现与 lStar 相关的错误。到目前为止,我发现 lStar 是特别添加到 Android 31(Android 12)的代码,这对我来说没有意义,如果我的 compileSdkVersion 值为 28,为什么它应该开始在 Android 12 上工作。

<declare-styleable name="ColorStateListItem">
    <!-- Base color for this state. -->
    <attr name="android:color"/>
    <!-- Alpha multiplier applied to the base color. -->
    <attr format="float" name="alpha"/>
    <attr name="android:alpha"/>
    <!-- Perceptual luminance applied to the base color. From 0 to 100. -->
    <attr format="float" name="lStar"/>
    <attr name="android:lStar"/>
</declare-styleable>

即使没有进行任何更改,此错误的原因可能是什么?

【问题讨论】:

  • 面对这个问题,尝试更新我所有的依赖,gradle wrapper,gradle build 和 SdkVersion。仍然无法修复它,也尝试使用 androidx.core:core-ktx,没有运气..
  • @Ganesh 你可以试试下面的回答,很可能你的项目的一个依赖项是用最新版本构建的,android 12 开始出现在版本中,这打破了以前的许多东西版本。我也留下了一个答案,解释了我是如何修复它的
  • 首先感谢您的回复。我在我的项目中根本没有使用 androidx.core:core-ktx,我同意我的一个外部库将具有依赖项,我尝试更新并检查每个依赖项,但它们看起来都不像升级到 31,在我的情况下,我刚刚更新到 31,突然一切都开始搞砸了..我降级了所有更新版本仍然没有帮助..无法构建任何它..
  • 它来自 androidx.core:core:1.7.0->values.xml。日志说将 minSdkVersion 增加到 24 或更高。当将 compileSdkVersion 和 targetSdkVersion 更改为 31 OS 版本时,它就消失了。

标签: android


【解决方案1】:

我已经找到了问题并且能够解决它。

问题是应用程序所依赖的外部库之一依赖于androidx.core:core-ktx:+,这意味着它始终使用最新版本进行编译。我的应用仍在 SDK 28 上运行,但最新版本的 androidx.core:core-ktx 的最小 SDK 为 31,这导致了此冲突。

【讨论】:

  • 另外,如果你没有直接有这个依赖,那么在 File -> Dependencies 选项卡中的 Project Structure 下,如果你搜索 androidx.core,你将能够找到所有模块依赖项,你会得到列表的外部库正在使用它,因此只需卸载并安装该依赖项,它将解决问题..
  • @Ganesh 我面临同样的问题,但正如你所说,我对 core-ktx 没有直接依赖,但我无法解决问题
  • @mab,由于您没有任何直接依赖项,因此您需要找出导致此问题的库,请转到文件中的项目结构 -> 依赖项选项卡 -> 在所有模块下 -> 在全部下依赖项搜索/找到 core-ktx 并单击然后在目标模块下(右侧)您可以获取连接的外部库
  • @Ganesh 你的意思是在 build.gradle 文件中吗?顺便说一句,我正在尝试在 docker 容器中构建
  • @mab,我不确定 docker build 的生成,但如果你能够在 cmd 行中编写,我可以帮助你处理这个 ref,获取依赖关系的层次结构并找到 core-ktx并尝试安装和卸载技术,希望它能解决您的问题.. stackoverflow.com/questions/21645071/…
【解决方案2】:

我在 build.gradle 中将 androidx.core:core-ktx:+ 行更改为 androidx.core:core-ktx:1.6.0 ,它对我有用。

【讨论】:

  • 这个解决方案对我不起作用,仍然面临这个问题。
【解决方案3】:

您在使用 netinfo 库吗?如果你正在使用这个库,你需要刷新它。

在更新或卸载并重新安装 netinfo 库后,它将起作用。

【讨论】:

  • 问题只是一个依赖没有被锁定到一个版本,构建开始失败,因为依赖使用的是最新版本,它是 android 12 自 beta 开始推出以来的最新版本。
  • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
【解决方案4】:

即使没有进行任何更改,此错误的原因可能是什么?

正如我们在 https://developer.android.com/jetpack/androidx/releases/core#1.7.0-alpha02 中看到的那样,Core 和 Core-ktx 版本 1.7.0-alpha02 已于 2021 年 9 月 1 日发布。

如果你使用androidx.core:core-ktx:+,它会找到最后一个版本。

所以,在 2021 年 9 月 1 日,可能是 1.7.0-alpha01 没有添加需要 Android 31 编译 SDK 的属性“android:lStar”。这是一个错误。


我们该如何解决?

  • 使用特定版本,使用androidx.core:core-ktx:${version}而不是androidx.core:core-ktx:+
  • 将编译SDK升级到Android 31

【讨论】:

    【解决方案5】:

    我用过这个,它对我有用。

      android {  
        configurations.all {
            resolutionStrategy {
                force 'androidx.core:core-ktx:1.6.0'
            }
         }
    }
    

    【讨论】:

      【解决方案6】:

      检查您是否添加了正确的版本

      实现'com.google.android.material:material:1.3.0'

      在依赖项中

      【讨论】:

        猜你喜欢
        • 2021-12-26
        • 2022-01-04
        • 2019-06-27
        • 1970-01-01
        • 1970-01-01
        • 2019-06-06
        • 1970-01-01
        • 2017-10-31
        • 2019-02-01
        相关资源
        最近更新 更多