Tải thư viện lên

Để cấp quyền truy cập vào thư viện, bạn cần chọn một kho lưu trữ. Trang này sẽ chỉ ra cho bạn các vấn đề cần cân nhắc liên quan đến việc chọn loại kho lưu trữ và trình bày cách tạo một ấn bản bằng Trình bổ trợ phát hành Maven.

Trước khi tải thư viện lên, hãy đảm bảo bạn đã chuẩn bị thư viện để phát hành và đã định cấu hình mọi biến thể ấn bản hoặc môi trường kiểm thử cố định cần thiết.

Chọn loại kho lưu trữ

Các thư viện được phát hành dưới dạng tệp AAR. Các tệp này chứa mã đã biên dịch dưới dạng mã byte và thư viện gốc, tệp kê khai Android và các tài nguyên. Bản thân gói không khai báo bất cứ mã nhận dạng, phiên bản hay phần phụ thuộc nào trên các thư viện khác.

Nhìn chung, phương pháp hay nhất là cung cấp tệp AAR thông qua kho lưu trữ, thay vì phân phối trực tiếp tệp AAR. Phương pháp này giúp người dùng hiểu rõ hơn về nguồn gốc thư viện (thay vì phải xử lý tệp name.aar mà không nắm được các thông tin quan trọng, chẳng hạn như phiên bản). Khi nâng cấp thư viện lên phiên bản mới hơn, hãy dùng kho lưu trữ để đảm bảo rằng bạn chỉ thêm các phần phụ thuộc cần thiết của phiên bản mới hơn đó, nhờ vậy, người dùng không phải tự cập nhật các phần phụ thuộc.

Việc sử dụng kho lưu trữ để phát hành thư viện mang lại nhiều lợi ích như sau:

  • Gradle có thể tự động thêm các phần phụ thuộc của thư viện vào đồ thị phần phụ thuộc.
  • Gradle có thể đảm bảo rằng một phiên bản đơn lẻ trong thư viện của bạn thuộc đồ thị phần phụ thuộc, giúp giải quyết xung đột nếu thư viện của bạn được nhúng nhiều hơn một lần vào các phiên bản khác nhau theo cách bắc cầu.
  • Trình bổ trợ Android cho Gradle (AGP) có thể giúp đơn giản hoá quy trình một cách hiệu quả hơn nếu thư viện của bạn sử dụng các tính năng của ngôn ngữ Java 8 trở lên, qua đó giảm thời gian xây dựng cho người dùng.
  • Thư viện của bạn có thể phát hành biến thể và sử dụng các tính năng như môi trường kiểm thử cố định.

Việc phân phối trực tiếp tệp AAR sẽ không cung cấp cho người dùng bất kỳ thông tin nào liên quan đến mã nhận dạng, phiên bản hoặc phần phụ thuộc của thư viện. Khi phát hành lên kho lưu trữ, một tệp riêng biệt thuộc cơ chế kho lưu trữ sẽ xử lý quá trình phân phối này. Đối với kho lưu trữ Maven, tệp đó là tệp POM. Do đó, bạn nên phát hành thư viện bằng kho lưu trữ thay vì phân phối tệp AAR theo cách thủ công.

Các loại kho lưu trữ

Có 3 loại kho lưu trữ:

  • Các kho lưu trữ trực tuyến miễn phí, chẳng hạn như Maven Central, cho phép mọi người tải thư viện lên và xuống.
  • Các kho lưu trữ riêng tư cần đăng nhập thì mới truy cập được, cho phép phân phối một cách có kiểm soát các thư viện riêng tư.
  • Các kho lưu trữ cục bộ theo thư mục cho phép phân phối thư viện thông qua quy trình tải xuống thủ công.

Việc dùng kho lưu trữ cục bộ theo thư mục cũng tương tự như việc cung cấp cho người dùng đường liên kết tải tệp AAR xuống theo cách thủ công hoặc gửi tệp AAR qua email. Tuy nhiên, có một điểm khác biệt chính, đó là bạn không chỉ gửi tệp AAR mà còn gửi kèm thông tin về mã nhận dạng, phiên bản và phần phụ thuộc.

Bạn phân phối một tệp zip của kho lưu trữ theo thư mục chứa tệp AAR cùng với siêu dữ liệu. Sau đó, người dùng có thể trích xuất nội dung của tệp, thêm nội dung vào dự án và trỏ Gradle vào dự án đó. Từ đó, người dùng có thể khai báo phần phụ thuộc trên thư viện bằng cách dùng toạ độ Maven, như thể thư viện đang nằm ở kho lưu trữ trực tuyến và tận hưởng tất cả những ưu thế đã nói ở trên.

