2016-07-21 5 views
2

Dies ist vielleicht zu weit gefasst, aber ich würde gerne eine Erklärung dazu erhalten, wie Proguard- und Minifikationskonfigurationen zwischen Projekten und ihren Abhängigkeiten übergeben werden, um zu verstehen, wie tief diese Operationen in der Abhängigkeitsstruktur meines Projekts vorgenommen werden.Gradle - Sind Proguard-Konfigurationen geerbt?

Ich habe auf build.gradle von `themodule ':

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

Durch die Konfiguration scheint es klar, dass die Klassen innerhalb themodule wird minifyed und verschleiert werden, aber was ist mit den Klassen der someothermodule geschieht? Werden sie auch verkleinert und verschleiert? Auch wenn someothermoduleminifyEnabled true hat?

Was passiert, wenn 'someothermodule' nur eine .jar-Abhängigkeit ist?

Was passiert mit den Konfigurationen von some.maven.central.library?

Werden die Proguard-Konfigurationen des zu erstellenden Moduls in seine Abhängigkeiten herunterkaskadiert oder folgt jeder seiner eigenen Regeln?

Antwort

2

Technisch ist es folgendes:

Bibliotheksprojekte von selbst laufen nicht ProGuard, so dass sie nicht jede Konfiguration verwenden.

Anwendungsprojekte verschleiern die gesamte Codebasis, einschließlich aller referenzierten Bibliotheken, so dass sie die richtige Konfiguration für den Anwendungscode und für den Bibliothekscode benötigen.

Ich hatte einen kleinen Fall, wo ich eine Facebook-Bibliothek als gradle Abhängigkeit hatte und da wir den Code mit minifyEnabled:true Verschleiern wurden, hatten wir vor einer verschleierten all seinen Code zu halten, die regelmäßigen Unterhalt commmands mit wie:

-keep class com.facebook.** { *; } 

Zusätzlich und in Bezug auf die .jar-Verschleierung, können Sie this other post

Grüße überprüfen,

2

Wenn ein Modul g und verschleiert (minifyEnabled true) von sich aus, wird die verwendete Konfiguration nicht automatisch vom verbrauchenden Modul geerbt (in Ihrem Fall die Anwendung).

Es gibt einen Mechanismus im Android gradle Plugin dies aktiviert:

consumerProguardFiles 'proguard-rules.pro' 

Die Regeln, die in proguard-rules.pro enthalten sind, werden automatisch in das Anwendungsprojekt einbezogen werden und fusionierte mit anderen Konfigurationsdateien.

Dies funktioniert nur für Android-Bibliotheksprojekte (.aar). Wenn Sie beispielsweise eine Abhängigkeit zu einer .jar Datei unter maven central haben, sind keine solchen Verbraucherregeln verfügbar, und Sie müssen die erforderliche Konfiguration selbst zu Ihrem Anwendungsprojekt hinzufügen.

Beachten Sie, dass die Konfiguration zum Verschleiern eines Moduls und die von der konsumierenden Anwendung/Modul verwendete Konfiguration nicht identisch sein muss.Die Verbraucherregeln werden in den meisten Fällen nur eine Reihe von -keep Regeln sein.