web-dev-qa-db-ja.com

Android AnnotationProcessorへの移行によるGradleプラグインの更新後にデータバインディングのビルドが失敗する

  • Android StudioのバージョンでInstant Runをサポートするには、Gradleプラグインをアップグレードする必要がありますバージョン2.2.3から2.3.3
  • 私は annoationProcessorに移行する であることに気づいています。そのガイドに正しく従っていると思います
  • そうした後、Android DataBindingコード生成が失敗します

以前にリンクされた移行ガイドでは、必要なのは

  • Android Gradle 2.2プラグイン以降であることを確認してください
  • ビルドスクリプトからAndroid-aptプラグインを削除する
  • すべてのapt、androidTestAptおよびtestAptの依存関係を新しい形式に変更します

これで、プロジェクトを正常にビルドするために必要なことはすべて完了したはずです。しかし、それは構築されません。

ビルド出力

Gradleビルドは12秒481ミリ秒で101個のエラーと23個の警告で終了しました

すべてのエラーは同じパターンに従います。

  • C:\ Users ...\FooAdapter.Java
    • エラー:パッケージcom.example.app.databinding 存在しません
    • エラー:シンボルクラスItemFooBindingが見つかりません

興味深いメッセージがビルドコンソールにあります。

警告:次のオプションはどのプロセッサでも認識されませんでした: '[Android.databinding.minApi、Android.databinding.enableDebugLogs、Android.databinding.sdkDir、Android.databinding.bindingBuildFolder、Android.databinding.enableForTests、Android.databinding.modulePackage、 Android.databinding.generationalFileOutDir、Android.databinding.xmlOutDir、Android.databinding.artifactType、Android.databinding.printEncodedErrors、Android.databinding.isTestVariant] '

指摘したいのですが...

  • 一部のXMLファイル、バインディング式、または命名の問題でエラーはないと思います。古いGradleプラグインバージョン(および他のすべてのソースファイルが最新)でGitブランチに戻ると、同じソースセットとXMLビルド
  • ここ で説明したように、出力ビルドエラーの制限を増やしましたが、これは現時点では関係がないようです。 :)

追加情報

次の差分は、gradleファイルをどのように変更したかを示しています。

  1. build.gradleDiffCheckerリンク
  2. app/build.gradleDiffCheckerリンク

また、簡単な概要として、プロジェクトで使用される「より興味深い」プラグインとライブラリの一部を次に示します。

  • コトリン
  • Android DataBinding
  • レルム
  • 後付け
  • 短剣
  • バターナイフ(知っています...)
  • Multidexサポートライブラリ

誰かが問題になる可能性のある手掛かりを持っていますか?ヘルプやアイデアは大いに賞賛されます!

10
oli.G

すべてがKotlinを使用した私のプロジェクトに帰着しているようです。実際には混合しています:一部のクラスはプレーンな古いJava=を使用していますが、他のクラスはKotlinで記述されています。不完全な移行です。)

Kotlinがなければ、aptannotationProcessorで置き換えるだけで十分であり、この問題にまったく遭遇しなかったと思います。

解決

注釈はannotationProcessorkaptの両方で処理する必要があります。これは、Kotlin独自の注釈プロセッサのようです。

アノテーションを使用するGradleの依存関係ごとに、アプリレベルで次のbothが必要ですbuild.gradle

  • annotationProcessor 'com.example.my.library:x.y.z
  • kapt 'com.example.my.library:x.y.z
1
oli.G

まったく同じ警告が出ました。 Gradleのこの行は問題を解決しました:

kapt "com.Android.databinding:compiler:3.0.1"

うまくいけば、それは誰かを助けるでしょう

更新:
3.0.1Androidプラグインバージョン です。

14
kristyna

この場合のように、データバインディングに関する無数のビルドエラーが表示される場合、問題は通常、別の場所にあります。データバインディングは、無関係なビルドの問題によってそのトラックで停止し、非常に大きな不平を言います。これに対処する唯一の方法は、データバインディングに関連付けられていないビルドエラーを見つけることです。それらが修正されると、データバインディングは再びその動作を実行し、無音になります。残念ながら、すべての非データバインディング問題が見つかるまで、このアプローチを数回繰り返す必要があります。これは確かに骨の折れる作業ですが、残念ながら、Googleがより健全なビルド環境を提供できるようになるまで、他にできることはありません。

これが、ビルドエラーの制限を100を超えて増やすことをお勧めする理由です。通常、問題の原因となっている実際のエラーはリストの最初に表示されないため、表示されません。

推測される可能性があります-Dagger 2はこの問題を引き起こす一般的な原因であり、annotationProcessorの変更に関連している可能性があります。だからダガーエラーを探してください。しかし、あなたの問題は、あなたが言及した他の注釈プロセッサのような他のものによって引き起こされる可能性があります-ビルドエラーをこまめに掘り下げるまで、あなたは確かにわかりません。

2
Uli