2012-02-06 34 views
10

Tôi mới dùng Android, cố gắng khởi chạy dự án đang được xây dựng và triển khai tốt. Nhưng mỗi khi tôi cố gắng bắt đầu ứng dụng từ nhật thực, tôi nhận được lỗi này:NGOẠI TRỪ TUYỆT VỜI NGOẠI HỐI: java.lang.IllegalArgumentException: đã thêm

UNEXPECTED TOP-LEVEL EXCEPTION: 
java.lang.IllegalArgumentException: already added: Lcom/.../model/AvailabilityRequest$DAY_TIME_PREFERENCE; 
[2012-02-06 17:32:11 - main-app] Dx  at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) 
[2012-02-06 17:32:11 - main-app] Dx  at com.android.dx.dex.file.DexFile.add(DexFile.java:163) 
[2012-02-06 17:32:11 - main-app] Dx  at com.android.dx.command.dexer.Main.processClass(Main.java:486) 
... 
[2012-02-06 17:32:11 - main-app] Dx  at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) 
[2012-02-06 17:32:11 - main-app] Dx 1 error; aborting 
[2012-02-06 17:32:11 - main-app] Conversion to Dalvik format failed with error 1 

Tôi đã giết rất nhiều thời gian cho điều ngu ngốc này. Rõ ràng, điều này được biết đến vấn đề, nhưng không có gì làm việc cho tôi.
Những gì tôi có:

Hệ điều hành - OS X, điều quan trọng là tôi nghĩ;
IDE - eclipse 3.7.1
ADT - Phiên bản: 15.0.1.v201111031820-219398
công cụ xây dựng - Maven

Những gì tôi đã cố gắng cho đến nay:
- Properties-> Java Build Path -> Thư viện để loại bỏ tất cả các thư viện ngoại trừ Android xyz, sau đó Maven-> Cập nhật cấu hình dự án, cũng để làm sạch dự án;
- Ma thuật với đóng và mở lại nhật thực;
- Các điệu nhảy xóa và tạo lại dự án và thư viện cho nó (theo văn bản thông báo lỗi, có một số nguồn trùng lặp, nằm trong một trong 2 thư viện, được sử dụng trong dự án chính).

Sau một trong các biến thể ở trên (thường là phiên bản thứ nhất) bắt đầu hoạt động, nhưng tôi có thể dành 20 phút để làm việc hoặc vài giờ ..., hôm nay tôi không thể làm được.

Bất kỳ ý tưởng nào cũng sẽ được đánh giá cao.

+0

Tìm thấy: http://code.google.com/p/android/issues/detail?id=20398#c22 Có vẻ như có liên quan đến nó. – makaron

+0

Bạn đang sử dụng m2e-android phải không? –

+0

Nếu vậy bạn có thể muốn chỉnh sửa câu hỏi của mình để làm cho câu hỏi này rõ ràng hơn. –

Trả lời

3

Vâng, theo như tôi hiểu, điều chính ở đây là tôi đã sử dụng maven làm công cụ xây dựng. Tôi có thể xây dựng và triển khai dự án mà không có bất kỳ vấn đề gì, nhưng tôi không thể bắt đầu nó từ môi trường (nhật thực).

Nếu tôi không sai, khi bạn đi đến của eclipse Run-> Run Configurations và tạo ra một Android Application để khởi động dự án của bạn, về cơ bản bạn hỏi eclipse (Android SDK) để xây dựng các .apk với Ant cho bạn, không phải với maven. Eclipse xây dựng dự án với Ant và đẩy tệp .apk được tạo ra vào thiết bị/trình mô phỏng. Nhưng vì tất cả các thiết lập của dự án đều nằm trong .pom tệp, Ant không thể tạo dự án và cung cấp các lỗi thuộc loại này.

Giải pháp:
Bắt đầu ứng dụng của bạn ngay từ thiết bị/mô phỏng sau khi bạn triển khai nó, chứ không phải thông qua Run menu. Nếu bạn muốn gỡ lỗi ứng dụng của mình, hãy sử dụng gỡ lỗi DDMS, chứ không phải nhật thực cung cấp. Trong trường hợp bạn không biết DDMS ở đâu (như tôi trong trường hợp của tôi) - trong Mac nó là Window-> Open Perspective-> Other ... chọn DDMS từ menu; bạn có thể đặt dấu trang làm dấu trang cùng với nhật thực Gỡ lỗiJava. Trong DDMS bạn sẽ tìm thấy tất cả các công cụ tuyệt vời, bao gồm gỡ lỗi.

P.S. Đây là câu trả lời từ người mới bắt đầu và cho người mới bắt đầu ... Nếu bạn thấy điều gì đó mà tôi sai, hãy cho tôi biết hoặc cảm thấy tự do để chỉnh sửa câu trả lời của tôi.

6

ADT sẽ ném một ngoại lệ như thế này nếu đường dẫn lớp Eclipse của bạn chứa nhiều hơn một lớp cùng tên/gói. Trong trường hợp này, nó đang gặp phải nhiều trường hợp của lớp AvailabilityRequest trong các phụ thuộc Maven của bạn.

Bạn có thể giải quyết vấn đề này bằng cách tìm phụ thuộc classpath nào chứa cùng một tệp lớp trong đó (nhấn Ctrl-Alt-T và nhập AvailabilityRequest sẽ thực hiện việc này).

Sau đó bạn có thể mở POM trong trình soạn thảo POM m2e và chuyển đến tab Phân cấp phụ thuộc. Điều này sẽ cho phép bạn chọn sự phụ thuộc không liên quan, sau đó bạn có thể loại trừ bằng cách nhấp chuột phải và chọn "Loại trừ Maven Artifact ..." sẽ tự động thêm phần tử <exclusions> vào POM của bạn. Điều này sẽ loại bỏ JAR trùng lặp khỏi đường dẫn lớp Eclipse của bạn và cho phép bạn xây dựng dự án của bạn.

Ngoài ra, bạn nên cẩn thận về những phụ thuộc bạn thêm vào POM của mình.

+0

Thử điều này, cảm ơn! – makaron

+1

Ricardo, cảm ơn sự hỗ trợ của bạn (+1), tôi không tìm ra giải pháp, nhưng cách tôi đã làm: nó cho phép tôi gỡ lỗi ứng dụng, đó là mục đích của tất cả điều này. – makaron

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