How To: Eigene Library (Android Library) anlegen/einrichten

lordzwieback

lordzwieback

Erfahrenes Mitglied
210
Hallo liebe Leute,

habe mich in den letzten Tagen ein wenig mit Libraries beschäftigt und dachte, ich teile mal mein neues Wissen mit euch.

Und ja, ich weiß, es gibt schon einen Artikel hier zu eigenen Libraries. Das Vorgehen ist dort auch gut erklärt, jedoch etwas älter, nur für Eclipse und .jar-Files. Hier auch nochmal der Link zum angesprochenen Artikel: Tutorial: Libraries erzeugen und verwenden

Warum brauche ich eine eigene Library?
In einer eigenen Library kann man Codestücke, die man immer wieder brauchen wird in eigen dafür angelegten Klassen unterbringen. Die Library kann man dann in diversen Projekten einbinden und die Klassen dort anwenden. So muss man nicht immer wieder den gleichen Code "neu erfinden".

Es gibt es zwei verschiedene Arten von Libraries, .JAR (Java Library) und .AAR (Android Library). Ich beziehe mich hier auf die Android Library. Der Unterschied zwischen den beiden ist folgender: Eine Java Library kann man in einem Android Projekt, aber auch in einem normalen Java Projekt auf diversen Plattformen anwenden. Die Android Library kann neben Klassen und deren Funktionen auch Android Ressourcen, Manifest-Dateien usw enthalten.

Wie erstelle/importiere ich eine Android Library?

  1. Klick auf File -> New -> New Module
  2. Wähle Android Library
  3. Vergib einen Namen für die Library und bestimmte die Minimum SDK Version
Danach sollte die Library im Verzeichnisbaum links auftauchen.

Wenn schon eine Library verfügbar ist, kann diese importiert werden...
  1. Klick auf File -> New -> Import Module
  2. Speicherort auswählen
Danach wird die angewählte Library in das jeweilige Projekt kopiert.

Editieren der settings.gradle:

Fügt folgende Zeile in eure settings.gradle ein. my-library-module ist hier der Name der neu angelegten Library.
Code:
include ':app', ':my-library-module'

Editieren der build.gradle:
Code:
dependencies {
    compile project(":my-library-module")
}

Führt abschließend einmal ein Gradle Sync durch.

Hat das alles funktioniert, kann man die Library in der gewünschten Activity importieren. Jetzt sollte man die Klassen der Library dort aufrufen können. Dazu kann man testweise die Klasse "XYZ" mal anlegen und schauen, ob man diese aufrufen kann.

Wenn ihr Fehler entdeckt oder Verbesserungsvorschläge habt, immer her damit. Ich aktualisiere/korrigiere dann den Hauptpost dementsprechend.

Viel Spaß beim Ausprobieren. :)
 
  • Danke
Reaktionen: Schniefkaiman und swa00
Hallo,

ich befasse mich gerade mit dem Problem eine Library zu erstellen und zu integrieren.
Es sollte eine zu jeder Zeit anpassbare Variante sein ( Quelltext ändern und gut )

in settings.gradle steht:
Code:
include ':app', ':mylibrary'

in build.gradle steht:
Code:
    defaultConfig {
        applicationId "com.example.stirnrad"
        minSdkVersion 19
        targetSdkVersion 19
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:19.1.0'
    //compile 'com.android.support:appcompat-v7:18.0.0'
    compile 'com.google.android.gms:play-services-appindexing:8.4.0'
    //compile project(path: ':mylibrary')
    //implementation project(':mylibrary')
    compile project(":mylibrary")

}

die Struktur ist wie folgt:

upload_2018-3-27_18-30-47.png


Nur aufrufen mit..
Code:
        int test = 0;
        test = testt.hallo();
..lässt es sich nicht.

Der Fehler "error: cannot find symbol variable testt".

Was mache ich falsch?

Über einen Tipp würde ich mich freuen.

Gruß

Klaus
 
Zuletzt bearbeitet:
Hi Klaus,

kann es sein, dass dein Fehler die fehlende Initialisierung einer Testt-Instanz ist?

Funktioniert folgendes?
Code:
int test = 0;
Testt testt = new Testt();
test = testt.hallo();
 
@lordzwieback
Hallo lordzwieback,
danke erst einmal für die schnelle Antwort.

Ich habe es versucht.

upload_2018-3-28_18-29-8.png

Cannnot resolve sysmol 'Testt' ist das Ergebnis.

Schade!

Was kann ich noch probieren?

Gruß

Klaus
 
Haste den Import für deine Library im Code?
 
...das ist ein Thema was ich auch schon versucht habe.
Nur wie "import ?? ".
Hab keinen blassen schimmer.

Automatisch mit ALT+RETURN geht es nicht.

Gruß

Klaus
 
In der Regel "import packagename.*;" oder "import packagename.classname;"
 
..tja, mit 'import com.example.mylibrary.Testt;' scheint es nicht zu funktionieren ( ausgegraut )
'import com.example.mylibrary.R;' ist nicht ausgegraut, hilft aber nicht.
Hilft der Unterschied evtl. weiter bei der Fehlersuche?
 
Hi ich hänge mich hier mal mit rein.
Für mich sieht es in deiner Stucktur so aus als wenn deine Klasse "Testt" nicht unter "com.example.mylibrary" ist sondern eine Ebene höher unter Java.
Deshalb auch der ausgegraute Import.

Bei "com.example.mylibrary" ist auch kein Pfeil nach rechts der darauf hindeutet das in dem Ordner was drin ist.
 
..ich habe es gestern ans Laufen bekommen.
Nachdem ich die compileSdkVersion, minSdkVersion und targetSdkVersion in build.gradle von mylibrary und app abgeglichen habe wurde "
import com.example.mylibrary.Testt;" hinzugefügt und mit Testt testt = new Testt(); konnte ich dann auf die Funktion zugreifen.

Besten Dank für die Hilfe!!

Gruß

Klaus
 
  • Danke
Reaktionen: lordzwieback

Ähnliche Themen

ConfusingFutureGames
  • ConfusingFutureGames
Antworten
0
Aufrufe
1.471
ConfusingFutureGames
ConfusingFutureGames
ConfusingFutureGames
  • ConfusingFutureGames
Antworten
6
Aufrufe
1.852
ConfusingFutureGames
ConfusingFutureGames
S
  • Selbstbauer
2 3
Antworten
49
Aufrufe
5.430
jogimuc
J
Zurück
Oben Unten