2014-05-20 9 views
6

Tôi đã gặp lỗi này và không tìm thấy lần truy cập cho thông báo lỗi, vì vậy tôi nghĩ tôi sẽ chia sẻ giải pháp mà tôi đã đưa ra để cứu bất kỳ ai khác đang gặp phải vấn đề lặp lại công việc của tôi."đầu ra viết rắc rối: Quá nhiều tham chiếu trường: 70185; tối đa là 65536. Bạn có thể thử sử dụng tùy chọn --multi-dex". khi xây dựng dự án Android

Khi viết một thư viện Android mới (apklib) để sử dụng trong một ứng dụng (lớn), tôi nhận được lỗi sau trong Dexing khi tôi thêm dự án mới của tôi như là một sự phụ thuộc:

rắc rối bằng văn bản đầu ra : Quá nhiều tham chiếu trường: 70185; tối đa là 65536.
Bạn có thể thử sử dụng tùy chọn --multi-dex.
Tài liệu tham khảo bằng cách gói:
< ... danh sách dài các gói có số lĩnh vực elided ... >

Việc xây dựng bước cụ thể nó không thành công trên là:

java -jar $ANDROID_SDK/build-tools/19.0.3/lib/dx.jar --dex \ 
--output=$PROJECT_HOME/target/classes.dex \ 
<... long list of apklib and jar dependencies elided ...> 

Sử dụng --multi-dex theo khuyến cáo bởi thông báo lỗi có thể là một giải pháp, nhưng tôi không phải là chủ sở hữu của dự án ứng dụng và nó đã có một quy trình xây dựng phức tạp lớn mà tôi sẽ ngần ngại thay đổi bất kể.

Tôi có thể tạo lại vấn đề này với dự án thư viện thử nghiệm không có op, không có trường nào, nhưng trong đầu ra lỗi được liệt kê là có 6000 trường. Trong số các gói được liệt kê trong đầu ra lỗi, có một số ít với số lượng trường 6k + tương tự, nhưng sau đó đại đa số có số lượng trường 1k đáng tin cậy hơn < 1k.

Sự cố này tương tự như sự cố "Quá nhiều phương pháp" Facebook famously hacked their way around. Giải pháp FB có vẻ điên rồ và các giải pháp khác tôi đã tìm thấy (ví dụ: this Android bug ticket, or this one, this SO answer, this other SO answer) tất cả đều liên quan đến việc thay đổi mã của ứng dụng chính vượt quá phạm vi của những gì tôi muốn làm.

Có giải pháp nào khác không?

Trả lời

2

Giải pháp là thay đổi package trong AndroidManifest để phù hợp với gói ứng dụng chính.

Một biểu hiện như thế này:

<manifest package="com.example.testlibrary" ... 

dẫn đến 6k + lĩnh vực xây dựng và thất bại. Thay đổi nó để phù hợp với gói ứng dụng chính

dẫn đến việc xây dựng dự án thành công. Lưu ý rằng chỉ có gói trong tệp kê khai đang thay đổi, tôi đã không thực hiện bất kỳ thay đổi nào đối với nguồn Java của thư viện hoặc bố cục của nó (gói Java vẫn là com.example.testlibrary với cấu trúc thư mục để khớp).

Tôi giả thuyết rằng tên gói khác nhau đang khiến tất cả các trường Android được bao gồm lại trong gói đó. Tất cả các gói trong danh sách lỗi với các trường 6k + có tên gói khác với ứng dụng chính.

Tôi cũng (sau này, grr), được tìm thấy this blog post chi tiết cùng một vấn đề và cùng một giải pháp tương tự.

+0

Làm cách nào để thực hiện việc này? Tôi đã cố gắng đổi tên gói thành một thứ khác, nhưng tôi vẫn có lỗi tương tự, .... Tôi thực sự có thể sử dụng thông tin bổ sung về cách bạn làm việc này để làm việc – user198923

Các vấn đề liên quan