2016-11-30 3 views
3

Da ich einige Änderungen an der Smack-Bibliothek vornehmen muss, möchte ich den Smack als Bibliothek meinem Android Studio-Projekt hinzufügen. Ich habe die ZIP-Datei aus den Smack Github repository herunterladen und habe die folgenden Schritte - wie ich während der Suche nach Lösungen gefundenBibliothek (Smack) zu Android Studio-Projekt hinzufügen

(1) Erstellt einen neuen Ordner libs in meinem Projekt Stammordner kopiert und die extrahierten und umbenannten Ordner /Smack in libs. So ist es jetzt die folgende Struktur:

root/libs/Smack/ 

(2) ich meine settings.gradle im Stammordner

include ':app' 
include ':libs:Smack' 

(3) Via File -> Project Structure -> Modules app -> Dependencies zu

bearbeitet, habe ich :libs:Smack als Modulabhängigkeits

hinzugefügt

(4) Ich habe die folgende Zeile zu root/app/build.gradle

compile project(':libs:Smack') 
hinzugefügt

Laut den meisten Quellen, die ich online gefunden habe, sollte das so sein. Allerdings habe ich einen Fehler, dass Gradle project sync failed. Genauer gesagt ich:

/path-to-root/libs/Smack/build.gradle 
Error:(42, 0) Project with path ':smack-integration-test' could not be found in project ':libs:Smack'. 

Wenn ich die Datei und Zeile es project(':smack-integration-test') sagt zu suchen. Irgendwie kann das nicht gefunden werden. Es gibt jedoch einen Ordner libs/Smack/smack-integration-test. Es sieht ziemlich einfach aus, aber ich vermisse etwas Entscheidendes hier.

EDIT: Android Studio Import tatsächlich unterstützt Gradle Projekte: File -> New -> New Module öffnet sich ein Dialogfenster, in dem ich Import Gradle Project wählen, wo ich das Quellverzeichnis von hier, Smack auszuwählen. Dies macht alle korrekten Include-Anweisungen in settings.gradle.

jedoch nicht erhalte ich die Fehlermeldung:

Error:(386, 0) Could not get unknown property 'clirr' for project ':smack-integration-test' of type org.gradle.api.Project. 

Da ich mit Gradle nicht vertraut genug bin, ich habe keine Ahnung, was das bedeuten könnte, und meine Google-Suche auch mich nicht vorantreiben.

Antwort

1

Ich würde das Projekt auf diese Weise nicht hinzufügen, Sie können es ein separates Projekt aus Ihrer Projektordner-Struktur behalten, Sie würden es ändern und baue es. Der einfachste Weg ist die Build-JAR-Datei (en) in Ihr Projekt und füge ihn in gradle zu kopieren:

Für Glas, das libs Ordner in Ihrem Projekt erstellen und die Datei dort, gradle darunter Werke wie folgt kopieren:

compile fileTree(dir: 'libs', include: ['*.jar']) // for all of the jars in the libs folder 
compile files('libs/xyz.jar') // for a specific file 

insbesondere für das Smack Projekt, können Sie es mit einem Ordner

gradle assemble 

in seiner Wurzel tun

Das ouput Glas (s) in jedem spezifischen f älter, per Beispiel für Android sehe ich:

smack-android\build\libs\

smack-android-extensions\build\libs\

+0

Ich schaute hinein. Aber das Erstellen einer JAR-Datei aus einem Gradle-Projekt scheint nicht gerade einfach zu sein. Ich muss diesen Weg vielleicht gehen, ich habe nur gehofft, schnelle Lösung zu haben, selbst wenn es schmutzig ist, da es nur für Testzwecke ist. – Christian

+0

Ich habe einen Test lokal mit der Smack-Bibliothek gemacht und es ist ziemlich einfach, wenn Sie den grddle-Befehl in seiner Wurzel ausführen, wird er alle Unterprojekte erstellen. Von dort aus können Sie die für Sie relevanten Jars aus den Build-Ordnern auswählen – petrumo

+0

