无法扩展ClipDrawable:Verifier在Android 5上拒绝了该类

时间:2016-04-14 15:32:18

标签: android

这是我的扩展ClipDrawable课程:

package com.example.app;

import android.graphics.drawable.ClipDrawable;
import android.graphics.drawable.ColorDrawable;
import android.view.Gravity;

public class ProgressClipDrawable extends ClipDrawable {

    public ProgressClipDrawable(int color) {
        super(new ColorDrawable(color), Gravity.LEFT, ClipDrawable.HORIZONTAL);
    }
}

当我尝试实例化此类时,我收到以下错误:

04-14 20:20:49.535 7257-7257/com.example.app I/art: Verification error in java.lang.Object com.example.app.ProgressClipDrawable.access$super(com.example.app.ProgressClipDrawable, java.lang.String, java.lang.Object[])
04-14 20:20:49.535 7257-7257/com.example.app I/art: java.lang.Object com.example.app.ProgressClipDrawable.access$super(com.example.app.ProgressClipDrawable, java.lang.String, java.lang.Object[]) failed to verify: java.lang.Object com.example.app.ProgressClipDrawable.access$super(com.example.app.ProgressClipDrawable, java.lang.String, java.lang.Object[]): [0x35] 'this' argument 'Reference: com.example.app.ProgressClipDrawable' not instance of 'Unresolved Reference: android.graphics.drawable.DrawableWrapper'
04-14 20:20:49.535 7257-7257/com.example.app E/art: Verification failed on class com.example.app.ProgressClipDrawable in /data/data/com.example.app/files/instant-run/dex/slice-slice_6-classes.dex because: Verifier rejected class com.example.app.ProgressClipDrawable due to bad method java.lang.Object com.example.app.ProgressClipDrawable.access$super(com.example.app.ProgressClipDrawable, java.lang.String, java.lang.Object[])
04-14 20:20:49.536 7257-7257/com.example.app D/AndroidRuntime: Shutting down VM

例外:

java.lang.VerifyError: Verifier rejected class com.example.app.ProgressClipDrawable due to bad method java.lang.Object com.example.app.ProgressClipDrawable.access$super(com.example.app.ProgressClipDrawable, java.lang.String, java.lang.Object[]) (declaration of 'com.example.app.ProgressClipDrawable' appears in /data/data/com.example.app/files/instant-run/dex/slice-slice_6-classes.dex)

有趣的是Android上的一切正常< 5.我只在运行Android 5.1.1的设备上发生此故障。

提到了一种方法:

java.lang.Object com.example.app.ProgressClipDrawable.access$super(com.example.app.ProgressClipDrawable, java.lang.String, java.lang.Object[])

但我没有这样的签名方法。

可能是什么原因?

1 个答案:

答案 0 :(得分:0)

事实证明,问题出在Gradle插件上。我只需要从1.5.0降级到2.0.0,一切正常。

异常的原因与API 23 ClipDrawable扩展DrawableWrapper的事实有关。在API 23之前,没有DrawableWrapper,而ClipDrawable本身正在扩展Drawable。在我的gradle文件中,我将compileSdkVersion设置为23,但设备使用API​​ 22.但是,我不确定,为什么使用gradle 2.0.0生成一个不起作用的apk。