lStar 上的资源链接失败

我正在开发一个 React Native 应用程序。我的 Android 构建在 CI 环境(和本地)中开始失败,没有任何更改。

Execution failed for task ':app:processDevelopmentDebugResources'.

> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
   > Android resource linking failed
.../app/build/intermediates/incremental/mergeDevelopmentDebugResources/merged.dir/values/values.xml:2682: AAPT: error: resource android:attr/lStar not found.

根据 [Android: Resource linking fails on test execution even when nothing has been changed](https://stackoverflow.com/questions/69019631/android-resource-linking-fails-on-test-execution-even-when-nothing-has-been-cha) ,这是因为某些库升级了。

lStar 需要 compileSdkVersion 31 而我的项目使用了 compileSdkVersion 28

如何跟踪最近更新了哪些库,或者哪个库导致了这种情况?

stack overflow Resource linking fails on lStar
原文答案
author avatar

接受的答案

转到您的 package.json 文件并删除尽可能多的依赖项,直到项目成功构建。然后开始一一添加依赖,检测哪些有问题。

然后,您可以通过在 node_modules/[dependencie]/android/build.gradle 上加入这些依赖项并将 androidx.core:core-ktx:androidx.core:core: 设置为特定的来手动修补这些依赖项版本(在我的情况下为 1.6.0)。


答案:

作者头像

problem@react-native-community/netinfo 。只需尝试使用更新包

yarn add @react-native-community/netinfo

或者

npm update @react-native-community/netinfo

无需对 Gradle 或 Android 文件进行任何更改,因为这些可能会使事情变得更糟。

作者头像

转到 android/build.gradle 并将 androidXCore = "1.6.0" 添加到 ext

ext {
    buildToolsVersion = "29.0.2"
    minSdkVersion = 21
    compileSdkVersion = 29
    targetSdkVersion = 29
    googlePlayServicesAuthVersion = "16.0.1"
    androidXCore = "1.6.0"
}
作者头像

原生安卓:

出现此问题的原因是 androidx.core:core-ktx

如果您使用 core-ktx ,请更改

implementation "androidx.core:core-ktx:+"

implementation "androidx.core:core-ktx:1.6.0"

如果您不使用 core-ktx,则您的依赖库之一可能正在使用 androidx.core:core-ktx

解决方案 1: 使用 core-ktx 找出库并尽量不要使用它。

Or

解决方案 2:compileSdkVersiontargetSdkVersion 更新为 31

Or

解决方案 3: 在 app:build.grandle 添加以下代码: hou andy's solution

configurations.all {
    resolutionStrategy {
        force 'androidx.core:core-ktx:1.6.0'
    }
}
作者头像

看起来 core-ktx 的 alpha02 版本存在错误。

如果您最近没有升级它,可能有两个原因发生在您的项目中:

1.您正在使用

 `implementation "androidx.core:core-ktx:+"` 

在这种情况下,将其替换为

 `implementation "androidx.core:core-ktx:1.6.0"` (或任何适合您的版本)
  1. 一些库正在使用那个 alpha02 版本

    在这种情况下,您有两种选择:

    1.暂时增加compileSdkVersion 31

    2.删除或降级使用alpha02的依赖

     ./gradlew :app:dependencies > dependencies.txt
    

    一个带有依赖树的文本文件将被添加到您的项目中。

    打开文件,你会看到类似这样的东西

     +--- MyApp:mylibrary:unspecified
     |    --- com.android.support:appcompat-v7:25.3.1
     |         +--- com.android.support:animated-vector-drawable:25.3.1
     |         |    --- com.android.support:support-vector-drawable:25.3.1
     |         |         --- com.android.support:support-v4:25.3.1
     |         |              --- LOCAL: internal_impl-25.3.1.jar
     |         +--- com.android.support:support-v4:25.3.1
     |         |    --- LOCAL: internal_impl-25.3.1.jar
     |         --- com.android.support:support-vector-drawable:25.3.1
     |              --- com.android.support:support-v4:25.3.1
     |                   --- LOCAL: internal_impl-25.3.1.jar
     --- com.android.support:appcompat-v7:25.3.1
          +--- com.android.support:animated-vector-drawable:25.3.1
          |    --- com.android.support:support-vector-drawable:25.3.1
          |         --- com.android.support:support-v4:25.3.1
          |              --- LOCAL: internal_impl-25.3.1.jar
          +--- com.android.support:support-v4:25.3.1
          |    --- LOCAL: internal_impl-25.3.1.jar
          --- com.android.support:support-vector-drawable:25.3.1
               --- com.android.support:support-v4:25.3.1
                    --- LOCAL: internal_impl-25.3.1.jar
    

    搜索类似的东西

     androidx.core:core-ktx:1.6.0 -> 1.7.0-alpha-02
    

    跟踪哪个依赖项正在使用它。要修复它,您可能需要删除依赖项或将其降级到旧版本。

作者头像

颤振的解决方案:

只需全局搜索所有 Flutter 包的 core-ktx 依赖项,包括 Flutter 项目 android 文件夹,并设置 1.6.0 版本而不是 +

从:

implementation "androidx.core:core-ktx:+"

至:

implementation "androidx.core:core-ktx:1.6.0"

我在旧版本的 audioplayers Flutter 包中遇到了同样的问题。

作者头像

更改 android/build.gradle 并添加 androidXCore = "1.6.0" 对我有用。

ext {
    buildToolsVersion = "29.0.2"
    minSdkVersion = 21
    compileSdkVersion = 29
    targetSdkVersion = 29
    googlePlayServicesAuthVersion = "16.0.1"
    androidXCore = "1.6.0"    //Add this line
}
作者头像

在您的应用模块文件 build.gradle 中强制使用此 androidx-core 版本:

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

这似乎对我有用!

作者头像

我在 build.gradle 文件夹中的 android 文件的 compileSdkVersion 和 targetSdkVersion 中将版本 29 更改为 31。它解决了我的问题。

作者头像

对于 Unity 游戏引擎构建

如果有人最终在这里使用他们的 Unity 构建搜索解决方案,解决方案是添加

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

launcherTemplate.gradle 中的 Plugins/Android 文件的末尾。