Phát hành nhiều thư viện Android dưới dạng một thư viện bằng Thư viện hợp nhất

Trong các dự án có nhiều mô-đun, bạn có thể gặp khó khăn khi phân phối Thư viện Android cho người dùng trong khi cố gắng duy trì cấu trúc dự án rõ ràng. Trong nhiều trường hợp, bạn cần phát hành nhiều thư viện hơn dự kiến.

Trình bổ trợ Thư viện hợp nhất đi kèm với Trình bổ trợ Android cho Gradle hỗ trợ đóng gói nhiều mô-đun Thư viện Android thành một Thư viện Android có thể phát hành. Điều này cho phép bạn mô-đun hoá mã nguồn và tài nguyên của thư viện trong bản dựng khi thấy phù hợp, đồng thời tránh để lộ cấu trúc của dự án sau khi phân phối.

Việc phân phối dưới dạng một thư viện duy nhất có thể mang lại những lợi ích sau:

  • Các phần phụ thuộc được đơn giản hoá: thay thế nhiều phần phụ thuộc thư viện bằng một tệp AAR duy nhất, giúp đơn giản hoá việc thiết lập dự án và quản lý phiên bản cho người dùng
  • Giảm kích thước thư viện: có thể cải thiện tính năng rút gọn mã, dẫn đến tệp AAR nhỏ hơn
  • Cải thiện khả năng bảo mật: có thể kiểm soát tốt hơn các chi tiết triển khai nội bộ của các thư viện đã phát hành

Tạo thư viện hợp nhất

Để tạo thư viện hợp nhất, bạn phải tạo một mô-đun Android mới, thêm các phần phụ thuộc rồi phát hành thư viện hợp nhất.

Thêm mô-đun thư viện hợp nhất mới

Để sử dụng trình bổ trợ này, bạn phải thêm một mô-đun Android mới vào dự án:

Trong ví dụ này, mô-đun thư viện hợp nhất sẽ được gọi là myFusedLibrary.

  1. Bật tính năng hỗ trợ thư viện hợp nhất bằng cách thêm android.experimental.fusedLibrarySupport=true vào tệp gradle.properties.
  2. Thêm include(":myFusedLibrary") vào tệp settings.gradle.kts.
  3. Thêm android-fusedlibrary = { id = "com.android.fused-library", version.ref = "agp" } vào phần [plugins] trong tệp gradle/libs.versions.toml.
  4. Thêm alias(libs.plugins.android.fusedlibrary) apply false vào khối trình bổ trợ trong tệp build.gradle.kts cấp cao nhất.
  5. Để tạo mô-đun myFusedLibrary, hãy tạo một thư mục mới có tên myFusedLibrary (nhấp chuột phải vào "My Application" (Ứng dụng của tôi) > New (Mới) > Directory (Thư mục)).
  6. Tạo tệp build.gradle.kts trong mô-đun myFusedLibrary (nhấp chuột phải vào mô-đun myFusedLibrary > Mới > Tệp).
  7. Dán nội dung sau vào tệp myFusedLibrary/build.gradle.kts:

Kotlin

plugins {
    alias(libs.plugins.android.fusedlibrary)
    `maven-publish`
}

androidFusedLibrary {
    namespace = "com.example.myFusedLibrary"
    minSdk = 21
}

dependencies { }

Groovy

plugins {
    id 'fused-library'
}

androidFusedLibrary {
    namespace 'com.example.myFusedLibrary'
    minSdk 21
}

dependencies {

}

Thêm phần phụ thuộc

Chức năng cốt lõi của thư viện hợp nhất là gói các phần phụ thuộc. Trình bổ trợ này hỗ trợ việc thêm các phần phụ thuộc dự án cục bộ và thư viện bên ngoài. Để chỉ định các phần phụ thuộc cần đóng gói, hãy sử dụng cấu hình include. Các phần phụ thuộc bắc cầu không được đóng gói.

Ví dụ:

Kotlin

dependencies {
    include(project(":image-rendering"))
    include("mycoolfonts:font-wingdings:5.0")
}

Groovy

dependencies {
    include project(':image-rendering')
    include 'mycoolfonts:font-wingdings:5.0'
}

Phát hành thư viện hợp nhất

Bạn nên làm quen với cách phát hành thư viện Android trước khi phát hành thư viện hợp nhất. Việc phát hành thư viện hợp nhất tương tự như phát hành Thư viện Android, tuy nhiên, có một số điểm khác biệt chính mà bạn phải cân nhắc để phát hành thư viện hợp nhất một cách chính xác:

  • Bạn cũng phải áp dụng Trình bổ trợ phát hành Maven cho mọi mô-đun đã áp dụng trình bổ trợ Thư viện hợp nhất.
  • ấn bản phải kế thừa từ fusedLibraryComponent vì lớp này cung cấp các phần phụ thuộc bắt buộc cần thiết để biên dịch cấu phần phần mềm thư viện hợp nhất.

Dưới đây là ví dụ về cấu hình ấn bản:

Kotlin

plugins {
    alias(libs.plugins.android.fusedlibrary)
    `maven-publish`
}

androidFusedLibrary {  }

dependencies {  }

publishing {
    publications {
        register<MavenPublication>("release") {
             groupId = "my-company"
             artifactId = "my-fused-library"
             version = "1.0"
             from(components["fusedLibraryComponent"])
        }
    }
}

