更新到1.0.0-rc01后,Jetpack Comose 无法预览

只有在我更新到1.0.0-rc01时才会发生这种情况。 它说:

找不到下列类别: - androidx.compos.ui.tooling.view. ComposViewAdapter (修复构建路径,编辑 XML,创建类)

enter image description here

我的代码:

@Composable
@Preview
fun CenterProgress(){
Box(
modifier= Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
){
CircularProgressIndicator(strokeWidth = 3.dp)
}
}
14962 次浏览

Update 07/20/2021: Just download and use the latest AS to fix the problem


They splitted some packages in rc01 but per @CommonsWare comment (all credits to him) it seems there is a problem with Android Studio version itself. You have 2 options:

  1. Downgrade to beta09 until AS ArcticFox RC1 is out
  2. Try the suggested workaround, use AS Arctic Fox Beta 5 leaving all compose dependencies to 1.0.0-rc01 version and downgrade only ui-tooling to 1.0.0-beta09 (confirmed by comments).

Extra details

Here you can find all the classes they moved in 1.0.0-rc01 https://android-review.googlesource.com/c/platform/frameworks/support/+/1739498 and the explanation on why this has been decided.

In short, you can now do this for some particular optimized scenarios (which should not be the default case):

debugImplementation "androidx.compose.ui:ui-tooling:1.0.0-rc01"
implementation "androidx.compose.ui:ui-tooling-preview:1.0.0-rc01"

I tried it like the comment above me and it actually helped me only that i had to delete the implementation of :

Link to Artic Fox Beta 5:
https://developer.android.com/studio/preview

androidx.compose.ui:ui-tooling-preview.
My compose config looks like the following:

android {


def compose_version = '1.0.0-rc01'




composeOptions {
kotlinCompilerExtensionVersion "$compose_version"
}


dependencies {
def compose_version = '1.0.0-rc01'
/**Compose Related*/


implementation "androidx.compose.compiler:compiler:$compose_version"
implementation "androidx.compose.ui:ui:$compose_version"
implementation "androidx.activity:activity-compose:1.3.0-rc01"
implementation "androidx.compose.material:material:$compose_version"


implementation "androidx.compose.ui:ui-tooling:1.0.0-beta09"
//    Need to comment this two lines to work on artic fox
//    implementation "androidx.compose.ui:ui-tooling:$compose_version"
//    implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
/**Accompanist*/
// Coil
implementation 'dev.chrisbanes.accompanist:accompanist-insets:0.6.2'
implementation "com.google.accompanist:accompanist-coil:0.13.0"
implementation "androidx.compose.runtime:runtime:$compose_version"
implementation "androidx.compose.runtime:runtime-livedata:$compose_version"


/** Material Icons */
implementation "androidx.compose.material:material-icons-extended:$compose_version"




// Jetpack Compose Integration
implementation "androidx.navigation:navigation-compose:2.4.0-alpha04"
}


}

To people still get the error when downgrade the ui-tooling library:

Make sure you don't have library that have dependency on ui-tooling:1.0.0-rc01 You can find that out by using ./gradlew app:dependencies in your android studio terminal

In my case, I'm using com.google.accompanist:accompanist-swiperefresh:13.0.0 which depend on ui-tooling:1.0.0-rc01. Preview is working when I downgrade to accompanist-swiperefresh:12.0.0

Update: This is no longer needed with Android Studio Bumblebee | 2021.1.1 Canary 6 and Android Gradle Plugin 7.1.0-alpha06. Note: Canary 4 already fixed this issue but required a broken version of AGP. This is now also resolved.

In addition to the above answers: here is how to force the ui-tooling version in gradle:

implementation("androidx.compose.ui:ui-tooling:$compose_version") {
version {
// TODO: Remove this when Android Studio has become compatible again
// Android Studio Bumblebee | 2021.1.1 Canary 3 is not compatible with module ui-tooling 1.0.0-rc01 or higher.
// The Run Configuration for Composable Previews that Android Studio makes expects a PreviewActivity class
// in the `androidx.compose.ui.tooling.preview` package, but it was moved in 1.0.0-rc01, and thus causes error:
// "androidx.compose.ui.tooling.preview.PreviewActivity is not an Activity subclass or alias".
// For more, see: https://stackoverflow.com/questions/68224361/jetpack-compose-cant-preview-after-updating-to-1-0-0-rc01
strictly("1.0.0-beta09")
}
}


For my case, it's because I left my build variant at "release". Changing it back to "debug" fixes the missing class bug.

enter image description here

the preview functionality is probably from the following line in build.gradle

debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"

On my case, where I have a "design system" module providing all compose-related dependencies, I had to add the following dependency:

implementation("androidx.activity:activity-compose:1.4.0")