Come utilizzare ProGuard in Android Studio?


98

Questo è il mio primo progetto in Android Studio e il codice delle mie app non è offuscato. Sto usando questa configurazione nel file build.gradle: inserisci qui la descrizione dell'immagine

Sto usando Build> Genera APK firmato ... con Run Proguard selezionato. E, quando ho provato usando Apk_OneClick.v4.2, il mio codice è completamente facile da leggere:

inserisci qui la descrizione dell'immagine

Mi aiuti per favore. :(


mostra le tue regole di proguard definite nel file di testo per offuscare il codice.
pyus13

Come verificare se l'app è offuscata o meno?
VVB

@VVB dal file APK di ingegneria inversa immagino: D
hotHead

Risposte:


71

Probabilmente non stai effettivamente firmando la build di rilascio dell'APK tramite la procedura guidata di firma. Puoi creare l'APK di rilascio dalla riga di comando con il comando:

./gradlew assembleRelease

oppure puoi scegliere la variante di rilascio dalla vista Build Variants e crearla dalla GUI:

Finestra principale dell'IDE che mostra le varianti di build


Grande! Ho provato a modificare il debug in runProguard true e funziona perfettamente. Ora ho letto la tua risposta e funziona !!!! Grande uomo! Grazie.
Felipe Porge Xavier

Oops, ho accidentalmente inserito "assembleDebug" invece di "assembleRelease" nelle istruzioni della riga di comando. Ho corretto la mia risposta.
Scott Barta

Qual è il percorso del file .apk che viene esportato tramite riga di comando?
Shajeel Afzal

50

Puoi configurare il tuo file build.gradle per l'implementazione di proguard. Può essere a livello di modulo o di progetto.

 buildTypes {

    debug {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'

    }

}

La configurazione mostrata è per il livello di debug ma puoi scrivere i tuoi gusti di build come mostrato di seguito all'interno di buildTypes:

    myproductionbuild{
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }

Meglio avere il tuo debug con minifyEnabled falsee productionbuild e altre build come minifyEnabled true.

Copia il tuo file proguard-rules.txt nella radice del tuo modulo o nella cartella del progetto come

$YOUR_PROJECT_DIR\YoutProject\yourmodule\proguard-rules.txt

Puoi cambiare il nome del tuo file come vuoi. Dopo la configurazione, utilizza una delle tre opzioni disponibili per generare la build secondo buildType

  1. Vai a gradle task nel pannello di destra e cerca assembleRelease/assemble(#your_defined_buildtype)sotto le attività del modulo

  2. Vai a Build Variant nel pannello di sinistra e seleziona la build dal menu a discesa

  3. Vai alla directory principale del progetto in Esplora file e apri cmd / terminal ed esegui

Linux ./gradlew assembleRelease or assemble(#your_defined_buildtype)

finestre gradlew assembleRelease or assemble(#your_defined_buildtype)

Puoi trovare apk nella tua directory module / build.

Ulteriori informazioni sulla posizione dei file di configurazione e proguard sono disponibili al collegamento

http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Running-ProGuard


Dove posso dire di utilizzare myproductionbuild?
Felipe Porge Xavier

sì, hai ragione :) puoi vedere lo stesso nella scheda Variante di build sul pannello di sinistra.
pyus13

Ma apk non ha offuscato ... :(
Felipe Porge Xavier

hai scritto la configurazione in proguard-rule.txt vedi alcuni esempi qui proguard.sourceforge.net/index.html#manual/examples.html
pyus13

Sto avendo metodo Gradle DSL runProguard () non trovato.
Sleep: non il

41

NB .: Adesso invece di

runProguard false

dovrai usare

minifyEnabled false

5
suppongo che dovrebbe essere impostato su true
anna_manzhula

1

Prova a rinominare il tuo file "proguard-rules.txt" in "proguard-android.txt" e rimuovi il riferimento a "proguard-rules.txt" nel file gradle. La getDefaultProguardFile(...)chiamata fa riferimento a un file proguard predefinito diverso, uno fornito da Google e non quello nel tuo progetto. Quindi rimuovi anche questo, in modo che qui il file gradle legga:

buildTypes {
    release {
        runProguard true
        proguardFile 'proguard-android.txt'
    }
}

Non lavorare per me. Ho inserito il mio proguard-android.txt personalizzato nella stessa directory di proguard-rules.txt, ma non è cambiato nulla nel mio codice.
Felipe Porge Xavier

0

Le altre risposte qui sono ottimi riferimenti sull'uso di proguard. Tuttavia, non ho visto un problema discusso in cui mi sono imbattuto che sia stato un disastro. Dopo aver generato una versione firmata .apk, viene inserita nella /releasecartella della tua app ma la mia app aveva un apk che non era nella /releasecartella. Quindi, ho passato ore a decompilare l'apk sbagliato chiedendomi perché i miei cambiamenti di proguard non avevano alcun effetto. Spero che questo aiuti qualcuno!


0

Ecco alcune delle regole Proguard più comuni che devi aggiungere nel file proguard-rules.pro in Android Sutdio.

Coltello da burro

 -keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
 -keepclasseswithmembernames class * {
        @butterknife.* <fields>;
  }
 -keepclasseswithmembernames class * {
        @butterknife.* <methods>;
  }

Ammodernamento

 -dontwarn retrofit.**
 -keep class retrofit.** { *; }
 -keepattributes Signature
 -keepattributes Exceptions

OkHttp3

 -keepattributes Signature
 -keepattributes *Annotation*
 -keep class okhttp3.** { *; }
 -keep interface okhttp3.** { *; }
 -dontwarn okhttp3.** 
 -keep class sun.misc.Unsafe { *; }
 -dontwarn java.nio.file.*
 -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 

Gson

 -keep class sun.misc.Unsafe { *; }
 -keep class com.google.gson.stream.** { *; }

Offuscamento del codice

-keepclassmembers class com.yourname.models** { <fields>; }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.