2016-04-25 22 views
2

私はこれらの行でいくつかのProGuardの例に会った:なぜProGuardでBuildConfigを保持する必要がありますか?

# Keep the BuildConfig 
-keep class com.example.BuildConfig { *; } 

私は(私のパッケージで、もちろん)とし、このラインなしでアプリを実行したと任意の違いを発見していません。 私は生成された/.../ BuildConfig.javaも見てきましたが、変更はありません。

何が私のBuildConfigをProGuardに保存する必要がありますか?

ありがとうございます!

答えて

1

他のクラスと同様に、リフレクションによって間接的にアクセスする場合は、-keepクラスが必要です。ProGuardはそれを難読化したり、未使用として最適化したりしません。

ほとんどの場合、BuildConfigのアクセスパターンは反射なしで直接的なものなので、その場合はProGuardでBuildConfigを処理しても問題ありません。

+0

私はリフレクションでアクセスしていませんでした(少なくとも賢明ではありません;-)、それをリフレクションから除外しなかったときにはまだ失敗しました。私はそれにGradleを介してparameretsを追加しました。しかし、これは難読化の前に行われるべきなので、私はそれがなぜ失敗したかはわかりません。 – Torge

2

BuildConfigには、コンパイル時に設定されたuseful valuesが含まれています。具体的には次のとおりです。

boolean DEBUG – if the build is debuggable. 
int VERSION_CODE 
String VERSION_NAME 
String APPLICATION_ID 
String BUILD_TYPE – name of the build type, e.g. "release" 
String FLAVOR – name of the flavor, e.g. "paidapp" 

独自の設定値を設定することもできます。テスト用と制作用の異なるURLを使用し、独自のConfig.javaファイルを管理するのではなく、BuildConfigファイルから検索します。これは、そうのようなあなたのGradle buildTypesにbuildConfigFieldsを追加することによって行うことができます。だから、限り、私はあなたがファイルを保存する必要はありません知っているように、あなたの質問に答えるために

buildTypes { 
    debug { 
     buildConfigField "boolean", "SOME_VAR", "true" 
    } 
    release { 
     buildConfigField "boolean", "SOME_VAR", "false" 
    } 
} 

が、それはそうするために良い習慣だとあなたの設定にそれを使用する必要があります。

関連する問題