2016-04-14 31 views
0

這是我的擴展ClipDrawable類:無法擴展ClipDrawable:驗證拒絕級Android上的5

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[]) 

但我沒有任何這樣的方法有這樣的簽名。

可能是什麼原因?

回答

0

事實證明,問題出在Gradle插件上。我只需要從2.0.0降級到1.5.0,一切正常。

該例外的原因與API 23 ClipDrawable擴展DrawableWrapper的事實有關。並且在API 23之前沒有DrawableWrapper,而是ClipDrawable本身延伸Drawable。在我的gradle文件中,我將compileSdkVersion設置爲23,但設備使用API​​ 22.不過,我不確定,爲什麼使用gradle 2.0.0會生成一個不起作用的apk ...