私は今数日間本当に奇妙な問題に直面しています...
メインモジュールとライブラリモジュールの2つのモジュールを持つGradleアプリがあります。
これが最初の問題です。ライブラリでminifyEnabledがfalseであっても、難読化されます。それはまったく効果がなく、メインモジュールの設定に依存しているようです。私は今からプロガードを使用していますが、そのような行動を一度も経験したことがありません。
また、ライブラリのproguard-rules.proは完全に無視されているようです。そこで宣言した内容は関係なく、使用されず、結果は常に同じです(結果を表示するために常に逆コンパイルされます)。デフォルト設定では難読化されています。
無効なプロガードファイル名を使用してファイルが変更されているかどうかを確認しましたが、実際には間違った名前のエラーがあり、プロガードファイルの構文エラーについても不平を言っています...
「runProguard」の代わりに「minifyEnabled」を使用することも推奨されているため、Android Studioの更新に何らかの関係があるのかわかりません。
ライブラリのproguard-rules.proも使用するようにproguardを管理するにはどうすればよいですか?
編集:
問題を明確にするためのサンプルプロジェクトを作成しました
ライブラリのプロガード構成
私のライブラリのグラドル:
そして最後にresult私はいつも得ます。 proguard configで何を除外/含めるかは関係ありません
ご覧のとおり、プロガードルールはメインモジュールで非常にうまく機能します。すべきことを行います。しかし、それは私のライブラリを常に完全に難読化します...
また、ライブラリのアクティビティが完全に削除されましたが、これはまったく発生しません。
驚くべきことに、エリックの答えは私にとっても実際に働いています!
もちろん、エリックは彼が何を言っているか知っていますが、私は今日この投稿を見つけるまで、1年以上の間、幸運なしにこれをGradleで自動的に行うきれいな方法を見つけようとしました。
私は他のいくつかのSOスレッドを組み合わせて、このソリューションが動作するようになりました。これは単純化することもできます。ステップ1〜4はオプションですが、今のところは見えません。傷ついた.
/Android-sdk/tools/proguard5.2
/Android-sdk/tools/proguard
〜.../Android-sdk/tools/proguard4.7
ln -s .../Android-sdk/tools/proguard5.2 .../Android-sdk/tools/proguard
Android-sdk/tools/proguard/examples/library.pro
ライブラリプロジェクトフォルダーに名前を変更してproguard-library.pro
proguard-library.pro
とコメントアウト-injars
、-outjars
、-libraryjars
、および-printmapping
行。ライブラリのbuild.gradle
含めるファイル:
defaultConfig {
minifyEnabled true
shrinkResources true
proguardFiles 'proguard-library.pro'
consumerProguardFiles 'proguard-library-consumer.pro'
}
これを微調整して、リリースビルドとデバッグビルドの動作を変えることができます。
proguard-library-consumer.pro
# include in this file any rules you want applied to a
# consumer of this library when it proguards itself.
-dontwarn junit.**
-dontwarn org.junit.**
# Make crash call-stacks debuggable.
-keepnames class ** { *; }
-keepattributes SourceFile,LineNumberTable
私のために働いた唯一のことは、私のライブラリで両方のオプションを定義することです:
release {
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
consumerProguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
ライブラリモジュールで以下を使用して解決しました。
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
consumerProguardFiles 'lib_proguard-rules.pro'