2

私はプロガードを数か月使用してきましたが、今日、次の警告が表示され始めました。

[proguard] Initializing...
[proguard] Warning: com.me.MyFragment: can't find referenced class com.me.MyFragment$1
...

これは問題のあるコードです:

public class MyFragment extends Fragment {
    private static final boolean DEBUG = false;

    public void foo() {
        if (DEBUG) {
            Button btn = new Button();
            btn.setOnClickListener(new OnClickListener() {
                ...
            });
            ...
        }
    }
}

OnClickListener は、欠落している $1 参照です。しかし、DEBUG ブール値が false に設定されている場合は、このコードに触れないでください。そのため、プロガードがここで警告する理由がわかりません。

ブール値フラグを true にすると、proguard は警告なしで正常に実行されます。これがどのように起こっているのでしょうか?

ありがとう

4

1 に答える 1

3

ProGuard は、入力を読み取った後、処理を実行する前にこのエラーを出力します。どうやら、入力には com/me/MyFragment.class が含まれていましたが、匿名の内部クラス com/me/MyFragment$1.class は含まれていませんでした。クリーン ビルドから開始することをお勧めします。次に、ProGuard の前のビルド手順が実行されていることを確認する必要があります: コンパイル、パッケージング... ProGuard に渡される入力を確認できます。

于 2013-06-21T11:19:31.250 に答える