资源链接在 lStar 上失败

我在处理一个“反应本土”的申请。我的 Android 版本开始在 线人环境(和本地)中失败,没有任何改变。

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: 资源链接在测试执行中失败,即使什么都没有改变的说法,这是因为一些库进行了升级。

LStar 需要 31版本,我的项目使用 编译 SdkVersion 28

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

76901 次浏览

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

然后,您可以手动修补这些依赖关系,方法是在 node _ module/[ endencie ]/android/build.gradle 上访问它们,并将 Core-ktx:Core: 核心:设置为特定版本(在我的例子中是1.6.0)。

我将 机器人文件夹中的 建造,分级文件编译 SdkVersion 和 targetSdkVersion 中的版本29更改为31。解决了我的问题。

我用替换的方法解决了这个问题

implementation 'androidx.core:core:1.0.0'

用这个:

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

如果由于某种原因两者都有,那么只设置 Ktx版本。

转到 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"
}

在我的案例中,问题是与 @ response-national-community/netinfo”: “ ^ 5.3.3,所以我只是删除了 netinfo 库,并安装了最新的版本,这个问题得到了解决。

修改 android/build.gradle 并添加 android XCore = “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
}

对我来说,可行的解决方案是在应用程序级的 Gradle 文件中将 compileSdkVersiontargetSdkVersion更新到31。

如果要使用小于31的 CompileSdkVersion,请使用1.6.0。

在我的例子中,问题出在 react-native-screen-brightness上,所以我只是在文件 Android/build.gradle中将 implementation 'androidx.core:core:1+'更改为 implementation 'androidx.core:core:1.6.0'

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

yarn add @react-native-community/netinfo

或者

npm update @react-native-community/netinfo

没有任何必要改变任何东西超过你的 Gradle 或 Android 文件,因为这些可能会把事情搞得更糟。

加上 androidXCore = "1.6.0"就解决了。

强制在应用程序模块文件 建造,分级中使用这个 androidx 核心版本:

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

看起来对我很有效!

以前的答案对我都不管用。

我删除了华为的 IAP 库,但是我忘了删除华为提供的 agconnect-services.json文件。删除那个文件后,一切都很顺利。

在项目或模块级的 Gradle 文件中,将实现“ Core: core-ktx: + ”替换为“ androidx.core: core-ktx: 1.6.0”可以解决这个问题。没有任何必要增加 CompileSdkVersion。

这招对我很管用。

我不知道是哪个库导致了这个问题,而且升级 CompileSDK 版本破坏了这个应用程序,但是我查看了 Core,你可以看到核心库在一天前进行了更新。所以问题是阿尔法 -02造成的。

我通过转换来解决我的问题

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

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

在构建 Gradle 文件(应用程序级别) ,然后是 同步

看起来有一个与字母02版本的 Core-ktx的错误。

如果你最近没有升级你的项目,可能有两个原因:

  1. 你在吸毒

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

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

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

  2. 有些库使用的是 alpha02版本

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

    1. 暂时增加到编译 SdkVersion 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 软件包包括 Flutter 项目 机器人文件夹的 core-ktx依赖关系,并设置 1.6.0版本而不是 +

来自:

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

致:

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

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

  1. 更新分级系统
  2. 将 SDK 更新到31版
  3. 接受许可证
  4. 在构建 Gradle 文件中将 buildeSdkVersion 设置为31
  5. 同步

准备出发!

原生安卓:

问题出现是因为 Core: core-ktx

如果您正在使用 Core-ktx,请更改

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

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

如果您没有使用 core-ktx,那么您的一个依赖库可能正在使用 Core: core-ktx

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

:

解决方案2: compileSdkVersiontargetSdkVersion更新为 31

:

解决方案3: 在 app: build.grandle 中添加以下代码: < em > 侯安迪的解决方案

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

查找项目中的所有依赖项:

替换 all: 实现“ androidx.core: core-ktx: +” 使用指定的版本: 1.6.0,因为使用 +时,您总是使用最新的版本。

现在,Core: core-ktx更新到 1.70-α版本。

为 Unity 游戏引擎构建

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

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

插件/Android中的 发射模板文件的末尾。

得到同样的错误

在五月的情况下解决了这个问题

改变

实现“ androidx.core: core-ktx: +” 到

实现“ androidx.core: core-ktx: 1.6.0” (更新)

问题已经解决... 感谢上述解决方案

在我的情况下,更新 @react-native-community/netinfo6.0.2加上增加 coreVersion = "1.6.0"build.gradle的包 @invertase/react-native-apple-authentication,正在寻找这个变量解决了问题。

事实上,本地机器人的答案是正确的:

“好像有一个带有 alpha02版本 core-ktx 的 bug”

你在吸毒

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

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

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

