Menerbitkan perpustakaan Android Anda – cara lokal

Jika Anda pernah membangun perpustakaan Android, dimaksudkan untuk digunakan dalam satu atau lebih proyek, Anda pasti menghadapi kebutuhan untuk mempublikasikannya untuk menguji integrasinya ke dalam aplikasi target Anda. Anda mungkin mempublikasikan perpustakaan Anda di beberapa repositori, seperti JitPack, Nexus, JFrog, atau lainnya. Namun, bagaimana jika Anda perlu terus memperkenalkan perubahan atau mengerjakan perbaikan di perpustakaan Anda? Mungkin mempublikasikannya ke repositori jarak jauh setiap kali bukanlah pilihan yang paling menghemat waktu, terutama jika perpustakaan Anda sedikit kelebihan berat badan. Atau mungkin akses Internet Anda terputus; bagaimana Anda bisa terus bekerja seperti ini? Sebenarnya ada cara yang nyaman dan efektif untuk menerbitkan perpustakaan Anda dengan cepat dan tersedia untuk diintegrasikan ke dalam proyek Anda yang lain: repositori lokal Maven.

Maven lokal

Maven lokal sebenarnya adalah repositori, tetapi terletak di komputer Anda sendiri. Sesimpel itu. Jadi Anda dapat menggunakan direktori ini untuk menyimpan dependensi proyek Anda.

Tergantung pada sistem operasi komputer Anda, lokasi default untuk repositori lokal Maven mungkin berbeda.

  • Mac: / /Users/[username]/.m2
  • Linux: / /home/[username]/.m2
  • Windows: C:\Users\[username]\.m2

isi folder .m2

Memublikasikan perpustakaan Anda

Pertama, kita akan menavigasi ke modul library kita, dan di sana kita akan membuat file Gradle, yang akan berisi semua kode yang diperlukan untuk mempublikasikan library secara lokal. Kami akan menamakannya publishLocal.gradle . Isinya akan sebagai berikut:

 apply plugin: 'maven-publish' task sourceJar ( type: Jar ) { from android . sourceSets . main . java . srcDirs classifier "sources" } project . afterEvaluate { publishToMavenLocal { def groupId = LIBRARY_GROUP def artifactId = LIBRARY_ARTIFACT_ID def versionName = LIBRARY_VERSION_NAME + "-local" def debugSuffix = "-debug" def releaseSuffix = "-release" publishing { publications { LibraryRelease ( MavenPublication ) { from components . release artifact ( sourceJar ) setGroupId groupId setArtifactId artifactId version versionName + releaseSuffix } LibraryDebug ( MavenPublication ) { from components . debug artifact ( sourceJar ) setGroupId groupId setArtifactId artifactId version versionName + debugSuffix } } publications . all { pom . withXml { asNode (). dependencies . '*' . findAll () { it . scope . text () == 'runtime' && project . configurations . implementation . allDependencies . find { dep -> dep . name == it . artifactId . text () } }. each { it . scope *. value = 'compile' } } } } doLast { def prettyPrint = { 1 . upto ( 100 , { print "=" }) println () } println () prettyPrint () println "PUBLICATION FINISHED" println "Artifact RELEASE: " + groupId + ":" + artifactId + ":" + versionName + releaseSuffix println "Artifact DEBUG: " + groupId + ":" + artifactId + ":" + versionName + debugSuffix prettyPrint () } } }

Sekarang kita dapat menyertakan skrip ini dalam file build.gradle Dan itu saja!

 ... apply from: 'publishLocal.gradle'

Kode secara mendalam

Jika Anda melihat baris kode pertama kami, Anda dapat melihat bahwa kami menyertakan plugin Maven Publish , yang memungkinkan kami menerbitkan artefak ke repositori Apache Maven.

Di bawah baris itu, kami mengonfigurasi tugas yang disebut sourceJar , yang akan menghasilkan .jar dengan file sumber perpustakaan kami.

Sekarang kita sampai ke bagian yang gemuk. Kami mengonfigurasi publishToMavenLocal , yang menunjukkan publikasi yang harus dilakukan. Dalam hal ini, ada dua: LibraryRelease dan LibraryDebug ; masing-masing menggunakan varian build yang berbeda.

LIBRARY_GROUP, LIBRARY_ARTIFACT_ID, dan LIBRARY_VERSION_NAME adalah konstanta yang ditentukan dalam file gradle.properties.

Mari kita lihat setiap MavenPublication secara detail:

 LibraryRelease ( MavenPublication ) { from components . release artifact ( sourceJar ) setGroupId groupId setArtifactId artifactId version versionName + releaseSuffix }

