2015-07-18 20 views
6

Tôi đang làm việc trên thư viện nội bộ (hãy gọi nó là "banana_lib") sẽ được đưa vào dự án ứng dụng Android. Tôi muốn cung cấp thư viện này cho một khách hàng dưới dạng tệp .aar.Lớp học có thể phân giải phụ thuộc chỉ từ tệp .aar của Android không?

Thư viện của tôi phụ thuộc vào thư viện khác (giả sử Gson). Nếu tôi có thể giúp nó, tôi muốn tránh các lớp của sự phụ thuộc này vào thư viện của tôi (phương pháp "lọ chất béo", "uber jar").

Tôi biết rằng tôi có thể hỏi người sử dụng thư viện của tôi để bao gồm các phụ thuộc trong file build.gradle của ứng dụng:

dependencies { 
    compile 'com.google.code.gson:gson:2.2.4' 
    compile files('libs/banana_lib.aar') 

}

Nhưng tôi không muốn là gánh nặng của người dùng thư viện có chứa các phụ thuộc của thư viện của tôi trong tệp build.gradle của ứng dụng.

Câu hỏi: Có cách nào để làm cho gradle tự động phân giải/bao gồm phụ thuộc của tệp .aar không? Cách để làm điều này để người dùng thư viện .aar có nỗ lực tối thiểu là gì? Tôi có cần cung cấp một cặp tệp .aar và .pom không? Mục tiêu chính của tôi ở đây là giảm thiểu những thứ mà người dùng thư viện này phải làm. Tôi cảm thấy như một thư viện lý tưởng nên xác định tất cả các phụ thuộc của nó, và gradle nên chỉ giải quyết chúng trong nền.

Đặt theo cách hơi khác: Có cách nào để cho phép khách hàng/người dùng đưa vào thư viện (bên trong!) (Có phụ thuộc bên ngoài) chỉ bằng: 1.) thêm tệp .aar vào bản dựng . 2.) bao gồm nó trong build.gradle.

Nếu có những giải pháp khác mà giữ khối lượng công việc mà người sử dụng/Includer của thư viện đã làm ở mức tối thiểu, sau đó sẽ rất thú vị cũng :)

Rất cám ơn!

Trả lời

5

Nhưng tôi không muốn gây gánh nặng cho người dùng thư viện với việc bao gồm các phụ thuộc của thư viện của tôi trong tệp build.gradle của ứng dụng.

Sau đó xuất bản AAR và POM trong kho lưu trữ, nơi POM giải thích các phụ thuộc.

Tôi cảm thấy như một thư viện lý tưởng nên xác định tất cả các phụ thuộc của nó, và gradle chỉ nên giải quyết chúng trong nền.

Đó không phải là cách thức hoạt động của các JAR và AAR. Không có thông tin phụ thuộc trong JAR hoặc AAR. Cả hai đều dựa vào POM hoặc các khai báo bên ngoài khác về thông tin phụ thuộc, thông tin phiên bản, v.v.

Có cách nào để cho phép khách hàng/người dùng đưa thư viện (nội bộ!) (Có phụ thuộc bên ngoài) chỉ bằng: 1.) thêm tệp .aar vào bản dựng. 2.) bao gồm nó trong build.gradle.

Xuất bản AAR và POM trong kho lưu trữ, nơi POM giải thích các phụ thuộc.

Lưu ý rằng "kho lưu trữ đồ tạo tác" không nhất thiết ngụ ý Maven Central hoặc JCenter.Một kho lưu trữ có thể chỉ là một cây thư mục, đặc biệt khi được truy cập thông qua một hệ thống tệp cục bộ. Ví dụ, bạn đã có hai kho lưu trữ cục bộ này trên máy phát triển của mình, rất có thể là: Kho lưu trữ Android và Kho lưu trữ của Google. Nếu bạn muốn có kho lưu trữ được lưu trữ trên một trang Web (ví dụ: máy chủ Web nội bộ), điều đó là có thể, mặc dù bạn cần thêm các tệp index.html kiểu thư mục ở mỗi cấp của cây thư mục. Hoặc, Sonatype và Bintray bán các máy chủ kho lưu trữ chuyên dụng, như tôi đã hiểu.

+0

Vì vậy, có vẻ tôi có thể nhận được gần nhất với những gì tôi muốn bằng cách cung cấp một cặp AAR và POM tập tin, và bao gồm chúng như thế này: kho { flatDir { dirs repositoryPath }} ... – treesAreEverywhere

+0

@treesAreEverywhere: Tôi đã không cố gắng 'flatDir', vì vậy tôi không có ý tưởng nếu điều đó sẽ làm việc ở đây hay không. Tôi chỉ làm việc với các kho lưu trữ kiểu Maven thông thường ('kho lưu trữ {maven {url '...'}}'), và sau đó chỉ dành cho các kho lưu trữ trên web (giống như cái tôi sử dụng cho các thư viện CWAC). – CommonsWare

+1

Theo dõi: Tôi đã nhận được nó để làm việc với một combo .aar + .pom nếu tôi sao chép aar + pom vào repo google maven trên đĩa của tôi. Tôi không thể tìm ra cách để thực hiện công việc này với flatDirs. Dường như khi sử dụng flatDirs, nó chỉ mong đợi và hỗ trợ tệp .aar, không có tệp .pom. Điều đó cũng được gợi ý bởi danh sách các vị trí tập tin mà gradle in khi nó không thể tìm thấy sự phụ thuộc. – treesAreEverywhere

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