lStar 资源链接失败

Edu*_*ati 64 android react-native

我正在开发一个 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.
Run Code Online (Sandbox Code Playgroud)

根据Android:即使没有任何更改资源链接在测试执行时也会失败,这是因为某些库升级了。

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

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

Sud*_*r G 29

原生安卓:

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

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

implementation "androidx.core:core-ktx:+"
Run Code Online (Sandbox Code Playgroud)

implementation "androidx.core:core-ktx:1.6.0"
Run Code Online (Sandbox Code Playgroud)

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

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

或者

解决方案 2:更新compileSdkVersiontargetSdkVersion31

或者

解决方案3:在app:build.grandle中添加以下代码:hou andy的解决方案

configurations.all {
    resolutionStrategy {
        force 'androidx.core:core-ktx:1.6.0'
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 27

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

yarn add @react-native-community/netinfo
Run Code Online (Sandbox Code Playgroud)

或者

npm update @react-native-community/netinfo
Run Code Online (Sandbox Code Playgroud)

无需对您的 Gradle 或 Android 文件进行任何更改,因为它们可能会使事情变得更加混乱。

  • 是的,这个也对我们有用。从 5.xx 升级到 6.0.1,目前没有发现回归问题 (7认同)
  • 哇,这真是糟糕的形式。我这边什么都没有改变,然后有一天它就停止工作了!这解决了我的问题。 (2认同)
  • 就我而言,我已经有了 6.0.x 版本,但这并没有解决它。我会尝试android本机解决方案 (2认同)

小智 15

转到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"
}
Run Code Online (Sandbox Code Playgroud)

  • 当将compileSdkVersion和targetSdkVersion更改为31操作系统版本时,它消失了。 (3认同)

小智 14

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

  • 是的; 这对我也有用。我的更改`buildToolsVersion =“31.0.0”`,`compileSdkVersion = 31`和`targetSdkVersion = 31` (2认同)

小智 14

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

configurations.all {
    resolutionStrategy {
        force 'androidx.core:core-ktx:1.6.0'
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎对我有用!


Pat*_*kal 14

颤振的解决方案:

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

从:

implementation "androidx.core:core-ktx:+"
Run Code Online (Sandbox Code Playgroud)

到:

implementation "androidx.core:core-ktx:1.6.0"
Run Code Online (Sandbox Code Playgroud)

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


Bib*_*all 13

对于 Unity 游戏引擎构建

如果有人最终在这里寻找 Unity 版本的解决方案,解决方案是添加

configurations.all {
  resolutionStrategy {
    force 'androidx.core:core:1.6.0'
    force 'androidx.core:core-ktx:1.6.0'
  }
}
Run Code Online (Sandbox Code Playgroud)

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


小智 12

如果您正在使用 React Native 并在 2022 年 11 月 4 日之后来到这里,这可能是解决方案:github.com/facebook/react-native/issues/35210 React Native 团队搞砸了版本,这就是我们的原因这条信息..


mar*_*tin 9

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

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

  • 我的是@react-native-community/netinfo (9认同)
  • @radosław-rudnicki 最新版本很好 (5.9.7) 但进入 'node_modules\@react-native-community\netinfo\android\build.gradle' 并从实现 "androidx.core:core:$androidXCore" 更改第 67 行实现“androidx.core:core:1.6.0” (5认同)
  • 您的案例中的依赖性是什么? (2认同)
  • 您可以使用 **vscode** 打开 `node_modules` 文件夹并搜索 (Ctrl+Shift+F) 以获取 **androidx.core:core** 和 **androidx.core:core-ktx** (2认同)
  • @martin,非常感谢!问题是 netinfo 的 build.gradle 上的 androidx.core:core 版本。 (2认同)
  • @RadosławRudnicki 我将 netinfo 的 **build.gradle** 上的 **implementation "androidx.core:core:$androidXCore"** 更改为 **1.0.1** 版本。然后我将创建一个带有 **patch-package** 的补丁 (2认同)

Don*_*nki 9

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

如果您最近没有升级项目,可能有两个原因导致您的项目发生这种情况:

  1. 您正在使用

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

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

    implementation "androidx.core:core-ktx:1.6.0" (或任何适合您的版本)

  2. 某些库正在使用该 alpha02 版本

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

    1. 暂时增加到compileSdkVersion 31

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

     ./gradlew :app:dependencies > dependencies.txt
    
    Run Code Online (Sandbox Code Playgroud)

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

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

     +--- 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
    
    Run Code Online (Sandbox Code Playgroud)

    搜索类似的东西

     androidx.core:core-ktx:1.6.0 -> 1.7.0-alpha-02
    
    Run Code Online (Sandbox Code Playgroud)

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


Nit*_*rix 8

科尔多瓦解决方案

对于那些像我一样在应用程序上下文中遇到此问题并使用早于(在我的情况下)Cordova之前的 Android API 版本的人,我找到了一种绕过它的干净方法。3129

长话短说

如果您正在使用该插件cordova.plugins.diagnostic,请先将其卸载,然后使用以下参数重新安装

cordova plugin add cordova.plugins.diagnostic --variable ANDROIDX_VERSION=1.0.0
Run Code Online (Sandbox Code Playgroud)

刷新整个android平台,你的项目不应该androidx.core:core:1.7.0-beta02再使用了。


完整解释

线程中已经提到的解决方案(强制某个版本的包的 gradle 规则)将无法使用,Cordova因为它自己处理整个 gradle 过程(收集插件依赖项、config.xml 设置并处理所有内容),并且确实很难覆盖特定的事物。我没有设法使用resolutionStrategy例如来解决我们的问题。

迁移到Android API 31并不总是一个简单的解决方案(插件和依赖项需要特别支持它)

相反,我尝试查找我安装的哪些插件具有链接到该androidx.core:core包的依赖项,这会破坏其1.7.0-beta02版本中的所有内容。

我的列表中没有人直接使用它,但我发现(在built的帮助下build.gradle)使用了以下包androidx.appcompat:appcompat,并且由于它也与之相关AndroidX,所以我挖掘了一下,很快发现该版本用于这是1.+最新的 1.xx)。

检查 mavenrepo,androidx.appcompat:appcompat是否有我们的 bug 包androidx.core:core作为依赖项(1.7.0-beta02最新的)。

使用 IDE 快速搜索后,我找到了依赖项的定义:

<framework src="androidx.appcompat:appcompat:$ANDROIDX_VERSION" />
Run Code Online (Sandbox Code Playgroud)

它被一个名为 的插件使用cordova-diagnostic-plugin。(在项目中很常见Cordova,它基本上处理 Android 设置、权限和硬件内容)

我注意到环境变量用于定义包版本(默认设置为1.+)。继续查看该插件的 GitHub 文档:https://github.com/dpa99c/cordova-diagnostic-plugin#androidx-library会告诉您,在使用 Cordova 命令安装插件时,您确实可以设置自定义版本。

我做了什么(我首先删除了插件):

cordova plugin add cordova.plugins.diagnostic --variable ANDROIDX_VERSION=1.0.0
Run Code Online (Sandbox Code Playgroud)

重建android平台后,我开始了新的构建,终于成功了!

androidx.appcompat:appcompat:1.0.0以及androidx.core:core1.0.0版本中的包都被使用。没有更多error: resource android attr/lStar not found问题了!

总结一下:检查您的插件依赖项,如果可能,设置静态版本而不是“最新”。这样,您可以(在大多数情况下)避免使用alpha/beta 版本,这可能不稳定或不支持您当前的环境。


PRA*_*NGH 8

将 appcompat 版本更改为 1.3.0 对我有用

implementation 'androidx.appcompat:appcompat:1.3.0'
Run Code Online (Sandbox Code Playgroud)


Ash*_*dal 6

更改 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
}
Run Code Online (Sandbox Code Playgroud)


小智 6

就我而言,问题出在react-native-screen-brightness,所以我只是更改implementation 'androidx.core:core:1+'implementation 'androidx.core:core:1.6.0'文件android/build.gradle


小智 6

更新你的gradel.build

compileSdkVersion 31
targetSdkVersion 31
Run Code Online (Sandbox Code Playgroud)


小智 5

就我而言,问题出在@react-native-community/netinfo": "^5.3.3,所以我只是删除了 netinfo 库并使用最新版本再次安装它,问题就解决了。


小智 5

只需添加就androidXCore = "1.6.0"为我解决了这个问题。


San*_*eek 5

如果您在 Android 中遇到此问题

如果你使用

implementation "androidx.core:core-ktx:+"
Run Code Online (Sandbox Code Playgroud)

只需将其替换为:

implementation "androidx.core:core-ktx:1.6.0"
Run Code Online (Sandbox Code Playgroud)

在 gradle-wrapper.properties 中: distributionUrl 是:

distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
Run Code Online (Sandbox Code Playgroud)

________________________________________________________________

否则

如果你想使用

 implementation "androidx.core:core-ktx:+"
Run Code Online (Sandbox Code Playgroud)

只需更改gradle-wrapper.properties 中的distributionUrl即可:

#distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
Run Code Online (Sandbox Code Playgroud)