web-dev-qa-db-ja.com

ConsumerProguardFilesとProguardFiles

ライブラリモジュールLaを含むアプリケーションをproguardでビルドしようとしましたが、ライブラリが難読化されていないことに気付きました。理由を理解しようとしていました。現時点では、これは私のbuildTypeでした:

release {
 minifyEnabled false
 useProguard true
 proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
} 

いくつかの検索の後、ConsumerProguardFiles関数に遭遇しました。

公開されたAARに含まれるProGuardルールファイル。

これらのプロガードルールファイルは、AARを使用するアプリケーションプロジェクトで使用されます(ProGuardが有効な場合)。

これにより、AARは縮小または難読化の除外ルールを指定できます。

これは、ライブラリプロジェクトにのみ有効です。これは、アプリケーションプロジェクトでは無視されます。

これで、私のライブラリbuildTypeLaは次のようになります。

release {
 minifyEnabled false
 useProguard true
 consumerProguardFiles 'proguard-rules.pro'
}

そして今、私のライブラリLaはそのプロガードルールを使用しており、ライブラリコードは難読化されています。

だから私の質問は:

1)この異なる動作の理由は何ですか。 ProguardFilesがライブラリの保護ルールを難読化せず、代わりに無視するのはなぜですか?

2)ConsumerProguardFilesが行うことは、ライブラリのルールをメインのアプリケーションプロガードルールとマージすることだと推測しています。この仮定は正しいですか?

3)要するに、アプリケーションにはproguardFilesを使用し、ライブラリにはConsumerProguardFilesを使用します。正しい?

お読みいただきありがとうございます!

20
Peddro

私が理解する限りでは、 minifyEnabled falseは、ProGuardがnotを実行してライブラリモジュールを縮小/難読化することを意味します。ライブラリモジュールは、アプリケーションモジュールで使用される部分をライブラリモジュールが認識できないため、どちらが必要ですか。

代わりに、ライブラリモジュールは関連するプロガードルールをアプリモジュールに(consumerProguardFiles経由で)提供する必要があり、アプリモジュールは独自のルールとライブラリのルールの両方でProGuardを実行し、最終的なアプリケーションAPKを最小化します。

11
Fabian Streitel