2016-07-21 12 views
2

これは広すぎるかもしれませんが、プロジェクトとその依存関係の間でProguardとミニネーションの設定がどのように渡され、プロジェクトの依存関係ツリーでこれらの操作がどれくらい深く行われたかを理解したいと思います。私は `themodule"のbuild.gradleに持ってGradle - プロガード設定は継承されていますか?

buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
     } 
dependencies { 
    compile project(':someothermodule') 
    compile 'some.maven.central.library' 
} 

構成とすることにより、themodule内部クラスはminifyedと難読化されることが明らかに見えますが、何がsomeothermoduleのクラスとどうなりますか?彼らはまた、小型化され難読化されるだろうか? someothermoduleminifyEnabled trueがあっても?

'someothermodule'が.jar依存関係の場合はどうなりますか?

some.maven.central.libraryの設定はどうなりますか?

モジュールのProguard構成は、その依存関係までカスケード接続されているか、それぞれが独自のルールに従っていますか?

答えて

2

技術的には、次のようになります。それだけで

ライブラリプロジェクトは、ProGuardのを実行しないので、彼らは 任意の構成を使用しないでください。

アプリケーションプロジェクトは 参照ライブラリを含め、コードベース全体を難読化するため、 アプリケーションコードとライブラリコードの適切な設定が必要です。

私は、次のような定期的なキープのcommmands使用して、私はGradleの依存関係としてFacebookのライブラリを持っていて、私達はminifyEnabled:trueでコードを難読化されて以来、我々は難読化されることから、そのすべてのコードを維持するために持っていた小さなケースを持っていた:

を さらに
-keep class com.facebook.** { *; } 

、との.jar難読化について、あなたはモジュールgの場合this other post

よろしく、

2

を確認することができます(minifyEnabled true)それ自体では、消費されたモジュール(あなたの場合はアプリケーション)によって使用された設定が自動的に継承されることはありません。

consumerProguardFiles 'proguard-rules.pro' 

proguard-rules.proに含まれているルールは、自動的にアプリケーションプロジェクトに含まれ、他の設定ファイルとマージされます。

はこれを有効にするには、AndroidのGradleプラグインメカニズムがあります。

これはAndroidライブラリプロジェクト(.aar)でのみ動作します。例えばmaven central.jarファイルへの依存関係がある場合、このようなコンシューマールールは利用できず、アプリケーションプロジェクトに必要な設定を自分で追加する必要があります。

モジュールを難読化する構成と、消費するアプリケーション/モジュールで使用される構成が同一である必要はありません。消費者ルールは、多くの場合、-keepルールのセットのみである。

関連する問題