Saya pikir banyak yang perlu menggunakan kembali modul individual dari aplikasi Android mereka di proyek lain. Ada cara sederhana untuk mengatasi masalah ini, misalnya, menghosting perpustakaan Android Anda secara publik menggunakan JitPack . Solusinya sangat baik, tetapi jika Anda perlu menempatkan perpustakaan secara pribadi, Anda harus membayar, dan tarif akan paling sering tergantung pada jumlah artefak yang ditempatkan. Solusi ini tidak cocok untuk semua orang.
Di bawah ini saya akan menawarkan solusi sederhana untuk masalah ini menggunakan Sonatype Nexus Repository OSS.Pendahuluan
Artikel ini tidak dimaksudkan untuk bersifat komprehensif dan hanya mencerminkan solusi dasar. Sebagai hasilnya, Anda akan menginstal perangkat lunak untuk mengelola artefak di sisi host, skrip untuk menerbitkan pustaka Android, kemampuan untuk mengimplementasikan dependensi dalam aplikasi Anda dari repositori maven lokal. Mungkin sudah ada publikasi semacam ini tentang Habré, tetapi saya tidak menemukan tutorial yang dapat dimengerti untuk pengembang Android, yang mendorong saya untuk berbagi informasi dengan Anda. Saya akan senang jika ternyata benar-benar bermanfaat dalam pekerjaan.
Langkah 1. Persiapan
Pertama, Anda perlu memutuskan di mana akan menginstal Nexus. Adalah logis jika ini adalah server, yang Anda akan selalu memiliki akses selama pengembangan. Pada artikel ini, kami akan menginstal Nexus pada host yang sama yang sedang kami kembangkan. Perbedaan saat memasang di server hanya akan di alamat ip di mana kita akan mengakses repositori.
Sebelum menginstal Nexus, Anda harus
mengunduh dan menginstal JRE. Hanya Oracle JRE yang cocok dan hanya versi 1.8 (mencoba 10, tetapi Nexus bersumpah), ini
jelas ditunjukkan dalam dokumentasi . Ingatlah untuk menambahkan path ke executable JRE di PATH Anda.
Selanjutnya Anda perlu
mengunduh Nexus dari situs resmi . Pada saat penulisan, ini adalah versi 3.12
Langkah 2. Instal dan konfigurasikan Nexus
Cukup membongkar arsip yang telah diunduh di tempat yang nyaman bagi Anda. Kemudian Anda dapat memulai program dan mulai bekerja. Untuk penggunaan jangka panjang dan nyaman, Anda harus mendaftarkan Nexus sebagai layanan dan menjalankannya saat OS dimulai. Cara melakukan ini
dijelaskan dengan sangat jelas
dalam dokumentasi . Dalam kasus kami, buka saja
nexus-3.12/bin/
"
nexus-3.12/bin/
" dan jalankan file nexus dari baris perintah.
Dalam kasus c Windows:
nexus.exe /run
Dalam kasus Unix:
./nexus run
Akibatnya, Anda akan melihat pemberitahuan tentang peluncuran yang sukses, tampilannya seperti ini:
Waktunya telah tiba untuk menguji fungsionalitas Nexus. Untuk melakukan ini, cukup buka tautan
http: // localhost: 8081 . Seperti yang Anda pahami, dalam hal server, alih-alih "
localhost
", Anda perlu menentukan alamat ip server Anda, dan Nexus menggunakan port 8081 untuk bekerja. Anda akan melihat halaman ini:
Pertama-tama, Anda harus masuk, klik "
Sign in
"
Sign in
kanan atas dan masukkan login (
admin
) dan kata sandi (
admin123
) dari administrator. Setelah itu, ikon roda gigi muncul, dengan mengklik di mana kita masuk ke pengaturan.
Pada layar pengaturan, Anda akan melihat tautan ke
Blob Stores
dan
Repositories
.
Blob Stores
adalah repositori untuk data repositori Anda. Dalam pengaturan masing-masing repositori, Anda dapat menentukan
Blob Store
tertentu untuk menyimpan informasi. Satu akan cukup bagi kita, dibuat secara default.
Repositories
adalah repositori yang menarik bagi kami, di mana perpustakaan akan disimpan.
Tetapi sebelum beralih ke deskripsi repositori, ada baiknya membuat pengaturan dasar untuk pengguna. Mari kita pergi ke bagian "
Roles
".
Selain peran administrator dan pengguna anonim, saya sarankan mengalokasikan peran tipe "
Downloader
" - untuk memuat dependensi ke dalam proyek, "
Contributor
" - untuk mengirim perpustakaan ke Nexus.
Klik "Buat peran", lalu pilih "Peran Nexus", masukkan data untuk "Pengunduh" seperti pada tangkapan layar di bawah ini:
Hak istimewa apa yang bertanggung jawab atas apa yang dijelaskan
secara terperinci
dalam dokumentasi . Kita perlu memilih hak istimewa dengan bendera "
repository-view
" (bertanggung jawab untuk bekerja dengan data repositori), hak istimewa juga harus memberikan hak untuk membaca data repositori, ini adalah bendera "
read
", dan karena di Android kami bekerja dengan repositori maven, layak tinggal di bendera "
maven2
" untuk mencegah pengguna bekerja dengan jenis repositori lainnya. Klik "
Create role
".
Dengan analogi, kita menciptakan peran "
Contributor
". Satu-satunya perbedaan adalah bahwa kami akan mewarisi bacaan langsung dari peran "
Downloader
" (pengaturan di bagian bawah halaman), dan dengan tangan kami, kami akan memberikan hak istimewa untuk mengedit, menambahkan artefak ke repositori, dan juga untuk melihat data repositori melalui antarmuka web.
Selanjutnya, buat pengguna yang akan kami berikan peran terkonfigurasi. Kami pergi ke bagian "
Users
" (di sebelah kiri jendela) dan klik "
Create local user
". Untuk verifikasi, Anda dapat menetapkan kata sandi yang mirip dengan kata sandi admin standar, yaitu, "
downloader123
" dan "
contributor123
". Isi sampel di layar:
Karena tujuan kami adalah pekerjaan pribadi, ada baiknya menonaktifkan akses ke data repositori untuk pengguna anonim, untuk ini kami pergi ke pengguna "
anonimous
" dan mengubah statusnya dari "
Active
" menjadi "
Disabled
". Dalam hal ini, tidak mungkin mendapatkan dependensi secara anonim dalam proyek Android, tetapi hanya dengan pengguna dan kata sandi tertentu, tetapi masih mungkin untuk mengunduh data melalui antarmuka web.
Untuk melarang pengguna anonim melihat konten dari repositori melalui antarmuka web, buka bagian "
Anonimous
" dan hapus centang pada opsi "
Allow anonymous users to access the server
". Ingatlah untuk menyimpan perubahan.
Langkah terakhir tetap - mengatur repositori. Pergi ke bagian "
Repositories
" dan lihat repositori default yang dibuat di sana. Di antara mereka ada repositori "
maven2
", jika Anda melihat lebih dekat, Anda dapat melihat berbagai jenis: "proxy", "grup", "host". Ketika repositori proksi hanya meneruskan pengguna ke repositori lain, dalam kasus "
maven-central
" yang telah dikonfigurasikan sebelumnya, ini adalah tautan ke
https://repo1.maven.org/maven2/ , "grup" dapat mencakup beberapa repositori, dan "dihosting" sudah merupakan repositori spesifik yang disimpan di Nexus. Mereka akan berguna bagi kita sekarang.
Buat repositori untuk versi “Rilis” dan “Potret” artefak. Klik "
Create repository
", pilih "
maven2 (hosted)
". Kami akan memanggil repositori pertama "android" dan hanya menyimpannya tanpa mengubah pengaturan:
Kami menyebut repositori kedua "android_snapshot", ubah "
Version policy
" menjadi "Spapshot" dan "
Deployment policy
" menjadi "Izinkan pengalihan pekerjaan".
Jika tidak jelas apa pengaruhnya, Anda dapat membacanya di
sini . Bahkan, repositori "android" tidak akan dapat mengunduh versi perpustakaan yang sama berulang kali, ini adalah perilaku yang biasa ketika berkomunikasi, misalnya, dengan pakar-pusat. Untuk repositori android_snapshot, nama versi harus diakhiri dengan SNAPSHOT dan versi yang sama akan tersedia untuk diunduh lagi.
Juga perhatikan fakta bahwa daftar repositori memiliki kolom "URL" dengan tombol "Salin", kita akan memerlukan tautan ini di masa depan untuk mengakses repositori dari proyek.
Selamat! Konfigurasi dasar Nexus selesai, saatnya untuk mulai membuat dan menerbitkan perpustakaan.
Langkah 3. Buat dan publikasikan perpustakaan Android
Kami membuat proyek Android, kami akan menamainya "TestLibrary". Selanjutnya, di "Project View", klik pada root proyek dengan tombol kanan mouse, pilih "New" dan "Module". Di jendela yang terbuka, pilih "Perpustakaan Android" dan beri nama perpustakaan "HelloLibrary". Hasilnya, Anda akan melihat modul perpustakaan baru kami di sebelah modul "aplikasi".
Tambahkan kelas dengan fungsi sambutan ke perpustakaan:
package com.example.nexus.hellolibrary fun helloFromOurLibrary() { println("### Hello World! This is our new Android library!") }
Perpustakaan sudah siap, saatnya untuk menerbitkan. Dalam "Project view" di modul "hellolibrary" tambahkan file dan sebut "publisher.gradle". Ini akan menyimpan skrip untuk menerbitkan perpustakaan.
// apply plugin: 'maven-publish' ext { // URL Release repositoryReleaseUrl = "http://localhost:8081/repository/android/" // URL Snapshot repositorySnapshotUrl = "http://localhost:8081/repository/android_snapshot/" // , contributorUserName = "contributor" // , contributorPassword = "contributor123" // libraryGroupId = "com.example.nexus" // libraryArtifact = "hellolibrary" // libraryVersion = "0.0.1" } // publishing { // repositories { // maven { // credentials { username contributorUserName password contributorPassword } // Snapshot url libraryVersion.endsWith("SNAPSHOT") ? repositorySnapshotUrl : repositoryReleaseUrl } } // maven-publish publications { // AndroidLibrary - , // , AndroidLibrary(MavenPublication) { // groupId libraryGroupId artifactId libraryArtifact version libraryVersion // artifact "$buildDir/outputs/aar/${project.getName()}-release.aar" pom { // , // ClassNotFoundException // . withXml { def dependencies = asNode().appendNode("dependencies") configurations.getByName("releaseCompileClasspath") .getResolvedConfiguration() .getFirstLevelModuleDependencies() .each { def dependency = dependencies.appendNode("dependency") dependency.appendNode("groupId", it.moduleGroup) dependency.appendNode("artifactId", it.moduleName) dependency.appendNode("version", it.moduleVersion) } } // withXml } // pom } // AndroidLibrary } // publications // assembleRelease model { tasks.publishAndroidLibraryPublicationToMavenRepository { dependsOn project.tasks.assembleRelease } } } //publishing
Selanjutnya, buka "build.gradle" dari perpustakaan kami, terapkan penerbit kami untuk itu dan bersihkan dari dependensi yang tidak perlu:
apply plugin: 'com.android.library' apply plugin: 'kotlin-android' // publisher apply from: "publisher.gradle" android { compileSdkVersion 28 defaultConfig { minSdkVersion 18 targetSdkVersion 28 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" } repositories { mavenCentral() }
Sekarang kita dapat menerbitkan hanya dengan menyelesaikan tugas "
publishAndroidLibraryPublicationToMavenRepository
".
Perpustakaan diterbitkan, selamat! Periksa hasilnya di antarmuka web Nexus kami. Buka item "Browse" dan pilih repositori "android". Anda harus melihat yang berikut ini:
Langkah 4. Menggunakan dependensi dari Nexus
Untuk pengujian, saya mengusulkan untuk membuat proyek Android kosong lainnya.
Untuk memulai, hubungkan repositori ke proyek dengan hanya menambahkan data ke file “build.gradle” di tingkat proyek:
buildscript { ext.kotlin_version = '1.2.50' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.1.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } allprojects { repositories { google() jcenter() // maven { credentials { username "downloader" password "downloader123" } url "http://localhost:8081/repository/android" } } } task clean(type: Delete) { delete rootProject.buildDir }
Dan sekarang, seperti perpustakaan lainnya, kami mendapatkan ketergantungan pada "hellolibrary" kami melalui implementasi dalam file "build.gradle" pada level "app".
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 28 defaultConfig { applicationId "com.example.nexus.fff" minSdkVersion 18 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'com.android.support:appcompat-v7:28.0.0-alpha3' implementation 'com.android.support.constraint:constraint-layout:1.1.2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' // implementation "com.example.nexus:hellolibrary:0.0.1" }
Jalan menuju ketergantungan
groupId:artifactId:version
sebagai
groupId:artifactId:version
.
Sekarang Anda dapat memanggil fungsi
helloFromOurLibrary()
di proyek Android Anda dan menguji kinerja seluruh rangkaian. Selamat!
Ringkasan
Sekarang Anda memiliki kesempatan untuk menggunakan kembali perpustakaan Android pribadi dalam proyek. Menunggu komentar!
Saya harap Anda tidak menyia-nyiakan waktu Anda, terima kasih!