Wie kann ich externe JARs in einem Android-Projekt verwenden?

326

Ich habe ein Android-Projekt erstellt und meinem Projekt eine externe JAR (hessian-4.0.1.jar) hinzugefügt. Ich habe dann die JAR zum Erstellungspfad hinzugefügt und sie in Reihenfolge und Export abgehakt.

Order and Export wird anscheinend ignoriert und alle Klassen aus der externen JAR fehlen zur Laufzeit.

Gibt es einen Trick, um die benötigten Klassen aus einer externen JAR beim Erstellen einer Android-Anwendung mit dem Eclipse-Plugin richtig einzuschließen? Ich möchte keine Ameise oder Maven verwenden.

AndroidSmoker74
quelle
1
Wie Sie bereits herausgefunden haben: Dies wird durch Abhängigkeiten in hessian-4.0.1.jar verursacht. Wenn Sie Hessisch mit Android verwenden möchten, verwenden Sie Hessdroid ( code.google.com/p/hessdroid ). Nicht sehr aktiv, funktioniert aber auch unter Android 4.0 einwandfrei.
Ice09
1
Siehe auch "NoClassDefFoundError für Code in einer Java-Bibliothek unter Android" für ein häufiges Problem bei der Verwendung externer Jars. Einfache Lösung .
Flow

Antworten:

443

Für Eclipse

Eine gute Möglichkeit, Ihrem Android-Projekt oder einem Java-Projekt externe JARs hinzuzufügen, ist:

  1. Erstellen Sie einen Ordner, derlibs im Stammordner Ihres Projekts aufgerufen wird
  2. Kopieren Sie Ihre JAR-Dateien in den libsOrdner
  3. Klicken Sie nun mit der rechten Maustaste auf die Jar-Datei und wählen Sie dann Erstellungspfad > Zum Erstellungspfad hinzufügen. Daraufhin wird in Ihrem Projekt ein Ordner mit dem Namen "Referenzierte Bibliotheken" erstellt

    Auf diese Weise verlieren Sie nicht Ihre Bibliotheken , auf die auf Ihrer Festplatte verwiesen wird, wenn Sie Ihr Projekt auf einen anderen Computer übertragen.

Für Android Studio

  1. Wenn Sie in sind Android - Ansicht in Projekt - Explorer, ändern Sie auf Projektansicht wie unten

Fehlendes Bild

  1. Klicken Sie mit der rechten Maustaste auf das gewünschte Modul, in dem Sie die externe Bibliothek hinzufügen möchten, wählen Sie dann Neu> Directroy und nennen Sie es ' libs '.
  2. Kopieren Sie nun die Datei blah_blah.jar in den Ordner ' libs '
  3. Klicken Sie mit der rechten Maustaste auf die Datei blah_blah.jar und wählen Sie dann " Als Bibliothek hinzufügen ". Dadurch werden automatisch Build.gradle als Kompilierungsdateien ('libs / blah_blah.jar') hinzugefügt und eingegeben und der Gradle synchronisiert. Und du bist fertig

Bitte beachten Sie: Wenn Sie Bibliotheken von Drittanbietern verwenden, ist es besser, transitive Abhängigkeiten zu verwenden, bei denen das Gradle-Skript die JAR und die Abhängigkeits-JAR automatisch herunterlädt, wenn das Gradle-Skript ausgeführt wird.

Beispiel: Kompilieren Sie 'com.google.android.gms: play-services-ads: 9.4.0'.

Lesen Sie mehr über Gradle Dependency Mangement

Vinayak Bevinakatti
quelle
49
Beachten Sie, dass sich bei Verwendung der neuesten Eclipse / ADT-Versionen die externen Jars in einem Ordner namens libs(anstelle von lib)
THelper
4
@ THelper - Danke! Sie haben Recht, der Ordner muss "libs" und nicht "lib" heißen. Ich habe meinen Kopf über dieses Problem geschlagen.
Camille Sévigny
7
In neueren Versionen des SDK ist Schritt 3 (manuelles Hinzufügen der JAR zum Erstellungspfad) nicht erforderlich. Wenn Sie jedoch eine IDE wie Eclipse zum Zeitpunkt des Ablegens der Datei geöffnet haben, müssen Sie eine Projektaktualisierung durchführen (F5 und / oder Kontextmenü Aktualisieren im Paket-Explorer).
Jon Adams
4
Wie geht das über die Kommandozeile? Welche Konfigurationsdatei muss ich bearbeiten und wie?
Kristian Spangsege
13
Dieser Ansatz ist seit Anfang 2012 veraltet. Fügen Sie einfach die JAR hinzu libs/. Ändern Sie den Erstellungspfad nicht manuell.
CommonsWare
127

