class DefaultAndroidProject implements AndroidProject, Serializable {

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        DefaultAndroidProject that = (DefaultAndroidProject) o;
        return generation == that.generation
                && projectType == that.projectType
                && apiVersion == that.apiVersion
                && Objects.equals(name, that.name)
                && Objects.equals(compileTarget, that.compileTarget)
                && Objects.equals(bootClasspath, that.bootClasspath)
                && Objects.equals(frameworkSource, that.frameworkSource)
                && Objects.equals(signingConfigs, that.signingConfigs)
                && Objects.equals(aaptOptions, that.aaptOptions)
                && Objects.equals(extraArtifacts, that.extraArtifacts)
                && Objects.equals(syncIssues, that.syncIssues)
                && Objects.equals(javaCompileOptions, that.javaCompileOptions)
                && Objects.equals(lintOptions, that.lintOptions)
                && Objects.equals(buildFolder, that.buildFolder)
                && Objects.equals(buildToolsVersion, that.buildToolsVersion)
                && Objects.equals(resourcePrefix, that.resourcePrefix)
                && Objects.equals(nativeToolchains, that.nativeToolchains)
                && Objects.equals(buildTypes, that.buildTypes)
                && Objects.equals(productFlavors, that.productFlavors)
                && Objects.equals(variants, that.variants)
                && Objects.equals(variantNames, that.variantNames)
                && Objects.equals(defaultConfig, that.defaultConfig)
                && Objects.equals(flavorDimensions, that.flavorDimensions)
                && Objects.equals(baseSplit, that.baseSplit)
                && Objects.equals(dynamicFeatures, that.dynamicFeatures);
    }

      DefaultAndroidProject(
            @NonNull String name,
            @NonNull ProductFlavorContainer defaultConfig,
            @NonNull Collection<String> flavorDimensions,
            @NonNull Collection<BuildTypeContainer> buildTypes,
            @NonNull Collection<ProductFlavorContainer> productFlavors,
            @NonNull Collection<Variant> variants,
            @NonNull Collection<String> variantNames,
            @NonNull String compileTarget,
            @NonNull Collection<String> bootClasspath,
            @NonNull Collection<File> frameworkSource,
            @NonNull Collection<SigningConfig> signingConfigs,
            @NonNull AaptOptions aaptOptions,
            @NonNull Collection<ArtifactMetaData> extraArtifacts,
            @NonNull Collection<SyncIssue> syncIssues,
            @NonNull CompileOptions compileOptions,
            @NonNull LintOptions lintOptions,
            @NonNull File buildFolder,
            @Nullable String resourcePrefix,
            @NonNull Collection<NativeToolchain> nativeToolchains,
            @NonNull String buildToolsVersion,
            int projectType,
            int apiVersion,
            int generation,
            boolean baseSplit,
            @NonNull Collection<String> dynamicFeatures);

}