Android-Jar-Bibliotheken

Lesezeit: 6 Minuten

Wie richten Sie ein Projekt ein, das zu einer JAR-Bibliotheksdatei führen kann, die für Android verwendet werden kann? Ich möchte eine benutzerdefinierte Bibliothek für alle Projekte erstellen.

Ein paar andere Fragen:

  1. Muss es mit einer bestimmten Version von Android SDK kompiliert werden?
  2. Wenn ein Android-Paket mit einer JAR-Bibliothek kompiliert wird, werden die Klassen, die für die Arbeit mit dem Code erforderlich sind, mit dem Hauptcode in die APK kompiliert oder wird das gesamte JAR eingeschlossen?
  3. Irgendwelche bemerkenswerten Optimierungen oder Fallstricke, die ich bei der Verwendung eines JARs kennen muss, anstatt den Code direkt zu integrieren?
  4. Muss das Glas signiert werden, wie es die apk tun muss?

Benutzer-Avatar
ddcruver

Google hat gerade eine neue Version des SDK veröffentlicht, das Shared Libraries handhabt!

https://developer.android.com/tools/projects/projects-eclipse.html#SettingUpLibraryProject

ADT 0.9.7 (Mai 2010)

Bibliotheksprojekte:
Das ADT-Plugin unterstützt jetzt die Verwendung von Bibliotheksprojekten während der Entwicklung, eine Funktion, mit der Sie gemeinsam genutzten Android-Anwendungscode und -Ressourcen in einem separaten Entwicklungsprojekt speichern können. Sie können dann von anderen Android-Projekten aus auf das Bibliotheksprojekt verweisen, und die Tools kompilieren zur Erstellungszeit den gemeinsam genutzten Code und die Ressourcen als Teil der abhängigen Anwendungen. Weitere Informationen zu dieser Funktion finden Sie im Dokument Entwickeln in Eclipse mit ADT. Wenn Sie nicht in Eclipse entwickeln, bietet SDK Tools r6 die entsprechende Unterstützung für Bibliotheksprojekte über das Ant-Build-System.

  • Ich möchte nur erwähnen, dass beim Schreiben dieses MotoDev Studio, wenn Sie es verwenden, die Fähigkeit zur Verwendung von Bibliotheken nicht unterstützt wird. Es setzt viele der Standard-ADT-GUIs außer Kraft und verbirgt diejenige, mit der Sie aus einem Projekt eine Bibliothek machen können. Ich bin mir sicher, dass es rechtzeitig behoben wird.

    – ddcruver

    23. Mai 2010 um 17:54 Uhr

  • MotoDev Studio 1.2.1 unterstützt jetzt gemeinsam genutzte Bibliotheken.

    – Timothy Lee Russel

    1. Juni 2010 um 17:11 Uhr

  • Ja, sie aktualisieren es etwa zwei Tage nach der Veröffentlichung des neuen ADT durch Google, das vergessen hat, dies zu aktualisieren.

    – ddcruver

    5. Juni 2010 um 20:10 Uhr

  • ADT 0.9.7 bringt uns 80 % von dem, was wir wollen, aber es hat immer noch diese Nachteile: (1) ein Bibliotheksprojekt kann keine .aidl-Dateien enthalten, (2) ein Bibliotheksprojekt kann nicht von einem anderen Bibliotheksprojekt abhängen, (3) eine Bibliothek Projekt kann keine Vermögenswerte enthalten

    – JoJo

    1. Juli 2010 um 1:21 Uhr

  • Es ist fast ein Jahr alt. Irgendwelche Updates zu den Einschränkungen? „3. Irgendwelche nennenswerten Optimierungen oder Fallstricke, die ich kennen muss, wenn ich eine JAR-Datei verwende, anstatt den Code direkt zu integrieren?“ „(1) ein Bibliotheksprojekt kann keine .aidl-Dateien enthalten, (2) ein Bibliotheksprojekt kann nicht von einem anderen Bibliotheksprojekt abhängen, (3) ein Bibliotheksprojekt kann keine Assets enthalten.“

    – Eros

    10. August 2011 um 6:59 Uhr

Es gibt nichts Besonderes, was Sie an Ihrem Projekt-Setup tun müssen, um eine JAR-Datei zu erstellen, die in einer Android-App funktioniert. Erstellen Sie einfach ein normales Java-Projekt in Eclipse.

  1. Es muss überhaupt nicht gegen Android kompiliert werden. Sie können jede JAR-Datei einschließen, solange sie nicht auf Klassen verweist, die nicht in Android enthalten sind. Fügen Sie einfach Ihre JAR-Datei in Ihren Build-Pfad Ihrer Android-Projekte in Eclipse ein, und sie wird automatisch in Ihre APK-Datei aufgenommen.

  2. Ich bin mir nicht sicher, aber ich gehe davon aus, dass alle Klassen in der JAR-Datei in die APK aufgenommen werden.

  3. Ich glaube nicht, dass das direkte Einfügen einiger Klassen in ein Glas oder direkt in das Projekt einen Unterschied in der resultierenden APK ausmachen wird.

  • 4. Das JAR muss nicht signiert werden.

    – Christoph Orr

    31. Dezember 2009 um 2:27 Uhr

  • Ich bin gerade auf eine Straßensperre gestoßen. Ich habe benutzerdefinierte Layouts, die der R.java-Datei IDs hinzufügen, und ich habe andere Android-Abhängigkeiten. Wie bekomme ich diese in ein JAR-Format?

    – Jeremy Edwards

    6. Februar 2010 um 17:11 Uhr

  • Sie können nur Java-Klassendateien in einem JAR haben. Sie können dort kein benutzerdefiniertes Layout-XML einfügen. Sie müssen diese nur in Ihr Projekt kopieren.

    – Markus B

    6. Februar 2010 um 20:30 Uhr

  • mbaird: Stimmt nicht! JAR ist nur eine ZIP-Datei, in der Sie jede Art von Ressourcen speichern können. Es ist nur so, dass Android noch nicht weiß, wie es dort suchen soll, um es zu finden.

    – Mark Renouf

    16. Februar 2012 um 22:17 Uhr

  • @MarkRenouf, genau das meinte ich, er fragte, ob er benutzerdefinierte Android-Layoutdateien in das Glas legen könne, und er kann nicht.

    – Markus B

    16. Februar 2012 um 23:29 Uhr

