Nhiều tệp dex xác định Landroid / support / v4 / accessservice / AccessServiceInfoCompat


212

Nếu tôi chạy gradle assembleDebug từ dòng lệnh, tôi đột nhiên gặp lỗi này:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.util.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:592)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:550)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:531)
    at com.android.dx.merge.DexMerger.mergeDexBuffers(DexMerger.java:168)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:186)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:300)
    at com.android.dx.command.dexer.Main.run(Main.java:232)
    at com.android.dx.command.dexer.Main.main(Main.java:174)
    at com.android.dx.command.Main.main(Main.java:91)

Nếu tôi grep cho v4, tôi thấy hai tệp trong thư mục bản dựng của mình.

Binary file build/pre-dexed/debug/support-v4-19.0.0-2ba5fdd60a6c3836b3104a863fe42897da1fa9d1.jar matches
Binary file build/pre-dexed/debug/support-v4-r7-227d905d79b23b20866531d4f700446c040a2ccb.jar matches

Tập tin lớp của tôi chỉ bao gồm thư viện hỗ trợ này:

compile 'com.android.support:support-v13:19.0.0'

Tôi bối rối về cách thư viện r7 được bao gồm bằng cách nào đó. Tôi đã chạygradle clean và nó luôn xuất hiện ở đó khi tôi chạy lại lắp rápDebug.

Nếu tôi grep cho r7 trong thư mục build, tôi sẽ thấy nó bên trong tệp:

Binary file build/exploded-bundles/ComGoogleAndroidGmsPlayServices4030.aar/classes.jar matches

Nếu tôi không bao gồm v13, thì những thứ khác sẽ không được biên dịch.

Nhưng không v13 bao gồm thư viện hỗ trợ v4?

Đây có phải là sự không tương thích giữa gói dịch vụ AAR và thư viện v13 không?

Tôi đã lấy tập tin gradle từ gradleplease.appspot.com.

Loại bỏ các dịch vụ chơi không sửa chữa nó; cùng một lỗi.

Các phụ thuộc của tôi bên trong build.gradle:

 dependencies {


 // Google Play Services
//compile 'com.google.android.gms:play-services:4.0.30'

// Support Libraries
//compile 'com.android.support:support-v4:19.0.0'
///compile 'com.android.support:appcompat-v7:19.0.0'
//compile 'com.android.support:gridlayout-v7:19.0.0'
compile 'com.android.support:support-v13:19.0.0'
compile 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5'
compile 'commons-codec:commons-codec:1.9'
compile 'com.madgag:markdownj-core:0.4.1'
compile 'com.wu-man:android-oauth-client:0.0.2'
compile 'com.google.http-client:google-http-client-jackson2:1.17.0-rc'
compile 'org.apache.commons:commons-lang3:3.2'
compile 'com.google.code.gson:gson:2.2.4'
}

1
Tôi đã thử tất cả các giải pháp, và nó đã xảy ra tất cả chúng đều không hoạt động. Hơn tôi vừa tạo một dự án mới có cùng tên và sao chép tất cả các tệp từ dự án cũ. Và nó hoạt động rất tốt bây giờ. Hy vọng nó giúp.
Sam003

Tôi gặp vấn đề này với một thành phần trong support-v13. Sau nhiều lần gỡ lỗi và thử tất cả các câu trả lời vô ích, tôi phát hiện ra nó đã được giới thiệu khi tôi thử tích hợp kotlin vào dự án vốn là một dự án java cũ. Tôi đã xóa thư viện tiêu chuẩn kotlin và các thư viện kotlin khác và nó vẫn ổn. Vẫn sẽ cố gắng khắc phục sự cố với kotlin nhưng hiện tại, tôi phải làm việc. Bất kỳ thông tin sẽ giúp quá, thực sự yêu kotlin.
clementiano

Câu trả lời:


304

