英文:
R8 Compatibility With Sealed Class In Android Studio Flamingo
问题
I can help translate the code-related content:
Error message:
当我尝试发布我的应用程序时出现此错误:`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 版本,我无法编辑编译版本。
```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)
}
}
}
Please note that the code has HTML entities (e.g., <
, >
) that need to be converted back to their respective symbols when using it in your code.
英文:
When I want to release my app get this error: com.android.tools.r8.internal.jb: Sealed classes are not supported as program classes when generating class files
- Android Studio: Flamingo 2022.2.1 (also i try 2022.3.1 Giraffe)
- Gradle Version: 8.0 (also i try 8.1 and 8.0.2)
- Gradle Plugin Version: 8.0.0
- JDK: 17.0.6 (Android Studio Flamingo Embedded)
and in build.gradle i cant edit compile version because of android studio min gradle.
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
Sealed class i use in my module is
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)
}
}
}
答案1
得分: 10
这是一个已知问题,已在 https://issuetracker.google.com/227160052 中进行跟踪。如果它影响了您,请+1该问题。
英文:
This is a known issue, which is tracked in https://issuetracker.google.com/227160052. Please +1 that issue if it affects you.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论