在播放服务上构建失败:11.8.x与专业防护解析器错误

时间:2017-12-19 18:40:18

标签: android google-play-services android-proguard

所以看起来要部署的最新播放服务中存在一个错误。 有谁知道如何解决这个问题?

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':myappname:transformClassesWithAndroidGradleClassShrinkerForDevelopmentDebug'.
> ProGuard configuration parser error: /Users/myusername/.gradle/caches/transforms-1/files-1.1/play-services-base-11.8.0.aar/d2ad9e16677fda9cf07a1280a66e91ca/proguard.txt line 3:88 no viable alternative at input '<fields>'

更多信息。似乎问题出现在核心模块中:

Error:Execution failed for task ':myappname:transformClassesWithAndroidGradleClassShrinkerForDevelopmentDebug'.
> ProGuard configuration parser error: /Users/myusername/.gradle/caches/transforms-1/files-1.1/play-services-base-11.8.0.aar/d2ad9e16677fda9cf07a1280a66e91ca/proguard.txt line 3:88 no viable alternative at input '<fields>'

编辑: 导致该错误的文件的内容是:

# b/35135904 Ensure that proguard will not strip the mResultGuardian.
-keepclassmembers class com.google.android.gms.common.api.internal.BasePendingResult {
  com.google.android.gms.common.api.internal.BasePendingResult.ReleasableResultGuardian <fields>;
}

4 个答案:

答案 0 :(得分:74)

默认收缩者似乎已经改变了。添加配置以打开ProGuard似乎有效。

buildTypes {
        release {
            debuggable false
            minifyEnabled true
            useProguard true
            ...
        }
        debug {
            debuggable true
            minifyEnabled true
            useProguard true
            ...
        }
    }

答案 1 :(得分:11)

除了上述解决方案(有效)之外:该问题似乎也与Instant Run有关。 如果禁用“即时运行”,则可以在不更改build.gradle的情况下构建应用程序。 可能只有在为Instant Run构建时才会更改默认收缩器。

答案 2 :(得分:2)

这个解决方案帮助了我:

首先,在app / build.gradle中将useProguard更改为'true'

其次,在proguard规则中添加'-dontobfuscate'行

buildTypes {
    release {
        debuggable false
        minifyEnabled true
        useProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'
        ...
    }
    debug {
        debuggable true
        minifyEnabled true
        useProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'
        ...
    }
}

proguard-rules.pro

-dontobfuscate

因此,minify将起作用,但代码不会混淆。

答案 3 :(得分:1)

我注意到如果你禁用了Instant Run,那么构建仍然会失败并出现相同的错误(如果你启用了minify但是Proguard禁用了缩小你的代码以避免调试版本中的多dex)。如果您按照Brill Pappin回答,则必须启用Instant Run(并根据提示安装库)以在调试时点击任何断点。
如果您使用Google Play Play服务使用即时运行,现在只能启用Google docs中所述的收缩器。