Chạy gradle -q dependencies(hoặc gradle -q :projectName:dependencies) để tạo một báo cáo phụ thuộc. Bạn sẽ thấy nơi r7đến từ đâu, chẳng hạn như:

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    |    \--- com.google.android:support-v4:r7
|    +--- com.commonsware.cwac:camera:0.5.4
|    \--- com.android.support:support-v4:18.0.+ -> 18.0.0
\--- com.android.support:support-v4:18.0.+ -> 18.0.0

Sau đó, sử dụng excludechỉ thị để chặn sự phụ thuộc đó. Trong trường hợp của tôi, nó đến từ thư viện CWAC-Camera của tôi và vì vậy tôi sử dụng:

dependencies {
    compile('com.commonsware.cwac:camera-v9:0.5.4') {
      exclude module: 'support-v4'
    }

    compile 'com.android.support:support-v4:18.0.+'
}

(trong đó compilecâu lệnh thứ hai cho biết bạn thực sự muốn phiên bản nào)

Điều đó sẽ làm rõ vấn đề, vì bạn sẽ thấy nếu bạn chạy lại báo cáo phụ thuộc:

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.commonsware.cwac:camera:0.5.4
\--- com.android.support:support-v4:18.0.+ -> 18.0.0

3
Có phương pháp nào để kiểm tra / loại trừ các mô-đun khỏi các phụ thuộc .jar không có sẵn trên Maven không? gradle dependenciesdường như không báo cáo các phụ thuộc được thêm vàocompile files('libs/example.jar')
dbro

