问题描述
我正在为我的应用添加导航抽屉.我遇到了错误.应用程序 gradle 同步得很好.但是当我运行应用程序时,我得到了一堆重复的类错误.我认为这可能是因为我添加了冲突的依赖项,并且我使用的是 v7 28.0.0 并且一些错误提到了 app: v4.我在网上看到的所有示例都使用 v7 28.0.0,尽管我在使用 v4 的 main_activity.xml 中有这个.不知道是否与错误有关.android.support.v4.widget.DrawerLayout
I'm in the process of adding a navigation drawer to my app. and I'm getting errors. The app gradle synchs just fine. but when I run the app I get a bunch of duplicate class error. I think it might be because I have conflicting dependencies added and that I'm using v7 28.0.0 and some of the errors mention app: v4. all the examples I've seen online use v7 28.0.0 eventhough I have this in main_activity.xml which uses v4. don't know if it's got something to do with the error. android.support.v4.widget.DrawerLayout
Caused by: com.android.ide.common.workers.WorkerExecutorException: 1 exception was raised by workers:
java.lang.RuntimeException: java.lang.RuntimeException: Duplicate class android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat found in modules classes.jar (com.android.support:support-compat:28.0.0) and classes.jar (com.android.support:support-v4:24.0.0)
Duplicate class android.support.v4.app.ActionBarDrawerToggle found in modules classes.jar (com.android.support:support-core-ui:28.0.0) and classes.jar (com.android.support:support-v4:24.0.0)
Duplicate class android.support.v4.app.ActionBarDrawerToggle$Delegate found in modules classes.jar (com.android.support:support-core-ui:28.0.0) and classes.jar (com.android.support:support-v4:24.0.0)
Duplicate class android.support.v4.app.ActionBarDrawerToggle$DelegateProvider found in modules classes.jar (com.android.support:support-core-ui:28.0.0) and classes.jar (com.android.support:support-v4:24.0.0)
Duplicate class android.support.v4.app.ActionBarDrawerToggle$SlideDrawable found in modules classes.jar (com.android.support:support-core-ui:28.0.0) and classes.jar (com.android.support:support-v4:24.0.0)
Duplicate class android.support.v4.app.ActivityCompat found in modules classes.jar (com.android.support:support-compat:28.0.0) and classes.jar (com.android.support:support-v4:24.0.0)
Duplicate class android.support.v4.app.ActivityCompat$1 found in modules classes.jar (com.android.support:support-compat:28.0.0) and classes.jar (com.android.support:support-v4:24.0.0)
Duplicate class android.support.v4.app.ActivityCompat$OnRequestPermissionsResultCallback found in modules classes.jar (com.android.support:support-compat:28.0.0) and classes.jar (com.android.support:support-v4:24.0.0)
gradle 文件
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "org.pctechtips.netdroid"
minSdkVersion 21
targetSdkVersion 28
versionCode 8
versionName "1.7"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled = false
signingConfig signingConfigs.config
}
buildTypes {
release {
shrinkResources false
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
debuggable false
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
/*androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
firebase
implementation 'com.google.firebase:firebase-core:10.2.1'
})*/
// compile 'com.android.support:appcompat-v7:25.3.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
/*google play plugin for adMob*/
implementation 'com.google.android.gms:play-services:10.2.1'
implementation 'commons-net:commons-net:3.6'
implementation 'org.samba.jcifs:jcifs:1.3.3'
}
推荐答案
异常的意思是,在2个或多个不同的依赖中存在重复的类,编译器将无法区分应该在run-time
并抛出异常.
The exception means, There were duplicated classes in 2 or more different dependencies and the compiler wouldn't be able to distinguish which of them should be used at run-time
and the exception was thrown.
大多数情况下,当您尝试导入带有所需库的模块时会发生重复性.(传递依赖)
Most often, Duplicity happens when you are trying to import modules that carrying their required libraries. (transitive dependencies)
您必须从 build.gradle
中的库中排除
重复的类.如 Log 所示,support-core-ui
和 support-compat
模块有重复的类.
You have to exclude
duplicated classes from libraries in the build.gradle
.
As Log shows, support-core-ui
and support-compat
modules have duplicated classes.
apply plugin: 'com.android.application'
android {
...
defaultConfig {
...
}
buildTypes {
...
}
configurations {
all { // You should exclude one of them not both of them
exclude group: "com.android.support", module: "support-core-ui"
exclude group: "com.android.support", module: "support-compat"
}
}
}
有时你不需要排除任何东西,你只需要将导入的模块更改为不带依赖关系的模块.
其他情况导致类重复是当您将*.jar
添加到项目libs
目录时.因此,如果它们没有在项目中开始使用,则需要删除它们.
Other situation that causes duplicated classes is when you have added *.jar
to the project libs
directory. Therefore, You need to delete them if they are not begin used in the project.
project->app->libs->*.jar
我看到使用这两行提到的一些解决方案可以解决问题但是如果您已迁移到 Androidx
,它将默认启用.
I see there are some solutions mentioned using these 2 lines will resolve the problem But if you've migrated to Androidx
it would be enabled by default.
android.useAndroidX=true
android.enableJetifier=true
喷射器是
Jetifier 工具将支持库依赖的库迁移到依赖而是等效的 AndroidX 包.该工具可让您迁移直接使用单个库,而不是使用 Android gradle与 Android Studio 捆绑在一起的插件.
Jetifier tool migrates support-library-dependent libraries to rely on the equivalent AndroidX packages instead. The tool lets you migrate an individual library directly, instead of using the Android gradle plugin bundled with Android Studio.
有关更多信息,请查看排除传递依赖项
随着应用范围的扩大,它可以包含许多依赖项包括直接依赖和传递依赖(库您的应用程序的导入库所依赖的).排除及物不再需要的依赖项,可以使用 exclude
关键词
As an app grows in scope, it can contain a number of dependencies including direct dependencies and transitive dependencies (libraries which your app's imported libraries depend on). To exclude transitive dependencies that you no longer need, you can use the
exclude
keyword
如果您在排除类时遇到问题,请查看此线程:如何排除...
If you have problems excluding classes, check this thread: How do I exclude...
这篇关于为什么我在运行我的 Android 项目时得到重复的类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!