2011-10-05 14 views
8

Khi tôi làm sạch dự án của tôi tôi nhận được lỗi sau:sử dụng rất thiếu khôn ngoan hoặc nhầm lẫn của một lớp lõi (java * hoặc javax *..) Khi không xây dựng một thư viện lõi

[2011-10-05 13:47:53 - The Basics] Dx 
trouble processing "java/nio/CharBuffer.class": 

Ill-advised or mistaken usage of a core class (java.* or javax.*) 
when not building a core library. 

này thường là do vô tình bao gồm một tệp thư viện lõi trong dự án của ứng dụng của bạn, khi sử dụng một IDE (chẳng hạn như Eclipse). Nếu bạn chắc chắn rằng bạn không cố ý định nghĩa một lớp học chính là , thì đây là giải thích có khả năng nhất về những gì đang xảy ra với số .

Tuy nhiên, bạn thực sự có thể đang cố gắng xác định một lớp trong không gian tên chính , nguồn mà bạn có thể đã thực hiện, ví dụ: từ dự án máy ảo không phải của Android. Điều này sẽ hầu hết các chắc chắn không hoạt động. Tối thiểu, nó gây nguy hiểm cho khả năng tương thích của ứng dụng của bạn với các phiên bản nền tảng trong tương lai. Nó cũng thường có tính pháp lý đáng ngờ.

Nếu bạn thực sự có ý định xây dựng một thư viện lõi - đó là chỉ thích hợp như là một phần của việc tạo ra một máy ảo đầy đủ phân phối, như trái ngược với biên dịch một ứng dụng - sau đó sử dụng các "--core-thư viện" tùy chọn để ngăn chặn thông báo lỗi này.

Nếu bạn tiếp tục và sử dụng "--core-library" nhưng thực tế là xây dựng một ứng dụng, sau đó được cảnh báo rằng ứng dụng của bạn vẫn không thể xây dựng hoặc chạy, tại một số thời điểm. Vui lòng được chuẩn bị cho những khách hàng tức giận, những người tìm thấy, ví dụ: ứng dụng của bạn ngừng hoạt động khi họ nâng cấp hệ điều hành của họ. Bạn sẽ phải đổ lỗi cho vấn đề này.

Nếu bạn đang sử dụng hợp pháp một số mã xảy ra trong gói lõi , thì giải pháp thay thế an toàn dễ nhất mà bạn có là đóng gói lại mã đó. Tức là, di chuyển các lớp được đề cập vào không gian tên gói của riêng bạn. Điều này có nghĩa là họ sẽ không bao giờ bị xung đột với các lớp hệ thống cốt lõi. JarJar là một công cụ có thể giúp bạn trong nỗ lực này. Nếu bạn thấy rằng bạn không thể làm điều này, thì đó là dấu hiệu cho biết đường đi của bạn sẽ cuối cùng là dẫn đến đau đớn, đau khổ, đau buồn và than thở.

[2011-10-05 13:47:53 - The Basics] Dx 1 error; aborting 
[2011-10-05 13:47:53 - The Basics] Conversion to Dalvik format failed with error 1 

Trả lời

1

IDE của bạn bị định cấu hình sai. Đảm bảo rằng tập lệnh hoặc IDE của bạn không chuyển qua rt.jar hoặc android.jar đến dx.

4

Tôi gặp sự cố này. Tôi sử dụng Maven để xây dựng các dự án Android của mình. Vấn đề của tôi là do một trong những phụ thuộc của tôi phụ thuộc vào lọ android. Tôi cập nhật pom của tôi để loại trừ android khỏi sự phụ thuộc đó và giải quyết nó cho tôi.

<dependency> 
     <groupId>org.reassembler</groupId> 
     <artifactId>synth-android</artifactId> 
     <version>2.5.8</version> 
     <exclusions> 
      <exclusion> 
       <artifactId>junit</artifactId> 
       <groupId>junit</groupId> 
      </exclusion> 
      <exclusion> 
       <artifactId>android</artifactId> 
       <groupId>android</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

Hy vọng điều này sẽ giúp ai đó, tôi mất một lúc để tìm hiểu điều gì đang diễn ra.

+0

Cảm ơn câu trả lời này ... JUnit là nguyên nhân gây ra lỗi cho tôi. – tantalum

2

Vì lợi ích của bất kỳ ai có thể đã tình cờ gặp phải vấn đề này, vấn đề này có thể do việc đưa vào thư viện cũ như android.jar. Xóa tệp .jar khỏi đường dẫn của bạn sẽ cho phép bạn biên dịch. Nếu không, bạn có thể sử dụng "jarjar" được đề cập trong thông báo lỗi để di chuyển tệp .jar sang gói khác.

+0

Tóm lại, điều này là chính xác. bạn có thể phải thực hiện thêm một vài bước nữa. CẬP NHẬT! :) –

0

Trong Android Studio, tôi đã đưa tệp java và javax jar vào thư mục lib của mình và có các phụ thuộc liên quan đến chúng (trong build.gradle ở cấp ứng dụng). Tôi nhận xét chúng.

//compile files('libs/ K java-rt-jar-stubs-1.5.0.jar') 
//compile 'javax.annotation:jsr250-api:1.0' 
//compile files('libs/javax. annotation.jar') 

Sau đó, tôi đã chuyển đến Chế độ xem dự án và xóa các tệp jar. Có một số trường hợp kế thừa của java.awt.geom mà tôi đã phải thanh lọc, nhưng dự án xây dựng lại và sau đó tôi đã được sử dụng tốt.

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