3
Giả sử tôi có hai libs/*.jarphụ thuộc với một mô-đun chung, không có sẵn như là một tạo tác. Bất kỳ cách nào để thực hiện kiểm tra phụ thuộc tương tự / loại trừ lớp?
dbro

2
@dbro: Không phải tôi biết, nhưng, một lần nữa, tôi chưa nghiên cứu về điểm này. IMHO, ngoài vòng bít, một hoặc cả hai tệp JAR đó cảm thấy bị đóng gói sai, vì mô-đun chung nên được đưa vào JAR của chính nó.
CommonsWare

12
./gradlew -q: projectName: phụ thuộc làm việc cho tôi
Defuera

15
Mẹo nhanh cho những người làm nổi bật một mô-đun từ một phụ thuộc mô-đun: Bạn phải biến bạn compile project(':foo')thành compile(project(':foo')) { exclude module: 'support-v4' }. Lưu ý dấu ngoặc đơn.
đặc biệt

122

Tôi đã giải quyết lỗi tương tự bằng cách thêm đoạn mã sau vào tệp build.gradle của mình bên trong khối Android.

android {
    dexOptions {
        preDexLibraries = false
    }
}

4
Đã làm cho tôi! Có bất kỳ mặt trái của việc làm theo cách này?
Barrie Galitzky

@BarrieGalitzky Tôi chưa gặp phải bất kỳ vấn đề nào cho đến nay
mike.tihonchik

3
Cảm ơn người đàn ông, điều này đã làm việc hoàn hảo để giải quyết vấn đề! Dù sao, tôi nghĩ rằng nó có một số tác dụng phụ .. Nhiệm vụ lắp rápDebug trở nên chậm hơn 3 lần!
Marino

không tìm thấy dexOptions.
Oliver Dixon

10
Sau khi thêm điều này, tôi nhận được lỗi "Dịch đã bị gián đoạn". Đoán tôi sẽ thử phương pháp CommonsWare.
DroidHeaven

36

một bức tranh đáng giá ngàn lời nói

Để làm cho nó dễ dàng hơn và nhanh hơn để thực hiện nhiệm vụ này với những người mới bắt đầu như tôi. đây là ảnh chụp màn hình hiển thị câu trả lời được đăng bởi @ edsappfactory.com có hiệu quả với tôi:

Trước tiên, hãy mở chế độ xem Gradle ở phía bên phải của Androidstudio, trong mục ứng dụng của bạn, Taskssau Androidđó nhấp chuột phải androidDependenciesrồi chọn Run:

bước 1

Thứ hai bạn sẽ thấy một cái gì đó như thế này:

Bước 2

Lý do chính tôi đã đăng bài này là không dễ để biết nơi thực hiện một gradlenhiệm vụ hoặc các lệnh được đăng ở trên. Vì vậy, đây là nơi để loại bỏ chúng là tốt.

SO, để thực hiện lệnh gradle:

Đầu tiên:

Đầu tiên

Thứ hai:

thứ hai

Dễ dàng như nó là.

Đó là nó.

Cảm ơn bạn.


33

Ngoài ra, để lưu ý, bạn có thể thấy các phụ thuộc Android của mình, bằng cách đi tới chế độ xem Android Studio Gradle và chọn mục tiêu "androidDependencies".

Một mẹo nữa: Tôi gặp vấn đề này, cho đến khi tôi gỡ bỏ lib hỗ trợ v4 khỏi thư mục libs trong cả dự án và dự án mô-đun / thư viện liên quan của tôi.


3
Hướng dẫn cụ thể hơn? Không thể tìm thấy "androidDependencies". Thx
CopperCash

Chuyển đến chế độ xem Gradle, sau đó tìm tiêu đề Tất cả các tác vụ, xem chi tiết tên ứng dụng của bạn, sau đó đi sâu vào ": app", bạn sẽ tìm thấy "androidDependencies" ở đó.
AutoM8R

2
Chế độ xem Gradle ở đâu?
Paul Beusterien 4/2/2015

4
@PaulBeusterien Nếu bạn nhìn về phía bên phải của cửa sổ, có một tab bên được đánh dấu Gradle. Nhấn vào đây để mở một chế độ xem được ghim. AndroidDependencies thực sự là một nhiệm vụ cấp bậc
JCricket

cảm ơn bạn, tôi đã đăng ảnh chụp màn hình giải thích câu trả lời của bạn để làm cho nó dễ dàng hơn.
MBH

11

Tôi bắt đầu gặp lỗi này khi nâng cấp lên ButterKnife 8.5.1. Không có câu trả lời nào khác ở đây làm việc cho tôi.

Tôi đã từng gradle -q :app:dependenciesnhìn thấy cái cây, và sau đó xem qua các tệp jar cho đến khi tôi tìm thấy xung đột. Xung đột là sự phụ thuộc của butterknife vào việc com.android.support:support-compat:25.1.0chứa một phiên bản của lớp khả năng truy cập và com.android.support:support-v4:23.1.1cũng chứa lớp đó.

Tôi đã giải quyết nó bằng cách thay đổi sự phụ thuộc của tôi từ điều này:

compile 'com.jakewharton:butterknife:8.5.1'

đến đây:

compile('com.jakewharton:butterknife:8.5.1') {
    exclude module: 'support-compat'
}

Nó dường như không ảnh hưởng đến hoạt động của ButterKnife cho đến nay.

Chỉnh sửa: Có một giải pháp tốt hơn, đó là nâng cấp các thư viện hỗ trợ Android của tôi để phù hợp với ButterKnife:

compile('com.android.support:appcompat-v7:25.2.0')
compile('com.android.support:design:25.2.0')
compile 'com.jakewharton:butterknife:8.5.1'

giữ phiên bản hỗ trợ giống nhau là giải pháp đơn giản và loại trừ mô-đun không hoạt động đối với tôi.
Jay

Tôi đã giải quyết với giải pháp thứ hai là tốt! Cùng xung đột nhưng với Butter Knife phiên bản 8.8.1 Ví dụ: hiện thực ('com.jakewharton: butterknife: 8.8.1') {loại trừ mô-đun: 'support-compat'} annotationProcessor 'com.jakewharton: butterknife-compoder: 8.8.1'
GFPF

9

Trong trường hợp bất cứ ai phát hiện ra rằng câu trả lời từ CommonsWare không thể được áp dụng cho dự án thư viện Android, đây là đoạn trích để khắc phục

biên dịch (dự án (': yourAndroidL Library')) {loại trừ mô-đun: 'support-v13'}

Bạn sẽ tìm thấy vấn đề

Đã tìm thấy phương thức DSL Gradle không được hỗ trợ: 'loại trừ ()'

nếu bạn sử dụng dự án biên dịch (': yourAndroidL Library') {loại trừ mô-đun: 'support-v13'}

Sự khác biệt là vòng đeo tay "("")" trước "dự án" .


Cảm ơn, đã thiếu dấu ngoặc kép!
Marko

8
exclude module: 'support-v4'

Sẽ không làm việc cho tôi với một phụ thuộc dự án, cách duy nhất tôi có thể làm cho nó hoạt động là thông qua cú pháp sau:

configurations {
    dependencies {
        compile(project(':Android-SDK')) {
            compile.exclude module: 'support-v4'
        }
    }
}

Trong đó: Android-SDK là tên dự án của bạn.


8

Tôi gặp vấn đề tương tự và dường như ứng dụng của tôi có quá nhiều phương pháp vì các thư viện: http://developer.android.com/tools/building/multidex.html

Giải quyết nó với:

android {
   defaultConfig {
   ...
   multiDexEnabled = true
   }
}

Thêm ở đây Lỗi: Thực thi không thành công cho nhiệm vụ ': app: dexDebug'. > comcommand kết thúc với giá trị thoát khác không 2


1
Multidexing có thể làm cho ứng dụng của bạn khởi động tốc độ chậm hơn, chỉ sử dụng nó nếu bạn thực sự phải làm.
James Goodwin

6

Tôi cũng gặp lỗi tương tự nhưng đó là do gần đây tôi đã thay đổi từ việc sử dụng v4 sang v13. Vì vậy, tất cả những gì tôi phải làm là làm sạch dự án.


1
Có lỗi tương tự sau khi nâng cấp intellij, làm sạch dự án đã khắc phục vấn đề.
Vlad Spreys

5

Tôi đã có cùng một lỗi trên một dự án cũ. Lỗi của tôi là thư viện hỗ trợ đã được đưa vào hai lần: Một lần bên trong google-play-services lib và một cái khác là độc lập.

Đây là cách tôi sửa nó:

BAD build.gradle:

dependencies {
   compile files('libs/android-support-v4.jar') 
   compile files('libs/core-2.2.jar')
   compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
   compile 'com.google.android.gms:play-services:3.2.65'
}

Xây dựng tốt. Nâng cấp:

dependencies {
   // compile files('libs/android-support-v4.jar')  // not needed 
   compile files('libs/core-2.2.jar')
   compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
   compile 'com.google.android.gms:play-services:3.2.65'
}

Hy vọng nó sẽ giúp được ai đó :-)


3

Tôi đang sử dụng com.google.android.gms:play-services-analytics:8.3.0android-support-v13.jarkhông thể exclude module: 'support-v4'làm việc.

Điều làm việc cho tôi là sử dụng android-support-v13vật phẩm chứ không phải android-support-v13.jartập tin.

Tức là thay vì

dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile files('libs/android-support-v13.jar')

}

Tôi đã sử dụng

dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile ('com.google.android:android-support-v13')

}


3

Trong trường hợp của tôi, sự cố xảy ra do sự không nhất quán của phiên bản :

Build tools 25
compileSdk 24
targetSdk 24
Support library 24

Giải pháp rất đơn giản: Tạo mọi thứ phiên bản 25


3

Một vấn đề tương tự dex giải quyết phương pháp

gradle.build có chứa:

compile files('libs/httpclient-4.2.1.jar')
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'

Vấn đề đã được giải quyết khi tôi gỡ bỏ

compile files('libs/httpclient-4.2.1.jar') 

Lớp của tôi bây giờ trông như:

apply plugin: 'com.android.application'

android {

compileSdkVersion 24
buildToolsVersion "24.0.3"

defaultConfig {
    applicationId "com.mmm.ll"
    minSdkVersion 16
    targetSdkVersion 24
    useLibrary  'org.apache.http.legacy'
}

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}
}

dependencies {

compile 'com.google.android.gms:play-services:6.1.+'
compile files('libs/PayPalAndroidSDK.jar')
compile files('libs/ksoap2-android-assembly-3.0.0-RC.4-jar-with-dependencies.jar')
compile files('libs/picasso-2.1.1.jar')
compile files('libs/gcm.jar')
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
}

Có một sự dư thừa trong tệp JAR và dự án lớp được biên dịch

Vì vậy, sâu sắc tìm kiếm các tập tin phụ thuộc và jar có cùng lớp.

Và loại bỏ sự dư thừa.
Điều này làm việc cho tôi.


2

Nếu bạn đã nhập dự án của bạn từ Eclipse .

1. The select project 
2. Go to File -> **Project Structure**
3. Select app in **module** section on left hand panel
4. Select **Dependency** tab
5. Your able to see jars you have added in eclipse project for v4 and v13.
6. Remove that jar by clicking on minus sign at bottom after selection
7. Click on Plus sign select **Library Dependency** 
8. Choose V4 and V13 if added
9. Press Ok and Clean and Rebuild your project

Kịch bản mà tôi đã gặp phải sau khi nhập dự án Eclipse vào studio Android.

Hi vọng điêu nay co ich..


2

Đây là một vấn đề gây phiền nhiễu, có thể mất một thời gian để tìm ra trường hợp gốc. Cách bạn nên tiến hành là câu trả lời @CommonsWare.

Tôi đã đối mặt với vấn đề này gần đây và thấy nó khó giải quyết.

Vấn đề của tôi là tôi đã bao gồm một thư viện theo phiên bản "+" trong build.gradle. Phiên bản mới nhất của thư viện chứa một trong những dex và bang cũ.

Tôi trở lại phiên bản cũ của thư viện và giải quyết nó.

Nó là tốt để chạy androidDependencies của bạn và xem những gì đang thực sự xảy ra. Nó cũng tốt để tìm kiếm trong thư mục xây dựng của bạn.

Trên tất cả Android Studio 2.2 cung cấp các tính năng xây dựng để theo dõi vấn đề này.

Chúc mừng chàng trai mã hóa


2

Trong Android Studio, hãy truy cập tệp build.gradle của bạn (kiểm tra cả tệp dự án và mô-đun build.gradle) và tìm kiếm các phụ thuộc trùng lặp.

Xóa những dự án của bạn không cần.


2

Xóa tất cả các tệp khỏi bộ đệm Gradle đã khắc phục vấn đề của tôi.

trên Linux:

rm -rf ~/.gradle/caches/*

1

Tôi đã xóa biên dịch 'com.android.support:support-v4:18.0.+' trong phần phụ thuộc và nó hoạt động


2
đây nên là một bình luận hoặc nếu không bạn nên giải thích nó một cách tốt hơn.
Anirudh Sharma

1

Tôi đã có thể giải quyết vấn đề trong dự án gốc phản ứng của mình bằng cách thêm

configurations {
        all*.exclude group: 'com.android.support', module: 'support-compat'
        all*.exclude group: 'com.android.support', module: 'support-core-ui'
    }

ở cuối tệp android \ app \ build.gradle của tôi


0

Cuối cùng, tôi đã giải quyết nó sửa đổi các thuộc tính này trên tệp lớp mô-đun

  1. biên dịchSdkVersion 25
  2. mục tiêuSdkVersion 25
  3. biên dịch 'com.android.support:appcompat-v7:+'
  4. biên dịch 'com.android.support:recyclerview-v7:+'

0

Tôi gặp vấn đề tương tự khi thêm react-native-palettevào dự án của mình, đây là cây phụ thuộc của tôi:

./gradlew app:dependencies
+--- project :react-native-palette
|    +--- com.facebook.react:react-native:0.20.+ -> 0.44.2
|    |    +--- javax.inject:javax.inject:1
|    |    +--- com.android.support:appcompat-v7:23.0.1
|    |    |    \--- com.android.support:support-v4:23.0.1
|    |    |         \--- com.android.support:support-annotations:23.0.1 -> 24.2.1
...
|    \--- com.android.support:palette-v7:24.+ -> 24.2.1
|         +--- com.android.support:support-compat:24.2.1
|         |    \--- com.android.support:support-annotations:24.2.1
|         \--- com.android.support:support-core-utils:24.2.1
|              \--- com.android.support:support-compat:24.2.1 (*)
+--- com.android.support:appcompat-v7:23.0.1 (*)
\--- com.facebook.react:react-native:+ -> 0.44.2 (*)

Tôi đã thử nhiều solutons và không thể sửa nó, cho đến khi thay đổi com.android.support:appcompatphiên bản android/app/build.gradle, tôi ước điều này có thể giúp:

dependencies {
    compile project(':react-native-palette')
    compile project(':react-native-image-picker')
    compile project(':react-native-camera')
    compile fileTree(dir: "libs", include: ["*.jar"])
    // compile "com.android.support:appcompat-v7:23.0.1"
    compile "com.android.support:appcompat-v7:24.2.1"
    compile "com.facebook.react:react-native:+"
}

Có vẻ như nhiều mục không phải là một vấn đề lớn, phiên bản không khớp


0

Làm cho nó hoạt động cho một compile file('...')cuộc xung đột bằng cách tăng minSdkVersion lên 21 và cho phép multidex. Không chắc đó có phải là giải pháp tốt nhất không nhưng cách duy nhất tôi có thể khiến nó hoạt động trong trường hợp của mình.

Lưu ý: vì compile file('...')có vẻ như bạn không thể đặt một excludemệnh đề để tùy chọn đó không khả dụng.


0

Tôi gặp vấn đề tương tự và giải pháp của tôi là thay đổi phiên bản hỗ trợ '27. + '(27.1.0) thành '27 .0.1'


0

Tôi đã có cùng một vấn đề. Trong dự án của tôi, tôi đã có các phụ thuộc sau:

  • appcompat-v7
  • hỗ trợ android-v13

Vì lý do cũ, appcompat đã được tải xuống từ repo Google Maven, trong khi hỗ trợ Android là .jar.

Khi tôi tìm ra điều này và thay thế tham chiếu cục bộ này bằng một tham chiếu maven, nó chỉ giải quyết được vấn đề xây dựng của tôi.

Đây là khác biệt của ứng dụng / build.gradle của tôi:

nhập mô tả hình ảnh ở đây


0

Tôi đã giải quyết tất cả các vấn đề của mình bằng cách thêm vấn đề này vào dự án.

cordova.system.library.7=com.android.support:appcompat-v7:27.1.0

0

Nhận được lỗi sau

Thực thi không thành công cho nhiệm vụ ': app: TransformDexArchiveWithDexMergerForDebug'.

com.android.build.api.transform.TransformException: com.android.dex.DexException: Nhiều tệp dex xác định Landroid / support / ràng buộc / Constraintset $ 1

Khắc phục: đi đến Xây dựng -> Dự án sạch


Xin chào Chào mừng đến với Stack Overflow. Nhưng xin vui lòng không lặp lại câu trả lời, ngoài việc đã có 24 câu trả lời, việc xây dựng sạch sẽ được cung cấp như một câu trả lời của ashishduh. Cảm ơn!
Elletlar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.