在 play-services:11.8.x 上构建失败,出现 pro guard 解析器错误
build failing on play-services:11.8.x with pro guard parser error
看来要部署的最新播放服务有bug。
有谁知道如何解决这个问题?
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>;
}
默认的收缩器似乎已经改变了。添加配置以打开 ProGuard 似乎有效。
buildTypes {
release {
debuggable false
minifyEnabled true
useProguard true
...
}
debug {
debuggable true
minifyEnabled true
useProguard true
...
}
}
除了上述解决方案(有效)之外:该问题似乎也与 Instant 运行 有关。
如果您禁用 Instant 运行,您可以在不更改 build.gradle 的情况下构建您的应用程序。
可能只有在为 Instant 运行.
构建时,默认收缩器才发生变化
我注意到,如果您禁用 Instant 运行,构建仍然会失败并出现相同的错误(如果您启用了 minify 但禁用了 Proguard 以收缩代码以避免在调试构建中使用 multi-dex)。如果您遵循 答案,您必须启用 Instant 运行(并按提示安装库)以在调试时命中任何断点。
似乎启用 Google docs 中描述的收缩器现在仅在您将 Instant 运行 与 Google Play Play 服务一起使用时才有效。
这个解决方案帮助了我:
首先,在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
因此,缩小会起作用,但代码不会混淆。
看来要部署的最新播放服务有bug。 有谁知道如何解决这个问题?
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>;
}
默认的收缩器似乎已经改变了。添加配置以打开 ProGuard 似乎有效。
buildTypes {
release {
debuggable false
minifyEnabled true
useProguard true
...
}
debug {
debuggable true
minifyEnabled true
useProguard true
...
}
}
除了上述解决方案(有效)之外:该问题似乎也与 Instant 运行 有关。 如果您禁用 Instant 运行,您可以在不更改 build.gradle 的情况下构建您的应用程序。 可能只有在为 Instant 运行.
构建时,默认收缩器才发生变化我注意到,如果您禁用 Instant 运行,构建仍然会失败并出现相同的错误(如果您启用了 minify 但禁用了 Proguard 以收缩代码以避免在调试构建中使用 multi-dex)。如果您遵循
似乎启用 Google docs 中描述的收缩器现在仅在您将 Instant 运行 与 Google Play Play 服务一起使用时才有效。
这个解决方案帮助了我:
首先,在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
因此,缩小会起作用,但代码不会混淆。