【问题标题】:Android: release version failed due to inability to compute hash?Android:由于无法计算哈希而导致发布版本失败?
【发布时间】:2016-02-05 18:16:22
【问题描述】:

我真的不明白我需要做什么才能使 proguard 可以减小 apk 的大小。我发布的应用程序使用的是 Google Maps API v2,到目前为止,它工作正常,除了当我尝试生成签名的 APK 时出现此消息。

Error:Execution failed for task ':app:packageRelease'.
> Unable to compute hash of (app path)\app\build\intermediates\classes-proguard\release\classes.jar

我该如何解决这个问题?

分级:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.abcd.efgh"
        minSdkVersion 11
        targetSdkVersion 23
        versionCode 2
        versionName "1.1"
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:23.1.0'
    compile 'com.google.android.gms:play-services:8.1.0'
    compile 'com.android.support:appcompat-v7:23.1.0'
    compile 'com.google.android.gms:play-services-ads:8.1.0'
    compile 'com.google.android.gms:play-services-identity:8.1.0'
    compile 'com.google.android.gms:play-services-gcm:8.1.0'
}

proguard-project.txt

-keep class * extends java.util.ListResourceBundle {
    protected Object[][] getContents();
}

-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
    public static final *** NULL;
}

-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * {
    @com.google.android.gms.common.annotation.KeepName *;
}

-keepnames class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

-keep public class com.google.android.gms.maps.** { *; }
-keep interface com.google.android.gms.maps.** { *; }
-dontwarn com.google.android.gms.**

【问题讨论】:

    标签: android android-studio gradle proguard release


    【解决方案1】:

    我自己修好了。

    首先,我去了 gradle 并确保在 gradle 的这一部分中,

    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
    

    第二个文件名与 proguard 文件同名。

    然后,我将这些内容添加到 proguard 文件的顶部:

    -dontwarn android.support.v7.**
    -keep class android.support.v7.** { *; }
    -keep interface android.support.v7.** { *; }
    -dontwarn android.support.v4.**
    -keep public class com.google.android.gms.* { public *; }
    -dontwarn com.google.android.gms.**
    

    最终导致proguard成功创建发布版本。

    【讨论】:

      猜你喜欢
      • 2015-06-28
      • 2017-10-04
      • 2016-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      相关资源
      最近更新 更多