Mengupload library Anda

Untuk memberikan akses ke library, Anda harus memilih repositori. Halaman ini akan memandu Anda untuk mengetahui beberapa pertimbangan yang terkait dengan pemilihan jenis repositori dan menunjukkan cara membuat publikasi menggunakan Plugin Maven Publish.

Sebelum mengupload library, pastikan Anda telah menyiapkan library Anda untuk dirilis dan mengonfigurasi varian publikasi atau perlengkapan pengujian yang diperlukan.

Memilih jenis repositori

Library dipublikasikan sebagai file AAR. File ini berisi kode yang dikompilasi sebagai bytecode dan library native, manifes Android, dan resource. Paket itu sendiri tidak mendeklarasikan identitas, versi, atau dependensi apa pun pada library lainnya.

Pada umumnya, menyediakan AAR melalui repositori merupakan praktik terbaik, daripada mendistribusikan AAR secara langsung. Hal ini membantu pengguna lebih memahami asal library daripada menangani file name.aar tanpa detail penting, seperti versi. Saat mengupgrade ke versi library yang lebih baru, gunakan repositori untuk memastikan bahwa hanya dependensi yang diperlukan dari versi yang lebih baru yang ditambahkan sehingga pengguna tidak perlu memperbarui dependensi secara manual.

Ada beberapa manfaat dari menggunakan repositori untuk memublikasikan library Anda:

  • Gradle dapat otomatis menambahkan dependensi library Anda ke grafik dependensi.
  • Gradle dapat memastikan bahwa satu versi library Anda ada dalam grafik dependensi, yang menyelesaikan konflik jika library Anda secara transitif disertakan lebih dari sekali dengan versi lain.
  • Plugin Android Gradle (AGP) dapat melakukan desugaring yang lebih efisien jika library menggunakan fitur bahasa Java 8 atau versi lebih tinggi sehingga mengurangi waktu build untuk pengguna Anda.
  • Library Anda dapat menggunakan publikasi varian dan menyertakan fitur seperti perlengkapan pengujian.

Mendistribusikan AAR secara langsung tidak akan memberi pengguna informasi apa pun terkait identitas, versi, atau dependensi library Anda. Saat memublikasikan ke repositori, distribusi ditangani oleh file terpisah yang merupakan bagian dari mekanisme repositori. Untuk repositori Maven, distribusi akan ditangani oleh file POM. Oleh karena itu, sangat disarankan untuk memublikasikan library menggunakan repositori, bukan mendistribusikan file AAR secara manual.

Jenis repositori

Ada tiga jenis repositori:

  • Repositori online gratis, seperti Maven Central, memungkinkan siapa saja mengupload dan mendownload library.
  • Repositori pribadi, dengan akses melalui login, memungkinkan distribusi library pribadi terkontrol.
  • Repositori berbasis folder dan lokal memungkinkan distribusi library melalui download manual.

Menggunakan repositori lokal berbasis folder sangat mirip dengan memberikan link download manual AAR kepada pengguna atau mengirimkan AAR melalui email. Perbedaan utamanya adalah bahwa Anda tidak hanya mengirimkan AAR, tetapi juga informasi tambahan tentang identitas, versi, dan dependensi.

Anda mendistribusikan file zip dari repositori berbasis folder yang berisi AAR dan metadata. Kemudian, pengguna dapat mengekstrak isi file, menambahkan konten ke project, dan mengarahkan Gradle ke sana. Selanjutnya, pengguna dapat mendeklarasikan dependensi pada library menggunakan koordinat Maven, seolah-olah library tersebut berada di repositori online, dan mendapatkan manfaat dari semua keuntungan yang disebutkan sebelumnya.

Membuat publikasi

Publikasikan menggunakan Plugin Maven Publish Gradle. Dengan Plugin Maven Publish, Anda dapat mendeklarasikan publikasi dan repositori, serta membuat tugas untuk memublikasikan publikasi ini ke repositori. Publikasi ini menggunakan instance SoftwareComponent yang dibuat oleh plugin yang mendorong build, dan dapat berupa plugin AGP atau java-library.

Perhatikan bahwa saat menjalankan Plugin Maven Publish dengan AGP, komponen software tidak akan dibuat langsung saat plugin diterapkan. Komponen tersebut dibuat selama langkah callback afterEvaluate(). Oleh karena itu, publikasi yang memilih komponen software juga harus dikonfigurasi selama langkah afterEvaluate().

Cuplikan kode berikut dari file build.gradle level modul membuat publikasi untuk varian tertentu yang dibuat dengan singleVariant() atau 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"])
      }
    }
  }
}

Pada contoh sebelumnya, nama komponen (components.release) didasarkan pada nama yang diberikan ke singleVariant() atau multipleVariants().

Setelah mendeklarasikan publikasi, Anda harus membuat repositori target.

Memublikasikan ke repositori lokal

Memublikasikan ke repositori lokal sangat mirip dengan memublikasikan ke repositori jarak jauh, kecuali untuk deklarasi repositori. Baca bagian sebelumnya untuk mempelajari cara memublikasikan ke repositori jarak jauh untuk membuat publikasi yang memublikasikan satu atau beberapa varian yang diinginkan. Kemudian, buat repositori lokal:

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")
    }
  }
}

Tindakan ini akan membuat tugas bernama publishReleaseToMyRepoRepository, dan terdiri dari nama publikasi dan nama repositori. Jalankan tugas ini untuk membuat repositori ke lokasi yang disediakan. Dalam contoh ini, repositori dibuat di dalam folder build project, pada direktori repo.

Jika Anda ingin secara otomatis membuat file zip repositori, lakukan menggunakan kode berikut:

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")
}

Kode ini membuat tugas Zip bernama generateRepo yang menggunakan konten tugas publikasi dan mengompresinya sekaligus memastikan entri zip berada di folder level atas yang bernama mylibrary. Outputnya terletak di build/distributions.