当我想要发布我的应用程序时,出现了以下错误:com.android.tools.r8.internal.jb: 生成类文件时不支持密封类作为程序类
- Android Studio:Flamingo 2022.2.1(我也尝试过2022.3.1 Giraffe)
- Gradle 版本:8.0(我也尝试过8.1和8.0.2)
- Gradle 插件版本:8.0.0
- JDK:17.0.6(Android Studio Flamingo 嵌入式)
在 build.gradle 中,由于 Android Studio 的最小 Gradle 版本限制,我无法编辑编译版本。
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
我在我的模块中使用的封闭类是
sealed class Resource<out T> {
object Loading : Resource<Nothing>()
data class Success<out T : Any>(val data: T?) : Resource<T>()
data class Error(val exception: Exception) : Resource<Nothing>()
}
fun <T> Resource<T>.onSuccess(callback: (T?) -> Unit): Resource<T> {
if (this is Resource.Success) {
callback.invoke(this.data)
}
return this
}
fun <T> Resource<T>.onError(callback: (Exception) -> Unit): Resource<T> {
if (this is Resource.Error) {
callback.invoke(exception)
}
return this
}
fun <T> Resource<T>.onLoading(callback: () -> Unit): Resource<T> {
if (this is Resource.Loading) {
callback.invoke()
}
return this
}
fun <T> Resource<T>.isSuccess(): Boolean = this is Resource.Success
fun <T> Resource<T>.isError(): Boolean = this is Resource.Error
fun <T> Resource<T>?.dataOrNull(): T? = if (this is Resource.Success) data else null
inline fun <T> Resource<T>.withResult(
onLoading: () -> Unit = {},
onSuccess: (T?) -> Unit = {},
onError: (Exception) -> Unit = {}
) {
when (this) {
Resource.Loading -> onLoading()
is Resource.Success -> {
onSuccess(data)
}
is Resource.Error -> {
onError(exception)
}
}
}