由于 java.lang.NoClassDefFoundError 解析失败:Landroid/widget/Magnifier$Builder;
Caused by java.lang.NoClassDefFoundError Failed resolution of: Landroid/widget/Magnifier$Builder;
我在某些设备上遇到此错误,但在其他设备上一切正常。
Caused by java.lang.ClassNotFoundException
Didn't find class "android.widget.Magnifier$Builder" on path: DexPathList[[zip file
"/data/app/android.myproject-y_q4TlFhfWP/base.apk"],
nativeLibraryDirectories=[/data/app/android.myproject-y_q4TlFhfWP/lib/arm64,
/data/app/android.myproject-y_q4TlFhfWPN/base.apk!/lib/arm64-v8a, /system/lib64,
/system/vendor/lib64]]
我使用自定义视图,在初始化放大镜时崩溃
class CustomView : FrameLayout {
private var magnifier: Magnifier? = null
constructor(context: Context) : super(context) {
init(context)
}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
init(context)
}
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
) {
init(context)
}
private fun init(context: Context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
var magnifier = Magnifier.Builder(this)
.setInitialZoom(2f)
.build()
}
}
可能您的某些测试设备的 api 版本低于 Q(Api 29)
根据文档; https://developer.android.com/reference/android/widget/Magnifier.Builder 在 api 版本 29(Q) 中添加了放大镜生成器。因此,要么将您的代码更改为
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
或删除相等性
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
并确保您的测试设备 api 版本至少为 29(Q)。
我在某些设备上遇到此错误,但在其他设备上一切正常。
Caused by java.lang.ClassNotFoundException Didn't find class "android.widget.Magnifier$Builder" on path: DexPathList[[zip file "/data/app/android.myproject-y_q4TlFhfWP/base.apk"], nativeLibraryDirectories=[/data/app/android.myproject-y_q4TlFhfWP/lib/arm64, /data/app/android.myproject-y_q4TlFhfWPN/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
我使用自定义视图,在初始化放大镜时崩溃
class CustomView : FrameLayout {
private var magnifier: Magnifier? = null
constructor(context: Context) : super(context) {
init(context)
}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
init(context)
}
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
) {
init(context)
}
private fun init(context: Context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
var magnifier = Magnifier.Builder(this)
.setInitialZoom(2f)
.build()
}
}
可能您的某些测试设备的 api 版本低于 Q(Api 29)
根据文档; https://developer.android.com/reference/android/widget/Magnifier.Builder 在 api 版本 29(Q) 中添加了放大镜生成器。因此,要么将您的代码更改为
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
或删除相等性
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
并确保您的测试设备 api 版本至少为 29(Q)。