2010-09-21 18 views
6

Je publie une application Android développée dans Eclipse et, comme indiqué dans le titre, je voudrais intégrer l'obfuscation de Proguard dans la construction, spécifiquement pour l'exportation d'une application signée.Comment configurer ProGuard dans Eclipse lors de l'exportation d'une application Android signée et masquée?

Toute personne a eu un peu de chance sans aller sur le chemin des fourmis?

+0

La réponse à http://stackoverflow.com/a/11351168/2291 décrit les modifications qui ont été mis à jour pour respecter les changements dans le SDK. –

Répondre

3

Ok, c'est le poste le plus pertinent et récent sur le sujet:

http://android-developers.blogspot.com/2010/09/proguard-android-and-licensing-server.html

Il dose utiliser Ant, mais toutes les parties dures sont faites pour vous, et aussi longtemps que vous suivez les instructions , Ça marche. Une note: ne passez pas la mise à jour cela ne fonctionne qu'avec SDK r7 +, et ce n'est pas une mauvaise idée d'exécuter la mise à jour d'eclipse, aussi pour la mise à jour d'AVD.

Et, pour quiconque d'ajouter des pots externes, ProGuards de configuration et procfg.txt ajouter:

-libraryjars {chemin} {} nom_fichier .jar

4

Je voulais aussi le faire sans utiliser Ant ou la commande approche en ligne. Voici ce qui a fonctionné (sur Eclipse + Windows uniquement):.

  • (Vous devez télécharger Proguard Le script prévoit de le trouver ici: C: \ windows-sdk_r04-android \ proguard \ lib \ proguard.jar).

  • Créer un fichier de commandes de Windows, "C: \ windows-sdk_r04-android \ obfusc.bat":


    DEL /S /Q obfuscated 
    MKDIR obfuscated 

    java -jar C:\android-sdk_r04-windows\proguard\lib\proguard.jar @android.pro 

    DEL /S /Q bin\com\ 
    DEL /S /Q bin\org\ 

    ROBOCOPY obfuscated\com bin\com /S 
  • Dans Eclipse, afficher la page de propriétés de votre Android projet, sélectionnez le volet "Builders" et ajoutez un nouveau constructeur de type "Program". Dans le champ "Emplacement" de l'onglet principal, mettez le chemin absolu du script à l'étape précédente. Dans le champ "Répertoire de travail", mettez la variable $ {build_project}. Dans l'onglet "Options de construction", sélectionnez "Après un nettoyage" sous "Exécuter le générateur".

  • Assurez-vous que cet outil de construction est à côté de durer, juste avant le constructeur de package Android.

  • Créer un fichier de configuration PROGUARD dans le dossier racine du projet Android. Je les personnalise légèrement et les inclue dans le contrôle des révisions, mais c'est à vous de décider. Le fichier que je l'utilise est appelé « android.pro », comme le nom dans le script, et est similaire à la configuration dans le dev blog mais inclut un en-tête avec injar, outjar et déclarations libraryjar, par exemple:


    -injars  bin(!.svn/**) 
    -outjars  obfuscated 
    -libraryjars C:\android-sdk_r04-windows\android-sdk-windows\platforms\android-1.6\android.jar 
    -libraryjars C:\GoogleAnalyticsAndroid_0.7\libGoogleAnalytics.jar 

    -optimizationpasses 5 
    -dontusemixedcaseclassnames 
    -dontskipnonpubliclibraryclasses 
    -dontpreverify 
    -verbose 
    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

    -printmapping proguard.map 
    -keepattributes SourceFile,LineNumberTable 

    -keep public class * extends android.app.Activity 
    -keep public class * extends android.app.Application 
    -keep public class * extends android.app.Service 
    -keep public class * extends android.content.BroadcastReceiver 
    -keep public class * extends android.content.ContentProvider 
    -keep public class com.android.vending.licensing.ILicensingService 

    -keepclasseswithmembernames class * { 
     native ; 
    } 

    -keepclasseswithmembernames class * { 
     public (android.content.Context, android.util.AttributeSet); 
    } 

    -keepclasseswithmembernames class * { 
     public (android.content.Context, android.util.AttributeSet, int); 
    } 

    -keepclassmembers enum * { 
     public static **[] values(); 
     public static ** valueOf(java.lang.String); 
    } 
  • Vous devez conserver ce générateur désactivé la plupart du temps. Quand il est temps de tester ou d'exporter un APK obfusqué, allumez-le, puis effectuez un "Projet> Clean" à partir d'Eclipse, y compris le projet et tous les projets de bibliothèque dont il dépend.

Je pense que c'est à ce sujet.

+0

Est-il encore nécessaire aujourd'hui avec le nouveau SDK Eclipse et Android? – Yar

+1

Alors, où l'apk obfusqué est-il stocké après toutes les étapes? – EnthuDeveloper

1

Si vous utilisez Eclipse juste décommenter la ligne project.properties

# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): 
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt