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:更新compileSdkVersion和targetSdkVersion31
或者:
解决方案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 文件进行任何更改,因为它们可能会使事情变得更加混乱。
小智 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)
小智 14
我将android文件夹中build.gradle文件的compileSdkVersion和targetSdkVersion中的版本29更改为31 。它解决了我的问题。
小智 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 团队搞砸了版本,这就是我们的原因这条信息..
转到您的package.json文件并删除尽可能多的依赖项,直到项目成功构建。然后开始一一加回依赖,检测哪些有问题。
然后,您可以通过在 node_modules/[dependencie]/android/build.gradle 上加入这些依赖项并将androidx.core:core-ktx:或androidx.core:core:设置为特定版本(在我的情况下为 1.6.0)来手动修补这些依赖项)。
看起来core-ktx的 alpha02 版本存在错误。
如果您最近没有升级项目,可能有两个原因导致您的项目发生这种情况:
您正在使用
implementation "androidx.core:core-ktx:+"
在这种情况下,将其替换为
implementation "androidx.core:core-ktx:1.6.0" (或任何适合您的版本)
某些库正在使用该 alpha02 版本
在这种情况下,您有两个选择:
暂时增加到compileSdkVersion 31
删除或降级使用 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)
追踪哪个依赖正在使用它。要修复它,您可能需要删除依赖项或将其降级到旧版本。
对于那些像我一样在应用程序上下文中遇到此问题并使用早于(在我的情况下)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:core其1.0.0版本中的包都被使用。没有更多error: resource android attr/lStar not found问题了!
总结一下:检查您的插件依赖项,如果可能,设置静态版本而不是“最新”。这样,您可以(在大多数情况下)避免使用alpha/beta 版本,这可能不稳定或不支持您当前的环境。
将 appcompat 版本更改为 1.3.0 对我有用
implementation 'androidx.appcompat:appcompat:1.3.0'
Run Code Online (Sandbox Code Playgroud)
更改 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)
如果你使用
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)
| 归档时间: |
|
| 查看次数: |
9280 次 |
| 最近记录: |