5

(以下のコード) に達するとAVerifyErrorがスローされます。Instant Run を使用していないXpInsetDrawable.create(Drawable, int)場合は発生しません。

Android Studio 2.0.0 と gradle build plugin 2.0.0 を使用しています。SDK 22 でテスト済み。SDK 19 エミュレーターで実行すると、エミュレーター全体が再起動します。

「インスタントランを無効にする」以外の解決策を探しています。

例外(スタック トレース全体は無関係)

Caused by: java.lang.VerifyError:
Verifier rejected class net.xpece.android.support.preference.XpInsetDrawable due to bad method
java.lang.Object net.xpece.android.support.preference.XpInsetDrawable.access$super(
    net.xpece.android.support.preference.XpInsetDrawable,
    java.lang.String,
    java.lang.Object[])
(declaration of 'net.xpece.android.support.preference.XpInsetDrawable'
appears in /data/data/net.xpece.android.support.preference.sample/files/instant-run/dex/slice-slice_7-classe

クラスのソースコード

final class XpInsetDrawable extends InsetDrawable {
    private static final boolean NEEDS_FIXING = Build.VERSION.SDK_INT < 21;

    private final Rect mInset = new Rect();

    public static InsetDrawable create(final Drawable drawable, final int insetLeft, final int insetTop, final int insetRight, final int insetBottom) {
        if (NEEDS_FIXING) {
            return new XpInsetDrawable(drawable, insetLeft, insetTop, insetRight, insetBottom);
        } else {
            return new InsetDrawable(drawable, insetLeft, insetTop, insetRight, insetBottom);
        }
    }

    public static InsetDrawable create(final Drawable drawable, final int inset) {
        if (NEEDS_FIXING) {
            return new XpInsetDrawable(drawable, inset);
        } else {
            return new InsetDrawable(drawable, inset);
        }
    }

    XpInsetDrawable(final Drawable drawable, final int inset) {
        super(drawable, inset);
        mInset.set(inset, inset, inset, inset);
    }

    XpInsetDrawable(final Drawable drawable, final int insetLeft, final int insetTop, final int insetRight, final int insetBottom) {
        super(drawable, insetLeft, insetTop, insetRight, insetBottom);
        mInset.set(insetLeft, insetTop, insetRight, insetBottom);
    }

    @Override
    public int getIntrinsicHeight() {
        return super.getIntrinsicHeight() + mInset.top + mInset.bottom;
    }

    @Override
    public int getIntrinsicWidth() {
        return super.getIntrinsicWidth() + mInset.left + mInset.right;
    }
}
4

1 に答える 1