77 votes

Est-il possible d'utiliser proguard en mode débogage ?

Dans mon application Android, je veux tester certaines fonctionnalités avec proguard activé.

Je n'ai pas vraiment besoin de le "déboguer", mais je veux que proguard s'exécute lorsque j'appuie sur "run" dans eclipse. Je ne veux pas exporter le binaire à chaque fois (donc en mode release), le sauvegarder en tant qu'apk et l'envoyer sur le périphérique pour le tester.

Y a-t-il un moyen de faire fonctionner proguard de cette manière ?

Mise à jour :

Il semble que cela soit possible si vous êtes pas en utilisant Eclipse ; comme le titre de la question n'inclut pas Eclipse, il y a plusieurs réponses correctes à cette question.

1 votes

Vous devriez peut-être modifier la réponse acceptée ici, puisque tout le monde, y compris le posteur, reconnaît qu'elle est fausse mais ne la supprime pas.

0 votes

Tank you. Je vais mettre à jour la question. La réponse actuelle est correcte pour Eclipse, mais le titre de la question n'inclut pas Eclipse. Les autres réponses sont correctes pour les IDE autres qu'Eclipse.

73voto

MrMaffen Points 454

Si vous souhaitez faciliter l'ensemble du processus de construction, vous devez passer à gradle et à l'IDE Android Studio.

Alors vous pourriez facilement ajouter ce qui suit à votre fichier build.gradle pour exécuter ProGuard :

android {
    buildTypes {
        release {
        }
        debug {
            minifyEnabled true
            proguardFile 'proguard-android.txt'
            zipAlignEnabled true
        }
    }
}

Cela va exécuter ProGuard sur votre build de débogage, configuré avec le fichier "proguard-Android.txt", qui devrait être mis dans le dossier racine de votre projet. Et en plus votre apk est aligné par zip (Enlevez juste "zipAlignEnabled true", si vous ne voulez pas que cela arrive). Si vous voulez faire la même chose pour votre release, ajoutez simplement ces trois lignes sous "release".

Légèrement hors sujet : Des choses comme l'ajout de dépendances, la signature de votre apk ou l'ajout d'autres tâches personnalisées à votre processus de construction sont également beaucoup plus simples avec gradle. De plus, vous pourrez non seulement construire votre apk via l'IDE Android Studio, mais aussi via une simple commande sur la ligne de commande (par exemple ./gradlew assembleDebug). Ainsi, si vous travaillez dans une équipe, le processus d'installation pour les nouveaux membres n'est qu'un simple "./gradlew assembleDebug". Sans avoir besoin de configurer l'IDE. L'importation de votre projet, y compris toutes les dépendances, est aussi simple qu'un processus en un clic.

EDIT : A partir de la version 0.14.0 de Gradle Android Build Tools, les noms des propriétés ont changé ( http://tools.Android.com/tech-docs/new-build-system ):

  • BuildType.runProguard -> minifyEnabled
  • BuildType.zipAlign -> zipAlignEnabled

J'ai mis à jour le code ci-dessus.

0 votes

Merci @MrMaffen ! C'est beaucoup plus facile de suivre cette voie.

2 votes

Android Studio aligne automatiquement votre APK. : developer.Android.com/studio/command-line/zipalign.html

45voto

Raghunandan Points 63969

Ancienne réponse :

http://developer.Android.com/tools/help/proguard.html

ProGuard s'exécute uniquement lorsque vous construisez votre application en mode "release", vous n'avez donc pas à vous occuper du code obfusqué lorsque vous construisez votre application en mode "debug".

Lorsque vous construisez votre application en libérer soit en exécutant ant release, soit en utilisant l'assistant d'exportation dans Eclipse, le système de construction vérifie automatiquement si les fichiers de type proguard.config est définie. Si c'est le cas, ProGuard traite automatiquement le bytecode de l'application avant d'empaqueter le tout dans un fichier de type .apk fichier. La construction en mode débogage n'invoque pas ProGuard, car cela rend le débogage plus lourd.

Mise à jour : 13-3-2016

C'est possible avec le nouveau système de construction gradle. Vous devez définir minifyEnabled a true dans votre build.gradle fichier. Généralement, pro-guard est exécuté dans libérer mode. D'autres options sont disponibles, comme la réduction des ressources. Vous pouvez trouver des informations utiles @ http://tools.Android.com/tech-docs/new-build-system

Jetez également un coup d'œil à @

http://developer.Android.com/tools/building/configuring-gradle.html

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

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

5 votes

Mais existe-t-il un moyen ? J'accepte que ce soit lourd. Je n'ai pas besoin du code obfusqué mais j'utiliserai la puissance de traitement de proguard pour dépouiller les fonctions de log, etc. en fonction de son fichier de configuration.

0 votes

@frankish d'après ce que dit le médecin, c'est non. Cependant je ne connais pas de moyen alternatif. Citation de la doc "ProGuard s'exécute seulement quand vous construisez votre application en mode release". Selon cette déclaration, c'est un non direct.

10 votes

Vous devriez supprimer votre réponse, soyez juste envers les autres. C'est trompeur.

11voto

Joseph Johnson Points 2093

En ce qui concerne les constructions Ant personnalisées (et sur la base de la réponse de Victor), ajouter ce qui suit à mon fichier build.xml fonctionne pour moi :

<target name="-debug-obfuscation-check">
    <!-- enable proguard even in debug mode -->
    <property name="proguard.enabled" value="true"/>

    <!-- Secondary dx input (jar files) is empty since all the jar files will be in the obfuscated jar -->
    <path id="out.dex.jar.input.ref" />
</target>

Notez que j'ai dû remplacer (en fait, prédéfinir) le fichier out.dex.jar.input.ref ; sinon, l'exécution ultérieure de dx tentera de fusionner des fichiers jar non conjoints et lancera l'exception DexException : Plusieurs fichiers dex définissent Xxx.

7voto

Victor Ionescu Points 854

C'est possible si vous construisez avec Ant. Voir Construction personnalisée d'Android à l'aide de Ant sur la façon de construire votre projet avec ant. Ensuite, il suffit de remplacer dans le build.xml du projet la cible "-debug-obfuscation-check" et de mettre proguard.enabled à true :

<target name="-debug-obfuscation-check">
    <!-- proguard is never enabled in debug mode -->
    <property name="proguard.enabled" value="true"/>
</target>

1 votes

Merci ! Cela a presque fonctionné pour moi. J'ai ajouté une nouvelle réponse qui est basée sur la vôtre.

0voto

sealskej Points 2356

Avec Android Studio, vous pouvez utiliser -dontobfuscate dans votre fichier de règles Proguard et le débogueur fonctionnera bien. Je ne suis pas sûr que cela fonctionne également avec Eclipe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X