无法进行撰写检查。无法确定 androidx.compose.ui:ui 工件的版本。尝试不同版本的 compose

hel*_*and 8 android android-studio android-gradle-plugin layout-inspector android-jetpack-compose

当我使用 Android Studio Giraffe 时尝试在我的项目上使用布局检查器时,我收到上面的错误消息 | 2022年3月1日金丝雀6号。

我也尝试过用Android Studio Electric Eel | 2022.1.1 补丁 1。在那里我只收到错误消息:Compose 检查不可用。

对于版本控制,我使用 chris banes 的 BOM

composeOptions {
        kotlinCompilerExtensionVersion '1.4.0'
    }

dependencies{
androidx.compose = 2023.02.00-alpha02
..
implementation platform("dev.chrisbanes.compose:compose-bom:${androidx.compose}")
    androidTestImplementation platform("dev.chrisbanes.compose:compose-bom:${androidx.compose}")
    implementation "androidx.compose.ui:ui"
    implementation "androidx.compose.ui:ui-util"
    implementation "androidx.compose.material:material"
    implementation "androidx.compose.material:material-icons-extended"
    implementation "androidx.compose.ui:ui-tooling"
    debugImplementation "androidx.compose.ui:ui-tooling"
    implementation "androidx.compose.ui:ui-tooling-preview"

Run Code Online (Sandbox Code Playgroud)

我还尝试使用自己的版本而不使用 BOM,但这给了我同样的问题。使缓存失效和重建项目也不起作用。

有人知道如何解决这个问题并再次开始使用我的布局检查器吗?

Sar*_*ran 8

感谢@Edric 的回复,我发现了为什么布局检查器对我不起作用的问题。

gradle.kts我的文件中有以下代码

packagingOptions {
    resources.excludes.add("META-INF/**")
}
Run Code Online (Sandbox Code Playgroud)

您需要将其删除并添加到 gradle 文件的根目录中

androidComponents {
    onVariants(selector().withBuildType("release")) {
        it.packaging.resources.excludes.add("META-INF/**")
    }
}
Run Code Online (Sandbox Code Playgroud)

例如:

android {
   ...
}

androidComponents {
    onVariants(selector().withBuildType("release")) {
        it.packaging.resources.excludes.add("META-INF/**")
    }
}
Run Code Online (Sandbox Code Playgroud)


Edr*_*ric 5

使固定

如前所述,修复方法是将 compose-ui 更改为1.4.0-beta02

implementation("androidx.compose.ui:ui:1.4.0-beta02")
Run Code Online (Sandbox Code Playgroud)

(或通过版本目录:)

name-of-library = "androidx.compose.ui:ui:1.4.0-beta02"
# Or
name-of-library = { module = "androidx.compose.ui:ui", version = "1.4.0-beta02" }
Run Code Online (Sandbox Code Playgroud)

或者使用alpha Compose BoM2023.02.00-beta03

implementation(platform("dev.chrisbanes.compose:compose-bom:2023.02.00-beta03"))
Run Code Online (Sandbox Code Playgroud)

(或通过版本目录:)

name-of-bom = "dev.chrisbanes.compose:compose-bom:2023.02.00-beta03"
# Or
name-of-bom = { module = "dev.chrisbanes.compose:compose-bom", version = "2023.02.00-beta03" }
Run Code Online (Sandbox Code Playgroud)

基本原理

这是因为布局检查器期望的androidx.compose.ui_ui.version文件(在META-INF构建的 APK 的目录中)具有无效版本:

task ':compose:ui:ui:writeVersionFile' property 'version'
Run Code Online (Sandbox Code Playgroud)

(奇怪的是,这也发生在其他一些依赖版本上:)

( androidx.browser_browser.version)

task ':browser:browser:writeVersionFile' property 'version'
Run Code Online (Sandbox Code Playgroud)

Google IssueTracker中的一些快速谷歌搜索导致了一个问题,该问题记录了影响版本的错误1.4.0-alpha051.4.0-alpha06以及1.4.0-beta01

随后提交了修复程序以解决版本问题,并已应用于1.4.0-beta02 (2 月 22 日发布)

附加信息

此错误似乎是由于之前将文件(用于编写版本文件)中的属性转换为使用VersionFileWriterTaskGradle 的延迟配置属性而引起的:

task ':compose:ui:ui:writeVersionFile' property 'version'
Run Code Online (Sandbox Code Playgroud)

然而,正如version现在围绕 Gradle 的Property界面所包装的那样,它将需要额外的代码来检索其值,在本例中只需一个简单的get()调用(如最近的提交所示):

task ':browser:browser:writeVersionFile' property 'version'
Run Code Online (Sandbox Code Playgroud)