Skip to content

[Bug]: Duplicate package-info.class in a2a-java-sdk-common and -spec breaks Android builds #978

Description

@kvmilos

What happened?

On Android, depending on the A2A Java client fails AGP's checkDuplicateClasses because a2a-java-sdk-common and a2a-java-sdk-spec both ship a byte-identical org/a2aproject/sdk/util/package-info.class.

How to reproduce

A minimal Android project (verified with Android Gradle Plugin 9.2.1, Gradle 9.6.1):
settings.gradle.kts

pluginManagement {
  repositories { google(); mavenCentral(); gradlePluginPortal() }
}
dependencyResolutionManagement {
  repositories { google(); mavenCentral() }
}
include(":app")

build.gradle.kts

plugins { id("com.android.application") version "9.2.1" apply false }

gradle.properties

android.useAndroidX=true

app/build.gradle.kts

plugins { id("com.android.application") }
android {
  namespace = "com.example.a2arepro"
  compileSdk = 34
  defaultConfig { minSdk = 26 }
}
dependencies {
  implementation("org.a2aproject.sdk:a2a-java-sdk-client:1.0.0.Final")
}

app/src/main/AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" />

Then run:

./gradlew :app:checkDebugDuplicateClasses

The build fails with the duplicate class shown below. (checkDuplicateClasses is a standard AGP task that also runs during any normal build, e.g. :app:assembleDebug.) Reproduced on both 1.0.0.Final and 1.1.0.Final.

Cause
org.a2aproject.sdk.util is a split package — real classes live in both modules (common: Assert, HttpHeaderUtils, NotNull; spec: Utils, ErrorDetail, PageToken) — and each ships its own package-info.java (@NullMarked), so both jars contain a duplicate package-info.class. It's unavoidable for consumers: spec depends on common, and the client/http-client/transports all depend on spec, so both jars are always on the Android classpath.

Expected
An Android app should be able to depend on the A2A Java client without a duplicate-class build failure.

Relevant log output

> Task :app:checkDebugDuplicateClasses FAILED
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
   > Duplicate class org.a2aproject.sdk.util.package-info found in modules a2a-java-sdk-common-1.0.0.Final.jar -> a2a-java-sdk-common-1.0.0.Final (org.a2aproject.sdk:a2a-java-sdk-common:1.0.0.Final) and a2a-java-sdk-spec-1.0.0.Final.jar -> a2a-java-sdk-spec-1.0.0.Final (org.a2aproject.sdk:a2a-java-sdk-spec:1.0.0.Final)

Code of Conduct

  • I agree to follow this project's Code of Conduct

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Fields

No fields configured for Bug.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions