Các thư viện không được thêm vào APK nữa sau khi nâng cấp lên ADT 22


238

Tôi có một dự án Ứng dụng Android khá lớn đang tham khảo một số dự án thư viện. Mọi thứ đều ổn cho đến khi tôi nâng cấp plugin ADT nhật thực lên phiên bản mới nhất (v22). Tôi cũng đã nâng cấp SDK tất nhiên. Tôi không thấy bất kỳ lỗi biên dịch nào trong nhật thực, nhưng khi tôi chạy dự án trên điện thoại, tôi nhận được NoClassDefFoundError.

java.lang.NoClassDefFoundError: org.acra.ACRA
....

Thư viện arca được bao gồm trong một trong các dự án thư viện được tham chiếu (trong thư mục libs) và tôi có thể thấy nó trong "Thư viện riêng Android" trong trình thám hiểm gói, như tôi đã nói, không có lỗi biên dịch. Dự án chạy tốt trên máy tính của những người khác không nâng cấp ADT.

Tôi đã thử cả đống thứ bao gồm nhưng không giới hạn ở:

  • cài đặt lại SDK Android
  • tải xuống gói ADT mới
  • xóa tất cả mã của tôi và lấy lại từ git
  • sao chép thư viện trong câu hỏi vào dự án ứng dụng
  • nhận xét mã sử dụng thư viện này - tôi chỉ gặp lỗi tương tự cho thư viện tiếp theo

tất cả mà không có bất kỳ thành công, vì vậy tôi đang thực sự tuyệt vọng ở đây.

Tôi sẽ thực sự hạnh phúc nếu bất cứ ai có thể cho tôi một gợi ý về cách giải quyết vấn đề đó.

Câu trả lời:


337

Trích dẫn đường phố Boston từ bài đăng quảng cáo của mình :

Khi nâng cấp, 'Đặt hàng và Xuất' của 'Thư viện riêng Android' mới không phải lúc nào cũng được kiểm tra. Và android-support-v4.jar hiện nằm trong phần 'Thư viện riêng của Android' này.

Để khắc phục điều này, hãy truy cập 'Đặt hàng và Xuất' và kiểm tra 'Thư viện riêng của Android'. Sau đó làm mới / làm sạch / xây dựng lại.

Sau khi bạn thực hiện 'sửa chữa' này cho một dự án thư viện, bạn có thể chỉ cần đóng và mở lại bất kỳ dự án tùy thuộc nào, bởi vì họ có thể không thấy 'sửa chữa' này ngay lập tức.

Đưa ra một cú đánh và với may mắn nó sẽ giải quyết vấn đề của bạn.

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


32
CommonsWare giống như luôn là một trong những người tiên phong đầu tiên, cảm ơn bạn rất nhiều! :)
Paul Wein

1
Avery phiên bản ADT mới là một bất ngờ mới;) Hy vọng hệ thống xây dựng mới sẽ tốt hơn. Cảm ơn bạn CommonsWare
lujop

3
Có phải chỉ mình tôi hay nghe có vẻ sai khi mọi Nhà phát triển [sử dụng Thư viện và Thư viện] đi vào tất cả các dự án thư viện của họ và đánh dấu "Thư viện riêng của Android" là Xuất khẩu? Điều này khiến tôi nghĩ rằng tất cả chúng ta đã nhầm lẫn ý định Google thêm "tính năng" mới này ngay từ đầu. Có lẽ chúng ta không nên đánh dấu các Thư viện là Xuất khẩu. Có lẽ chúng tôi phải thêm bất kỳ tệp jar bị thiếu trực tiếp vào thư mục "libs" của chúng tôi. Ví dụ: Điều này sẽ cho phép dự án thư viện của tôi sử dụng android-support-v4.jar [v13] mới nhất, trong khi đó, ABS sử dụng android-support-v4-12.jar.
swooby

2
@swooby: "Chỉ có tôi, hoặc nghe có vẻ sai khi mọi Nhà phát triển [sử dụng Thư viện và Thư viện] đi vào tất cả các dự án thư viện của họ và đánh dấu" Thư viện riêng của Android "là Xuất khẩu?" - đó là "sai" trong chừng mực vì nó là một lỗi, được thừa nhận bởi những người đã viết các công cụ. "Có lẽ chúng tôi phải thêm trực tiếp bất kỳ tệp jar bị thiếu nào vào thư mục" libs "của chúng tôi - ồ, bạn cũng cần phải làm điều đó, như bạn đã làm trong năm qua và thay đổi. Tuy nhiên, bạn vẫn phải kiểm tra hộp kiểm này.
CommonsWare

