Thêm thư viện / JAR vào dự án Android Eclipse


130

Đây là một câu hỏi gồm hai phần về việc thêm thư viện của bên thứ ba (JAR) vào dự án Android trong Eclipse.

Phần đầu tiên của câu hỏi là, khi tôi cố gắng thêm JAR (thư viện) của bên thứ ba vào dự án Android của mình, trước tiên tôi gặp vấn đề về

Lỗi phân tích cú pháp XML: tiền tố không liên kết

bởi vì tôi đang cố gắng sử dụng một lớp từ JAR đó (và cần tiền tố được xác định bằng cách nào đó). Chuyện gì đang xảy ra vậy?

Thứ hai, (sau khi sửa lỗi đó - câu trả lời được đưa ra bên dưới), ứng dụng của tôi không hoạt động trên Android và tôi phát hiện ra thông qua trình gỡ lỗi (LogCat) mà lớp tôi đang cố gắng tiêu thụ không tồn tại.

Nguyên nhân bởi: java.lang.ClassNotFoundException: com.github.droidfu.widgets.WebImageView ...

Tại sao, khi tôi không gặp lỗi biên dịch hoặc trình liên kết trong Eclipse, nó có vấn đề này trên trình giả lập không?

Hai câu hỏi này là những lời hoa mỹ cho việc tôi sẽ tự trả lời chúng dưới đây. Các bài viết khác trong diễn đàn này leo lên vấn đề và ở nơi khác có thảo luận, nhưng tôi cảm thấy rằng tôi có thể hữu ích rõ ràng hơn cho anh chàng tiếp theo đi cùng.

Câu trả lời:


316

Bây giờ cho vấn đề lớp thiếu.

Tôi là một nhà phát triển Java EE của Eclipse và đã có thói quen trong nhiều năm thêm các thư viện của bên thứ ba thông qua cơ chế "Thư viện người dùng" trong Đường dẫn xây dựng. Tất nhiên, có ít nhất 3 cách để thêm thư viện của bên thứ ba, cách tôi sử dụng là thanh lịch nhất, theo quan điểm khiêm tốn của tôi.

Tuy nhiên, điều này sẽ không hoạt động đối với Android, mà Dalvik "JVM" không thể xử lý một lớp do Java biên dịch thông thường, nhưng phải chuyển đổi nó sang một định dạng đặc biệt. Điều này không xảy ra khi bạn thêm một thư viện theo cách tôi sẽ không làm điều đó.

Thay vào đó, hãy làm theo các hướng dẫn (có sẵn rộng rãi) để nhập thư viện của bên thứ ba, sau đó thêm nó bằng cách sử dụng Đường dẫn xây dựng (làm cho nó được biết đến với mục đích biên dịch). Đây là từng bước:

  1. Tải thư viện về hệ thống phát triển máy chủ của bạn.
  2. Tạo một thư mục mới, libs , trong dự án Eclipse / Android của bạn.
  3. Bấm chuột phải vào libs và chọn Nhập -> Chung -> Hệ thống tệp, sau đó Tiếp theo, Duyệt trong hệ thống tệp để tìm thư mục mẹ của thư viện (ví dụ: nơi bạn đã tải xuống).
  4. Bấm OK, sau đó bấm vào tên thư mục (không phải hộp kiểm) trong khung bên trái, sau đó kiểm tra JAR có liên quan trong khung bên phải. Điều này đặt thư viện vào dự án của bạn (vật lý).
  5. Nhấp chuột phải vào dự án của bạn, chọn Đường dẫn xây dựng -> Cấu hình đường dẫn xây dựng, sau đó nhấp vào tab Thư viện, sau đó Thêm JAR ..., điều hướng đến JAR mới của bạn trong thư mục libs và thêm nó. (Điều này, tình cờ, là thời điểm mà JAR mới của bạn được chuyển đổi để sử dụng trên Android.)

GHI CHÚ

