【问题标题】:can't generate signed APK from Android studio "Execution failed for task ':packageRelease'"无法从 Android Studio 生成签名的 APK “任务 ':packageRelease' 执行失败”
【发布时间】:2015-09-05 05:38:46
【问题描述】:

我正在使用 Android Studio 1.2.2 并尝试使用 proguard 设置生成 APK。但我不能这样做并收到以下错误消息。

“任务':packageRelease'执行失败。

无法计算 /Users/Documents/projectX/app/build/intermediates/classes-proguard/release/classes.jar 的哈希值

proguard 设置很简单。

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

gradle 文件在下面。

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

任何人都可以提供任何想法或想法吗? 非常感谢!

【问题讨论】:

标签: android gradle proguard


【解决方案1】:

只需添加到项目的 proguard-rules:

-keep public class com.google.android.gms.**
-dontwarn com.google.android.gms.**

【讨论】:

  • 为什么 android.gms 是 OP 问题中的一个因素?
【解决方案2】:

在“proguard-project.txt”中设置以下内容后它工作了。 显然应该为这个文件设置gradle。

-dontwarn android.support.v7.**
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }

【讨论】:

  • 你能帮我解决我面临同样的问题。
【解决方案3】:

查看您的构建输出。您可能会在其中看到 proguard 警告,例如,如果您有 2 个共享某个类的库(可能具有不同的版本)。

这可能会阻止 proguard 计算哈希。

在我的构建中同时使用 openIAB 和 opfIAB(都使用 Amazon 和 google IAB)时,我遇到了同样的问题。删除其中一个库解决了我的问题

【讨论】:

    【解决方案4】:

    好的!它很容易!一步一步来: build.gradle :minifyEnabled false -> minifyEnabled true proguard-rules.pro: 您必须添加您在项目中使用的第三个库,例如 piccaso 等。 如果您在 android studio 中执行此操作,它会拒绝此文件。

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

    它有效:)

    【讨论】:

      【解决方案5】:

      我也遇到了这个问题,解决它的最佳方法是: 转到 gradle 控制台,看看哪里有警告,例如

      警告:com.squareup.picasso.OkHttpDownloader:找不到引用的类 com.squareup.okhttp.OkHttpClient

      现在打开proguard规则文件并滚动到底部并添加行

      -dontwarn com.squareup.okhttp.**
      

      对于您在 gradle 控制台上找到的任何缺少的类,您基本上添加该行

      -dontwarn followed by class name 
      

      希望这也适用于每个人。祝你好运!

      【讨论】:

      • 确保你得到正确的缺失类,类标识在 gradle 控制台的警告中给出
      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 2016-10-19
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      相关资源
      最近更新 更多