Ja, du kannst es benutzen. Hier ist, wie:

  1. Ihr Projekt -> Rechtsklick -> Importieren -> Dateisystem -> yourjar.jar
  2. Ihr Projekt -> Rechtsklick -> Eigenschaften -> Java-Erstellungspfad -> Bibliotheken -> Jar hinzufügen -> yourjar.jar

Dieses Video kann hilfreich sein, wenn Sie Probleme haben.

MannyNS
quelle
5
Dieser Ansatz ist seit Anfang 2012 veraltet. Fügen Sie einfach die JAR zu libs / hinzu. Ändern Sie den Erstellungspfad nicht manuell.
CommonsWare
Ich habe verschiedene Methoden zum Hinzufügen eines Build-Pfads ausprobiert. Nur so kann ich die Ausnahme "Klasse nicht gefunden" beheben, nachdem ein Projekt auf einen anderen PC migriert wurde
Mickey
Die ERSTE Lösung ist veraltet und funktioniert auch nicht.
Yousha Aleayoub
5

Ich verwende derzeit SDK 20.0.3 und keine der vorherigen Lösungen hat für mich funktioniert.

Der Grund, warum hessdroid dort funktioniert, wo hess fehlgeschlagen ist, liegt darin, dass die beiden JAR-Dateien Java enthalten, das für verschiedene virtuelle Maschinen kompiliert wurde. Es wird nicht garantiert, dass der vom Java-Compiler erstellte Bytecode auf der virtuellen Dalvik-Maschine ausgeführt wird. Es wird nicht garantiert, dass der vom Android-Compiler erstellte Bytecode auf der virtuellen Java-Maschine ausgeführt wird.

In meinem Fall hatte ich Zugriff auf den Quellcode und konnte mit der hier beschriebenen Methode eine Android-JAR-Datei dafür erstellen: https://stackoverflow.com/a/13144382/545064

Danny Remington - OMS
quelle
5

Ich weiß, dass das OP seine Frage mit Bezug auf das Eclipse-Plugin beendet, aber ich bin hier mit einer Suche angekommen, bei der Eclipse nicht angegeben wurde. Also hier geht es für Android Studio:

  1. In jarDatei zu Libs Verzeichnis (wie Kopieren / Einfügen)
  2. Klicken Sie mit der rechten Maustaste auf die jarDatei und wählen Sie "Als Bibliothek hinzufügen ...".
  3. Klicken Sie im nächsten Dialogfeld auf "OK" oder benennen Sie es um, wenn Sie dies wünschen.

Das ist es!

Shanabus
quelle
4

Es stellte sich heraus, dass ich auf meinem Stack-Trace nicht gut genug ausgesehen habe. Das Problem ist nicht, dass die externe JAR nicht enthalten ist.

Das Problem ist, dass auf der Android-Plattform javax.naming. * Und viele andere Pakete fehlen, von denen die externe JAR ebenfalls abhängig ist.

Das Hinzufügen externer JAR-Dateien und das Festlegen von Reihenfolge und Export in Eclipse funktioniert bei Android-Projekten wie erwartet.


quelle
3

Gehe zum aktuellen Projekt

Rechtsklick-> Eigenschaften-> Java-Erstellungspfad-> Jar-Dateien in Bibliotheken hinzufügen -> Klicken Sie auf OK

Anschließend wird es in Ihrem aktuellen Projekt zur Datei mit den referenzierten Bibliotheken hinzugefügt.

kalyan G.
quelle
1

Die Java-API von Android unterstützt javax.naming. * Und viele andere javax. * -Materialien nicht. Sie müssen die Abhängigkeiten als separate Gläser einfügen.

