ライブラリモジュールLa
を含むアプリケーションをproguardでビルドしようとしましたが、ライブラリが難読化されていないことに気付きました。理由を理解しようとしていました。現時点では、これは私のbuildTypeでした:
release {
minifyEnabled false
useProguard true
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
いくつかの検索の後、ConsumerProguardFiles関数に遭遇しました。
公開されたAARに含まれるProGuardルールファイル。
これらのプロガードルールファイルは、AARを使用するアプリケーションプロジェクトで使用されます(ProGuardが有効な場合)。
これにより、AARは縮小または難読化の除外ルールを指定できます。
これは、ライブラリプロジェクトにのみ有効です。これは、アプリケーションプロジェクトでは無視されます。
これで、私のライブラリbuildType
のLa
は次のようになります。
release {
minifyEnabled false
useProguard true
consumerProguardFiles 'proguard-rules.pro'
}
そして今、私のライブラリLa
はそのプロガードルールを使用しており、ライブラリコードは難読化されています。
だから私の質問は:
1)この異なる動作の理由は何ですか。 ProguardFilesがライブラリの保護ルールを難読化せず、代わりに無視するのはなぜですか?
2)ConsumerProguardFilesが行うことは、ライブラリのルールをメインのアプリケーションプロガードルールとマージすることだと推測しています。この仮定は正しいですか?
3)要するに、アプリケーションにはproguardFilesを使用し、ライブラリにはConsumerProguardFilesを使用します。正しい?
お読みいただきありがとうございます!
私が理解する限りでは、 minifyEnabled false
は、ProGuardがnotを実行してライブラリモジュールを縮小/難読化することを意味します。ライブラリモジュールは、アプリケーションモジュールで使用される部分をライブラリモジュールが認識できないため、どちらが必要ですか。
代わりに、ライブラリモジュールは関連するプロガードルールをアプリモジュールに(consumerProguardFiles
経由で)提供する必要があり、アプリモジュールは独自のルールとライブラリのルールの両方でProGuardを実行し、最終的なアプリケーションAPKを最小化します。