2009-12-31 49 views
54

Làm cách nào để bạn thiết lập dự án có thể dẫn đến tệp thư viện jar có thể được sử dụng cho Android? Tôi muốn tạo thư viện tùy chỉnh trên tất cả các dự án.Thư viện Android Jar

vài câu hỏi khác:

  1. Liệu nó cần phải được biên dịch chống lại một phiên bản cụ thể của sdk android?
  2. Khi gói android được biên dịch vào thư viện jar thì các lớp học cần thiết để làm việc với mã có được biên dịch bằng mã chính vào gói ứng dụng hay toàn bộ jar được đưa vào không?
  3. Bất kỳ sự tối ưu hóa hoặc cạm bẫy đáng chú ý nào tôi cần biết về việc sử dụng một cái bình thay vì tích hợp mã trực tiếp?
  4. Bình có phải được ký như gói ứng dụng cần phải không?
+1

câu hỏi hay 1 –

Trả lời

29

Google vừa phát hành phiên bản SDK mới xử lý Thư viện được chia sẻ!

https://developer.android.com/tools/projects/projects-eclipse.html#SettingUpLibraryProject

ADT 0.9.7 (tháng 5 năm 2010)

dự án Thư viện:
ADT Plugin tại hỗ trợ việc sử dụng các dự án thư viện quá trình phát triển, một khả năng mà cho phép bạn lưu trữ Android mã ứng dụng và tài nguyên trong một dự án phát triển riêng lẻ . Bạn có thể sau đó tham chiếu dự án thư viện từ các dự án Android khác và, tại thời gian xây dựng, các công cụ biên dịch mã được chia sẻ và tài nguyên như một phần của các ứng dụng phụ thuộc. Thêm thông tin về tính năng này là có sẵn trong phần Phát triển trong Eclipse bằng tài liệu ADT.Nếu bạn không phải là phát triển trong Eclipse, Công cụ SDK r6 cung cấp thư viện tương đương hỗ trợ dự án thông qua hệ thống Ant build .

+0

Tôi chỉ muốn đề cập đến, khi viết Studio MotoDev này nếu bạn sử dụng nó không hỗ trợ khả năng sử dụng Thư viện. Nó ghi đè nhiều GUI chuẩn ADT và ẩn nó cho phép bạn tạo một thư viện dự án. Tôi chắc chắn rằng nó sẽ được cố định trong thời gian. – ddcruver

+0

MotoDev Studio 1.2.1 hỗ trợ thư viện được chia sẻ ngay bây giờ. –

+0

Vâng, họ cập nhật nó khoảng hai ngày sau khi Google phát hành ADT mới quên cập nhật điều này. – ddcruver

29

Không có gì đặc biệt bạn cần làm để thiết lập dự án của mình để tạo tệp jar sẽ hoạt động trong ứng dụng Android. Chỉ cần tạo một dự án Java bình thường trong Eclipse.

  1. Nó không cần phải được biên dịch đối với Android chút nào. Bạn có thể bao gồm bất kỳ tệp jar nào miễn là tệp không tham chiếu các lớp không được bao gồm trong Android. Chỉ cần bao gồm tệp jar của bạn trong đường dẫn xây dựng các dự án Android của bạn trong Eclipse và nó sẽ tự động được đưa vào tệp APK của bạn.

  2. Không chắc chắn nhưng tôi cho rằng tất cả các lớp trong tệp jar sẽ được đưa vào APK.

  3. Tôi không nghĩ rằng chỉ cần bao gồm một số lớp trong một cái lọ so với dự án trực tiếp sẽ tạo ra bất kỳ sự khác biệt nào trong APK kết quả.

+9

4. JAR không cần phải đăng nhập. –

+1

Tôi vừa gặp phải rào cản. Tôi có bố cục tùy chỉnh thêm id vào tệp R.java và tôi có các phụ thuộc Android khác. Làm thế nào để tôi đưa chúng vào một định dạng jar? –

+3

Bạn chỉ có thể có các tệp lớp Java trong một cái bình. Bạn không thể đặt XML bố cục tùy chỉnh trong đó. Bạn phải sao chép chúng vào dự án của bạn. –

0

