Android Studio for my Androidプロジェクト)を使用しています。奇妙なスタックトレースでビルドがクラッシュすると、次のような問題が発生しました:
Error:Execution failed for task ':app:compileDevDebugJavaWithJavac'.
Java.lang.RuntimeException: failure, see logs for details.
cannot generate view binders Java.lang.NullPointerException
at Android.databinding.tool.reflection.ModelMethod.isBoxingConversion(ModelMethod.Java:155)
at Android.databinding.tool.store.SetterStore.isBetterParameter(SetterStore.Java:946)
at Android.databinding.tool.store.SetterStore.getBestSetter(SetterStore.Java:838)
そして、データバインディングが全体的に壊れたように思われました。
以前にリファクタリングを行い、クラスをパッケージ間で移動しました。
私の場合、Android Studioを使用してパッケージ間でクラスの名前を変更したり移動したりしました。ただし、type
要素のvariable
属性でリファクタリングされたクラスへの参照があったレイアウトのXMLの修正は進みませんでしたdata
内。
そのため、私の以前のタイプの値は、存在しないファイルを指し、ビルドがクラッシュしました。
単純な間違いですが、ソースを見つけるのに時間がかかる場合があります。これが誰かを助けることを願っています。
xmlバインディングで参照するすべてのクラスを必ずインポートしてください
私は次のようなコードを持っていました:
Android:visible="@{obj instanceof A}"
同じエラーが発生しました。
クラスA
が最上位にインポートされなかったことがわかります。 <import type="com.company.A">
タグを追加することで問題は解決しました。
P.S。 Android:visibleは、私が持っているカスタムバインディングアダプターです
私の場合、私の問題はLongClickListener
にあり、このリスナーのメソッドはboolean
を返したはずですが、私のメソッドはvoid
を返したので、正しいreturnステートメントを追加するとうまくいきました。大丈夫。
データバインディングメソッドを使用する場合は、正しい値を返す必要があります。そうでない場合、スローするエラーはまったく役に立ちません。
Android Xに移行した後、この質問に出くわした可能性があります。その場合、XMLファイルは大丈夫ですが、それでも問題が解決しない場合は、ライブラリを調べてください。コードを生成します。
コードを生成するライブラリは、Jettifyerでは簡単に変換できません。ここにいくつかの情報- https://blog.danlew.net/2018/11/14/the-reality-of-migrating-to-androidx/
私の場合、明らかなものを更新しましたが、まだ何かが足りませんでした。したがって、私がしたことは、私の開発ブランチ(Android Xではない))に移動し、ビルドを実行して、ビルドフォルダーに掘り込み、コードを生成したすべてのライブラリーを確認しました。私はそうしました。この問題の原因となっている依存関係が見つかるまで、容疑者を1つずつ確認することができました。更新するか、私の場合は削除して、このエラーを解決できました。:)
getter関数 xmlファイルから参照するインスタンスが定義されていないか、getter関数が含まれていない可能性がありますpublicアクセス指定子。
このように変数を定義すると、この問題に直面します(Android Studioは何も警告しません)
<data>
<variable
name="onGlobalLayoutA"
type="ViewTreeObserver.OnGlobalLayoutListener"/>
<import type="Android.view.ViewTreeObserver"/>
</data>
そして、私はsolveそれによって
<data>
<variable
name="onGlobalLayoutA"
type="Android.view.ViewTreeObserver.OnGlobalLayoutListener"/>
</data>
これが誰かを助けることを願っています。
私の場合、その理由は、別のモジュールである変数の型を使用しており、そのモジュールがビルドスクリプトの「実装」として追加されているためです。 「api」に変更すると問題が解決しました。
明らかに、atlascoderによって投稿された問題と同じ問題ではありませんが、私は関係なく言及します。おそらく、誰かが私と同じ問題を抱えてこの記事をgitします。
Android Gradleプラグインを3.5.1にダウングレードすると問題が解決しました
@ hiddeneyes02が言及したように、これはAndroid Gradleプラグインを3.5.1から3.5.2にアップグレードすると発生します。これはバグのようです: https://issuetracker.google .com/issues/143778134
コマンドツールを使用してプロジェクトをビルドすると、この投稿と同じエラーが発生しました: Building Android project with Android Gradle Plugin v 。3.5.2ビルドが失敗する