如果您正在使用该插件cordova.plugins.diagnostic
,请先卸载它:
ionic cordova plugin rm cordova.plugins.diagnostic
然后使用以下参数重新安装它:
cordova plugin add cordova.plugins.diagnostic --variable ANDROIDX_VERSION=1.0.0
重新编译 android 平台:
ionic cordova prepare android
此时,你的项目不再使用"androidx.core:core:1.7.0-beta02
"了。
完整说明
线程中已经提到的解决方案(强制特定版本包的 gradle 规则)将无法使用,因为 Cordova
自己处理整个 gradle 过程(收集插件依赖项、config.xml 设置和处理所有内容)并且很难覆盖特定的东西。例如,我没有设法解决我们的 resolutionStrategy
问题。
迁移到 Android API 31
并不总是一个简单的解决方案(插件和依赖项需要特别支持它)
相反,我试图找出我安装的哪些插件具有链接到 androidx.core:core
包的依赖项,这破坏了其 1.7.0-beta02
版本中的所有内容。
我的列表中没有人直接使用它,但我发现(在 builded 的帮助下build.gradle
)使用了以下包androidx.appcompat:appcompat
,并且由于它也与AndroidX
相关,我挖掘了一下,很快发现该版本是1.+
(最新的 1.xx)。
检查 mavenrepo,androidx.appcompat:appcompat
将我们有缺陷的包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.0
使用 androidx.core:core
的1.0.0
版本中的包。没有更多的 error: resource android attr/lStar not found
问题!
总结
检查您的插件依赖项,如果可能,设置静态版本而不是“最新”。通过这种方式,您可以(在大多数情况下)避免使用alpha/beta 版本,这可能不稳定或不支持您当前的环境。