Ich denke, dass viele die Notwendigkeit hatten, einzelne Module ihrer Android-Anwendung in einem anderen Projekt wiederzuverwenden. Es gibt einfache Möglichkeiten, um dieses Problem zu lösen. Hosten Sie beispielsweise Ihre Android-Bibliothek öffentlich mit JitPack . Die Lösung ist ausgezeichnet, aber wenn Sie die Bibliothek privat platzieren müssen, müssen Sie bezahlen, und der Tarif hängt meistens von der Anzahl der platzierten Artefakte ab. Diese Lösung ist nicht für jeden geeignet.
Im Folgenden werde ich eine einfache Lösung für dieses Problem mit Sonatype Nexus Repository OSS anbieten.Einführung
Der Artikel soll nicht umfassend sein und spiegelt nur eine grundlegende Lösung wider. Als Ergebnis haben Sie Software zum Verwalten von Artefakten auf der Seite eines Hosts installiert, ein Skript zum Veröffentlichen einer Android-Bibliothek und die Möglichkeit, Abhängigkeiten in Ihrer Anwendung aus dem lokalen Maven-Repository zu implementieren. Vielleicht gibt es bereits Veröffentlichungen dieser Art auf Habré, aber ich habe kein verständliches Tutorial für den Android-Entwickler gefunden, das mich dazu veranlasste, Informationen mit Ihnen zu teilen. Ich werde mich freuen, wenn sich herausstellt, dass es bei der Arbeit wirklich nützlich ist.
Schritt 1. Vorbereitung
Zuerst müssen Sie entscheiden, wo Nexus installiert werden soll. Es ist logisch, wenn dies ein Server ist, auf den Sie während der Entwicklung immer Zugriff haben. In diesem Artikel installieren wir Nexus auf demselben Host, auf dem wir entwickeln. Die Unterschiede bei der Installation auf dem Server bestehen nur in der IP-Adresse, unter der wir auf die Repositorys zugreifen.
Vor der Installation von Nexus müssen Sie JRE
herunterladen und installieren. Nur Oracle JRE ist geeignet und nur Version 1.8 (versucht 10, aber Nexus schwor), dies ist
in der Dokumentation deutlich angegeben . Denken Sie daran, den Pfad zu den ausführbaren JRE-Dateien in Ihrem PATH hinzuzufügen.
Als nächstes müssen Sie
Nexus von der offiziellen Website herunterladen . Zum Zeitpunkt des Schreibens ist dies Version 3.12
Schritt 2. Installieren und konfigurieren Sie Nexus
Es reicht aus, das heruntergeladene Archiv dort zu entpacken, wo es für Sie bequem ist. Dann können Sie das Programm starten und mit der Arbeit beginnen. Für eine langfristige und bequeme Verwendung müssen Sie Nexus als Dienst registrieren und beim Start des Betriebssystems ausführen. Wie das geht, ist
in der Dokumentation ganz klar
beschrieben . In unserem Fall gehen Sie einfach in den
nexus-3.12/bin/
"
nexus-3.12/bin/
" und führen Sie die Nexus-Datei über die Befehlszeile aus.
Im Fall von c Windows:
nexus.exe /run
Im Fall von Unix:
./nexus run
Infolgedessen sollte eine Benachrichtigung über einen erfolgreichen Start angezeigt werden. Sie sieht ungefähr so aus:
Es ist an der Zeit, die Funktionalität des Nexus zu testen. Gehen Sie dazu einfach auf den Link
http: // localhost: 8081 . Wie Sie verstehen, müssen Sie im Fall eines Servers anstelle von "
localhost
" die IP-Adresse Ihres Servers angeben, und Nexus verwendet Port 8081, um zu arbeiten. Diese Seite wird angezeigt:
Zunächst müssen Sie sich anmelden, oben rechts auf "Anmelden" klicken und den Login (
admin
) und das Passwort (
admin123
) des Administrators
admin123
. Danach erscheint das Zahnradsymbol, indem Sie darauf klicken, um in die Einstellungen zu gelangen.
Auf dem Einstellungsbildschirm sehen Sie Links zu
Blob Stores
und
Repositories
.
Blob Stores
sind die Repositorys für Ihre Repository-Daten. In den Einstellungen jedes Repositorys können Sie einen bestimmten
Blob Store
zum Speichern von Informationen angeben. Eine wird für uns ausreichen, standardmäßig erstellt.
Repositories
sind die für uns interessanten Repositories, in denen die Bibliotheken gespeichert werden.
Bevor Sie jedoch mit der Beschreibung der Repositorys fortfahren, sollten Sie grundlegende Einstellungen für Benutzer vornehmen. Gehen wir zum Abschnitt "
Roles
".
Zusätzlich zu den Rollen des Administrators und des anonymen Benutzers schlage ich vor, Rollen vom Typ "
Downloader
" zuzuweisen - zum Laden von Abhängigkeiten in Projekte "
Contributor
" - zum Senden von Bibliotheken an Nexus.
Klicken Sie auf "Rolle erstellen", wählen Sie dann die "Nexus-Rolle" aus und geben Sie die Daten für den "Downloader" wie im folgenden Screenshot ein:
Welche Berechtigungen sind für das verantwortlich, was
in der Dokumentation ausführlich beschrieben wird. Wir müssen ein Privileg mit dem Flag "
repository-view
" auswählen (es ist für die Arbeit mit den Daten der Repositorys verantwortlich). Das Privileg sollte auch das Recht zum Lesen der Repository-Daten einräumen. Dies ist das Flag "
read
". Da wir in Android mit Maven-Repositorys arbeiten, lohnt es sich
maven2
Flag "
maven2
", um zu verhindern, dass der Benutzer mit anderen Arten von Repositorys arbeitet. Klicken Sie auf "
Create role
".
In Analogie erstellen wir die Rolle "
Contributor
". Der einzige Unterschied besteht darin, dass wir das Lesen direkt von der Rolle "
Downloader
" (Einstellung am Ende der Seite) erben und mit unseren Händen Berechtigungen zum Bearbeiten, Hinzufügen von Artefakten zum Repository und zum Anzeigen der Daten der Repositorys über die Weboberfläche erteilen.
Erstellen Sie als Nächstes die Benutzer, denen wir die konfigurierten Rollen zuweisen. Wir gehen zum Abschnitt "
Users
" (auf der linken Seite des Fensters) und klicken auf "
Create local user
". Zur Überprüfung können Sie Kennwörter festlegen, die dem Standard-Administratorkennwort ähnlich sind, dh "
downloader123
" und "
contributor123
". Probenfüllung auf dem Bildschirm:
Da unser Ziel die private Arbeit ist, lohnt es sich, den Zugriff auf Repository-Daten für anonyme Benutzer zu deaktivieren. Gehen Sie dazu zum Benutzer "
anonimous
" und ändern Sie seinen Status von "
Active
" in "
Disabled
". In diesem Fall ist es nicht möglich, Abhängigkeiten im Android-Projekt anonym abzurufen, sondern nur mit einem bestimmten Benutzer und Kennwort. Es ist jedoch weiterhin möglich, Daten über die Weboberfläche herunterzuladen.
Um zu verhindern, dass anonyme Benutzer den Inhalt der Repositorys über die Weboberfläche
Anonimous
, gehen Sie zum Abschnitt "
Anonimous
" und deaktivieren
Allow anonymous users to access the server
Option "
Allow anonymous users to access the server
". Denken Sie daran, die Änderungen zu speichern.
Der letzte Schritt bleibt - das Einrichten von Repositorys. Gehen Sie zum Abschnitt "
Repositories
" und sehen Sie sich die dort erstellten Standard-Repositorys an. Unter ihnen gibt es Repositorys "
maven2
". Wenn Sie genau hinschauen, können Sie verschiedene Typen sehen: "Proxy", "Gruppe", "gehostet". Wenn das Proxy-Repository den Benutzer einfach an ein anderes Repository weiterleitet, ist dies im Fall des vorkonfigurierten "
maven-central
" ein Link zu
https://repo1.maven.org/maven2/ . "Group" kann mehrere Repositorys enthalten. und "gehostet" ist bereits ein bestimmtes Repository, das in Nexus gespeichert ist. Sie werden uns jetzt nützlich sein.
Erstellen Sie Repositorys für die Versionen "Release" und "Snapshot" der Artefakte. Klicken Sie auf "
Create repository
" und wählen Sie "
maven2 (hosted)
". Wir werden das erste Repository "android" nennen und es einfach speichern, ohne die Einstellungen zu ändern:
Wir nennen das zweite Repository "android_snapshot", ändern die "
Version policy
" in "Spapshot" und die "
Deployment policy
" in "Neu bereitstellen zulassen".
Wenn nicht klar ist, was dies betrifft, können Sie es
hier lesen. Tatsächlich kann das "Android" -Repository nicht wiederholt dieselbe Version der Bibliothek herunterladen. Dies ist das übliche Verhalten, wenn Sie beispielsweise mit maven-central kommunizieren. Für das Repository android_snapshot muss der Versionsname unbedingt auf SNAPSHOT enden, und dieselbe Version steht wieder zum Download zur Verfügung.
Beachten Sie auch die Tatsache, dass die Liste der Repositorys eine "URL" -Spalte mit "Kopieren" -Schaltflächen enthält. Diese Links werden wir in Zukunft benötigen, um auf Repositorys aus Projekten zugreifen zu können.
Glückwunsch! Die Grundkonfiguration von Nexus ist abgeschlossen. Es ist Zeit, mit dem Erstellen und Veröffentlichen der Bibliothek zu beginnen.
Schritt 3. Erstellen und veröffentlichen Sie die Android-Bibliothek
Wir erstellen das Android-Projekt, wir werden es "TestLibrary" nennen. Klicken Sie anschließend in der „Projektansicht“ mit der rechten Maustaste auf das Projektstammverzeichnis und wählen Sie „Neu“ und „Modul“. Wählen Sie im folgenden Fenster "Android-Bibliothek" aus und nennen Sie die Bibliothek "HelloLibrary". Als Ergebnis sehen Sie das Modul unserer neuen Bibliothek neben dem Modul „App“.
Fügen Sie der Bibliothek eine Klasse mit einer Willkommensfunktion hinzu:
package com.example.nexus.hellolibrary fun helloFromOurLibrary() { println("### Hello World! This is our new Android library!") }
Die Bibliothek ist fertig, es ist Zeit zu veröffentlichen. Fügen Sie in der "Projektansicht" im Modul "hellolibrary" die Datei hinzu und nennen Sie sie "publisher.gradle". Das Skript zum Veröffentlichen der Bibliothek wird gespeichert.
// 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
Gehen Sie als Nächstes zum "build.gradle" unserer Bibliothek, wenden Sie unseren Herausgeber darauf an und entfernen Sie unnötige Abhängigkeiten:
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() }
Jetzt können wir veröffentlichen, indem wir die Aufgabe "
publishAndroidLibraryPublicationToMavenRepository
"
publishAndroidLibraryPublicationToMavenRepository
.
Die Bibliothek ist veröffentlicht, herzlichen Glückwunsch! Überprüfen Sie das Ergebnis in der Weboberfläche unseres Nexus. Gehen Sie zum Element "Durchsuchen" und wählen Sie das Repository "Android" aus. Sie sollten Folgendes sehen:
Schritt 4. Verwenden von Abhängigkeiten von Nexus
Für den Test schlage ich vor, ein weiteres leeres Android-Projekt zu erstellen.
Verbinden Sie zunächst das Repository mit dem Projekt, indem Sie einfach Daten zur Datei "build.gradle" auf Projektebene hinzufügen:
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 }
Und jetzt, wie bei jeder anderen Bibliothek, erhalten wir durch die Implementierung in der Datei "build.gradle" der Ebene "app" eine Abhängigkeit von unserer "hellolibrary".
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" }
Der Pfad zur Abhängigkeit wird als
groupId:artifactId:version
.
Jetzt können Sie die Funktion
helloFromOurLibrary()
in Ihrem Android-Projekt aufrufen und die Leistung der gesamten Schaltung testen. Glückwunsch!
Zusammenfassung
Jetzt haben Sie die Möglichkeit, private Android-Bibliotheken in Projekten wiederzuverwenden. Warten auf Kommentare!
Ich hoffe du hast deine Zeit nicht verschwendet, danke!