web-dev-qa-db-ja.com

Android Studio Desugar:デバッグ用のDesugarを使用したクラスの変換が失敗する

私のAndroid Studioプロジェクトは最近正しくビルドを停止しました。この問題の原因はわかりません。

これが私が試したものです

  • 異なるAndroid Studioのバージョンでプロジェクトをビルドしようとしました、つまり安定した異なるCanaryチャンネルバージョン、変更なし
  • 私はSDKのバージョンを変更しました。私のプロジェクトはSDK 26で正しくビルドされましたが、SDK 27ではビルドされません
  • 私はビルドツールとGradleバージョンを交換しました、私のプロジェクトはGradleプラグインで正しくビルドされました3.1.0-alpha2およびビルドツールのバージョン26.0.2。私はたくさん試しました
  • Androidで "Clean Project" "Invalidate Caches"...関数を使用しました=スタジオ数え切れないほどの時間
  • ビルドフォルダーを削除しました
  • Proguardのオンとオフを切り替えました
  • ライブラリの問題を修正しようとしましたが、すべて解決しませんでした

私は実際にすべてを以前に正常に使用した設定と私の同様の設定の他のプロジェクトうまく構築します。

完全なエラーコード:

Error:Java.lang.RuntimeException: com.Android.build.api.transform.TransformException: Java.lang.RuntimeException: Java.lang.RuntimeException: com.Android.ide.common.process.ProcessException: Error while executing Java process with main class com.google.devtools.build.Android.desugar.Desugar with arguments {@...\app\build\intermediates\tmp\desugar_args165654356027684238}

Error:com.Android.build.api.transform.TransformException: Java.lang.RuntimeException: Java.lang.RuntimeException: com.Android.ide.common.process.ProcessException: Error while executing Java process with main class com.google.devtools.build.Android.desugar.Desugar with arguments {@...\app\build\intermediates\tmp\desugar_args165654356027684238}
Error:Java.lang.RuntimeException: Java.lang.RuntimeException: com.Android.ide.common.process.ProcessException: Error while executing Java process with main class com.google.devtools.build.Android.desugar.Desugar with arguments {@...\app\build\intermediates\tmp\desugar_args165654356027684238}
Error:Java.lang.RuntimeException: com.Android.ide.common.process.ProcessException: Error while executing Java process with main class com.google.devtools.build.Android.desugar.Desugar with arguments {@...\app\build\intermediates\tmp\desugar_args165654356027684238}
Error:com.Android.ide.common.process.ProcessException: Error while executing Java process with main class com.google.devtools.build.Android.desugar.Desugar with arguments {@...\app\build\intermediates\tmp\desugar_args165654356027684238}

Error:org.gradle.process.internal.ExecException: Process 'command '...\jre\bin\Java.exe'' finished with non-zero exit value 1

問題の説明

私はこの問題を何ができるか(have)cause(d)を知る手がかりがなく、次に何を試すかについて無知です。それが私があなたに助けを求めている理由です。誰かが私が見つけた以外の助けをしてくれることを願っています.

Firebaseにタグを付けましたライブラリは私の問題の重要なポイントかもしれないと思うので、今問題はそれが突然を説明しないことです停止。私はアプリケーションでFirebaseUIを使用し、古い動作する依存関係を試しましたが、Firebaseをアップグレードしてから このガイド を使用して古いUIライブラリと一致させています。私もFirebaseUIを削除しましたが、これでもビルドは成功しませんでした。

私はそれを修正しました(そして 別のKotlin関連の問題 、Androidおよびコンピューターから関連するGradleをすべて完全にワイプし、すべてを最初からインストールします。プロセス全体が拷問でした。 、それで私はまだ迅速な解決策に熱心です。これに何時間も費やしたくありません:)

私にとっては、たまたま私が使用していたLeanplumライブラリのバージョンでした。gradleでエラーを表示することはできませんでしたが、 Desugar sourcesbazel 、それをビルドしてから、失敗したgradleビルドからコマンドライン引数をコピーすると、2つの異なる難読化された要素間に名前の衝突があるように見えるLeanplum jarが表示されました:

Exception in thread "main" Java.lang.IllegalStateException: Already recorded as class: com/leanplum/a/x
    at com.google.common.base.Preconditions.checkState(Preconditions.Java:582)
    at com.google.devtools.build.Android.desugar.ClassVsInterface.addKnownInterfaces(ClassVsInterface.Java:46)
    at com.google.devtools.build.Android.desugar.InterfaceDesugaring.visit(InterfaceDesugaring.Java:96)
    at org.objectweb.asm.ClassReader.accept(ClassReader.Java:621)
    at org.objectweb.asm.ClassReader.accept(ClassReader.Java:500)
    at com.google.devtools.build.Android.desugar.Desugar.desugarClassesInInput(Desugar.Java:477)
    at com.google.devtools.build.Android.desugar.Desugar.desugarOneInput(Desugar.Java:361)
    at com.google.devtools.build.Android.desugar.Desugar.desugar(Desugar.Java:314)
    at com.google.devtools.build.Android.desugar.Desugar.main(Desugar.Java:711)

Desugarの新しいバージョンの方がエラー報告が優れているので、これは私にとってはうまくいったと思います。

  • bazelのインストール (MacでHomebrewを使用しました)
  • 次に、Desugarの独自バージョンを作成しました(私がバゼルリポジトリのルートから使用したコマンドはbazel build //src/tools/Android/Java/com/google/devtools/build/Android/desugar:Desugar)、
  • そして、失敗したgradleビルドからCLI引数をコピーして貼り付けると、洞察につながります。 (コマンドは次のようになりました:path/to/your/built/Desugar --verbose --input /Users/you/yourApp/app/build/intermediates/transforms/stackFramesFixer/envDev/debug/109.jar .... --desugar_try_with_resources_if_needed --desugar_try_with_resources_omit_runtime_classes

これを検出するには、Desugarに独自のエラーログを追加する必要があると予想していましたが、幸い、それは不要でした。

10
Eric O'Connell

私の場合、問題を引き起こしていたのはJavaバージョンでした。ライブラリにSDK jarを追加したときにエラーが発生し始め、SDKがJavaバージョン1.8と互換性がないことを知りました。 Java 8で更新されたSDK jarで解決されました。

1
puprog

最近、AS 3.1.4とGradle 4.4でも同じ問題が発生しました。私はこの問題の原因を完全には理解していませんでしたが、私にはカスタムモジュールのコンパイルに関連するのようです。

カスタムモジュールを「コンパイル」する代わりにjar依存関係としてインポートすることで解決しました。

簡単に言えば:

  • app.gradleファイルで、次のようにコメント化します:implementation project(path: ':XXX')
  • Open app->Open Module Settings->Dependencyそして、Jarをモジュールの依存関係として追加します
1
Matteo Avanzini

AS 2.3で導入されたビルドキャッシュを使用してクリアしようとしましたか?

たとえば、私のgradle.propertiesは

Android.enableBuildCache=true
Android.buildCacheDir=/tmp/Android-build-cache

と私はクリアする必要がありました/tmp/Android-build-cacheで、同じDesugarエラーを修正しました。

私たちの場合、ビルドマシンでは十分なRAMではありませんでした。

0
wilddev