Bước 5 có thể không cần thiết, nếu lib đã được bao gồm trong đường dẫn xây dựng của bạn. Chỉ cần đảm bảo rằng sự tồn tại của nó đầu tiên trước khi thêm nó.

Những gì bạn đã làm ở đây thực hiện hai điều:

  1. Bao gồm một JAR được chuyển đổi Dalvik trong dự án Android của bạn.
  2. Làm cho các định nghĩa Java có sẵn cho Eclipse để tìm các lớp bên thứ ba khi phát triển (nghĩa là biên dịch) mã nguồn dự án của bạn.

Russ, có lẽ bạn nên bắt đầu một câu hỏi riêng biệt khác. "Câu trả lời" này có vẻ kỳ quặc khi ngồi ở đây.
Paul Gregoire

3
Vì vậy, tôi viết lại một phần của câu hỏi một chút. Tôi đã chống lại sự cám dỗ để làm điều dễ dàng (những gì bạn đề xuất ở đây) bởi vì tôi thực sự nghĩ rằng cả hai vấn đề phát sinh từ việc cố gắng thêm thư viện của bên thứ ba và tôi lo ngại rằng bất kỳ ai gặp vấn đề thứ hai đều có thể gặp phải cái đầu tiên cũng vậy. Cảm ơn.
Russ BHRan

Tôi ước rằng đã có một cái gì đó rõ ràng hơn về điều này trong các tài liệu chính thức của Android (chưa vấp phải nó) và các câu trả lời khác trong các diễn đàn khác được đưa ra, nhưng không bao giờ hiểu được vấn đề. Lưu ý rằng trên BlackBerry, vấn đề tương tự này là một cơn ác mộng lớn khi không ai đưa ra thông tin đáng tin cậy về cách giải quyết - không chắc chắn tôi sẽ làm gì ở đó.
Russ BHRan

2
Xin chào @RussBHRan Tôi đã thử các bước bạn đã đề cập ở trên và có thể bao gồm thành công jar thư viện trong dự án Android của tôi và vì vậy các lớp thư viện có thể truy cập vào dự án của tôi vào thời gian biên dịch. Nhưng khi tôi chạy dự án, tôi gặp lỗi trong bảng điều khiển của tôi: "Chuyển đổi sang định dạng Dalvik không thành công với lỗi 1" .. và dự án của tôi sẽ không được khởi chạy!
Zeba

Trong một số trường hợp nhất định, điều này không hoạt động ... Tôi không nhớ chính xác những gì tôi đã làm, đã xóa thư mục libs, tập hợp lại ... bây giờ đã làm mọi thứ bạn nói, thêm libs, nhập jar, thêm vào đường dẫn .. lỗi trình biên dịch đã biến mất, nhưng vẫn nhận được ngoại lệ thời gian chạy mà lớp không được tìm thấy :(
Ixx

20

Đảm bảo rằng các lọ bên thứ 3 của bạn nằm trong thư mục "libs" của dự án và chúng sẽ được đặt vào .apk khi bạn đóng gói ứng dụng của mình. Bạn có thể thấy lỗi thời gian chạy trên thiết bị nếu một cái gì đó trong jar không được hỗ trợ, nhưng khác với điều đó tôi đã thành công lớn với điều này.


1
Đó là tất cả về kinh nghiệm, tôi đã có cùng một vấn đề trước đây :)
Paul Gregoire

Cảm ơn ngài, nhưng thật tuyệt khi thấy thư mục libs cần bản sao của các tệp Jar bên ngoài mà chúng ta đã có trong kho lưu trữ Maven hoặc ở đâu đó.
asg

1
Đáng buồn thay, điều này không còn hoạt động tự động, bạn cũng phải nói với nhật thực để bao gồm các thư viện trong các tệp gói.
Neil Townsend

Khi nào thì thay đổi? Đây là một thay đổi lớn đối với những gì chúng ta đều quen thuộc.
Paul Gregoire

5

Thiết lập Dự án Thư viện

Dự án thư viện là một dự án Android tiêu chuẩn, vì vậy bạn có thể tạo một dự án mới theo cách tương tự như dự án ứng dụng mới.