Kami mengambil LibraryRelease sebagai contoh. Pertama, kami menerapkan komponen dengan varian build rilis. Setelah itu, kami menunjukkan bahwa selain .aar yang akan dihasilkan, kami juga ingin mengkompilasi .jar dengan file sumber (langkah ini opsional). Terakhir, kami menetapkan ID grup, ID artefak, dan nama versi untuk pustaka kami (dalam hal ini kami menggunakan sufiks yang berbeda untuk varian debug dan rilis).

Sekarang saatnya membuat .pom untuk setiap publikasi. File .pom berisi semua detail konfigurasi yang diperlukan yang digunakan Maven untuk mengkompilasi proyek kita. Di sini kita dapat menemukan, antara lain, dependensi yang disertakan perpustakaan kita secara rinci.

 publications . all { pom . withXml { asNode (). dependencies . '*' . findAll () { it . scope . text () == 'runtime' && project . configurations . implementation . allDependencies . find { dep -> dep . name == it . artifactId . text () } }. each { it . scope *. value = 'compile' } } }

Dalam kasus khusus saya, saya harus menulis aturan khusus untuk memperbaiki cakupan Maven dari beberapa dependensi yang saya gunakan di perpustakaan saya. Ini mungkin tidak perlu untuk Anda. Informasi lebih lanjut tentang cakupan Maven di sini dan di sini .

Kami mengakhiri skrip kami dengan mencetak log dengan informasi tentang artefak yang diterbitkan.

Menerbitkan ke Maven lokal

Jika Anda menuju ke pohon tugas Gradle, di dalam bagian penerbitan Anda akan melihat bahwa kami memiliki tugas-tugas ini, yang dapat kami jalankan tergantung pada kebutuhan kami:

  • publish[MODULE_NAME]DebugPublicationToMavenLocal mengkompilasi proyek dalam mode debug.
  • publish[MODULE_NAME]ReleasePublicationToMavenLocal mengkompilasi proyek dalam mode rilis.
  • publishToMavenLocal menghasilkan versi debug dan rilis.

Pohon tugas gradle

Pada tangkapan layar berikut, kita dapat mengamati output dari eksekusi yang berhasil dari publishToMavenLocal :

Log perpustakaan yang diterbitkan

Tugas gradle juga dapat dijalankan dari baris perintah, misalnya:
./gradlew publishToMavenLocal
./gradlew publishLibraryDebugPublicationToMavenLocal

Luar biasa! Kami sudah memiliki perpustakaan kami, dengan dua varian dan artefaknya, diterbitkan di Maven lokal. Tapi sekarang, bagaimana kita bisa mengintegrasikannya ke proyek lain?

Mengintegrasikan perpustakaan Anda dalam sebuah proyek

Untuk mengimpor perpustakaan kita ke perpustakaan lain atau ke aplikasi Android, pertama-tama kita perlu membuka build.gradle tingkat proyek kita, dan menginstruksikannya untuk menggunakan mavenLocal() sebagai repositori:

 buildscript { repositories { mavenLocal () ... } ... } allprojects { repositories { mavenLocal () ... } }

Setelah ini selesai, kita harus menyertakan perpustakaan kita sebagai ketergantungan dalam file build.gradle

 dependencies { implementation "com.me:my-awesome-lib:1.0.0" ... }

Pengenal perpustakaan kami, dalam hal ini com.me:my-awesome-lib:1.0.0 , memiliki format groupId:artifactId:versionName , seperti yang kami instruksikan ke Gradle sebelumnya. Informasi ini juga dapat dilihat di file .pom yang dihasilkan dengan publikasi.

Jadi kami tiba di langkah terakhir! Sekarang saatnya untuk mengkompilasi proyek kita dan memeriksa apakah perpustakaan kita telah diimpor dengan benar.

Kesimpulan

Hari ini kami mencoba alternatif untuk menerbitkan perpustakaan Android, yang diharapkan akan membantu Anda mempercepat proses pengembangan Anda. Kami mengonfigurasi file Gradle untuk memublikasikan versi debug dan rilis pustaka Android ke repositori lokal Maven, lalu kami mempelajari cara mengintegrasikannya ke dalam proyek utama kami. Saya harap artikel ini berfungsi sebagai satu lagi alat untuk pekerjaan sehari-hari Anda sebagai pengembang perpustakaan Android.

July 22, 2021

codeorayo

Ampuh! Ini rahasia mengembangkan aplikasi secara instan, tinggal download dan kembangkan. Gabung sekarang juga! Premium Membership [PRIVATE] https://premium.codeorayo.com

Leave a Reply

Your email address will not be published. Required fields are marked *