Android開発にDagger 2とKotlinを使用しています。私のプロジェクトもマルチモジュールプロジェクトです。settings.gradleファイルは次のようになります。
include :app
include :lib
また、libモジュールのメンテナンスも行っています。
ダガーファイル(コンポーネントなど)で、他のモジュールからアイテムを取得しようとします。例えば:
@Component
interface AppComponent{
fun getPresenter() : Presenter
}
Presenterオブジェクトはlibモジュールで定義されています。私はLinux環境で働いていて、Android Studio 3プレビューカナリア5を使用しています。コードはうまく機能しており、APKを生成できます。
しかし、私の会社は、安定したバージョンのAndroid Studioを使用してAPKを生成したいと考えていました。Android Studio 2.3.3。
Androidプロジェクトをコンパイルすると、このエラーが発生しました。
error: error.NonExistentClass
エラーが表示されるのは
:app:kaptDebugKotlin
実行され、短剣クラスが見つからないことが原因で、クラスが他のプロジェクトで定義されています。これの可能な回避策は何ですか?私の悪い英語でごめんなさい。
基本的に、これを修正するためにできることはあまりありませんkapt
を使用する場合。プリプロセッサ(OrmaDatabase)を使用する別のライブラリで同じ問題に取り組む このリンク を引用するには:
KotlinはJava Annotation Processingが実行される前にスタブを作成するため、KotlinはOrmaDatabaseについて何も知らないため、スタブ内の宣言の名前はerror.NonExistentClassになります。これはAnnotation Processingツールを破壊します。カプトの制限の種類
Daggerコンパイラーの実行には、プレーンapt
またはannotationProcessor
を使用します。変更したらすぐに:
kapt libs.daggerCompiler
に
annotationProcessor libs.daggerCompiler
私のモジュールレベルでbuild.gradle
ファイル、エラーを取得できました。エラーを修正したら、行をkapt
に戻す必要があります。そうしないと、ダガークラスはKotlinで定義されているため生成されません。
Daggerを使用するマルチモジュールプロジェクトでNonExistentClass
エラーが発生し、kotlinライブラリの依存関係を追加するのを忘れていたことがわかりました。したがって、サブモジュールに追加するだけで問題が解決しました。
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$rootProject.kotlinVersion"
tldr:build.gradleでkaptをannotationProcessorに変更すると、実際の問題が表示されます。
同じエラーが発生し、AppComponentで使用していたクラスをコメントアウトしたことがわかりました。残念ながら、kaptツールは適切なエラーメッセージを表示しませんでした。ライブラリのコンパイラでkaptをannotationProcessorに変更してビルドしようとすると、どちらも成功しませんが、より詳細なエラーメッセージが表示されます。
NonExistentClassに関連する問題を回避するために、これをgradleファイルをビルドするために追加するだけです
kapt {
correctErrorTypes true
}
https://kotlinlang.org/docs/reference/kapt.html#non-existent-type-correction
私の場合、@Nullable
注釈をsupport-annotationsからAndroidX
に移行するために削除しました。
構築時に、注釈が正しくインポートされなかったため、無効として検出されました。
私がしたことは、コードをチェックし、すべてのインポートを修正することでした。
誤ってテストクラスをメインソースセットに移動したときに、このエラーが発生しました。テストソースセットに戻すと、エラーがなくなりました。
あなたが使用している場合、私は見つけました
kapt {
generateStubs = true
}
falseに変更すると実際のエラーが表示されます。コンパイルの問題が修正されると、おそらくDagger Graphの作成で問題が発生しますが、単にtrueに戻すだけでよいはずです。
Kaptにバグがあるようです。プロジェクトのクリーニングが役立つはずです。
./gradlew clean
最近同じ問題がありました。私は時々Android Studio(3.4.c6))を使用してコミットするため、[インポートの最適化]オプションを使用して未使用のインポートを削除します。
Injectedクラスでコンパイルエラーが発生したときに、このエラーを受け取りました。コンパイルエラーがないことを確認してください。
.gradleバージョンをアップグレードした後、エラーが表示されました。
Mockitoのバージョンを2.7.21から2. +にアップグレードすると、問題が修正されました。
- androidTestCompile "org.mockito:mockito-Android:2.7.21" // remove this
+ androidTestCompile "org.mockito:mockito-Android:2.+" // add this
Kaptはクラスを見つけられないか、使用するクラスを決定できないようです。例えば.
import foo.* // class foo.Abc
import bar.* // annotation bar.Abc
@Abc
class Xyz { ... }