Tạo ấn bản

Phát hành bằng Gradle Maven Publish Plugin (Trình bổ trợ phát hành Maven của Gradle). Trình bổ trợ phát hành Maven cho phép bạn khai báo ấn bản và kho lưu trữ, cũng như tạo các tác vụ để phát hành những ấn bản này lên kho lưu trữ. Những ấn bản này sử dụng phiên bản SoftwareComponent mà trình bổ trợ thúc đẩy bản dựng tạo, có thể là AGP hoặc trình bổ trợ java-library.

Lưu ý rằng khi chạy Trình bổ trợ phát hành Maven cùng với AGP, các thành phần phần mềm sẽ không được tạo ngay khi áp dụng trình bổ trợ. Thay vào đó, các thành phần này sẽ được tạo trong bước gọi lại afterEvaluate(). Do đó, nếu muốn chọn thành phần phần mềm cho ấn bản, bạn cũng phải định cấu hình ấn bản trong bước afterEvaluate().

Đoạn mã sau đây của tệp build.gradle ở cấp độ mô-đun sẽ giúp tạo ấn bản cho một biến thể cho trước được tạo bằng singleVariant() hoặc multipleVariants():

Groovy

publishing {
  publications {
    release(MavenPublication) {
      groupId = 'com.my-company'
      artifactId = 'my-library'
      version = '1.0'

      afterEvaluate {
        from components.release
      }
    }
  }
}

Kotlin

publishing {
  publications {
    register<MavenPublication>("release") {
      groupId = "com.my-company"
      artifactId = "my-library"
      version = "1.0"

      afterEvaluate {
        from(components["release"])
      }
    }
  }
}

Trong ví dụ trước đó, tên của thành phần (components.release) được lấy theo tên đặt cho singleVariant() hoặc multipleVariants().

Sau khi khai báo ấn bản, bạn phải tạo kho lưu trữ đích.

Phát hành lên kho lưu trữ cục bộ

Việc phát hành lên kho lưu trữ cục bộ cũng tương tự như phát hành lên kho lưu trữ từ xa, chỉ khác cách khai báo kho lưu trữ. Hãy đọc phần trước, qua đó tìm hiểu cách phát hành lên kho lưu trữ từ xa để tạo một ấn bản giúp phát hành biến thể hoặc các biến thể bạn muốn. Sau đó, hãy tạo một kho lưu trữ cục bộ:

Groovy

publishing {
  publications {
    release(MavenPublication) {
      ...
    }
  }
  repositories {
    maven {
      name = 'myrepo'
      url = "${project.buildDir}/repo"
    }
  }
}

Kotlin

publishing {
  publications {
    register<MavenPublication>("release") {
      ...
    }
  }
  repositories {
    maven {
      name = "myrepo"
      url = uri("${project.buildDir}/repo")
    }
  }
}

Đoạn mã này tạo một tác vụ có tên publishReleaseToMyRepoRepository, bao gồm tên ấn bản và tên kho lưu trữ. Chạy tác vụ này để tạo kho lưu trữ tại vị trí đã cung cấp. Trong ví dụ này, kho lưu trữ được tạo bên trong thư mục bản dựng của dự án, thuộc thư mục repo.

Nếu bạn muốn tạo tự động một tệp zip của kho lưu trữ, hãy sử dụng mã sau:

Groovy

tasks.register('generateRepo', Zip) {
  def publishTask = tasks.named('publishReleasePublicationToMyrepoRepository')
  from publishTask.map { it.getRepository().getUrl() }
  into 'mylibrary'
  archiveFileName.set('mylibrary.zip')
}

Kotlin

tasks.register<Zip>("generateRepo") {
  val publishTask = tasks.named(
    "publishReleasePublicationToMyrepoRepository",
    PublishToMavenRepository::class.java)
  from(publishTask.map { it.repository.url })
  into("mylibrary")
  archiveFileName.set("mylibrary.zip")
}

Mã này sẽ tạo tác vụ Zip có tên generateRepo. Tác vụ này sử dụng nội dung của tác vụ phát hành và nén lại thành tệp zip mà vẫn đảm bảo rằng các mục tệp zip nằm trong thư mục cấp cao nhất có tên mylibrary. Dữ liệu đầu ra nằm ở build/distributions.