1. ホーム
  2. アンドロイド

Android Error:Execution failed for task ':app:compileDebugJavaWithJavac' Solution

2022-02-27 12:03:27

最近、私のAndroidプロジェクトで例外が発生し、問題の根源を見つけるのに時間がかかりました。

Google、Baiduの検索は、コンテンツの最初の2ページを閲覧し、いくつかのオプションをまとめました。


1. buildToolsVersionを最新バージョンにアップグレード・更新する。
2、Android Studio 2.2.2バージョン、JDK 1.8バージョンへのアップグレード
3, JAVA_HOME パスの設定

アンドロイド { <未定義
    コンパイルSdkバージョン 24
    buildToolsVersion "24.0.2"
    デフォルトコンフィグ <未定義
        applicationId "com.mycompany.appname"
        minSdkVersion 17
        targetSdkVersion 24
        バージョンコード 1
        バージョン名 "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        ジャックオプション { <未定義
            有効 真

    }
    buildTypes { <未定義
        リリース <未定義
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    コンパイルオプション { <未定義
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.
    }
}


しかし、上記の解決策では、例外Error:Execution failed for task ':app:compileDebugJavaWithJavac' を解決することはできません。
あるブログで次の段落を偶然見つけるまでは。

一見、私が抱えている問題とは関係なさそうでしたが、今となっては何の手がかりもないので、死に物狂いで試しています

案の定、奇跡は起きなかったが、エラーメッセージをよく見てみると
ルートプロジェクトでタスク 'compileDebug' があいまいである。
これを分析すると、ambiguousは曖昧という意味で、その後ろのcompileDebugXXXXの文字列を見て、だから閃いたのです 
gradlew compileDebug --stacktrace のコマンドを gradlew compileDebugJavaWithJavac に変更します。

奇跡を見るときが来た

Android Realmデータベースを使用する際に、不正なデータ型に@PrimaryKeyアノテーションを追加したことによる例外であることが判明しました。

PrimaryKeyアノテーションの説明
フィールドは String, integer, byte, short, int, long およびそれらのラッパーの Byte, Short, Integer, Long でなければならない。
このアノテーションを使用した後、copyToRealmOrUpdate()メソッドを使用して、主キーでそのオブジェクトを照会し、照会された場合は更新し、それ以外の場合は新しいオブジェクトを作成して置き換えることができます。
このアノテーションを使用すると、デフォルトで@indexアノテーションが設定されます。
このアノテーションを使用すると、データの作成と更新が遅くなり、データのクエリーが速くなります。
必須
データをNULLにすることはできません
無視
無視する、つまりフィールドをローカルに保存しない
インデックス
このフィールドに検索エンジンを追加すると、データの挿入が遅くなり、データも大きくなりますが、クエリーは高速になります。読み込みのパフォーマンスを最適化する必要がある場合に使用することをお勧めします。

Android Studioでは同じ例外が報告されても、その根本原因は人それぞれであり、解決方法より