DexException: Không thể hợp nhất chỉ mục mới 65536 thành một lệnh không jumbo


84

Vì một số lý do không xác định, ứng dụng của tôi đột nhiên không tạo được từ Android Studio.

Tôi tiếp tục nhận được

> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    /home/martynas/android-sdk/build-tools/19.1.0/dx --dex --num-threads=4 --output
...
...
...
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Cannot merge new index 65536 into a non-jumbo instruction!

Trong khi cùng một ứng dụng được xây dựng thành công từ dòng lệnh. Tôi đã kiểm tra số lượng tham chiếu phương thức và nó nằm dưới mức 64k đáng sợ.

Tôi đang sử dụng AS 0.8.11 bây giờ.

Câu trả lời:


57

Cố gắng thêm dòng này vào dự án của bạn.

dex.force.jumbo = true

Điều này làm tăng giới hạn cho các chuỗi trong tệp dex. Và dự án của bạn có thể sẽ biên dịch.

Lưu ý: Cũng với jumbo set, giới hạn khác là 64K chỉ dành cho các phương thức trong một dex duy nhất. Nếu bạn nhận được giới hạn này trong tương lai, bạn sẽ cần phải xóa một số phụ thuộc.

Cập nhật - Dịch vụ của Google Play 6.5 (12-08-14)

Với phiên bản 6.5, Google cuối cùng đã bỏ nhóm các Dịch vụ của Google Play. Vì vậy, từ bây giờ, bạn sẽ có thể biên dịch một cách chọn lọc các API thành tệp thực thi của bạn.

Thí dụ :

compile 'com.google.android.gms:play-services-maps:6.5.+'
compile 'com.google.android.gms:play-services-ads:6.5.+'

Đối với tất cả các API dịch vụ Google Play riêng lẻ khác, hãy kiểm tra trang này trên d.android.com.

Cập nhật (21-04-2015): https://developer.android.com/tools/building/multidex.html


11
Thêm vào project.propertiesđã không làm việc vì vậy tôi cập nhật build gradle tôi kịch bản như đã mô tả ở đây: stackoverflow.com/questions/17320088/...
Martynas Jurkus

1
Tôi đã thực hiện cả hai giải pháp: thêm thuộc tính dex.force.jumbo và dexOptions nhưng tôi vẫn nhận được lỗi tương tự. Một lựa chọn khác?
Juan Saravia,


Cảm ơn @HareshChhelana. Vì lý do nào đó mà nó bắt đầu hoạt động .. nhưng tôi thực sự không làm được gì đặc biệt. Tôi có một số đồng nghiệp đang biên dịch dự án mà không có tùy chọn này, nhưng bây giờ nó đang làm việc cho tôi. Cảm ơn!
Juan Saravia,

1
thay vì biên dịch toàn bộ dịch vụ Google Play, tôi tìm thấy bằng cách sử dụng 'cơ sở' bó để có ích, để ở dưới giới hạn 65K dex:compile 'com.google.android.gms:play-services-base:7.3.0'
kip2

245

Đặt thuộc tính jumboMode trong build.gradle:

android {
    ...
    dexOptions {
        jumboMode true
    }

}

Tôi cũng thấy điều này hữu ích: Hiển thị số phương thức dex theo gói .


12
Cảm ơn! Nó cũng có tác dụng với tôi. Nhưng "jumboMode" này có nghĩa là gì?
yital9

3
@ yital9, bạn có thể tìm hiểu thêm về chế độ jumbo tại đây: stackoverflow.com/a/30517283/4034572
Albert Vila Calvo

vui lòng giải thích lý do cho khối này
eC Droid

Tôi đã thêm điều này vào bên trong loại xây dựng gỡ lỗi một mình vì phiên bản phát hành diễn ra tốt đẹp, vì proguard. Bản sửa lỗi đã diễn ra tốt đẹp sau khi sửa đổi này. Điều này có ổn không?
garnet

1
Điều này làm việc cho tôi. Lưu ý rằng build.gradle sẽ được thay đổi phải là mô-đun ném com.android.dex.DexException.
Francis Bacon,

54

Điều này làm việc cho tôi. Tôi đã nhận đượccom.android.dex.DexIndexOverflowException: Cannot merge new index 66636 into a non-jumbo instruction!

android {
    ...
    dexOptions {
        jumboMode true
    }
}

Nếu điều này không hoạt động, bạn có thể đã đạt đến giới hạn tham chiếu phương thức trong dex, đây là một vấn đề khác. Bạn cần sử dụng multidex hoặc proGuard.


Nó làm việc cho tôi. Cảm ơn!!! nhưng 'jumboMode' là gì? Bạn có thể vui lòng giải thích cho tôi được không? @Sayooj
DG

13

Đây là một lỗi trong quá trình hợp nhất khi các tệp dex đang được hợp nhất có hơn 65536 chuỗi. Chỉ mục mới không thể phù hợp với lệnh const-string và sự hợp nhất dex không hỗ trợ thay đổi hướng dẫn nếu chúng có kích thước khác nhau, vì vậy nó không thể được mở rộng thành lệnh const-string / jumbo. Điều này đã được khắc phục trong jb-mr1 bằng cách thêm một tùy chọn mới: --force-jumbo. Lỗi này có thể được sửa bằng cách thêm "dex.force.jumbo=true"vào project.properties.


1
@DeepakSharma Bạn phải dọn dẹp dự án của mình sau khi bật jumboMode
Lilo

-1

Với Android Studio mới nhất và gắn cờ "force jumbo" được kiểm tra trên cài đặt trình biên dịch Android Studio, sự cố này sẽ biến mất.


3
Nếu có thể, hãy thêm một số chi tiết trong câu trả lời của bạn, làm ơn.
shA.t
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.