2017-04-30 9 views
0

フィールド名が特定の文字列で始まる場合、ProGuardによって特定のクラスフィールドを変更しないでください。現在、私はすべてのフィールドを保持するように設定していますが、保持するように修正したいと考えていますすべて公開&保護フィールドと、この文字列で始まるプライベートフィールドのみです。ProGuardを使用して、クラスフィールドをワイルドカードで保持する

これは私のpom.xmlの現在の設定です:私は次のことを試してみました

<option>-keepclassmembers class com.my.package.** { &lt;fields&gt;; }</option> 

、および同様の変種:

<option>-keepclassmembers class com.my.package.** { public *; protected *; private string***; }</option> 

しかしProGuardのは、エラーをスローは(正常に動作したとき、私だけ「*プライベート;」を使用):

[proguard] Error: Expecting class member name before ';' in argument number 39 

私はどちらか間違ってワイルドカードを使用していますか、これはできません推測しています 終わり?私はProGuardサイトの使用法/例のセクションとGoogleを通じた他の例を調べていますが、通常はフィールドの完全な定義が必要な場合があります(プライベートfinal String stringVariable)が、私は100%確信していません。

答えて

1

パターンはJavaと似ていますが、ワイルドカードを使用しています。あなたは、次を使用することができます。

-keepclassmembers class com.my.package.** { 
    public protected <fields>; 
    private *** string*; 
} 

ワイルドカード<fields>試合全てのフィールド(任意の型、任意の名前)、この場合にのみ、パブリックまたは保護されたフィールドを一致させるに拘束します。

ワイルドカード***は任意の型(プリミティブ型と配列型を含む)に一致し、式string*は 'string'で始まる任意の名前と一致します。この場合、さらにプライベートフィールドに制限されます。

有用な場合は、他の制約を両方の行に追加することができます。たとえば、!staticは非静的フィールドと一致するだけです。

+0

ありがとう、私はこれが私が探しているものだと思います。次の日にそれをテストして結果を得る。 :) – zodac

+0

完全に働いた。乾杯。 :) – zodac

関連する問題