2015-06-10 20 views
9

Tôi đã tạo thư viện Android (được gọi là MyLib) phụ thuộc vào thư viện khác có sẵn trên repo maven (như gson, trang bị thêm, v.v.).Làm thế nào để xác định phụ thuộc trong thư viện aar?

MyLib 
| 
|-- Retrofit 
|-- Gson 
|-- ... 

MyLib được đóng gói thành tệp aar.

Mục đích là để xuất bản một thư viện aar có thể được đưa vào ứng dụng Android (gọi tắt là MyApp) mà không chỉ định một lần nữa sự phụ thuộc đó mylib sử dụng.

MyApp 
| 
|-- MyLib 
| |-- Retrofit 
| |-- gson 
| |-- ... 

Đây là build.gradle tập tin của tôi cho mylib

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.squareup.retrofit:retrofit:1.9.0' 
    compile 'com.google.code.gson:gson:2.3.1' 
} 

Bây giờ, nếu tôi muốn xây dựng và chạy MyApp mà không vấn đề phụ thuộc, tôi đã phải sử dụng xây dựng sau .gradle cho MyApp (nếu tôi không chỉ định trang bị thêmgson làm deps, một thời gian chạy cũ lừa dối được ném vì deps không có sẵn).

dependencies { 
    compile('[email protected]') 

    compile 'com.squareup.retrofit:retrofit:1.9.0' 
    compile 'com.google.code.gson:gson:2.3.1' 
} 

Tôi không muốn chỉ định trong MyApp sự phụ thuộc được sử dụng bên trong mylib, Làm thế nào tôi nên viết file build.gradle của tôi?

Thansk trước

+0

Nếu MyLib là cục bộ, bạn nên sử dụng dự án biên dịch (': MyLib') –

+0

Có, MyLib là địa phương nhưng được đóng gói thành một aar. MyLib và MyApp không nằm trong cùng một dự án. Đó là hai dự án khác nhau. – reevolt

+0

Bạn luôn có thể tham khảo một thư mục khác bên ngoài projetc –

Trả lời

2

Khi xuất bản một aar đến một kho maven (địa phương hoặc từ xa) và bao gồm nó bằng cách sử compile ([email protected]) phụ thuộc bắc cầu được tắt.

Để kích hoạt tính phụ thuộc bắc cầu cho một thư viện aar:

compile ('com.mylib:mylib:[email protected]'){ 
     transitive=true 
} 

Bạn có thể đọc thêm về vấn đề này ở đây:

Can an AAR include transitive dependencies?

này làm việc với aar thư viện được xuất bản với một từ xa hoặc địa phương kho lưu trữ maven, Trong trường hợp của bạn, có vẻ như thư viện sẽ không được xuất bản cho ngay cả kho lưu trữ maven cục bộ. Tôi không thể tìm thấy bất kỳ thông tin dứt khoát nào nếu nó sẽ hoạt động trong hoàn cảnh của bạn, nhưng bạn nên cho nó một shot.

+1

Tôi hiện có thể tạo tệp pom-default.xml chứa deps khi xây dựng thư viện aar để xuất bản lên repo cục bộ (sử dụng các trình bổ sung maven-publish gradle). Nhưng tệp pom này không được bao gồm bên trong kho lưu trữ aar (nó chỉ hiển thị trong thư mục xây dựng nhưng không có trong kho lưu trữ cuối cùng).Làm thế nào tôi có thể nhúng nó vào trong kho lưu trữ aar? – reevolt

+0

@BrentM, là điều tương tự được đề cập trong câu hỏi có thể, nếu tệp aar có trong thư mục libs của ứng dụng Android: biên dịch (tên: 'library_name', ext: 'aar') Tôi hiểu rằng bạn không tìm thấy bất kỳ thông tin dứt khoát nào cho trường hợp sử dụng này. Nhưng, có bất kỳ bản cập nhật nào mà bạn có liên quan đến điều này không? Cảm ơn! – garnet

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