web-dev-qa-db-ja.com

pro-guards:11.8.xでプロガードパーサーエラーが発生してビルドに失敗する

そのため、デプロイされる最新のplay-servicesにバグがあるようです。誰もこの問題を回避する方法を知っていますか?

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>;
}
46
Brill Pappin

デフォルトのシュリンクが変更されたようです。 ProGuardを有効にするための構成の追加は機能しているようです。

buildTypes {
        release {
            debuggable false
            minifyEnabled true
            useProguard true
            ...
        }
        debug {
            debuggable true
            minifyEnabled true
            useProguard true
            ...
        }
    }
74
Brill Pappin

上記のソリューション(機能する)に加えて、問題はインスタントランにも関連しているようです。インスタントランを無効にすると、build.gradleを変更せずにアプリをビルドできます。おそらく、デフォルトのシュリンクは、インスタントラン用にビルドする場合にのみ変更されています。

11
Carlo Conserva

このソリューションは私を助けました:

まず、app/build.gradleでuseProguardを「true」に変更します

次に、プロガードルールに「-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は機能しますが、コードは難読化されません。

2
Eduard Kornev

インスタント実行を無効にしても、同じエラーでビルドが失敗することに気付きました(デバッグビルドでマルチデックスを回避するためにコードを縮小するために最小化を有効にし、Proguardを無効にした場合)。 Brill Pappin answerに従う場合、デバッグ中にブレークポイントをヒットするには、Instant Runを有効にし(プロンプトに従ってライブラリをインストールする必要があります)。
Google docs で説明されているように、シュリンクを有効にすると、Google Play Play ServicesでInstant Runを使用している場合にのみ機能するようになりました。

1
Will