web-dev-qa-db-fra.com

Comment utiliser le ProGuard dans Android Studio?

Ceci est mon premier projet dans Android Studio, et le code de mes applications ne sont pas obscurcis . J'utilise cette configuration dans le fichier build.gradle: enter image description here

J'utilise Build> Generate Signed APK ... avec l'option Run Proguard vérifiée . Et, lorsque j'ai testé avec Apk_OneClick.v4.2, mon code est parfaitement lisible:

enter image description here

Aidez-moi, s'il vous plaît. :(

96

Vous n'êtes probablement pas en train de signer la version finale de l'APK via l'assistant de signature. Vous pouvez créer le fichier APK de version à partir de la ligne de commande à l'aide de la commande suivante:

./gradlew assembleRelease

ou vous pouvez choisir la variante de version du Construire des variantes voir et construire à partir de l'interface graphique:

IDE main window showing Build Variants

70
Scott Barta

Vous pouvez configurer votre fichier build.gradle pour l'implémentation de proguard. Cela peut être au niveau du module ou au niveau du projet.

 buildTypes {

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

    }

}

La configuration montrée concerne le niveau de débogage, mais vous pouvez écrire vos propres versions, comme indiqué ci-dessous dans buildTypes:

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

Mieux vaut avoir votre débogage avec minifyEnabled false et productionbuild ainsi que d’autres versions en tant que minifyEnabled true.

Copiez votre fichier proguard-rules.txt à la racine de votre dossier de module ou de projet, comme

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

Vous pouvez modifier le nom de votre fichier comme vous le souhaitez. Après la configuration, utilisez l’une des trois options disponibles pour générer votre construction selon buildType.

  1. Accédez à la tâche de dégradé dans le panneau de droite et recherchez assembleRelease/assemble(#your_defined_buildtype) sous les tâches du module.

  2. Allez à Variante de construction dans le panneau de gauche et sélectionnez la construction dans le menu déroulant.

  3. Accédez au répertoire racine du projet dans l'explorateur de fichiers, ouvrez cmd/terminal et exécutez 

Linux ./gradlew assembleRelease or assemble(#your_defined_buildtype)

Windows gradlew assembleRelease or assemble(#your_defined_buildtype)

Vous pouvez trouver apk dans votre répertoire module/build.

Plus d'informations sur la configuration et l'emplacement des fichiers de proguard sont disponibles sur le lien

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

50
pyus13

NB: maintenant au lieu de 

runProguard false

vous aurez besoin d'utiliser 

minifyEnabled false
39
ViliusK

Essayez de renommer votre fichier 'proguard-rules.txt' en 'proguard-Android.txt' et supprimez la référence à 'proguard-rules.txt' dans votre fichier Gradle. L’appel getDefaultProguardFile(...) fait référence à un autre fichier proguard par défaut, celui fourni par Google et non celui de votre projet. Supprimez donc également ceci, de sorte que le fichier Gradle se lit comme suit:

buildTypes {
    release {
        runProguard true
        proguardFile 'proguard-Android.txt'
    }
}
1
SK9

Voici quelques-unes des règles Proguard les plus courantes que vous devez ajouter dans le fichier proguard-rules.pro in Android Sutdio.

ButterKnife

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

Retrofit

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

OkHttp

 -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.** { *; }

code obscurcissant

-keepclassmembers class com.yourname.models** { <fields>; }
0
Bhavik Nathani

Les autres réponses ici sont d'excellentes références sur l'utilisation de proguard. Cependant, je n'ai jamais vu un problème discuté que je rencontrais qui était un mind bender. Une fois que vous avez généré une version signée .apk, elle est placée dans le dossier /release de votre application, mais mon application avait un apk qui ne se trouvait pas dans le dossier /release. Par conséquent, j'ai passé des heures à décompiler le mauvais apk en me demandant pourquoi mes changements de proguard n'avaient aucun effet. J'espère que cela aide quelqu'un!

0
user4757074