但是在许多情况下,这并没有帮助,因为当您不使用显式的这个依赖项时。究其原因,是 jetbrain 将旧库自动转换为使用 androidx 最新库,这就是问题的根源。因此,您需要检查 build.gradle 中的每个依赖项实现,并将其更新为 androidx 版本。对我来说,这是一个老项目,前面的房间是:

compile "android.arch.persistence.room:runtime:+"
annotationProcessor "android.arch.persistence.room:compiler:+"

implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"

你需要在 build.gradle 中添加它(你可以在文件末尾全局添加它) :

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

我已经解决了我的问题,通过更新@response-national-community/netinfo 库。

Npm update@response-national-community/netinfo

对于那些使用 ionic 3和 firebase 的用户,解决方案是更改 project.properties 并替换一些 androidx.core 行:

之前

# Project target.
target=android-28
android.library.reference.1=CordovaLib
android.library.reference.2=app
cordova.system.library.1=androidx.legacy:legacy-support-v4:1.0.0
cordova.gradle.include.1=cordova-support-google-services/nosveja-build.gradle
cordova.system.library.2=com.google.firebase:firebase-analytics:17.5.+
cordova.gradle.include.2=cordova-plugin-firebase-lib/nosveja-build.gradle
cordova.system.library.3=com.google.android.gms:play-services-tagmanager:16.+
cordova.system.library.4=com.google.firebase:firebase-auth:18.+
cordova.system.library.5=com.google.firebase:firebase-core:17.+
cordova.system.library.6=com.google.firebase:firebase-messaging:19.+
cordova.system.library.7=com.google.firebase:firebase-config:18.+
cordova.system.library.8=com.google.firebase:firebase-perf:18.+
cordova.system.library.9=androidx.annotation:annotation:1.1.0
cordova.system.library.10=com.google.android.gms:play-services-location:16.+
cordova.system.library.11=androidx.legacy:legacy-support-v4:1.0.0
cordova.system.library.12=androidx.legacy:legacy-support-v4:1.+
cordova.system.library.13=androidx.appcompat:appcompat:1.+

之后

target=android-28
android.library.reference.1=CordovaLib
android.library.reference.2=app
cordova.system.library.1=androidx.core:core-ktx:1.6.0
cordova.gradle.include.1=cordova-support-google-services/nosveja-build.gradle
cordova.system.library.2=com.google.firebase:firebase-analytics:17.5.+
cordova.gradle.include.2=cordova-plugin-firebase-lib/nosveja-build.gradle
cordova.system.library.3=com.google.android.gms:play-services-tagmanager:16.+
cordova.system.library.4=com.google.firebase:firebase-auth:18.+
cordova.system.library.5=com.google.firebase:firebase-core:17.+
cordova.system.library.6=com.google.firebase:firebase-messaging:19.+
cordova.system.library.7=com.google.firebase:firebase-config:18.+
cordova.system.library.8=com.google.firebase:firebase-perf:18.+
cordova.system.library.9=androidx.annotation:annotation:1.1.0
cordova.system.library.10=com.google.android.gms:play-services-location:16.+

Core-1.7.0-alpha02

在没有任何代码更改的情况下突然构建失败?

这很常见。这种情况在我身上发生过很多次,最近在 core-1.7.0-alpha02上也发生过。我的项目建设得很好,但有一天它倒下了。

有什么问题吗?

同步

有时新版本的库会中断项目。

解决办法?

强制您使用级别 旧马厩版本。在这种情况下,androidx.core:core:1.6.0是稳定的版本。您可以看到总是找到稳定的版本信息

enter image description here

如何使用旧版本的库?

Go to gradle.build (app level) and paste this

//Forcing 1.6.0 instead of 1.7.0-alpha02
configurations.all {
resolutionStrategy {
force 'androidx.core:core:1.6.0'    //This is stable version right now.
}
}

意外收获:

解决这些问题的一般规则?

在我的例子中,这是错误消息

/Users/singhr1/.gradle/caches/transforms-2/files-2.1/1ae857b36375746f9b0fa09af0c656f3/core-1.7.0-beta02/res/values/values.xml:105:5-114:25: AAPT: error: resource android:attr/lStar not found.

所以罪魁祸首是 core-1.7.0-beta02
我在 Developer 的页面上找到了稳定的版本,并强迫我的 Gradle 使用它。

科尔多瓦的解决方案

对于那些像我一样在 Cordova应用程序上下文中遇到这个问题并且使用比 31(在我的案例中是 29)更早的 Android API 版本的人,我找到了一个简洁的方法来实现 绕过它

DR

如果你使用的是 cordova.plugins.diagnostic插件,首先是 卸载它,然后是 重新安装,使用以下 争论:

cordova plugin add cordova.plugins.diagnostic --variable ANDROIDX_VERSION=1.0.0

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


详细解释

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

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

相反,我试图找出我安装的哪些插件有一个与 androidx.core:core包相关联的依赖项,这破坏了它的 1.7.0-beta02版本的一切。