Ich habe die Antwort akzeptiert, da auf diese Weise Fortschritte gemacht wurden.Ich konnte die verschiedenen JAR-Dateien erstellen und in mein Projekt importieren. Ersetzen Sie jedoch die 'compile 'org.igniterealtime.smack: smack-android: 4.1.0'' Zeilen mit den entsprechenden' compile files (' libs/... jar ') 'Zeilen warf Fehler in meinem Quellcode. Ich nehme an, dass es verschiedene Versionen gibt. – Christian

0

keine Lösung für Ihr Problem, sondern eine möglicherweise noch schöne Abhilfe des folgend sein:

jitpack.io bieten Ihnen die Möglichkeit, GitHub Repositories zu Ihrem Projekt als Gradle Abhängigkeiten hinzuzufügen, so dass Sie den Prozess des wegzulassen manuell das Glas hinzufügen. Wie man das erreicht, beschreibt JitPack selbst am besten. Kurz In: das JitPack Repository zu Ihrem build.gradle hinzufügen:

repositories { 
     ... 
    maven { url 'https://jitpack.io' } 
    } 

Sie können nun die GitHub Repo als Abhängigkeit hinzu:

dependencies { 
     compile 'com.github.igniterealtime:Smack:-SNAPSHOT' 
    } 

Nach Ihrem Projekt erfrischend sollten Sie in der Lage sein zu verwenden, die API wie erwartet.

+0

Kann ich den Quellcode von Smack ändern? Bis jetzt habe ich Smack eingeschlossen, indem ich etwas wie compile org.igni- terealtime.smack: smack-android: 4.1.0' als Abhängigkeit in 'build.gradle' hinzufüge. Das funktioniert gut genug, aber ich kann den Quellcode nicht ändern. – Christian

+0

No - Smack würde dem Projekt als jar hinzugefügt werden – Lukas

+0

Die Bearbeitung des Quellcodes der API scheint sowieso keine gute Praxis zu sein - persönlich würde ich einfach mit Kotlin gehen und die API um die gewünschten Funktionen erweitern;) – Lukas

1

Ich bin mir nicht sicher, ob ich die Erstellung eines Multi-Modul-Builds aus den beiden Projekten empfehlen würde. Dies wird wahrscheinlich nicht wie erwartet funktionieren.Es ist wahrscheinlich, dass Sie die meisten/alle Module in smack settings.gradle zu Ihrem eigenen settings.gradle hinzufügen müssen. Wenn Sie das wirklich tun wollen, schlage ich vor, dass Sie prezi-pride verwenden, das dies von der Befehlszeile aus verwaltet.

Ich bin kein Android-Nutzer, also nicht sicher, welche Versionen von Gradle das Android-Plugin funktioniert. Wenn Android Gradle 3.1+ unterstützt, können Sie das neue composite build support verwenden. Dies ist bei weitem die sauberste Lösung, und ich empfehle diesen Ansatz

Eine andere Lösung ist es, die Projekte getrennt und in einem Projekt zu bauen, tun

compile fileTree(dir: '../smack/project-1/build/lib', include: '*.jar') 
compile fileTree(dir: '../smack/project-2/build/lib', include: '*.jar') 
// etc 

Noch eine andere Lösung zu publish the smack artifacts to maven local ist und von dort aus in Ihrem Projekt verweisen . Dies wäre wahrscheinlich die zweitbeste Lösung, wenn Sie Composite Build nicht verwenden können

+0

Ich habe alle Module zu meinem 'settings.gradle' wie' include 'hinzugefügt: libs: Smack: smack-integration-test'', und auch alle als Modul Abhängigkeiten hinzugefügt (vgl. (3) in meiner Frage). Keine Änderung, gleicher Fehler. – Christian

+0

Wie gesagt ... es könnte nicht funktionieren. Versuchen Sie (1) Composite Build, (2) MavenLocal() oder (3) Prezi-Stolz –

+0

Ich habe mein erstes Problem gelöst, aber stolperte über die nächste (siehe meine Bearbeitung in Originalfrage). Der automatische Import hat tatsächlich alle Includes in den 'settings.gradle' gebracht, wie Sie vorgeschlagen haben, nur das Format war anders als mein Versuch. – Christian

Verwandte Themen