web-dev-qa-db-fra.com

impossible de générer un fichier APK signé à partir de Android studio "Échec de l'exécution pour la tâche ': packageRelease'"

J'utilise Android Studio 1.2.2 et j'ai essayé de générer l'APK avec le paramètre proguard. Mais je ne peux pas le faire et j'ai obtenu un message d'erreur ci-dessous.

"L'exécution a échoué pour la tâche ': packageRelease'.

Impossible de calculer le hachage de /Users/Documents/projectX/app/build/intermediates/classes-proguard/release/classes.jar "

Le réglage de proguard est simple.

-dontshrink
-dontoptimize
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose

Et le fichier gradle est ci-dessous.

apply plugin: 'com.Android.application'
apply plugin: 'com.google.gms.google-services'

Android {
    compileSdkVersion "Google Inc.:Google APIs:22"
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.bientus.cirque.sansotong"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
//        multiDexEnabled true
    }
    buildTypes {
        debug {
            debuggable true
        }

        release {
            minifyEnabled true
            //proguardFiles 'proguard-project.txt', 'proguard.cfg'
            //proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-project.txt', 'proguard.cfg'
            proguardFiles 'proguard-project.txt'
        }
    }
}

dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.Android.support:appcompat-v7:22.0.0'
        compile "com.google.Android.gms:play-services:7.5.0"
//    compile 'com.Android.support:multidex:1.0.0'
}

buildscript {
    repositories {
//        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:1.2.3'
        classpath 'com.google.gms:google-services:1.3.0-beta1'
    }
}

Quelqu'un peut-il donner une idée ou une pensée? Merci beaucoup!

31
김재형

Ajoutez simplement les règles de progression du projet:

-keep public class com.google.Android.gms.**
-dontwarn com.google.Android.gms.**
16
Artemiy

Cela a fonctionné après avoir défini les éléments suivants dans 'proguard-project.txt'. Évidemment, le gradle doit être défini pour ce fichier.

-dontwarn Android.support.v7.**
-keep class Android.support.v7.** { *; }
-keep interface Android.support.v7.** { *; }
10
김재형

Regardez votre sortie de build. Vous pourriez y avoir des avertissements de proguard, comme si vous avez 2 bibliothèques qui partagent une certaine classe (avec des versions potentiellement différentes).

Cela pourrait empêcher proguard de calculer un hachage.

J'ai eu le même problème en ayant à la fois openIAB et opfIAB (tous deux utilisent Amazon et google IAB) dans ma version. La suppression d'une de ces bibliothèques a résolu mon problème

4
Lakedaemon

D'ACCORD! c'est très facile ! étape par étape: build.gradle: minifyEnabled false -> minifyEnabled true proguard-rules.pro: vous devez ajouter les troisièmes bibliothèques que vous utilisez dans votre projet comme piccaso et etc. si vous le faites dans Android studio, il décline ces fichiers.

-dontwarn Android.support.**
-dontwarn com.github.**
-dontwarn com.squareup.picasso.**
-dontwarn com.etsy.Android.grid.**

ça marche :)

3
Shayan amin

J'ai aussi eu le problème et la meilleure façon de le résoudre est: allez dans la console Gradle et voyez où il y a un avertissement, par exemple

Avertissement: com.squareup.picasso.OkHttpDownloader: impossible de trouver la classe référencée com.squareup.okhttp.OkHttpClient

Maintenant, ouvrez le fichier de règles proguard et faites défiler vers le bas et ajoutez la ligne

-dontwarn com.squareup.okhttp.**

Pour toutes les classes manquantes que vous trouvez sur la console Gradle, vous ajoutez essentiellement la ligne

-dontwarn followed by class name 

J'espère que cela fonctionne aussi pour tout le monde. Bonne chance!

1
cherucole