Rodrigo
quelle
1

Wenn Sie Android Studio verwenden, gehen Sie wie folgt vor (ich habe die Antwort von @Vinayak Bs kopiert und geändert):

  1. Wählen Sie die Projektansicht in der Projekt-Seitenansicht (anstelle von Paketen oder Android).
  2. Erstellen Sie einen Ordner mit dem Namen libs im Stammordner Ihres Projekts
  3. Kopieren Sie Ihre JAR-Dateien in den Ordner libs
  4. Die Seitenansicht wird aktualisiert und die JAR-Dateien werden in Ihrem Projekt angezeigt
  5. Klicken Sie nun mit der rechten Maustaste auf jede JAR-Datei, die Sie importieren möchten, und wählen Sie dann "Als Bibliothek hinzufügen ..." aus, um sie in Ihr Projekt aufzunehmen
  6. Danach müssen Sie nur noch auf die neuen Klassen in Ihrem Code verweisen, z. import javax.mail.*
kumaheiyama
quelle
1

in Android Studio bei Verwendung von Gradle

füge dies zu build.gradle hinzu

compile fileTree(dir: 'libs', include: ['*.jar'])

und fügen Sie die JAR-Datei zum Ordner libs hinzu

g_vk
quelle
1

Wenn Sie das Gradle- Build-System verwenden, gehen Sie folgendermaßen vor:

  1. Legen Sie jarDateien in den entsprechenden libsOrdner Ihrer Android-App. Sie werden es in der Regel finden Project> app> libs. Wenn ein libsOrdner fehlt, erstellen Sie einen.

  2. Fügen Sie dies Ihrer build.gradleDatei hinzu app. (Nicht auf Ihre Project‚s build.gradle)

    dependencies {
        compile fileTree(dir: 'libs', include: '*.jar')
        // other dependencies
    }

    Dies schließt alle Ihre jarim libsOrdner verfügbaren Dateien ein .

Wenn Sie nicht alle jarDateien einschließen möchten, können Sie sie einzeln hinzufügen.

compile fileTree(dir: 'libs', include: 'file.jar')

Rohit Arya
quelle
0

Erstellen Sie einen Ordner (wie lib) in Ihrem Projekt und kopieren Sie Ihr JAR in diesen Ordner . Gehen Sie nun zum Konfigurieren des Erstellungspfads, indem Sie mit der rechten Maustaste auf das Projekt klicken und dort im Erstellungspfad auswählen

'Glas hinzufügen' Navigieren Sie zu dem Ordner, den Sie erstellt haben, und wählen Sie das Glas aus.

sharma_kunal
quelle
0

Das Kopieren der JAR-Datei in den Ordner des Android-Projekts ist nicht immer möglich.
Insbesondere, wenn es sich um eine Ausgabe eines anderen Projekts in Ihrem Arbeitsbereich handelt und es ständig aktualisiert wird.

Um dies zu lösen, müssen Sie das JAR als verknüpfte Datei zu Ihrem Projekt hinzufügen, anstatt es zu importieren (wodurch es lokal kopiert wird).

Wählen Sie in der Benutzeroberfläche:

Projekt -> Importieren -> Dateisystem -> yourjar.jar -> (Optionsbereich) Erweitert -> Link im Arbeitsbereich erstellen.

Der Link wird in der Projektdatei gespeichert:

<linkedResources>
    <link>
        <name>yourjar.jar</name>
        <type>1</type>
        <locationURI>PARENT-5-PROJECT_LOC/bin/android_ndk10d_armeabi-v7a/yourjar.jar</locationURI>
    </link>
</linkedResources>

PARENT-5-PROJECT_LOC bedeutet relativ zur Projektdatei, 5 Verzeichnisse höher (../../../../../).

Fügen Sie es dann zu den Bibliotheken hinzu:
Projekt -> Eigenschaften -> Java-Erstellungspfad -> Bibliotheken -> Jar hinzufügen -> yourjar.jar

Wählen Sie im selben Fenster die Registerkarte Bestellen und Exportieren und markieren Sie Ihr Glas, damit es dem apk hinzugefügt wird.

Yochai Timmer
quelle