Nếu bạn tìm trong tệp android.jar dưới nền tảng/android-X.X/android.jar, tệp này bao gồm bố cục các mục XML để bạn cũng có thể tạo một mục. Tôi chỉ không chắc chắn về cách bạn làm điều này và cách bạn tham khảo chúng trong dự án khác.

5

Tôi đã hỏi myselft cùng một câu hỏi: tôi có thể xuất và sử dụng lại bố cục trong Android hay không. Tôi đã thử những điều sau đây: xuất khẩu một dự án với các tài nguyên XML vào một tệp JAR, và sau đó cố gắng truy cập một bố cục thông qua đó là R.layout. Tất nhiên nó không hoạt động, vì R.layout.main là một số nguyên, cùng một số nguyên được liên kết với một layout đơn (relative.xml) được định nghĩa trong R.layout của dự án chủ.

SDK Android biên dịch các tệp xml bố cục vào Xem tài nguyên và dưới dạng tệp XML trong tệp JAR được bao gồm không phải là tệp xml bố cục, chúng không được biên dịch và không có ID nào được liên kết với chúng trong R.layout.

Nếu bạn muốn xuất bố cục từ dự án của mình, bạn nên xuất nó dưới dạng XML và nhập nó vào dự án mới dưới dạng tài nguyên bố cục chứ không phải là một phần của thư viện bên ngoài.

Nếu bạn muốn sử dụng lại bố cục từ một JAR, bạn phải tạo một sublcalss của View và xây dựng bố cục từ mã. Hơn bạn có thể khởi tạo nó và thiết lập cá thể đã tạo thành dạng View of the Activity, hoặc thêm cá thể vào View of your Activity.

3

để tạo tệp jar, bạn nên sử dụng tùy chọn Xuất của Eclipse. Trong hộp thoại xuất, chọn java và JAR phụ. Trình hướng dẫn được hiển thị khi bạn cần thực hiện một số lựa chọn. Bạn cần xác định vị trí nơi tệp jar sẽ được lưu trữ.

Lỗi tôi đã tạo lần đầu tiên tôi tạo tệp jar, là bao gồm Tệp kê khai Android. Khi thêm tệp jar đã tạo, tôi nhận được xung đột về bản kê android kép.

5

Tác phẩm này dành cho tôi !!!. nếu bạn muốn sử dụng tệp .jar vào ứng dụng của mình từ dự án thư viện sử dụng các tài nguyên như attrs.xml (và giả sử các tệp khác như bố cục, chuỗi, v.v) tạo R.java. bạn nên vào nhật thực export->Java/Jar file-> và kiểm tra Xuất tất cả các thư mục đầu ra cho kiểm tra projects -> Finish ... điều này sẽ đảm bảo rằng vào thời gian chạy ứng dụng của bạn sử dụng jar này không tạo ra ngoại lệ cho các thiếu và tài nguyên.

Tất nhiên, để đưa lọ vào bạn dự án mới, hãy truy cập. project properties-> Java build path -> Libraries -> Add external jar -> và bạn đã hoàn tất.

Hope trợ giúp này!

1

Bạn có thể sử dụng phương thức tùy chỉnh để tiếp cận tệp R động, liên kết ví dụ bên dưới.

Packaging Android resource files within a distributable Jar file

public static int getResourseIdByName(String packageName, String className, String name) { 
    Class r = null; 
    int id = 0; 
try { 
    r = Class.forName(packageName + ".R"); 

    Class[] classes = r.getClasses(); 
    Class desireClass = null; 

    for (int i = 0; i < classes.length; i++) { 
     if(classes[i].getName().split("\\$")[1].equals(className)) { 
      desireClass = classes[i]; 

      break; 
     } 
    } 

    if(desireClass != null) 
     id = desireClass.getField(name).getInt(desireClass); 
} catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
} catch (IllegalArgumentException e) { 
    e.printStackTrace(); 
} catch (SecurityException e) { 
    e.printStackTrace(); 
} catch (IllegalAccessException e) { 
    e.printStackTrace(); 
} catch (NoSuchFieldException e) { 
    e.printStackTrace(); 
} 

return id; 
} 
Các vấn đề liên quan