2015-01-13 16 views
7

Vì Gradle không hỗ trợ apklib phụ thuộc như thế nào người ta có thể di chuyển từ apklib phụ thuộc vào aar phụ thuộc? Có thể tự động chuyển đổi apklib phụ thuộc vào aar không? Nếu có - làm thế nào, nếu không - tại sao không?Làm thế nào để chuyển đổi apklib thành aar

Trong câu hỏi này, tôi cho rằng tôi không có dự án ban đầu cho apklib, nhưng thay vì các tập tin riêng của mình.

Trả lời

11

apklib không chứa các file đối tượng, chỉ có file nguồn, vì vậy cách duy nhất nó có thể được bao gồm trong dự án bất kỳ là bằng cách biên dịch lại nó. Theo một số tài liệu bạn có thể đọc tại địa chỉ:

Android dependencies : apklib vs aar fileshttps://plus.google.com/+ChristopherBroadfoot/posts/7uyipf8DTau

Định dạng apklib được phát minh như một cách để chia sẻ mã Android + tài nguyên. Về cơ bản, đó là một dự án thư viện Android đã được nén lên, vốn đã là nguyên trạng cho mã + chia sẻ tài nguyên.

Và bạn có thể thấy trong bài Chris Broadfoot rằng nhiệm vụ mà tạo ra các apklib chỉ kéo khóa lên AndroidManifest.xml tập tin và các srcres thư mục:

task apklib(type: Zip) { 
    appendix = extension = 'apklib' 

    from 'AndroidManifest.xml' 
    into('res') { 
     from 'res' 
    } 
    into('src') { 
     from 'src' 
    } 
} 

Lưu ý rằng bài của ông là về việc tạo ra một apklib từ Gradle, đó là một điều hơi kỳ lạ để làm, nhưng nó cung cấp một ý tưởng khá rõ ràng về cách một trong những điều này được cấu trúc.

Tin tốt là đây là cấu trúc dự án Android "chuẩn" kể từ khi Eclipse là IDE chính và Android Studio biết cách nhập các mô-đun giống như thế này. Vì vậy, hãy làm theo các bước sau:

  1. Giải nén gói ứng dụng vào thư mục tạm thời. Nó ở định dạng zip, vì vậy một cái gì đó như unzip library.apklib sẽ hoạt động.

  2. Nhìn vào những gì đang giải nén. Bạn sẽ thấy một thư mục chứa AndroidManifest.xml, src, và res thư mục.

  3. Trong Android Studio, bên trong một dự án hiện có, chọn File> Import Module và trỏ nó vào thư mục từ bước 2.

  4. Android Studio nên quản lý việc nhập khẩu bằng cách sao chép các tập tin vào dự án của bạn trong một mới mô-đun, sắp xếp chúng trong cấu trúc thư mục ưa thích của nó và sẽ thêm một tệp build.gradle cho mô-đun.

  5. Tại thời điểm này bạn đang lên và chạy. Nếu bạn thực sự muốn tệp .aar, hãy kiểm tra xem mô-đun mới của bạn có được thiết lập làm mô-đun thư viện hay mô-đun ứng dụng hay không.Trong build.gradle của nó, nếu bạn đã có apply plugin: 'com.android.library' thì đó là một module thư viện, và Gradle sẽ tạo ra một .aar như một phần của việc xây dựng: nó sẽ nằm trong thư mục build/outputs/aar sau một xây dựng thành công.

  6. Nếu module của bạn nhập khẩu như là một module ứng dụng và không phải là một thư viện (apply plugin: 'com.android.application', sau đó thay đổi điều đó apply plugin tuyên bố, và bạn cũng có thể cần phải loại bỏ các tuyên bố applicationId từ việc xây dựng tập tin. Bây giờ nó nên biên dịch như một thư viện và tạo ra một .aar.

  7. Chúc mừng mã hóa!

0

Bạn không thể chuyển đổi apklib để aar. Bạn phải cập nhật phụ thuộc theo cách thủ công để trỏ tới tệp aar. Các aar được biên soạn và chứa các quy tắc lint và proguard mà apklib không nhất thiết có thể tự động xác định.

Bạn có thể đọc thêm một chút về sự khác biệt ở đây:

Android dependencies : apklib vs aar files

+0

Cảm ơn bạn. cho đến nay tôi biết rằng không có giải pháp out-of-the-box để làm như vậy, nhưng tôi vẫn đang tìm kiếm bất kỳ ý tưởng về cách di chuyển từ 'apklib' sang' aar' mà không biên dịch lại từng thư viện (có tính đến việc chúng chưa được triển khai dưới dạng 'aar'). –

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