1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

newbie Ant u. build.xml u. libary

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von jim, 18.06.2010.

  1. jim, 18.06.2010 #1
    jim

    jim Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    74
    Erhaltene Danke:
    0
    Registriert seit:
    02.05.2010
    [FONT=Times New Roman, serif]Hallo liebes Forum,

    ich !versuche! gerade mit Ant zu arbeiten um ein Projekt zu kompilieren.Ich habe schon diese Bücher(Apress.Pro.Android, Android Grundlagen und..,Apress.Pro.Android) durchschaut wo leider nichts darüber drin steht. Auch google bietet mir leider nichts zum Verständnis der Problematik (bzw. ich verstehe oft einzelne Schritte nicht). pleas help me


    ______________________________________________________________
    Folgende Situation:
    Ich habe ein Android Projekt welches ich mit Ant auf der Konsole kompilieren möchte. Da dieses Projekt auf Klassen angewiesen ist welche im Nebenordner vorhanden sind bekomme ich eine Fehlermeldung, das ich jene Klassen importieren soll.

    Ich befinde mich also im Projekt und gebe
    Code:
    android update project -p .
    (wofür ist der Punkt da?)
    es wird in dem project eine build.xml und local.proberties erstellt

    danach benutze ich folgende Eingabe
    Code:
    ant -f build.xml 
    und es gibt Fehlermeldungen das er jene Klassen importiert werden sollen welche nicht im project liegen.

    Die Dateien (.java)liegen neben dem project Ordner und enthält Verzeichnisse wo die Klassen thematisch geordnet sind(Ordnerstruktur).

    Da man bei ant auch eine libary beim Ausführen mit übergeben kann habe ich auch diesen Weg versucht. leider habe ich es nicht geschafft aus den .java Files(welche ja lose in ner Ornderstruktur liegen) eine libary zu erstellen. Kann mir da jemand weiter helfen? Leider haben sie alle nicht den selben namespace.


    Einen anderen Weg welchen ich beschreiten wollte war das reinhacken in die Build.xml mit einem fileset. Hier kann ich die Beispiele im Netz leider nicht verstehen bzw. nicht nach vollziehen. Da die erstellte build.xml welche von Ant erstellt wird nichts enthällt und wenn ich mit eclipse(was ich eigetnlich nicht will) eine build.xml erstelle stehen da Unmengen an Tags drin. Könnte mir da Jemand helfen in den Wuuust durch zu sehen?

    Vielen Dank Jim
    [/FONT]
     
  2. mago, 19.06.2010 #2
    mago

    mago Junior Mitglied

    Beiträge:
    33
    Erhaltene Danke:
    4
    Registriert seit:
    30.04.2010
    Phone:
    HTC Desire
    Bibliotheken werden aus dem Verzeichnis libs eingebunden. Wenn Du ant und das von android erzeugte build.xml verwendest, dann brauchst Du sonst nichts mehr unternehmen, damit das funktioniert.

    In dem build.xml ist allerdings beschrieben, wie man den Inhalt einer android_rules.xml in die build.xml seines Projektes übernehmen kann. Wie man darin die Projektstrukturen beliebig umbiegen kann, ist für mich erst mal auch nicht ersichtlich.

    Braucht man aber auch nicht. Zusätzliche Klassen in ein Jar verpacken und in libs legen. Ob das auch mit den Klassen in einem Verzeichnisbaum geht, wäre auszuprobieren.

    Du hast nun mit mit dem android-tool scheinbar nachträglich über Dein Projekt laufen lassen. ich weiss jetzt nicht, was dadurch alles erzeugt wird.

    Wenn man aber auf diesem Weg ein Projekt initialisiert, dann wird die ganze Projektstruktur schlüsselfertig erzeugt.

    Code:
    android create project --target android-6 --path projektordner  --activity MainClass --package some.package 
    Auf diese Weise kann man dann ein Projekt wunderbar sowohl mit als auch ohne eclipse bauen, installieren und releasen.

    Was bei Dir der Punkt, ist bei mir der Verzeichnisname meines Projektes (projektordner). Der Aufruf "android update -p ." bezieht sich also auf das CWD innerhalb des Projektordners.
     
  3. jim, 21.06.2010 #3
    jim

    jim Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    74
    Erhaltene Danke:
    0
    Registriert seit:
    02.05.2010
    vielen Dank für deine Antwort!
    das mit dem Punkt hab ich jetzt verstanden, dieser wird auch in der build.xml verwendet und war neu für mich. Du hast auch recht, dass Ant für ein Projekt alles selbst baut und compiliert. Bei mir ist das Problem das ich externe .java files einbinden muss. Diese liegen in einem Nebenordner vom Projekt und dienen als Bibliothek , da ich die einzelnen Datein aber öfter bearbeite, soll die build.xml die benötigten Klassen aus dem externen Projekt binden und dem Build des aktuellen Projektes hinzufügen. Ich setze mich gerade mit der build.xml auseinander und habe diese so verändert das eine Grundstruktur vorhanden ist.

    Wie kann ich in dieser build.xml nun die android.jar einladen? Ich habe zwar schon mehrere Sachen probiert scheitere aber an Hintergrundwissen.


    LG Jim
     
  4. mago, 21.06.2010 #4
    mago

    mago Junior Mitglied

    Beiträge:
    33
    Erhaltene Danke:
    4
    Registriert seit:
    30.04.2010
    Phone:
    HTC Desire
    Wenn Dein library-Projekt seperat bleiben soll, dann versuch nicht das zu eng mit dem android-projekt zu verdraten. Schreib dafür auch eine build.xml, bau daraus ein jar und kopiere das in libs deines android-projekts - Wenn sich da was geändert hat.

    android.jar referenzieren:

    Code:
        <property name="lib.dir" value="/usr/local/jdk/" />
        <path id="build.classpath">
          <pathelement location="${lib.dir}/android.jar"/>
        </path>
      <target name="compile">
        <javac srcdir="${src.dir}"
              destdir="${build.dir}"
                debug="${javac.debug}"
          deprecation="${javac.deprecation}"
             optimize="${javac.optimize}"
         classpathref="build.classpath" target="1.5">
        </javac>
      </target>
     
  5. jim, 22.06.2010 #5
    jim

    jim Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    74
    Erhaltene Danke:
    0
    Registriert seit:
    02.05.2010
    he also erstmal vielen dank! und noch ein Bitte! Könntest du dein Code noch etwas kommentieren?(gebe Dir soviele Danke wie du haben möchtest). Leider sehe ich ständig beim Suchen im Netz Code der nicht weiter beschrieben wird.

    Verstehe ich das bis hierher richtig?

    Code:
    <property name="lib.dir" value="/usr/local/jdk/" />
    
    damit setz du die Variable lib.dir auf jenes Verzeichnis

    Code:
    <path id="build.classpath">
    <pathelement location="${lib.dir}/android.jar"/>
        </path>
    
    Bei den <path id> Tag bin ich mir da nicht so sicher, bisher verstehe ich deinen so das du in der Variable build.classpath die android.jar hängst.


    Code:
     <javac srcdir="${src.dir}"
              destdir="${build.dir}"
                debug="${javac.debug}"
          deprecation="${javac.deprecation}"
             optimize="${javac.optimize}"
         classpathref="build.classpath" target="1.5">
        </javac>
    
    
    Mit dem Javac Tag startest du den Compiler und gibst ihm srcdir, destdir. Bei debug habe ich debug= "on" zu stehen, mit einem Pfad habe ich das vorher noch nicht gesehen. ???? optimize habe ich vorher auch nirgend wo gesehen. Jetzt kommt eine meine Lieblingsstellen (die ich nicht wirklich verstehe)! target ist im diesem Fall wahrscheinlich die sdk version ??
    Die habe ich zu classpathref gefunden. Halt stopp , bisher war dies immer refid="classpath" . Wo wäre da der Unterschied?
    Wäre das so richtig?
    Code:
    ///path für den eigenen Source Ordner
    <path id="classpath">       
             <fileset dir="${src.dir}" includes=" *.jar" />
     </path>
    ///path für die Android library
     <path id="build.classpath">
          <pathelement location="${lib.dir}/android.jar"/>
      </path>
    
    
     <javac srcdir="${src.dir}"
              destdir="${build.dir}"
                debug="${javac.debug}"
          deprecation="${javac.deprecation}"
             optimize="${javac.optimize}"
         classpathref="build.classpath" target="1.5">
        </javac>
    
     <javac srcdir="${src.dir}"
              destdir="${build.dir}"
                debug="${javac.debug}"
          deprecation="${javac.deprecation}"
             optimize="${javac.optimize}"
         classpathref="classpath" target="1.5">
        </javac>
    
    
    
    Ich hoffe ich habe nicht zu wirres zeug geschrieben,sitz da schon ne Woche dran und komm nicht weiter... LG Jim
     
  6. mago, 22.06.2010 #6
    mago

    mago Junior Mitglied

    Beiträge:
    33
    Erhaltene Danke:
    4
    Registriert seit:
    30.04.2010
    Phone:
    HTC Desire
    Tja, mit dem kommentieren ist das immer so ne Sache. Es ist oft schwer abzuschätzen, wie weit man gehen muss, damit etwas verständlich wird, wo es doch vielleicht trivial erscheint.

    target in javac meint die Java-Version. Das hat nichts mit dem android-sdk zu tun.

    Bei dem letzten build-code ist das erste fileset falsch. In einem src-dir befinden sich *.java Dateien. Die werden nach build.dir kompiliert und dann in ein dist.dir in ein jar verpackt.

    Das Ergebnis deines ersten compile müsste dann vielleicht noch mit einem jar-task verpackt werden und deinem zweiten compile in einem classpath-set per referenz zur Verfügung gestellt werden.

    refid und classpathref werden glaube ich nur an unterschiedlichen Stellen eingesetzt und meinen aber das selbe.

    Das Element <path> fasst ja meistens eine größere Anzahl von Bibliotheken zusammen. Hier beispielhaft nur eine. Beim Compile kann dieser Satz jars dann halt mit einer id referenziert werden.
     
  7. jim, 01.07.2010 #7
    jim

    jim Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    74
    Erhaltene Danke:
    0
    Registriert seit:
    02.05.2010
    Hallo, erstmal tut es mir leid dass die Reaktion so lange dauert(hatte eine Prüfung und hatte keine Zeit für mein Hobbys).

    Ich habe alle aus der build.xml entfernt was ich nicht nachvollziehen und soweit funktioniert das compilieren bis auf .. . Ja bis auf die externen .java Files welche in einem Nebenordner liegen und die im Projekt benötigt werden.

    Code:
         <path id="Google APIs [Android 1.6].libraryclasspath">
                <pathelement location="../android-sdk-windows/platforms/android-4/android.jar"/>
                <pathelement location="../android-sdk-windows/add-ons/google_apis-4_r02/libs/maps.jar"/>
        </path>
            
        <path id="classpath">       
             <fileset dir="${src.dir}" includes=" *.java" />
            <path refid="Google APIs [Android 1.6].libraryclasspath"/>
        </path>
    
        <target name="compile" depends="init">
        <echo message="start compile target"/>
        
            <javac srcdir="${src.dir}" destdir="${build}" debug="true" source="${source}" target="${target}"> 
            <classpath refid="classpath"/>
             </javac>
        </target>
    
    
    
    Ich habe versucht, eine Klassenbliothek zu erstellen (danke für den Tipp) und möchte diese dann wie die android.jar in einen path tun. In diesen externen Ordner liegen, durch Ordner strukturiert, .java files welche ich benötige. Leider scheitere ich schon dem jar file erstellen(wobei ich es mit eclipse versucht habe). kann mir da jemand weiterhelfen?

    LG Jim
     

Diese Seite empfehlen