Groovy

plugins {
    id 'fused-library'
    id 'maven-publish'
}

androidFusedLibrary {  }

dependencies {  }

publishing {
    publications {
        release(MavenPublication) {
            groupId = "my-company"
            artifactId = "my-fused-library"
            version = "1.0"
            afterEvaluate {
            from components.fusedLibraryComponent
        }
    }
}

Phát hành thư viện hợp nhất để kiểm thử

Bạn nên kiểm thử tuỳ thuộc vào thư viện hợp nhất đã phát hành từ một ứng dụng Android hoặc thư viện Android. Bạn nên phát hành thư viện hợp nhất và các phần phụ thuộc dự án của thư viện đó lên kho lưu trữ Maven cục bộ.

Để phát hành cấu phần phần mềm thư viện hợp nhất lên kho lưu trữ cục bộ, hãy xác định một cấu hình tương tự như sau:

Kotlin

plugins {
    alias(libs.plugins.android.fusedlibrary)
    `maven-publish`
}

repositories {
    maven {
        name = "myLocalRepo"
        url = uri(layout.buildDirectory.dir("myLocalRepo"))
    }
}

Groovy

plugins {
    id 'fused-library'
    id 'maven-publish'
}

repositories {
    maven {
        name 'myLocalRepo'
        url layout.buildDirectory.dir('myLocalRepo')
    }
}

Tải thư viện hợp nhất lên

Để phân phối thư viện hợp nhất, hãy xem phần Tải thư viện lên.

Hành vi và biện pháp bảo vệ

Việc kết hợp các Thư viện Android có những điểm phức tạp có thể khiến trình bổ trợ gặp khó khăn trong việc suy luận về các mức độ ưu tiên. Ví dụ: hai thư viện có cùng đường dẫn lớp sẽ gây ra lỗi bản dựng khi hợp nhất thư viện. Việc hợp nhất tài nguyên sẽ xem xét thứ tự của các phần phụ thuộc được chỉ định khi chọn một tài nguyên có cùng tên trong các thư viện khác nhau.

  • Bạn chỉ có thể phát hành thư viện hợp nhất dưới dạng cấu phần phần mềm thư viện Android AAR để thêm dưới dạng phần phụ thuộc.
  • Không hỗ trợ việc hợp nhất các thư viện sử dụng tính năng liên kết dữ liệu.
  • Bạn không thể hợp nhất nhiều loại bản dựng và phiên bản sản phẩm trong một thư viện hợp nhất. Tạo các thư viện hợp nhất riêng biệt cho các biến thể.

Để cân bằng lượng cấu hình cần thiết và khả năng dễ sử dụng, trình bổ trợ sẽ không tạo được bản dựng khi có xung đột không rõ ràng hoặc sử dụng phương pháp phỏng đoán khi hợp nhất các cấu phần phần mềm. Bạn có thể xem thông tin chi tiết về cách hợp nhất cấu phần phần mềm trong bảng sau:

Loại Hành vi
Lớp Các thư viện có cùng đường dẫn lớp sẽ gây ra lỗi bản dựng khi hợp nhất thư viện.
Tài nguyên Android Việc hợp nhất tài nguyên sẽ xem xét thứ tự của các phần phụ thuộc được chỉ định khi chọn một tài nguyên có cùng tên trong các tài nguyên khác nhau.
Siêu dữ liệu AAR Các phiên bản siêu dữ liệu AAR được hợp nhất bằng cách ưu tiên giá trị cao nhất từ mỗi thư viện phần phụ thuộc. Có một DSL được cung cấp để ghi đè các giá trị này.

Kotlin

 androidFusedLibrary { aarMetadata { minCompileSdk = 21 minCompileSdkExtension = 1 } }
Tài nguyên Java Không được phép có các tệp tài nguyên Java trong nhiều thư viện có đường dẫn giống hệt nhau, nếu không quá trình tạo bản dựng sẽ không thành công.

Vấn đề đã biết

Thư viện hợp nhất là một trình bổ trợ mới và có một số vấn đề đã biết đang được xử lý để đáp ứng tất cả các trường hợp sử dụng.

  • Các tệp lint.jar không có trong AAR hợp nhất
  • Thêm phần phụ thuộc tệp trên các tệp .aar khác
  • Không hỗ trợ hợp nhất các cấu phần phần mềm RenderScript và Prefab

Tìm hiểu các phần phụ thuộc của thư viện hợp nhất

Thư viện hợp nhất không có nguồn và sử dụng hiệu quả các thư viện Android làm nguồn duy nhất. Do đó, điều quan trọng là bạn phải hiểu được nguồn gốc của thư viện. Để liệt kê các phần phụ thuộc được hợp nhất vào cấu phần phần mềm kết quả và các phần phụ thuộc cần thiết để tạo cấu phần phần mềm, hãy chạy tác vụ gradle :report trên thư viện hợp nhất. Các tác vụ này sẽ tạo một báo cáo JSON được lưu trong thư mục build/reports của thư viện hợp nhất.

Để biết thêm thông tin liên quan đến các phần phụ thuộc trình bổ trợ nội bộ, hãy chạy tác vụ gradle :dependencies để xem trạng thái của cấu hình trình bổ trợ.