9
@Phillip: AFAIK, đó là tất cả các dự án. Chính xác hơn, tôi cho rằng, đó là tất cả các dự án có nội dung libs/, nhưng bạn cũng có thể kiểm tra tất cả, trong trường hợp bạn thêm công cụ vào libs/một vài tháng sau đó và quên đi điều này.
CommonsWare

10

Đơn giản chỉ cần kiểm tra Thư viện riêng của Android là không đủ, tôi cũng phải cài đặt các công cụ xây dựng SDK Android trong Trình quản lý SDK Android.


Tôi không thể xác nhận điều này là bắt buộc, nhưng tôi đã không vượt qua được lỗi SimonSays gặp phải trước khi cài đặt nó. Nó chỉ có thể yêu cầu cài đặt đúng các hộp kiểm xuất như được mô tả ở trên, nhưng tôi cảm thấy nên đề cập rằng tôi đã thực hiện cài đặt Công cụ xây dựng.
siết cổ

cái này hiệu quả với tôi chỉ thay đổi tùy chọn nhật thực là không đủ. Bạn có thể cần kiểm tra các công cụ xây dựng đã cài đặt trong trình quản lý SDK Android.
Stevens

4

Tôi cũng có cùng một vấn đề và tôi adtđã 22.0.1. Và không có giải pháp nào ở trên có hiệu quả. Hơn nữa khi thêm dự án thư viện bên ngoài vào dự án làm việc. Tôi luôn kiểm tra genthư mục của dự án làm việc và nếu Rdự án thư viện bên ngoài có ở đó (cùng với tên gói), thì chỉ xuất dự án thư viện bên ngoài. Và trên genthư mục của tôi không có packagenamethư viện bên ngoài được hiển thị.

Vì vậy, tôi đã kiểm tra trên project.propertieshồ sơ và không có bất kỳ liên kết thư viện bên ngoài nào hiện android.library.reference.1=diện. Vì vậy, tôi đã thêm thủ công thư viện bên ngoài vào đó, mặc dù tôi đã thêm từ đó project->properties->Java Build Path->Projects->Add. Vì vậy, chỉnh sửa thủ công project.propertiesđã làm tất cả công việc cho tôi.

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


1
Tôi nghĩ rằng nó đã xảy ra kể từ khi diễn ra gui để thiết lập android.library.reference.nkhông java build path , nhưng đúng hơn project-> properties-> Android-> Library-> Add.... Một gotcha .
n611x007

4

Tôi đã gặp phải một vấn đề tương tự, mất khoảng 3 giờ, nhưng không có quyết định nào được đề xuất ở đây không giúp được gì ... Cuối cùng tôi đã tìm thấy một nguồn của vấn đề: các tệp dự án & dự án của tôi chỉ đọc. Eclipse chỉ đơn giản là âm thầm bỏ qua mọi thay đổi trong phụ thuộc thư viện khi tôi thực hiện nó trong GUI!


3

Tôi đã từng gặp vấn đề tương tự. Đó là vì dự án nhật thực. Để giải quyết nó, tôi đã tạo một dự án mới trong nhật thực, sao chép các lớp và tài nguyên dự án hiện có của tôi vào đó và sau đó khởi chạy lại nhật thực và thêm tùy chỉnh của tôi bao gồm.


1
Quá nhiều rắc rối, giải pháp của CommonsWare đã làm việc cho tôi và tôi tin rằng nó cũng sẽ có hiệu quả với bạn.
Nhím

2

Tôi đã có vấn đề tương tự và câu trả lời của tôi hơi khác so với của CommonsWare. Đây là ảnh chụp màn hình của tôi:

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

Sau khi kiểm tra các lib trở lại trong bản dựng của tôi bắt đầu hoạt động trở lại.


2
Tôi sẽ cẩn thận với giải pháp này. Android Dependenciesđã được thay thế bởi Android Private Librariesvà có thể chỉ còn ở đó vì lý do di sản. Tôi đoán nó có thể được gỡ bỏ bất cứ lúc nào.
SimonSays

0

Tôi cũng có vấn đề tương tự,

i) thêm gson lib làm giới thiệu librairies
ii) kiểm tra nó trong java Build Path http://i.stack.imgur.com/Gldhs.png

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.