2013-07-22 12 views
6

Quando si costruisce il mio progetto Android, ho aggiunto il seguente al file build.gradle per abilitare Proguard:Gradle Android accumulo risultante APK contiene sia offuscato e le classi non offuscato

buildTypes { 
    release { 
     runProguard true 
     proguardFile 'proguard-project.txt' 
     proguardFile '../common/proguard-shared.txt' 
     proguardFile getDefaultProguardFile('proguard-android.txt') 
    } 
    } 

Tutto costruisce bene, ma quando Smonto il file dex risultante, si scopre che ci sono entrambi i file offuscati e non-offuscati.

Ad esempio, esistono sia common.Base64 che common.a, il primo è non-offuscato, mentre il secondo è.

Non è sicuro che sia correlato, ma il progetto stesso ha una struttura non tipica. Questo è il risultato del fatto che abbiamo una grande base di codice Android con oltre 40 app Android. Stiamo provando a creare un flusso di build basato sul gradle side-by-side della build basata su Eclipse esistente.

Se tutto va bene, intendiamo cambiare la struttura dei file per essere più gradli nativi, e iniziare a usare aromi e tipi di build per avere via con molte delle librerie che abbiamo creato per ovviare alla mancanza di sapori e simili .

Progetto E sopra si basa su una catena di librerie del genere:

E -> D -> C -> B -> A

esempio Il progetto E dipende dalla libreria D che dipende dalla libreria C ... fino a A.

risposta

7

Dopo aver esaminato questo, ho scoperto che questo è un problema se si crea per la prima volta senza proguard abilitato e quindi si costruisce con esso abilitato. Ciò è dovuto alla modalità incrementale di dex.

È possibile eseguire una generazione pulita dopo aver abilitato proguard e verrà risolto.

Modifica: ho precedentemente indicato che è possibile disattivare la modalità incrementale in dex, ma risulta che in realtà non aiuta!

+0

Funziona, grazie, @Xav!. Qualche modo suggerito di "forzare" la pulizia prima di creare un candidato alla release? – Guy

+2

Funziona '' 'gradle clean assembleRelease'''? –

+0

@ThuyTrinh lo fa. Assicurati di fare il "clean" per tutte le dipendenze (ad esempio se hai un progetto multi-modulo, prima pulisci la root e poi assemblaRilascia il sottomodulo che ti serve). – Guy