問題描述
我正在為我的應用添加導航抽屜.我遇到了錯誤.應用程序 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 項目時得到重復的類的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!