Ich habe mir dieselbe Frage gestellt: Kann ich ein Layout in Android exportieren und wiederverwenden? Ich habe Folgendes versucht: Exportieren Sie ein Projekt mit XML-Ressourcen in eine JAR-Datei und versuchen Sie dann, über das R.layout auf ein Layout zuzugreifen. Natürlich hat es nicht funktioniert, da R.layout.main eine Ganzzahl war, dieselbe Ganzzahl, die dem einzelnen Layout (relative.xml) zugeordnet war, das im R.layout des Hostprojekts definiert war.

Das Android SDK kompiliert Layout-XML-Dateien in View-Ressourcen, und da XML-Dateien in der enthaltenen JAR-Datei keine Layout-XML-Dateien sind, werden sie nicht kompiliert und ihnen wird in R.layout keine ID zugeordnet.

Wenn Sie ein Layout aus Ihrem Projekt exportieren möchten, sollten Sie es als XML exportieren und als Layoutressource in das neue Projekt importieren, nicht als Teil einer externen Bibliothek.

Wenn Sie Layouts aus einem JAR wiederverwenden möchten, müssen Sie eine untergeordnete Ansicht einer Ansicht erstellen und das Layout aus Code erstellen. Dann können Sie es instanziieren und die erstellte Instanz als Ansicht der Aktivität festlegen oder die Instanz zur Ansicht Ihrer Aktivität hinzufügen.

Benutzer-Avatar
Käfige

Diese Arbeit für mich !!!. Wenn Sie eine .jar-Datei aus einem Bibliotheksprojekt in Ihrer Anwendung verwenden möchten, das Ressourcen wie verwendet attrs.xml (und nehmen Sie andere wie Layouts, Zeichenfolgen usw. an), die eine R.java generieren. Sie sollten in Eclipse gehen export->Java/Jar file-> und aktivieren Sie Alle Ausgabeordner exportieren für aktiviert projects -> Finish… Dadurch wird sichergestellt, dass Ihre App, die dieses JAR verwendet, zur Laufzeit keine Ausnahme für fehlende Klassen und Ressourcen generiert.

Um das Glas in Ihr neues Projekt einzubinden, gehen Sie natürlich zu. project properties-> Java build path -> Libraries -> Add external jar -> und du bist fertig.

Ich hoffe das hilft!

Um eine JAR-Datei zu erstellen, sollten Sie die Export-Option von Eclipse verwenden. Wählen Sie im Exportdialog Java und die Unteroption JAR. Daraufhin wird ein Assistent angezeigt, in dem Sie einige Auswahlen treffen müssen. Sie müssen den Speicherort angeben, an dem die JAR-Datei gespeichert wird.

Ein Fehler, den ich beim ersten Erstellen einer JAR-Datei gemacht habe, bestand darin, das Android-Manifest einzuschließen. Beim Hinzufügen der erstellten JAR-Datei erhielt ich einen Konflikt des doppelten Android-Manifests.

Benutzer-Avatar
Gemeinschaft

Sie können eine benutzerdefinierte Methode verwenden, um die R-Datei dynamisch zu erreichen, der Beispiellink ist unten.

Packen von Android-Ressourcendateien in eine verteilbare JAR-Datei

public static int getResourseIdByName(String packageName, String className, String name) {
   Class r = null;
   int id = 0;
try {
    r = Class.forName(packageName + ".R");

    Class[] classes = r.getClasses();
    Class desireClass = null;

    for (int i = 0; i < classes.length; i++) {
        if(classes[i].getName().split("\\$")[1].equals(className)) {
            desireClass = classes[i];

            break;
        }
    }

    if(desireClass != null)
        id = desireClass.getField(name).getInt(desireClass);
} catch (ClassNotFoundException e) {
    e.printStackTrace();
} catch (IllegalArgumentException e) {
    e.printStackTrace();
} catch (SecurityException e) {
    e.printStackTrace();
} catch (IllegalAccessException e) {
    e.printStackTrace();
} catch (NoSuchFieldException e) {
    e.printStackTrace();
}

return id;
}

Benutzer-Avatar
ddcruver

Wenn Sie in der android.jar-Datei unter Plattformen/android-XX/android.jar-Datei nachsehen, enthält sie Layout-XML-Elemente, sodass Sie auch in der Lage sein sollten, eines zu erstellen. Ich bin mir nur nicht sicher, wie Sie das genau machen und wie Sie sie in dem anderen Projekt referenzieren.

1144870cookie-checkAndroid-Jar-Bibliotheken

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy