3

このドキュメントに従って、プロジェクトにレルムを設定します。

以下は私のプロジェクトレベルのgradleです:

buildscript {
repositories {
    jcenter()
    maven { url 'https://maven.fabric.io/public' }
}
dependencies {
    classpath 'com.android.tools.build:gradle:2.2.0'

    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    // Realm
    classpath "io.realm:realm-gradle-plugin:1.2.0"
}

アプリ レベルの gradle :

apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'realm-android'

dependencies {
 final DAGGER_VERSION = '2.7'
....
    def daggerCompiler = "com.google.dagger:dagger-compiler:$DAGGER_VERSION"
    annotationProcessor daggerCompiler
    testAnnotationProcessor daggerCompiler
    androidTestAnnotationProcessor daggerCompiler

    compile  "com.google.dagger:dagger:$DAGGER_VERSION"
    provided 'org.glassfish:javax.annotation:10.0-b28' //Required by Dagger2


}
4

2 に答える 2

2

これは、Dagger 2 の最も重大な欠点の 1 つです。エラー報告はひどいものです。私はこの種のエラーを定期的に観察していますが、そのメッセージから何かを理解することはできません。

問題は、Dagger 2 プリプロセッサがjavacコンパイル前に実行されることです。コードを処理できなかった場合、プリプロセッサはコンポーネントの実装を生成せずに失敗します。私の知る限り、プリプロセッサは失敗の原因となったエラーを報告しません。次に、javacコンパイルを実行すると、生成されたファイルが見つからないために失敗しますが、他のファイルのコンパイルには進まないため、Dagger コンポーネントが見つからないというエラーのみが表示されます。

そのような場合に私が行うことは、3段階の解決策です。

  1. VCS の履歴を確認し、変更されたすべてのファイルにアクセスします。IDE はアクセス時に各ファイルをコンパイルするため、コンパイル エラーがあるかどうかを確認します。
  2. #1 が役に立たなかった場合は、プロジェクトから Dagger 2 コードを段階的に削除し (事前にコミットしてください!)、途中で再コンパイルを試みます。Dagger 2 が問題のある領域から削除されると、Dagger コンポーネントが生成され、javacコンパイルによって実際のエラーが表示されます。
  3. 他に何も役に立たない場合は、すべてのプロジェクト ファイルを 1 つずつアクセスしています。すでに2回やったことがありますが、それは悪夢です。

Realm については何も知りませんが、Realm は独自のプラグインを使用していることがわかるので、プラグイン アプライアンスの順序を変更することから始めてくださいbuild.gradle。これらの行を切り替えます。

apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'realm-android'
于 2016-10-24T13:33:14.207 に答える
0

この回答は、Vasiliy の以前の回答に基づいています。私のために働いた解決策をより目に見えるようにするために、私のコメントを彼/彼女の答えに昇格させています。

Vasiliy が提案したように、これらの行を逆にします。

apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'realm-android'

apply plugin: 'realm-android'
apply plugin: 'com.neenbedankt.android-apt'

Dagger がアプリケーション コンポーネント クラスを生成するのを妨げていた根本的な Realm エラーの報告を許可しました (私の場合、Realm 2.x で導入された破壊的変更)。

この問題に対処した後、並べ替えられたapply plugin行で次のエラーを受け取りました。

java.lang.IllegalArgumentException: XXX is not part of the schema for this Realm

プラグインを並べ替えると、Realm アノテーションが必要に応じて処理されなくなります。したがって、プラグイン行を次のように復元する必要があります。

apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'realm-android'
于 2016-11-17T20:47:07.267 に答える