フォルダの名前は次のようにinterface
なります
Module
レベルの下にbuild.gradle
導入され、apply plugin: 'kotlin-kapt'
ビルド時に次のエラーメッセージが表示されます。
public abstract class BaseStateActivity<T extends androidx.databinding.ViewDataBinding, E extends xxxx.BaseVM> extends xxxxx.BaseVMActivity<T> implements xxxxx.IBindVm<E> {错误: 非法的类型开始
public abstract class BaseStateActivity<T extends androidx.databinding.ViewDataBinding, E extends xxxxx.BaseVM> extends xxxxx.BaseVMActivity<T> implements xxxxx.IBindVm<E> {错误: 需要';'
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
> java.lang.reflect.InvocationTargetException (no error message)
問題が解決しました:
残念ながら、この問題は私を長い間悩ませてきました。後でスタックオーバーフローで不運な男がこのピットに足を踏み入れたのを見ました。彼は私より数日前に足を踏み入れ、それを解決するのに1週間かかりましたが、幸いにも彼はそれを解決しました。0.0。この問題の理由は、私のプロジェクトにinterface
名前が付けられたフォルダーがあり、interface
このフォルダーにインターフェイスがあるためです。このキーワードは、アノテーターを混乱させるためのフォルダー名として使用され、最終的にスタブが生成されます。interface
何か問題が発生しました。後でフォルダ名を別の名前に変更しました。
DataBinding
文法は
以下が表示されたらlog
、マウスでクリックしRun with --stacktrace
て詳細情報を確認する必要があります。
* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
> java.lang.reflect.InvocationTargetException (no error message)
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
私のカスタムビューは双方向バインディング機能を追加しますが、それを書いたときに無視して、このように書きました
app:y_change_content="@={}"
次に、ビルド時に印刷をログに記録しWhat went wrong
、クリックしRun with --stacktrace
て次の情報を取得します
Caused by: android.databinding.tool.util.LoggedErrorException: Found data binding error(s):
[databinding] {"msg":"Syntax error: no viable alternative at input \u0027\u003cEOF\u003e\u0027","file":"app\\src\\main\\res\\layout\\fragment_employment_info.xml","pos":[{"line0":54,"col0":41,"line1":54,"col1":44}]}
上記のプロンプトは非常に明確で、構文が間違っており、エラーの行が特定されています。
Java
Kotlin
クラスの名前はクラスの名前と同じです
Javaクラスの名前はKotlinクラスと同じです。Studioのディレクトリに赤い線のプロンプトが表示されない場合があります。この時点で、別のクラスを作成しますKaptExecution
。クリックするRun with --stacktrace
と、次の情報が表示されます。
Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing ...
Caused by: java.lang.reflect.InvocationTargetException
Caused by: com.sun.tools.javac.util.ClientCodeException: java.lang.IllegalStateException: node.sym must not be null
Caused by: java.lang.IllegalStateException: node.sym must not be null
クラス名の下で再度、十分に再構築します。
ソース
- 2020/12/18更新
インターフェイスはパッケージ名を明確に記述していませんでした。InvocationTargetException
- 問題:導入後
apply plugin: 'kotlin-kapt'
、ビルドプロジェクトがエラーを報告し、私が使用していました。koin
依存性注入のためにそれをビルドした後、私が見つけた。Retrofit
動的プロキシというAPI
オブジェクトれた作成が見つかりませんでした私が導入を削除する限り、それは。kotlin-kapt
することができ正常にコンパイルされます。 - 理由:最終的に、プロキシインターフェイスクラスファイルにパッケージ名がないことが判明したため、インターフェイスを使用するすべてのクラスをコンパイルしたときに動的プロキシインターフェイスが見つかりませんでした。ただし、削除
kotlin-kapt
後、パッケージ名は見つかりません。プロジェクトのコンパイルには影響しません。
例:
// 包名.如果把这个去掉,我用的是koin进行依赖注入的,当引入'kotlin-kapt'编译就会提示EZLoanApiService这个接口找不到.移除就能正常编译.
package com.xxx.xxx.netxx
interface ApiService {
@GET(CHECK_PHONE_EXIST)
suspend fun checkPhone(@QueryMap mData: TreeMap<String, Any>): BResponse<CheckPhoneExist>
}