更新後の最近のAndroid Studio(2.0.7)(これが原因である可能性があります)ビルド中にエラーが発生することがあります。
アイデアは、通常コンパイルはうまくいくということですが、時々短剣エラーが発生します。
ダガー構成で問題になる可能性はありますか?
エラー自体:
Executing tasks: [:app:assembleDebug]
Configuration on demand is an incubating feature. Incremental Java compilation is an incubating feature. :app:preBuild UP-TO-DATE :app:preDebugBuild UP-TO-DATE :app:checkDebugManifest :app:preReleaseBuild UP-TO-DATE :app:prepareComAndroidSupportAppcompatV72311Library UP-TO-DATE :app:prepareComAndroidSupportDesign2311Library UP-TO-DATE :app:prepareComAndroidSupportMultidex101Library UP-TO-DATE :app:prepareComAndroidSupportRecyclerviewV72311Library UP-TO-DATE :app:prepareComAndroidSupportSupportV42311Library UP-TO-DATE :app:prepareComDaimajiaSwipelayoutLibrary120Library UP-TO-DATE :app:prepareComF2prateekRxPreferencesRxPreferences101Library UP-TO-DATE :app:prepareComGithubAakiraExpandableLayout141Library UP-TO-DATE :app:prepareComGithubAfollestadMaterialDialogsCore0842Library UP-TO-DATE :app:prepareComGithubCastorflexSmoothprogressbarLibraryCircular120Library UP-TO-DATE :app:prepareComJakewhartonRxbindingRxbinding030Library UP-TO-DATE :app:prepareComPnikosisMaterialishProgress17Library UP-TO-DATE :app:prepareComTrelloRxlifecycle040Library UP-TO-DATE :app:prepareComTrelloRxlifecycleComponents040Library UP-TO-DATE :app:prepareComWdullaerMaterialdatetimepicker211Library UP-TO-DATE :app:prepareIoReactivexRxandroid110Library UP-TO-DATE :app:prepareMeRelexCircleindicator116Library UP-TO-DATE :app:prepareMeZhanghaiAndroidMaterialprogressbarLibrary114Library UP-TO-DATE :app:prepareDebugDependencies :app:compileDebugAidl UP-TO-DATE :app:compileDebugRenderscript UP-TO-DATE :app:generateDebugBuildConfig UP-TO-DATE :app:generateDebugAssets UP-TO-DATE :app:mergeDebugAssets UP-TO-DATE :app:generateDebugResValues UP-TO-DATE :app:generateDebugResources UP-TO-DATE :app:mergeDebugResources UP-TO-DATE :app:processDebugManifest UP-TO-DATE :app:processDebugResources UP-TO-DATE :app:generateDebugSources UP-TO-DATE :app:compileDebugJavaWithJavac /home/ungvas/AndroidDev/Projects/FW/paynet-Android/app/src/main/Java/md/fusionworks/paynet/ui/activity/BaseActivity.Java:23: error: cannot find symbol import md.fusionworks.paynet.di.component.DaggerActivityComponent; ^ symbol: class DaggerActivityComponent location: package md.fusionworks.paynet.di.component /home/ungvas/AndroidDev/Projects/FW/paynet-Android/app/src/main/Java/md/fusionworks/paynet/PaynetApplication.Java:7: error: cannot find symbol import md.fusionworks.paynet.di.component.DaggerApplicationComponent; ^ symbol: class DaggerApplicationComponent location: package md.fusionworks.paynet.di.component 2 errors
Incremental compilation of 66 classes completed in 3.719 secs. :app:compileDebugJavaWithJavac FAILED :app:compileRetrolambdaDebug
FAILURE: Build failed with an exception.
What went wrong: Execution failed for task ':app:compileDebugJavaWithJavac'.
Compilation failed; see the compiler error output for details.
Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 19.556 secs
ありがとう。
Gradle 2.10で追加されたインクリメンタルコンパイルと関係があるようです
私はそれを修正して次のコマンドをgradleに追加しました:
-Pandroid.incrementalJavaCompile=false
Android Studioの次の場所に追加できます:File |設定|ビルド、実行、展開|コンパイラーコマンドラインオプションとして追加します。
edit2.0.0-beta現在、プラグインはこのオプションがGradle DSLに追加されたことを知らせる警告を表示します:
Android {
compileOptions.incremental = false
}
短剣のバージョン2.11
を更新する必要があります。
build.gradle
の-依存関係ブロックは次のようになります。
dependencies {
// Other dependencies should go here
compile "com.google.dagger:dagger:2.11"
annotationProcessor "com.google.dagger:dagger-compiler:2.11"
provided 'javax.annotation:jsr250-api:1.0'
compile 'javax.inject:javax.inject:1'
}
お役に立てれば。
2017年の変更:
Android Studio Canaryは新しいバージョンのGradleを使用しており、aptプラグインが機能しない場合があり、annotationProcessor
に置き換えられます。 gradleの将来のバージョンで削除されるとコンパイラが警告しているにもかかわらず、失敗する可能性があります。
この依存関係の行を変更します。
apt 'com.google.dagger:dagger-compiler:2.7'
に
annotationProcessor 'com.google.dagger:dagger-compiler:2.7'
aptプラグインを削除します。
Daggerの最新バージョン(2.8)がこのエラーの原因です。依存関係が下記のとおりであることを確認してください
apt 'com.google.dagger:dagger-compiler:2.7' compile 'com.google.dagger:dagger:2.7'
Javaバージョン1.7を使用していることを確認してください。また、短剣パイプラインで他の何かが壊れている場合、このエラーも発生します。
同様の問題がありましたが、理由は異なります。
apkを生成しようとしたときにのみ問題が発生しました。それ以外の場合は、正常に機能していました。
私の場合、問題は、クラスが何らかの理由でtest
ディレクトリではなくmain
ディレクトリにあったことでした。それをmainに移動し、動作しました。
誰かに役立つことを願って
ファイル-> InvalidateCaches/Restart私のために働いた
純粋なJavaライブラリモジュールを使用していましたが、次のようにkotlinプラグインと短剣の依存関係を使用していました。
build.gradle
apply plugin: 'kotlin'
dependencies {
implementation "com.google.dagger:dagger:2.22.1"
kapt "com.google.dagger:dagger-compiler:2.22.1"
}
エラーは、kotlin-kapt
プラグインを追加できなかったことです。したがって、私のbuild.gradleファイルは次のようになりました。
apply plugin: 'kotlin'
apply plugin: "kotlin-kapt" // make sure you added this line
dependencies {
implementation "com.google.dagger:dagger:2.22.1"
kapt "com.google.dagger:dagger-compiler:2.22.1"
}
を参照してください。
ВыполнитешагидлясозданияклассаDaggerApplicationComponent
。
Готово
最初に、この行をProject build.gradleファイルのbuildscriptの依存関係に追加します。
classpath 'com.neenbedankt.gradle.plugins:Android-apt:1.8'
次に、モジュールの上部に次の行を追加します:app build.gradleファイル
apply plugin: 'com.neenbedankt.Android-apt'
すべての短剣の依存関係に同じ短剣バージョンを使用します。私のために働いた。
implementation "com.google.dagger:dagger:$daggerVersion"
implementation "com.google.dagger:dagger-Android-support:$daggerVersion"
annotationProcessor "com.google.dagger:dagger-Android-processor:$daggerVersion"
annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"
//define version in main build.gradle
ext {
daggerVersion = '2.11'
}
特定のコンポーネントおよびモジュールの注釈をどこでも再確認してください。私の問題は、モジュールで@Namedを使用していましたが、コンストラクターで@Namedを定義していなかったことです。
このエラーを受け取ったインスタンスでは、報告されたエラーはDaggerMyComponentのエラーが報告されたという点でオフマークでしたが、根本的な原因は、コードの別の場所で、誤ってButterKnifeの@BindViewを使用していたことですプライベートビュータイプのメンバー。これを修正することでエラーがなくなりました。
それは私が直面している非常に有線の問題です!これがダガーに関連する理由がわかりません!
ビューのバインドには ButterKnife を使用しますが、コーディングの方法はいくらか(急いでコピー/貼り付けしてください!)2つの異なるビューを同じid以下のように(両方のビューでfabid)
@BindView(R.id.fab)
FloatingActionButton fab;
@BindView(R.id.fab)
Toolbar toolbar;
アプリを実行しようとした後、ビルドタブでこのエラーをスローします
コンパイルに失敗しました。詳細については、コンパイラエラーの出力を参照してください。
そして、コンパイラエラーは
エラー:シンボルクラスDaggerApplicationComponentが見つかりません
私はそれがばかげているように見えることを知っていますが、それは私に起こり、fix idsの後、私の問題は解決しました。
何か助けてほしい。
プレゼンターの私の場合、データマネージャーなどのオーバーライドされたメソッドに@Inject
アノテーションを使用しませんでした。
@Inject
public RegisterPresenter(DataManager dataManager, SchedulerProvider
schedulerProvider, CompositeDisposable compositeDisposable) {
super(dataManager, schedulerProvider, compositeDisposable);
}
この問題はありましたが、ビルド中に2つの失敗がありました。 1つは欠落しているコンポーネントでしたが、もう1つはButterKnifeで、@ BindViewはビューを見つけることができませんでした。これを修正すると、欠落しているコンポーネントが修正されました。注釈の処理に失敗すると、同様の問題が発生すると思います。
アプリケーションを実行しようとすると、ビルドが失敗し、クラスをインポートするオプションが表示されます。これは、daggerがこれらのクラスをコンパイル時ではなく実行時にのみインポートするために発生します。