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:
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:
Aidez-moi, s'il vous plaît. :(
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:
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.
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.
Allez à Variante de construction dans le panneau de gauche et sélectionnez la construction dans le menu déroulant.
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
NB: maintenant au lieu de
runProguard false
vous aurez besoin d'utiliser
minifyEnabled false
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'
}
}
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>; }
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!