在我的列表中没有人直接使用它,但是我发现(在构建的 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" />

它使用 被一个插件命名为 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

在重建了 android 平台之后,我开始了一个新的版本,并且它最终成功了!

androidx.appcompat:appcompat:1.0.0androidx.core:core软件包在它的 1.0.0版本中一样被使用。不再有 error: resource android attr/lStar not found的问题!

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

对于 IONIC CORDOVA 来说,在这个建筑里,你所有的依赖都放在这里

建造,分级

ext {
buildToolsVersion = "29.0.2"
minSdkVersion = 21
compileSdkVersion = 29
targetSdkVersion = 29
googlePlayServicesAuthVersion = "16.0.1"
androidXCore = "1.6.0".  <---------- this is important
}

构造

resolutionStrategy {
force 'androidx.core:core:1.6.0' <---------- this is important
force 'androidx.core:core-ktx:1.6.0'  <-----this is important
}

}

依赖关系

implementation "androidx.core:core-ktx:1.6.0"  <-----this is important
implementation "androidx.core:core:1.6.0" <-----this is important

在我的例子中,将 compileSdkVersion = 29targetSdkVersion = 29改为 compileSdkVersion = 31targetSdkVersion = 31可以正常工作,而不需要将 androidxCoreVersion = '1.2.0'改为 androidxCoreVersion = '1.6.0'

如果你在 Android 中遇到这个问题

如果你吸毒的话

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

只要把它换成:

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

而在 gradle-wrapper 中. properties: distribution url 是:

distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

除此之外

如果你想用

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

只需改变级数包装器中的 分配。属性:

#distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip

这个问题是由于新版本的 androidx.core:core-ktx缺少 lStar造成的。

为了找到导致问题的包,我搜索了 core-ktx:的所有已安装的 node _ module,并在 react-native-camera-kit包中找到了 implementation "androidx.core:core-ktx:+"

我想锁定这到 core-ktx:1.6.0来修复构建问题 补丁包 ,直截了当(确保您有一个没有构建工件的新包安装) :

  • build.gradle文件中将 core-ktx:+更改为 core-ktx:1.6.0,在我的例子中为 node_modules/react-native-camera-kit/android/build.gradle
  • 运行 yarn patch-package <package to fix>,在我的例子中是 yarn patch-package react-native-camera-kit
  • 重建 Android 以检查它是否工作正常
  • 提交补丁

将 appcompat 版本更改为1.3.0对我来说很有效

implementation 'androidx.appcompat:appcompat:1.3.0'

在我的案例中,是由 build.grale 和 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.0"中的线引起的。

在我使用 Android Studio Arctic Fox 2020.3.1补丁4向项目添加了一个新的空活动之后,Android Studio 修改了 build.gradle 文件

来自: classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.0"

虽然许多解决方案表明使用

androidx.core:core:1.6.0

我发现在我的项目中,有一个模块正在使用1.7.0版本

在将其更改为1.6.0之后,这个问题就消失了。因此,如果有多个模块,请确保检查所有 build.gradle 文件,它们都使用相同的版本。

更新 gradel.build

compileSdkVersion 31
targetSdkVersion 31

如果您正在使用 React Native2022年11月4日之后来到这里,这可能是解决方案: Github.com/facebook/react-native/issues/35210 React Nativeteam 在版本上搞错了一些东西,这就是为什么我们有这个消息的原因。.🤣

如果其他人发现这个页面存在本机反应问题,这里有一些信息和补丁,可以使用 https://github.com/facebook/react-native/issues/35210

2022年11月4日发生的 Android 构建失败

2022年最新情况

解决方案

当这个问题出现时,很可能是您的依赖项之一在它的 build.gradle文件中将 编译 SdkVersion设置为 30或更少。您必须找到这个包,并找到一种方法来设置 编译 SdkVersion31

我的解决方案

我在反应本机中遇到了这个问题,结果是我的一个依赖项,即 < a href = “ https://github.com/mdrajibsk8/response-national-device-number”rel = “ nofollow noReferrer”> response-national-device-number 基本上将 编译 SdkVersion设置为 29,在它的 build.gradle中。我不得不把它改成 31,问题就解决了。

对我来说,我不认为在本地编辑软件包的代码是件好事,因为它在更新时会引起问题,而编辑代码并不能解决在 CI/CD 环境下运行时的问题。因此,我必须在 Github 上分叉包,进行更改,然后在我的 React Natural 项目中安装分叉版本。

这是从 Github 安装 node.js 包的签名

npm install github_username/repo_name/#branch_name

这是我的 package.json 安装后的条目 package.json

{
...
"react-native-device-number": "github:stanleyugwu/react-native-device-number#develop"
...
}

希望这个能帮上忙。

build.gradle中添加 kotlin-gradle-plugin 为我解决了这个问题: classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"