web-dev-qa-db-fra.com

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

Dans mon Android app, je souhaite tester certaines fonctionnalités avec proguard.

Je n'ai pas vraiment besoin de le "déboguer", mais je veux que proguard s'exécute lorsque je clique sur Run dans Eclipse. Je ne veux pas exporter le binaire à chaque fois (donc en mode de publication) et l'enregistrer en tant qu'apk et le transférer sur le périphérique à tester.

Est-il possible de lancer proguard de cette façon?

Mise à jour:

Il semble que cela soit possible si vous utilisez not en utilisant Eclipse; Le titre de la question n'incluant pas Eclipse, il existe plusieurs réponses correctes à cette question.

73
frankish

Ancienne réponse:

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

ProGuard ne s'exécute que lorsque vous construisez votre application en mode édition, de sorte que vous n'avez pas à traiter de code obscurci lorsque vous créez votre application en mode débogage.

Lorsque vous générez votre application en mode release, soit en exécutant antil release, soit en utilisant le fichier Export Wizard dans Eclipse, le système de construction vérifie automatiquement si proguard.config propriété est définie. Si tel est le cas, ProGuard traite automatiquement le bytecode de l'application avant de tout compiler dans un fichier . Apk. La génération en mode débogage n'invoque pas ProGuard, car elle rend le débogage plus fastidieux.

Mise à jour: 13-3-2016

C'est possible avec le nouveau système de construction Gradle. Vous devez définir minifyEnabled sur true dans votre fichier build.gradle. En général, Pro-Guard s'exécute en mode release. Il existe d'autres options disponibles, telles que la réduction des ressources. Vous pouvez trouver des informations utiles @ http://tools.Android.com/tech-docs/new-build-system

Regardez aussi @

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'
    }
   }
 }
40
Raghunandan

Si vous souhaitez simplifier le processus de construction dans son intégralité, vous devez basculer vers dégradé et dans Android Studio IDE.

Ensuite, vous pouvez facilement ajouter les éléments suivants à votre fichier build.gradle pour exécuter ProGuard:

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

Ceci exécutera ProGuard sur votre version de débogage, configurée avec le fichier "proguard-Android.txt", qui devrait être placé dans le dossier racine de votre projet. Et en plus, votre apk est en cours d’alignement Zip (Supprimez simplement "zipAlignEnabled true", si vous ne voulez pas que cela se produise). Si vous voulez faire la même chose pour votre version, ajoutez simplement ces trois lignes sous "release".

Légèrement hors sujet: Des choses comme ajouter des dépendances, signer votre apk ou ajouter d'autres tâches personnalisées à votre processus de construction est aussi beaucoup plus simple avec Gradle. En outre, vous pourrez non seulement créer votre apk via Android Studio IDE, mais également via une simple commande sur la ligne de commande (par exemple, ./gradlew assembleDebug). Ainsi, si vous travaillez en équipe, le processus de configuration des nouveaux membres n’est qu’à "./gradlew assembleDebug". Sans avoir besoin d'aucune configuration IDE. Importer votre projet, y compris toutes les dépendances, est aussi simple qu’un processus en un clic

EDIT: à partir de Gradle Android Build Tools version 0.14.0, les noms de propriété 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.

72
MrMaffen

En ce qui concerne les versions Ant personnalisées (et basées sur la réponse de Victor), l’ajout suivant à mon fichier build.xml me convient:

<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 je devais remplacer (en fait, prédéfini) le fichier out.dex.jar.input.ref; sinon, l'exécution ultérieure de dx tentera de fusionner des fichiers jar non-disjoints et lancera l'exception DexException: plusieurs fichiers dex définissent Xxx.

11
Joseph Johnson

C'est possible si vous construisez avec Ant. Voir build personnalisé Android avec Ant pour savoir comment construire votre projet avec ant. Ensuite, remplacez simplement dans le fichier build.xml du projet la cible "-debug-obfuscation-check" et définissez proguard.enabled sur true:

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

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

0
sealskej