2017-05-08 3 views
1

J'ai une application Android, je viens de terminer de travailler dessus et je suis prêt à le publier sur PlayStore. Cependant, pour éviter que quelqu'un d'autre ne le décompose directement, j'ai voulu ajouter la couche proguard de sécurité.Android: Comment générer un fichier APK signé avec minifyEnabled

J'ai essayé de générer une signature apk après avoir défini minifyEnabled sur 'true'. Cependant, le studio Android a commencé à montrer plusieurs erreurs, à un moment donné, le compte est allé au-delà de 800 erreurs. J'ai essayé de trouver une solution en ligne et j'ai appris que la principale cause de ce problème pourrait être toutes les bibliothèques tierces que j'avais ajoutées à mon application.

L'une des solutions les plus populaires pour résoudre ce type de problème consistait à ajouter l'attribut -dontwarn ou -keep dans le fichier proguard-rules.txt. Mais, le problème persiste même après avoir essayé de suivre toutes les solutions disponibles en ligne, je suis allé essayer de trouver quelque chose sur youtube mais je n'ai rien eu d'utile. Quelqu'un peut-il m'aider s'il vous plaît. Voici le fichier niveau app Gradel:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.0" 
    defaultConfig { 
     applicationId "com.example.android.jsontutorial" 
     minSdkVersion 16 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner      "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile 'com.android.support:appcompat-v7:25.1.0' 
    compile 'com.android.support:design:25.1.0' 
    compile 'com.android.support:support-v4:25.1.0' 
    compile 'com.android.volley:volley:1.0.0' 
    compile 'com.squareup.picasso:picasso:2.5.2' 
    compile 'com.android.support:recyclerview-v7:25.1.0' 
    compile 'com.android.support:cardview-v7:25.1.0' 
    //compile 'com.google.firebase:firebase-core:10.2.4' 
    compile 'com.google.firebase:firebase-ads:10.0.1' 
    testCompile 'junit:junit:4.12' 
} 
apply plugin: 'com.google.gms.google-services' 
apply plugin: 'com.google.gms.google-services' 

Voici le fichier proguard-rules.txt:

# Add project specific ProGuard rules here. 
# By default, the flags in this file are appended to flags specified 
# in C:\Users\Priyansh\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt 
# You can edit the include path and order by changing the proguardFiles 
# directive in build.gradle. 
# 
# For more details, see 
# http://developer.android.com/guide/developing/tools/proguard.html 

# Add any project specific keep options here: 

# If your project uses WebView with JS, uncomment the following 
# and specify the fully qualified class tvName to the JavaScript interface 
# class: 
#-keepclassmembers class fqcn.of.javascript.interface.for.webview { 
# public *; 
#} 

-dontwarn  com.squareup.picasso.** 
-dontwarn  com.android.support.** 
-dontwarn  com.android.support.** 
-dontwarn  com.android.support.** 
-dontwarn  com.android.volley.** 
-dontwarn  com.android.support.** 
-dontwarn  com.android.support.** 
-dontwarn  com.google.firebase.** 

Voici les informations apparemment utile trouvé dans la console gradle:

Warning: there were 1341 unresolved references to classes or interfaces. 
     You may need to add missing library jars or update their versions. 
     If your code works fine without the missing classes, you can suppress 
     the warnings with '-dontwarn' options. 
     (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass) 
Warning: there were 83 unresolved references to program class members. 
     Your input classes appear to be inconsistent. 
     You may need to recompile the code. 
     (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedprogramclassmember) 

Warning: Exception while processing task java.io.IOException: Please correct the above warnings first. 
:app:transformClassesAndResourcesWithProguardForRelease FAILED 

Si vous vouloir jeter un oeil aux avertissements détaillés puis here.

Quelqu'un peut-il s'il vous plaît m'aider à résoudre ce problème, je sais que, comme toujours, la solution sera trop bêtement simple comme un simple ReBuild, mais, s'il vous plaît aider !!

P.S. J'ai déjà essayé une construction propre complète et reconstruire.

Répondre

2

ajouter à votre proguard-rules.txt:

-keep class java.awt.event.** { *; } 
-keep class org.apache.** { *; } 
-keep class org.gradle.** { *; } 
-keep class groovy.lang.** { *; } 
-keep class javax.swing.** { *; } 

Cela devrait réduire le nombre d'erreurs que vous avez. Ajoutez plus d'instructions keep jusqu'à ce que vous résolviez tous les problèmes.

+1

Merci pour la solution, cela a fonctionné. J'ai également dû ajouter les lignes suivantes: '-ignorewarnings -keep class * { public private *; } ' –