找不到 class 'kotlin.jvm.internal.DefaultConstructorMarker'
Could not find class 'kotlin.jvm.internal.DefaultConstructorMarker'
我目前正在开发一个用 Kotlin 编码的 Android 应用程序。
直到昨天一切都很好,在某个时候我开始在 logcat 中出现此错误,并且在发生这种情况时,应用程序的内容不会显示。这是详细说明:
11-23 17:08:40.819 10472-10472/ch.XXX.XXX W/dalvikvm: DexOpt: resolve class illegal access: Lch/XXX/XXX/commons/features/CouponsManager; -> Lkotlin/jvm/internal/DefaultConstructorMarker;
11-23 17:08:40.819 10472-10472/ch.XXX.XXX E/dalvikvm: Could not find class 'kotlin.jvm.internal.DefaultConstructorMarker', referenced from method ch.XXX.XXX.commons.features.CouponsManager.<init>
11-23 17:08:40.819 10472-10472/ch.XXX.XXX W/dalvikvm: VFY: unable to resolve check-cast 3145 (Lkotlin/jvm/internal/DefaultConstructorMarker;) in Lch/XXX/XXX/commons/features/CouponsManager;
11-23 17:08:40.819 10472-10472/ch.XXX.XXX W/dalvikvm: DexOpt: resolve class illegal access: Lch/XXX/XXX/commons/features/CouponsManager; -> Lkotlin/jvm/internal/DefaultConstructorMarker;
引用的 class 是用 Kotlin 编写的,在错误开始出现之前没有修改。
编辑
这是导致问题的 class:
class CouponsManager(private val api: RestApi = RestApi()) {
fun getAllCoupons(): Observable<CouponDataResponse> {
return Observable.create { subscriber ->
val callResponse = api.getCoupons()
val response = callResponse.execute()
if (response.isSuccessful) {
val coupons = response.body()
subscriber.onNext(coupons)
subscriber.onCompleted()
} else {
subscriber.onError(Throwable(response.message()))
}
}
}
fun getCoupons(): Observable<List<Coupon>> {
return getAllCoupons().map {
it.Coupons.map {
Coupon(it.TopCouponImageUrl, it.BarcodeUrl, it.TopCouponText, it.BottomCouponText, it.BottomCouponImageUrl)
}
}
}
fun getLoyaltyCards(): Observable<List<Coupon>> {
return getAllCoupons().map {
it.Loyalty.map {
Coupon(it.TopCouponImageUrl, it.BarcodeUrl, it.TopCouponText, it.BottomCouponText, it.BottomCouponImageUrl)
}
}
}
}
因此,正如@DimaRostopira 所说,Kotlin 不能与 Instant 运行 一起使用,因此它已经关闭,但显然,在 Android Studio 更新到新版本之后,似乎已经完成构建以支持 Instant 运行,因此一些已经存在的构建 类 仅部分编译和缓存。
我尝试清理项目,但我必须手动擦除整个 build
文件夹才能使项目再次正确 运行。
所以解决方案是 rm -Rf build/
在项目文件夹中,打开 Android Studio 并从头开始重新构建所有内容。
我目前正在开发一个用 Kotlin 编码的 Android 应用程序。 直到昨天一切都很好,在某个时候我开始在 logcat 中出现此错误,并且在发生这种情况时,应用程序的内容不会显示。这是详细说明:
11-23 17:08:40.819 10472-10472/ch.XXX.XXX W/dalvikvm: DexOpt: resolve class illegal access: Lch/XXX/XXX/commons/features/CouponsManager; -> Lkotlin/jvm/internal/DefaultConstructorMarker;
11-23 17:08:40.819 10472-10472/ch.XXX.XXX E/dalvikvm: Could not find class 'kotlin.jvm.internal.DefaultConstructorMarker', referenced from method ch.XXX.XXX.commons.features.CouponsManager.<init>
11-23 17:08:40.819 10472-10472/ch.XXX.XXX W/dalvikvm: VFY: unable to resolve check-cast 3145 (Lkotlin/jvm/internal/DefaultConstructorMarker;) in Lch/XXX/XXX/commons/features/CouponsManager;
11-23 17:08:40.819 10472-10472/ch.XXX.XXX W/dalvikvm: DexOpt: resolve class illegal access: Lch/XXX/XXX/commons/features/CouponsManager; -> Lkotlin/jvm/internal/DefaultConstructorMarker;
引用的 class 是用 Kotlin 编写的,在错误开始出现之前没有修改。
编辑
这是导致问题的 class:
class CouponsManager(private val api: RestApi = RestApi()) {
fun getAllCoupons(): Observable<CouponDataResponse> {
return Observable.create { subscriber ->
val callResponse = api.getCoupons()
val response = callResponse.execute()
if (response.isSuccessful) {
val coupons = response.body()
subscriber.onNext(coupons)
subscriber.onCompleted()
} else {
subscriber.onError(Throwable(response.message()))
}
}
}
fun getCoupons(): Observable<List<Coupon>> {
return getAllCoupons().map {
it.Coupons.map {
Coupon(it.TopCouponImageUrl, it.BarcodeUrl, it.TopCouponText, it.BottomCouponText, it.BottomCouponImageUrl)
}
}
}
fun getLoyaltyCards(): Observable<List<Coupon>> {
return getAllCoupons().map {
it.Loyalty.map {
Coupon(it.TopCouponImageUrl, it.BarcodeUrl, it.TopCouponText, it.BottomCouponText, it.BottomCouponImageUrl)
}
}
}
}
因此,正如@DimaRostopira 所说,Kotlin 不能与 Instant 运行 一起使用,因此它已经关闭,但显然,在 Android Studio 更新到新版本之后,似乎已经完成构建以支持 Instant 运行,因此一些已经存在的构建 类 仅部分编译和缓存。
我尝试清理项目,但我必须手动擦除整个 build
文件夹才能使项目再次正确 运行。
所以解决方案是 rm -Rf build/
在项目文件夹中,打开 Android Studio 并从头开始重新构建所有内容。