Java Projekt in Android als Library

  • Hoi,


    ich hab da ein Java Projekt, das ich bei Bedarf in Projekte einbinde und einfach nur benutze. Das würd ich jetzt gern auch in mein Android Projekt werfen, damit ich das nicht doppelt machen muss. Es ist ein ganz normales Java Projekt. Habs mal in den Java Build Path wie gewohnt geklickt, allerdings behauptet er jetzt er würde eine Klasse nicht kennen

    Zitat

    cannot be resolved. It is indirectly referenced from required .class files


    Weiß jemand, wie man da richtig vorgeht? Oder gibts da keine Möglichkeit? In den Properties gibt es keinen Reiter Android, in dem ich "Is Library" anhaken könnte. Im Projekt, in das ich es einbinden will, taucht es auch nicht als Auswahl auf.



    Gruß,
    matze

  • Hast du das Library in das Projekt gepackt?
    Das dann normalerweise zum BuildPath hinzufügen und es sollte klappen ;)

    MfG,
    Christopher


    Eine gewisses Maß an Freundlichkeit kann man auch von Menschen im Internet erwarten.
    Das Forum basiert komplett auf der Freiwilligkeit ihrer Nutzer und diese sollen sich wohlfühlen! Daher seid bitte freundlich. Danke

  • +hm+


    Wenn es ein reines Java Projekt als Solches ist, musst du es dann nicht als Modulabhängigkeit importieren?
    Sollte es sich hingegen um eine fertige .jar handeln, musst du meines Wissens immer noch dieses Jar auch deinen Libraries zuordnen und linken, ansonsten findet er nix.


    Nur den Build Path anpassen läuft meiner Erfahrung nach nicht.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hoi,


    es ist ein ganz normales Java Projekt, das man als solches auch starten könnte. Also kein fertiges .jar File. Bei normalen Java Projekten kann man ja (unter Eclipse) Rechtsklick aufs Projekt > Properties > Java Build Path bestehende Projekte im Workspace hinzufügen und dann dessen Klassen im eigenen Projekt mit benutzen. Bis zu einem bestimmten Grad funktioniert das auch, jedoch verschluckt er sich denke ich daran, dass das eingebundene Projekt mittels Maven widerum JAR-Files einbindet. Bei dem, das ich aufrufe, kann eine Exception fliegen, die in einem von Maven nachgeladenen jar-File ist, und mein Android Projekt sagt jetzt diese Exception wird nur indirekt referenziert .... bisserl verzwickt ;)



    Gruß,
    matze


    UPDATE:
    Hab mal bisserl weiter in Richtung Maven recherchiert und ein Tutorial gefunden, bei dem ein Android Maven Plugin verwendet wird.
    Hab das jetzt mal so weit verfolgt und mit Maven gebaut. Funktioniert auch an sich, jedoch nippelt er bei der entsprechenden Stelle im Code sang und klanglos mit einem NoClassDefFoundError ab ...


    Bin also dem Ziel etwas näher, irgendwas fehlt aber noch

  • Hoi,


    habs jetzt so weit hin bekommen. Man braucht erstmal Maven und das Android Maven Plugin.
    Da das momentan nur SDK Version 16 unterstützt muss man folgenden Befehl ausführen, um das SDK 17 rein zu bügeln:


    Code
    mvn install:install-file \
        -Dfile=$ANDROID_HOME/platforms/android-17/android.jar \
        -DgroupId=com.google.android \
        -DartifactId=android \
        -Dversion=17 \
        -Dpackaging=jar


    (Das $ANDROID_HOME ggf. einfach durch den absoluten Pfad ersetzen)


    Nun, da das Plugin eben für Version 16 ist, in Version 17 aber das Tool aapt verschoben wurde, muss man noch Links setzen

    Code
    ln -s $ANDROID_HOME/build-tools/17.0.0/aapt $ANDROID_HOME/platform-tools/aapt
    ln -s $ANDROID_HOME/build-tools/17.0.0/lib $ANDROID_HOME/platform-tools/lib


    Nun klickt man unter Eclipse Rechtsklick aufs Projekt > Configure (ganz unten) > Convert to Maven Project und passt dann sein pom.xml an



    So, und das ist jetzt ganz wichtig: das RequiredProject MUSS mit Java 1.6 gebuildet werden, sonst ist es nicht mit Android kompatibel und wird beim builden des .apk Files einfach weg gelassen. Betritt man dann später in der App die entsprechende Code-Stelle, in der eigentlich etwas aus dem RequiredProject benutzt werden soll, schmiert er einfach mit einem NoClassDefFoundError ab!


    Wurde das alles beachtet kann man mittels Rechtsklick aufs Projekt > Run As ... > Maven build ... folgende Parameter einstellen:


    Goals: clean install android:generate-sources android:deploy android:run
    Parameter (Rechts button "Add...") :
    Name: android.sdk.path
    Wert: $ANDROID_HOME (oder den absoluten Pfad zum sdk Ordner)
    Im Tab JRE habe ich noch einmal explizit Alternate JRE: Java SE 6 ausgewählt


    Mit einem Klick auf Run dauert es einige Zeit und er buildet alles mit Dependencies, schiebt es auf ein angeschlossenes Device und startet die App.


    Meine nächsten Schritte: Versuchen das ganze via Hudson builden zu lassen ;)



    Gruß,
    matze

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!