Google AutoValue 无法识别 AutoValue_CustomType

Google AutoValue does not recognise AutoValue_CustomType

我正在尝试使用 Google AutoValue 在我的 Android Studio 项目中生成 HomeKey,但它不会重新识别 AutoValue_HomeKey()(请参阅下面的注释代码)。使用的gradle版本:4.10.1

我的Android项目是基于这个例子一: https://github.com/Zhuinden/simple-stack/tree/master/simple-stack-example-basic-java-fragment

是我忘记应用插件,还是实现了错误的包?

主页键class:

import com.google.auto.value.AutoValue;

@AutoValue
public abstract class HomeKey extends BaseKey {
    public static HomeKey create() {

        /*
            Cannot resolve AutoValue_HomeKey()
        */
        return new AutoValue_HomeKey(); 
    }

    @Override
    protected BaseFragment createFragment() {
        return new HomeFragment();
    }
}

基本键class:

import android.os.Bundle;
import android.os.Parcelable;

import gamf.tankolaskonyvelo.fragment.BaseFragment;

public abstract class BaseKey implements Parcelable {
    public String getFragmentTag() {
        return toString();
    }

    public final BaseFragment newFragment() {
        BaseFragment fragment = createFragment();
        Bundle bundle = fragment.getArguments();
        if (bundle == null) {
            bundle = new Bundle();
        }
        bundle.putParcelable("KEY", this);
        fragment.setArguments(bundle);
        return fragment;
    }

    protected abstract BaseFragment createFragment();
    }
}

项目级别build.gradle:

buildscript {
    repositories {
        google()
        jcenter()
        mavenCentral()
        maven {url "https://jitpack.io" }

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.2'
        classpath 'com.jakewharton:butterknife-gradle-plugin:10.1.0'
        classpath 'com.google.gms:google-services:3.2.1'
    }
}


allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://jitpack.io" }

    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

应用级别build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "gamf.tankolaskonyvelo"
        minSdkVersion 20
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    androidTestImplementation('com.android.support.test.espresso:espresso-    core:3.0.1', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support:support-v4:26.1.0'
    implementation 'com.android.support:design:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.android.support:recyclerview-v7:26.1.0'
    implementation 'com.android.support:cardview-v7:26.1.0'
    implementation 'com.github.Zhuinden:simple-stack:1.13.4'
    implementation 'com.jakewharton:butterknife:10.1.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'

    implementation "com.google.auto.value:auto-value-annotations:1.6.2"
    annotationProcessor "com.google.auto.value:auto-value:1.6.2"
    annotationProcessor 'frankiesardo:auto-parcel:1.0.3'
}

您正在使用托管在 clojars 上的 annotationProcessor 'frankiesardo:auto-parcel:1.0.3'

因此您应该将以下存储库添加到 build.gradle 中的 allprojects { 块:

maven { url "https://clojars.org/repo/" }

那么你应该尝试重建项目。

构建成功后,注释处理生成的类应该会显示出来。


(如果您检查存储库的根 build.gradle,那么您会看到示例 可能 使用的 Maven 存储库:

repositories {
    google()
    mavenCentral()
    maven { url "https://clojars.org/repo/" }
    maven { url "https://jitpack.io" }
    maven { url 'https://maven.google.com' }
    jcenter()
}

所以即使库本身托管在 jitpack.io 上,示例的依赖项 auto-parcel 是在 clojars 上)