从 jetified-aws-android-sdk 和 jetified-aws-java-sdk 复制 类
Duplicate classes from jetified-aws-android-sdk and jetified-aws-java-sdk
我有一个 Android 应用程序,它明确使用了亚马逊 AWS 库的最新 (v2.15.+) 版本,但它也依赖于一个看起来非常庞大的库 (netcdf4)拉入自己的(旧)副本(v1.11.236)亚马逊的非Android Java库并在构建时导致"Duplicate class"错误。
我知道我需要以某种方式修改 build.gradle,以便它仅对 implementation group: 'edu.ucar', name: 'netcdf4', version: '4.6.11'
引入的内容使用旧 (v1.11.236) 版本,但使用 new (v2.15.+) 版本适用于其他所有内容......但我不确定如何实际 do 那个。
到目前为止我尝试过的事情:
受到 another question 答案的启发,我尝试将以下内容添加到 "android{}" 块的末尾(希望它能毫不客气地删除非 Android .jars 并允许所有内容编译无误)。
applicationVariants.all { variant ->
variant.getRuntimeConfiguration().exclude group: 'com.amazonaws', module: 'aws-java-sdk-core'
}
...不幸的是,它导致 Gradle 同步失败:
ERROR: Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve org.apache.httpcomponents:httpclient:4.5.1.
Show Details
Affected Modules: app
我当前的 build.gradle 文件:
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion 29
buildToolsVersion "29.0.1"
defaultConfig {
applicationId "pantherkitty.launchspotter"
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
}
}
repositories {
mavenCentral()
maven {
url "https://artifacts.unidata.ucar.edu/repository/unidata-all/"
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'com.orhanobut:logger:2.2.0'
implementation 'com.amazonaws:aws-android-sdk-s3:2.15.+'
implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.15.+@aar') { transitive = true }
implementation ('com.amazonaws:aws-android-sdk-auth-userpools:2.15.+@aar') { transitive = true }
implementation group: 'edu.ucar', name: 'netcdf4', version: '4.6.11'
}
...以及错误:
Executing tasks: [:app:assembleDebug] in project C:\src\Android\launchspotter
> Task :app:preBuild UP-TO-DATE
(...snip...)
> Task :app:checkDebugDuplicateClasses FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:checkDebugDuplicateClasses'.
> 1 exception was raised by workers:
java.lang.RuntimeException: Duplicate class com.amazonaws.AbortedException found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.AmazonClientException found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.AmazonServiceException found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.AmazonServiceException$ErrorType found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.AmazonWebServiceClient found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
(...snip...)
Duplicate class com.amazonaws.services.kms.AWSKMS found in modules jetified-aws-android-sdk-kms-2.15.2.jar (com.amazonaws:aws-android-sdk-kms:2.15.2) and jetified-aws-java-sdk-kms-1.11.236.jar (com.amazonaws:aws-java-sdk-kms:1.11.236)
Duplicate class com.amazonaws.services.kms.AWSKMSClient found in modules jetified-aws-android-sdk-kms-2.15.2.jar (com.amazonaws:aws-android-sdk-kms:2.15.2) and jetified-aws-java-sdk-kms-1.11.236.jar (com.amazonaws:aws-java-sdk-kms:1.11.236)
(...snip...)
Duplicate class com.amazonaws.services.s3.AmazonS3 found in modules jetified-aws-android-sdk-s3-2.15.2.jar (com.amazonaws:aws-android-sdk-s3:2.15.2) and jetified-aws-java-sdk-s3-1.11.236.jar (com.amazonaws:aws-java-sdk-s3:1.11.236)
Duplicate class com.amazonaws.services.s3.AmazonS3Client found in modules jetified-aws-android-sdk-s3-2.15.2.jar (com.amazonaws:aws-android-sdk-s3:2.15.2) and jetified-aws-java-sdk-s3-1.11.236.jar (com.amazonaws:aws-java-sdk-s3:1.11.236)
Duplicate class com.amazonaws.services.s3.AmazonS3Client found in modules jetified-aws-android-sdk-s3-2.15.2.jar (com.amazonaws:aws-android-sdk-s3:2.15.2) and jetified-aws-java-sdk-s3-1.11.236.jar (com.amazonaws:aws-java-sdk-s3:1.11.236)
Duplicate class com.amazonaws.services.s3.AmazonS3Client found in modules jetified-aws-android-sdk-s3-2.15.2.jar (com.amazonaws:aws-android-sdk-s3:2.15.2) and jetified-aws-java-sdk-s3-1.11.236.jar (com.amazonaws:aws-java-sdk-s3:1.11.236)
Duplicate class com.amazonaws.services.s3.AmazonS3Encryption found in modules jetified-aws-android-sdk-s3-2.15.2.jar (com.amazonaws:aws-android-sdk-s3:2.15.2) and jetified-aws-java-sdk-s3-1.11.236.jar (com.amazonaws:aws-java-sdk-s3:1.11.236)
(...snip...)
Duplicate class com.amazonaws.util.TimingInfoFullSupport found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.util.TimingInfoUnmodifiable found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.util.ValidationUtils found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.util.VersionInfoUtils found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.util.XMLWriter found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.util.XmlUtils found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.util.XpathUtils found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
BUILD FAILED in 594ms
17 actionable tasks: 1 executed, 16 up-to-date
要按要求回答您的问题,您需要执行以下操作:
dependencies {
...
implementation('edu.ucar:netcdf4:4.6.11') {
exclude group: 'com.amazonaws', module: 'aws-java-sdk-s3'
}
}
这将从旧的 netcdf-java
工件中排除 aws-java-sdk-s3
依赖项。不幸的是,AWS SDK 的版本 2 不一定与 AWS SDK 的版本 1 兼容,因此如果任何 netcdf-java 代码需要使用任何 AWS SDK 代码,这可能不起作用。好消息是 netCDF-Java 现在是 5.3.2 版本,它使用 AWS SDK 版本 2。
其次,您是否尝试编写 netCDF-4 文件?如果没有,那么您不需要 netcdf4
神器。根据您的目标,您可能只需要 cdm-core
工件(它将允许您在本地读取 HDF4/5、netCDF3/4 文件,或来自 DAP2、cdmremote 等远程协议的数据) .有关各种工件的更多信息,请参阅 https://docs.unidata.ucar.edu/netcdf-java/current/userguide/using_netcdf_java_artifacts.html
我有一个 Android 应用程序,它明确使用了亚马逊 AWS 库的最新 (v2.15.+) 版本,但它也依赖于一个看起来非常庞大的库 (netcdf4)拉入自己的(旧)副本(v1.11.236)亚马逊的非Android Java库并在构建时导致"Duplicate class"错误。
我知道我需要以某种方式修改 build.gradle,以便它仅对 implementation group: 'edu.ucar', name: 'netcdf4', version: '4.6.11'
引入的内容使用旧 (v1.11.236) 版本,但使用 new (v2.15.+) 版本适用于其他所有内容......但我不确定如何实际 do 那个。
到目前为止我尝试过的事情:
受到 another question 答案的启发,我尝试将以下内容添加到 "android{}" 块的末尾(希望它能毫不客气地删除非 Android .jars 并允许所有内容编译无误)。
applicationVariants.all { variant ->
variant.getRuntimeConfiguration().exclude group: 'com.amazonaws', module: 'aws-java-sdk-core'
}
...不幸的是,它导致 Gradle 同步失败:
ERROR: Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve org.apache.httpcomponents:httpclient:4.5.1.
Show Details
Affected Modules: app
我当前的 build.gradle 文件:
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion 29
buildToolsVersion "29.0.1"
defaultConfig {
applicationId "pantherkitty.launchspotter"
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
}
}
repositories {
mavenCentral()
maven {
url "https://artifacts.unidata.ucar.edu/repository/unidata-all/"
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'com.orhanobut:logger:2.2.0'
implementation 'com.amazonaws:aws-android-sdk-s3:2.15.+'
implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.15.+@aar') { transitive = true }
implementation ('com.amazonaws:aws-android-sdk-auth-userpools:2.15.+@aar') { transitive = true }
implementation group: 'edu.ucar', name: 'netcdf4', version: '4.6.11'
}
...以及错误:
Executing tasks: [:app:assembleDebug] in project C:\src\Android\launchspotter
> Task :app:preBuild UP-TO-DATE
(...snip...)
> Task :app:checkDebugDuplicateClasses FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:checkDebugDuplicateClasses'.
> 1 exception was raised by workers:
java.lang.RuntimeException: Duplicate class com.amazonaws.AbortedException found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.AmazonClientException found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.AmazonServiceException found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.AmazonServiceException$ErrorType found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.AmazonWebServiceClient found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
(...snip...)
Duplicate class com.amazonaws.services.kms.AWSKMS found in modules jetified-aws-android-sdk-kms-2.15.2.jar (com.amazonaws:aws-android-sdk-kms:2.15.2) and jetified-aws-java-sdk-kms-1.11.236.jar (com.amazonaws:aws-java-sdk-kms:1.11.236)
Duplicate class com.amazonaws.services.kms.AWSKMSClient found in modules jetified-aws-android-sdk-kms-2.15.2.jar (com.amazonaws:aws-android-sdk-kms:2.15.2) and jetified-aws-java-sdk-kms-1.11.236.jar (com.amazonaws:aws-java-sdk-kms:1.11.236)
(...snip...)
Duplicate class com.amazonaws.services.s3.AmazonS3 found in modules jetified-aws-android-sdk-s3-2.15.2.jar (com.amazonaws:aws-android-sdk-s3:2.15.2) and jetified-aws-java-sdk-s3-1.11.236.jar (com.amazonaws:aws-java-sdk-s3:1.11.236)
Duplicate class com.amazonaws.services.s3.AmazonS3Client found in modules jetified-aws-android-sdk-s3-2.15.2.jar (com.amazonaws:aws-android-sdk-s3:2.15.2) and jetified-aws-java-sdk-s3-1.11.236.jar (com.amazonaws:aws-java-sdk-s3:1.11.236)
Duplicate class com.amazonaws.services.s3.AmazonS3Client found in modules jetified-aws-android-sdk-s3-2.15.2.jar (com.amazonaws:aws-android-sdk-s3:2.15.2) and jetified-aws-java-sdk-s3-1.11.236.jar (com.amazonaws:aws-java-sdk-s3:1.11.236)
Duplicate class com.amazonaws.services.s3.AmazonS3Client found in modules jetified-aws-android-sdk-s3-2.15.2.jar (com.amazonaws:aws-android-sdk-s3:2.15.2) and jetified-aws-java-sdk-s3-1.11.236.jar (com.amazonaws:aws-java-sdk-s3:1.11.236)
Duplicate class com.amazonaws.services.s3.AmazonS3Encryption found in modules jetified-aws-android-sdk-s3-2.15.2.jar (com.amazonaws:aws-android-sdk-s3:2.15.2) and jetified-aws-java-sdk-s3-1.11.236.jar (com.amazonaws:aws-java-sdk-s3:1.11.236)
(...snip...)
Duplicate class com.amazonaws.util.TimingInfoFullSupport found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.util.TimingInfoUnmodifiable found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.util.ValidationUtils found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.util.VersionInfoUtils found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.util.XMLWriter found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.util.XmlUtils found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
Duplicate class com.amazonaws.util.XpathUtils found in modules jetified-aws-android-sdk-core-2.15.2.jar (com.amazonaws:aws-android-sdk-core:2.15.2) and jetified-aws-java-sdk-core-1.11.236.jar (com.amazonaws:aws-java-sdk-core:1.11.236)
BUILD FAILED in 594ms
17 actionable tasks: 1 executed, 16 up-to-date
要按要求回答您的问题,您需要执行以下操作:
dependencies {
...
implementation('edu.ucar:netcdf4:4.6.11') {
exclude group: 'com.amazonaws', module: 'aws-java-sdk-s3'
}
}
这将从旧的 netcdf-java
工件中排除 aws-java-sdk-s3
依赖项。不幸的是,AWS SDK 的版本 2 不一定与 AWS SDK 的版本 1 兼容,因此如果任何 netcdf-java 代码需要使用任何 AWS SDK 代码,这可能不起作用。好消息是 netCDF-Java 现在是 5.3.2 版本,它使用 AWS SDK 版本 2。
其次,您是否尝试编写 netCDF-4 文件?如果没有,那么您不需要 netcdf4
神器。根据您的目标,您可能只需要 cdm-core
工件(它将允许您在本地读取 HDF4/5、netCDF3/4 文件,或来自 DAP2、cdmremote 等远程协议的数据) .有关各种工件的更多信息,请参阅 https://docs.unidata.ucar.edu/netcdf-java/current/userguide/using_netcdf_java_artifacts.html