2015-06-11 16 views
5

miei progetti build.gradle assomiglia seguente:Proguard - utilizzare anche i file Proguard dai moduli

android { 
    compileSdkVersion 22 
    buildToolsVersion "22.0.1" 

    defaultConfig { 
     applicationId "..." 
     minSdkVersion 15 
     targetSdkVersion 22 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile project(':androKnife') 
} 

E il mio modulo androKnife non disponga di un proprio file di Proguard. Come posso far sì che il mio progetto principale usi anche questo file?

C'è un modo per unire automaticamente tutti i file proguard di tutti i moduli, se compilo un progetto? C'è un altro modo in cui un modulo può specificare le sue regole proguard e un progetto può ereditarlo?

risposta

11

La soluzione è aggiungere seguente riga alle librerie build.gradle: consumerProguardFiles 'proguard-rules.pro'

Quindi la mia biblioteca androKnife si presenta come segue:

apply plugin: 'com.android.library' 

android { 
    compileSdkVersion 22 
    buildToolsVersion "22.0.1" 

    defaultConfig { 
     minSdkVersion 15 
     targetSdkVersion 22 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
      consumerProguardFiles 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 

    ... 
} 
+0

Questo funziona anche per una dipendenza AAR? –

0

Quindi, codice principale del modulo proguard, piace questo:

buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 
               'main_proguard-rules.pro' 
     } 
    } 

Chi conosce il principio della relazione interna di proguardFiles? Auto unione o Overrided quando ha lo stesso codice proguard?