Ons leven als Android-ontwikkelaars zou een stuk moeilijker zijn, zo niet voor al die externe bibliotheken die we graag in onze projecten opnemen. In deze zelfstudie leert u hoe u kunt teruggeven aan de ontwikkelaarsgemeenschap door uw eigen Android-bibliotheken te maken en te publiceren, die mensen moeiteloos kunnen toevoegen en gebruiken in hun projecten..
Als uw bibliotheek alleen uit Java-klassen zal bestaan, is het verpakken ervan als JAR en distributie via een bestandshost misschien wel de snelste en gemakkelijkste manier om het te delen. Als u het via de console zou maken, zou de volgende opdracht volstaan:
bash jar cvf mylibrary.jar Class1.class Class2.class ... ClassN.class
In deze zelfstudie wordt echter uitgelegd hoe u kunt werken met complexere bibliotheken die niet alleen Java-klassen bevatten, maar ook verschillende typen XML-bestanden en bronnen. Dergelijke bibliotheken worden gemaakt als Android-bibliotheekmodules en worden meestal als zodanig verpakt AAR bestanden.
Laten we een eenvoudige Android-bibliotheek maken met een aangepast gebruik Uitzicht
voor ontwikkelaars die het gebruiken.
Voeg om te beginnen een nieuwe Android-module aan uw project toe door te selecteren Nieuw> Nieuwe module van de het dossier menu. U krijgt het volgende scherm te zien, dat veel keuzes biedt:
kiezen Android-bibliotheek en druk op volgende. Voer in het onderstaande formulier een naam in voor uw bibliotheek en druk op volgende. Ik zal deze bibliotheek bellen mylittlelibrary.
Selecteer in het laatste scherm Voeg geen activiteit toe en druk op Af hebben.
Uw project heeft nu twee modules, één voor de app en één voor de bibliotheek. Hier ziet de structuur eruit:
Maak een nieuwe lay-out-XML door met de rechtermuisknop op de knop te klikken res map van uw bibliotheekmodule en selecteren Nieuw> XML> Layout XML-bestand. Noem maar op my_view.xml.
Om deze tutorial eenvoudig te houden, maken we een aangepaste versie Uitzicht
dat heeft er twee Tekstweergave
widgets in a LinearLayout
. Na het toevoegen van wat tekst aan de Tekstweergave
widgets, zou het lay-out XML-bestand er als volgt uit moeten zien:
"xml
"
Maak een nieuwe Java-klasse en geef deze een naam MyView.java. Zorg ervoor dat dit bestand in de src map van de bibliotheekmodule - niet de app-module.
Om deze klasse zich te laten gedragen als een Uitzicht
, maak er een subklasse van LinearLayout
klasse. Android Studio zal u vragen een paar constructeurs aan de klas toe te voegen. Na het toevoegen zou de nieuwe klasse er als volgt uit moeten zien:
"java public class MyView breidt LinearLayout uit
public MyView (context context) super (context); public MyView (Context-context, AttributeSet-attrs) super (context, attrs);
"
Zoals u kunt zien, hebben we nu twee constructeurs. Om te voorkomen dat initialisatiecode aan elke constructor wordt toegevoegd, roept u een methode met de naam initialiseren van elke constructor. Voeg de volgende code toe aan elke constructor:
java initialiseren (context);
In de initialiseren
methode, bel opblazen
om de lay-out die we in de vorige stap hebben gemaakt te associëren met de klas.
java private void initialize (Context context) inflate (context, R.layout.my_view, this);
Nu de bibliotheek gereed is, laten we er gebruik van maken in de app module van hetzelfde project om ervoor te zorgen dat er geen problemen zijn. Voeg dit toe als a compileren
afhankelijkheid in de build.gradle bestand van de app-module:
groovy compile project (": mylittlelibrary")
Maak een nieuwe Java-klasse, Hoofdactiviteit, in de app-module. Maak er een subklasse van Activiteit
klasse en overschrijven het onCreate
methode.
"java public class MainActivity breidt activiteit uit
@Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); "
Binnen in de onCreate
methode, maak een instantie van de aangepaste weergave met behulp van de constructor. Geef het door aan de setContentView
methode zodat het alle schermruimte van de vult Activiteit
:
"java @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState);
Bekijk v = nieuwe MyView (this); setContentView (v);
"
Jouw Activiteit
is nu klaar. Nadat u het aan het app-manifest hebt toegevoegd, bouwt u uw project en implementeert u uw app op een Android-apparaat. Je zou de aangepaste weergave moeten kunnen zien wanneer de app start.
Bintray is een populair platform dat u kunt gebruiken om Android-bibliotheken te publiceren. Het is gratis en gemakkelijk te gebruiken.
Begin met het maken van een account op Bintray. Nadat je bent ingelogd op je account, zie je dat je al zes repositories hebt. Je kunt een van deze gebruiken of een nieuwe repository maken. Voor deze tutorial gebruik ik de genoemde repository maven, wat een Maven-repository is.
Ga naar je profielpagina en klik op de Bewerk knop. Klik op de volgende pagina op API sleutel link om uw API-sleutel te bekijken.
Noteer de sleutel, want u hebt deze nodig om uzelf te verifiëren bij het gebruik van de Bintray-plug-in.
Als u wilt communiceren met Bintray in Android Studio, moet u de Bintray-plug-in opnemen in de afhankelijkheden
van uw project build.gradle het dossier.
groovy classpath 'com.jfrog.bintray.gradle: gradle-bintray-plugin: 1.2'
Omdat u de bibliotheek naar een Maven-opslagplaats uploadt, moet u ook de Maven-plug-in toevoegen zoals hieronder wordt weergegeven.
groovy classpath "com.github.dcendents: android-maven-gradle-plugin: 1.3"
Open de build.gradle bestand van uw bibliotheekmodule en voeg de volgende code toe om de plug-ins toe te passen die we in de vorige stap hebben toegevoegd.
groovy apply plugin: 'com.jfrog.bintray' apply plugin: 'com.github.dcendents.android-maven'
De Bintray-plug-in zoekt naar een POM-bestand wanneer het de bibliotheek uploadt. Hoewel de Maven-plug-in het voor u genereert, moet u de waarde van de groupId
tag en de waarde van de versie
tag jezelf. Gebruik hiervoor de groep
en versie
variabelen in uw graduele bestand.
groovy group = 'com.github.hathibelagal.librarytutorial' // Wijzig dit om overeen te komen met de naam van je pakketnaam = '1.0.1' // Wijzig dit om overeen te komen met je versienummer
Als u bekend bent met Maven en u vraagt zich af waarom we de waarde van de waarde niet hebben opgegeven artifactId
tag, dit komt omdat de Maven-plug-in standaard de naam van uw bibliotheek zal gebruiken als de artifactId
.
Om aan de Maven-normen te voldoen, moet uw bibliotheek ook een JAR-bestand bevatten met de bronbestanden van de bibliotheek. Maak een nieuw om het JAR-bestand te genereren Pot
taak, generateSourcesJar, en specificeer de locatie van de bronbestanden met behulp van de van
functie.
groovy task generateSourcesJar (type: Jar) van android.sourceSets.main.java.srcDirs classifier 'sources'
Het wordt ook aanbevolen dat uw bibliotheek een JAR-bestand heeft met daarin Javadocs. Omdat u momenteel geen Javadocs heeft, maakt u een nieuwe javadoc
taak, generateJavadocs, om ze te genereren. Gebruik de bron
variabele om de locatie van de bronbestanden op te geven. Je moet ook het classpath
variabele zodat de taak klassen kan vinden die behoren tot de Android SDK. U kunt dit doen door de retourwaarde van de android.getBootClasspath
methode om het.
groovy taak generateJavadocs (type: Javadoc) source = android.sourceSets.main.java.srcDirs classpath + = project.files (android.getBootClasspath (). join (File.pathSeparator))
Als u vervolgens een JAR van de Javadocs wilt genereren, maakt u een Pot
taak, generateJavadocsJar, en passeer de destinationDir
eigendom van generateJavadocs
naar zijn van
functie. Je nieuwe taak zou er als volgt uit moeten zien:
groovy task generateJavadocsJar (type: Jar) from generateJavadocs.destinationDir classifier 'javadoc'
Om zeker te zijn van de generateJavadocsJar
taak begint pas als het generateJavadocs
taak is voltooid, voegt u het volgende codefragment toe, dat de hangt af van
methode om de taken te bestellen:
groovy generateJavadocsJar.dependsOn generateJavadocs
Als u de bron- en Javadoc JAR-bestanden in de lijst met artefacten wilt opnemen die naar de Maven-opslagplaats worden geüpload, moet u de namen van hun taken toevoegen aan een configuratie
riep archief. Gebruik hiervoor het volgende codefragment:
groovy artifacts archives generateJavaDocsJar archives generateSourcesJar
Het is nu tijd om de taken uit te voeren die we in de vorige stappen hebben gemaakt. Open de Gradle-projecten venster en zoek naar een taak met de naam installeren.
Dubbelklik erop om de taken uit te voeren die aan de bibliotheekmodule zijn gekoppeld. Als het klaar is, heb je alles wat je nodig hebt om je bibliotheek, een geldig POM-bestand, een AAR-bestand, een bronnen-JAR en een Javadocs JAR te publiceren.
Om de plug-in te configureren, moet u de bintray
sluiting in uw Gradle-bestand. Ten eerste, authenticeer jezelf met behulp van de gebruiker
en sleutel
variabelen, die overeenkomen met uw Bintray-gebruikersnaam en API-sleutel respectievelijk.
Op Bintray bevindt uw bibliotheek zich in een Bintray-pakket. Je moet er details over geven met de intuïtieve naam repo
, naam
, licenties
, en vcsUrl
parameters van de pkg
sluiting. Als het pakket niet bestaat, wordt het automatisch voor u gemaakt.
Wanneer u bestanden uploadt naar Bintray, worden deze gekoppeld aan een versie van het Bintray-pakket. daarom, pkg
moet een bevatten versie
sluiting waarvan naam
eigenschap is ingesteld op een unieke naam. Optioneel kunt u ook een beschrijving, releasedatum en Git-tag opgeven met behulp van de desc
, vrijgelaten
, en vcsTag
parameters.
Om ten slotte de bestanden te specificeren die moeten worden geüpload, stelt u de waarde in van configuratie
parameter naar archief.
Dit is een voorbeeldconfiguratie:
"groovy bintray user = 'test-user' key = '01234567890abcdef01234567890abcdef' pkg repo = 'maven' name = 'com.github.hathibelagal.mylittlelibrary'
versie name = '1.0.1-tuts' desc = 'Mijn testupload' vrijgegeven = nieuw Datum () vcsTag = '1.0.1' licenses = ['Apache-2.0'] vcsUrl = 'https: // github. com / hathibelagal / LibraryTutorial.git 'websiteUrl =' https://github.com/hathibelagal/LibraryTutorial ' configurations = [' archives '] "
Open de Gradle-projecten venster opnieuw en zoek naar de bintrayUpload taak. Dubbelklik erop om te beginnen met het uploaden van de bestanden.
Zodra de taak is voltooid, opent u een browser om de detailspagina van uw Bintray-pakket te openen. U ziet een melding die zegt dat u vier niet-gepubliceerde bestanden hebt. Als u deze bestanden wilt publiceren, klikt u op Publiceren link.
Uw bibliotheek is nu beschikbaar als een Bintray-pakket. Zodra u de URL van uw Maven-repository deelt, samen met de groeps-ID, artefact-ID en versienummer, heeft elke ontwikkelaar toegang tot uw bibliotheek. Als u bijvoorbeeld de bibliotheek wilt gebruiken die we hebben gemaakt, moeten ontwikkelaars het volgende codefragment opnemen:
"groovy repositories maven url 'https://dl.bintray.com/eruzza/maven'
afhankelijkheden compile 'com.github.hathibelagal.librarytutorial: mylittlelibrary: 1.0.1@aar' "
Merk op dat de ontwikkelaar uw repository expliciet moet opnemen in de lijst van repositories
voordat u de bibliotheek toevoegt als een compileren
afhankelijkheid.
Standaard zoekt Android Studio naar bibliotheken in een opgeroepen repository JCenter. Als u uw bibliotheek opneemt in de repository van JCenter, hoeven ontwikkelaars niets aan hun bibliotheek toe te voegen repositories
lijst.
Om uw bibliotheek aan JCenter toe te voegen, opent u een browser en bezoekt u de detailspagina van uw Bintray-pakket. Klik op de knop met het label Toevoegen aan JCenter.
U wordt vervolgens naar een pagina geleid waar u een bericht kunt opstellen. U kunt de Comments veld om eventueel details over de bibliotheek te vermelden.
Klik op de Sturen om het beoordelingsproces van Bintray te starten. Binnen een dag of twee zullen de mensen bij Bintray je bibliotheek koppelen aan de JCenter-repository en je kunt de link naar JCenter bekijken op de detailspagina van je pakket..
Elke ontwikkelaar kan nu uw bibliotheek gebruiken zonder de lijst met te wijzigen repositories
.
In deze zelfstudie leer je hoe je een eenvoudige Android-bibliotheekmodule kunt maken en publiceren naar zowel je eigen Maven-repository als naar de JCenter-repository. Onderweg leerde je ook hoe je verschillende soorten graduele taken moest maken en uitvoeren.
Voor meer informatie over Bintray, bezoekt u de gebruikershandleiding van Bintray.