Khi bạn đang tạo dự án thư viện, bạn có thể chọn bất kỳ tên ứng dụng, gói và đặt các trường khác nếu cần, như trong hình 1.

Tiếp theo, đặt thuộc tính của dự án để chỉ ra rằng đó là dự án thư viện:

Trong Gói Explorer, bấm chuột phải vào dự án thư viện và chọn Thuộc tính. Trong cửa sổ Thuộc tính, chọn nhóm thuộc tính "Android" ở bên trái và định vị các thuộc tính Thư viện ở bên phải. Chọn hộp kiểm "là Thư viện" và nhấp vào Áp dụng. Nhấn OK để đóng cửa sổ Properties. Dự án mới hiện được đánh dấu là một dự án thư viện. Bạn có thể bắt đầu di chuyển mã nguồn và tài nguyên vào nó, như được mô tả trong các phần dưới đây.


4

Nếu bạn đang sử dụng phiên bản ADT 22, bạn cần kiểm tra các phụ thuộc Android và thư viện riêng của Android trong tab thứ tự & xuất trong đường dẫn xây dựng dự án


2

Đầu tiên, vấn đề của tiền tố bị thiếu.

Nếu bạn sử dụng một cái gì đó trong tệp bố cục của bạn đến từ bên thứ ba, bạn cũng có thể cần phải sử dụng tiền tố của nó, một cái gì đó như "droidfu:" xảy ra ở một số vị trí trong cấu trúc XML bên dưới:

<com.github.droidfu.widgets.WebImageView android:id="@+id/webimage"
          android:layout_width="75dip"
          android:layout_height="75dip"
          android:background="#CCC"
          droidfu:autoLoad="true"
          droidfu:imageUrl="http://www.android.com/images/opensourceprojec.gif"
          droidfu:progressDrawable="..."
          />

Điều này xuất phát từ JAR, nhưng bạn cũng cần thêm "xmlns: droidfu" mới

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:droidfu="http://github.com/droidfu/schema"
      ...>

hoặc bạn nhận được lỗi tiền tố không liên kết. Đối với tôi, đây là một thất bại trong việc sao chép và dán tất cả các ví dụ được cung cấp từ các trang của thư viện bên thứ ba.


1

Lỗi phân tích cú pháp XML: tiền tố không liên kết

Tài nguyên '/ playteddy / res' không tồn tại.

Tôi đã nhận được hai lỗi trên và cuối cùng tôi đã giải quyết nó.

Nhấp chuột phải vào dự án của bạn -> thuộc tính -> đường dẫn xây dựng java -> googleadmobadsdk (chọn và đặt nó lên trên cùng), sau đó bạn chạy và giải quyết vấn đề. Nó được giải quyết lỗi thời gian chạy của tôi.


0

Đặt nguồn trong một thư mục bên ngoài không gian làm việc của bạn. Nhấp chuột phải vào trình thám hiểm dự án và chọn "Nhập ..."

Nhập dự án trong không gian làm việc của bạn dưới dạng dự án Android. Cố gắng xây dựng nó và đảm bảo rằng nó được đánh dấu là một dự án thư viện. Ngoài ra, hãy đảm bảo rằng nó được xây dựng với sự hỗ trợ Google API, nếu không bạn sẽ gặp phải các lỗi biên dịch.

Sau đó, nhấp chuột phải vào dự án chính của bạn trong trình thám hiểm dự án. Chọn thuộc tính, sau đó chọn Android ở bên trái. Trong phần thư viện bên dưới, nhấp vào "Thêm" ..

Thư viện mapview-Balloon hiện có sẵn để thêm vào dự án của bạn ..


0

Đi đến xây dựng đường dẫn trong nhật thực, sau đó nhấp vào thứ tự và xuất, sau đó kiểm tra thư viện / jar, sau đó nhấp vào nút lên để di chuyển nó lên đầu danh sách để biên dịch trước.

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.