{"id":593,"date":"2011-09-18T22:18:34","date_gmt":"2011-09-18T20:18:34","guid":{"rendered":"https:\/\/d-mueller.de\/blog\/?p=593"},"modified":"2011-09-19T10:16:36","modified_gmt":"2011-09-19T08:16:36","slug":"appentwicklung-webtechniken-mit-appcelerator-titanium","status":"publish","type":"post","link":"https:\/\/d-mueller.de\/blog\/appentwicklung-webtechniken-mit-appcelerator-titanium\/","title":{"rendered":"Appentwicklung mit Webtechniken &#8211; Appcelerator Titanium"},"content":{"rendered":"<p>Apps sind zur Zeit in aller Munde. Bekanntlich gibt es mit Android und iOS mal mindestens 2 ernst zu nehmende Plattformen, auf denen man in der Regel vertreten sein m\u00f6chte. Hei\u00dft: Zwei mal dasselbe programmieren, einmal in Java und einmal in Objective C. Das muss nicht sein. Mit dem Cross Platform Framework <a href=\"http:\/\/www.appcelerator.com\/\">Appcelerator Titanium<\/a> wird die Entwicklung in Javascript vorgenommen &#8211; nebst Zugriff auf die Ger\u00e4t-APIs wie Kamera, Beschleunigungsmesser, GPS und allem Klimbim. Nur am Rande: Titanium ist <b>k<\/b>ein kleines Nebenprojekt eines gelangweilten Studenten. Ein paar Millionen Apps sind damit schon erstellt worden, u.a. auch das fies gehypte Wunderlist.<\/p>\n<p>Das, was am Ende dabei rauskommt ist eine vollwertige, native App welche selbst in Apples App-Store Bestand hat. Soweit, wie ich das verstanden haben, wird der von euch geschriebene Javascript-Code im Beispielfalle Android von Titanium in natives Java verwandelt. Ergebnis ist eine verh\u00e4ltnism\u00e4\u00dfig performante App, gegen die ein <a href=\"http:\/\/www.phonegap.com\/\">Browser ohne UI<\/a> wie beispielsweise Phonegap abstinkt.<\/p>\n<p>Da die Installation von Titanium allerdings recht komplex ist und man viel falsch machen kann, m\u00f6chte ich das hier mal Step-by-Step durchziehen. Nicht zuletzt, um es f\u00fcr mich in Stein zu mei\u00dfeln.<\/p>\n<h2>Schritt 1: Java deinstallieren<\/h2>\n<p>Titanium ist pingelig. Nach <a href=\"http:\/\/wiki.appcelerator.org\/display\/guides\/Titanium+Compatibility+Matrix\">Kompatibilit\u00e4ts-Matrix<\/a> muss sich das JDK 1.6 auf dem Rechner befinden. Das Java Runtime Environment (JRE), was die meisten durch Netbeans \/ Eclipse sowieso schon auf der Kiste haben werden, reicht nicht. Auch neuere Versionen als 1.6 verschm\u00e4ht Titanium. Wenn ihr nun nicht grade das JDK 1.6 inklusive JRE auf dem Rechner haben solltet: Runter damit.<\/p>\n<div id=\"attachment_594\" style=\"width: 513px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/1-jre-uninstall.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-594\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/1-jre-uninstall.png\" alt=\"Java weghauen\" title=\"Java weghauen\" width=\"503\" height=\"388\" class=\"size-full wp-image-594\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/1-jre-uninstall.png 503w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/1-jre-uninstall-300x231.png 300w\" sizes=\"auto, (max-width: 503px) 100vw, 503px\" \/><\/a><p id=\"caption-attachment-594\" class=\"wp-caption-text\">Java weghauen<\/p><\/div>\n<h2>Schritt 2: JDK 1.6 installieren<\/h2>\n<p><a href=\"http:\/\/www.oracle.com\/technetwork\/java\/javase\/downloads\/index.html\">Downloadlink zum JDK bei Oracle<\/a>. Die Java DB k\u00f6nnt ihr euch schenken, der Rest muss drauf. Verzeichnis ist dabei egal.<\/p>\n<div id=\"attachment_595\" style=\"width: 519px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/2-jdk+jre-install.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-595\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/2-jdk+jre-install.png\" alt=\"JDK installieren\" title=\"JDK installieren\" width=\"509\" height=\"392\" class=\"size-full wp-image-595\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/2-jdk+jre-install.png 509w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/2-jdk+jre-install-300x231.png 300w\" sizes=\"auto, (max-width: 509px) 100vw, 509px\" \/><\/a><p id=\"caption-attachment-595\" class=\"wp-caption-text\">JDK installieren<\/p><\/div>\n<p>Direkt danach wird das JRE noch draufgemacht.<\/p>\n<div id=\"attachment_596\" style=\"width: 516px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/2-jre-install.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-596\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/2-jre-install.png\" alt=\"JRE draufmachen\" title=\"JRE draufmachen\" width=\"506\" height=\"388\" class=\"size-full wp-image-596\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/2-jre-install.png 506w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/2-jre-install-300x230.png 300w\" sizes=\"auto, (max-width: 506px) 100vw, 506px\" \/><\/a><p id=\"caption-attachment-596\" class=\"wp-caption-text\">JRE draufmachen<\/p><\/div>\n<h2>Schritt 3: Java zum PATH hinzuf\u00fcgen<\/h2>\n<p><a href=\"http:\/\/geekswithblogs.net\/renso\/archive\/2009\/10\/21\/how-to-set-the-windows-path-in-windows-7.aspx\">So gehts<\/a>. Pfad zu eurem <i>\\bin<\/i> &#8211; Folder des JDK mit ; an den PATH anf\u00fcgen.<\/p>\n<div id=\"attachment_597\" style=\"width: 414px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/4-jdk-javac-path.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-597\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/4-jdk-javac-path.png\" alt=\"Java PATH\" title=\"Java PATH\" width=\"404\" height=\"491\" class=\"size-full wp-image-597\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/4-jdk-javac-path.png 404w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/4-jdk-javac-path-246x300.png 246w\" sizes=\"auto, (max-width: 404px) 100vw, 404px\" \/><\/a><p id=\"caption-attachment-597\" class=\"wp-caption-text\">Java PATH<\/p><\/div>\n<h2>Schritt 4: Java pr\u00fcfen<\/h2>\n<p>Konsole aufmachen.<\/p>\n<pre data-enlighter-language=\"enlighter\" class=\"EnlighterJSRAW\">java -version &amp;&amp; javac -version<\/pre>\n<div id=\"attachment_598\" style=\"width: 557px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/5-java-version-check.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-598\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/5-java-version-check.png\" alt=\"Java Version Check\" title=\"Java Version Check\" width=\"547\" height=\"158\" class=\"size-full wp-image-598\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/5-java-version-check.png 547w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/5-java-version-check-300x86.png 300w\" sizes=\"auto, (max-width: 547px) 100vw, 547px\" \/><\/a><p id=\"caption-attachment-598\" class=\"wp-caption-text\">Java Version Check<\/p><\/div>\n<p>Sowohl java, wie auch javac (Java Compiler) m\u00fcssen in der gleichen Version 1.6X vorliegen.<\/p>\n<h2>Schritt 5: Android SDK installieren<\/h2>\n<p><a href=\"http:\/\/developer.android.com\/sdk\/index.html\">Download hier<\/a>. Es k\u00f6nnte nun passieren, dass euch das Android SDK beim installieren trotz korrekt eingerichtetem Java folgendes erz\u00e4hlen m\u00f6chte:<\/p>\n<div id=\"attachment_599\" style=\"width: 520px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/6-jdk-not-found.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-599\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/6-jdk-not-found.png\" alt=\"Android SDK: Java not found\" title=\"Android SDK: Java not found\" width=\"510\" height=\"393\" class=\"size-full wp-image-599\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/6-jdk-not-found.png 510w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/6-jdk-not-found-300x231.png 300w\" sizes=\"auto, (max-width: 510px) 100vw, 510px\" \/><\/a><p id=\"caption-attachment-599\" class=\"wp-caption-text\">Android SDK: Java not found<\/p><\/div>\n<p>Ich hab verdutzt 3mal Java neu draufgemacht, eh mich <a href=\"http:\/\/stackoverflow.com\/questions\/4382178\/android-sdk-installation-doesnt-find-jdk\">stackoverflow erleuchtete<\/a>: <\/p>\n<blockquote><p>\nPress Back when you get the notification and then Next. This time it will find the JDK.<\/p>\n<p>(I don&#8217;t know why, but it works on Windows 7 x64.)\n<\/p><\/blockquote>\n<p>Also zur\u00fcck, wieder vor und siehe da:<\/p>\n<div id=\"attachment_600\" style=\"width: 524px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/7-jdk-found.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-600\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/7-jdk-found.png\" alt=\"Android SDK: Also doch...\" title=\"Android SDK: Also doch...\" width=\"514\" height=\"396\" class=\"size-full wp-image-600\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/7-jdk-found.png 514w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/7-jdk-found-300x231.png 300w\" sizes=\"auto, (max-width: 514px) 100vw, 514px\" \/><\/a><p id=\"caption-attachment-600\" class=\"wp-caption-text\">Android SDK: Also doch...<\/p><\/div>\n<p><b>Wichtig:<\/b> Das Android SDK unbedingt an einen Ort installieren, der keine Leerzeichen im Pfad hat. Am Besten C:\\Android. Das Titanium Manual sagt dazu:<\/p>\n<blockquote><p>\nBe aware that there is a bug in Revision 12 of the Android SDK Tools package for Windows that prevents applications from being launched if spaces exist in the filesystem path to the Android SDK (ie C:\\Program Files (x86)\\Android\n<\/p><\/blockquote>\n<p>Allerdings scheint sich das Problem nach meinen Erkenntnissen nicht nur auf die API Version 12 zu beziehen, sondern Titanium generell so sehr zu verwirren, dass das Android SDK nicht mehr gefunden werden kann. Also einfach auf <i>C:\\<\/i> gekloppt. Wenn ihrs doch schon wo anders hin installiert habt, kann mans auch einfach umkopieren. Scheint portabel zu sein.<\/p>\n<h2>Schritt 6: Die richtige API Auswahl<\/h2>\n<p>Nun werdet ihr mit allen API-Versionen konfrontiert, die es so im Android \u00d6kosystem gibt. Sieh hierzu: <a href=\"http:\/\/www.golem.de\/1109\/86225.html\">Verbreitung der Android Versionen (Stand: 5.9.2011)<\/a>. Hier lieber zu viel als zu wenig ausw\u00e4hlen. Ich habe mich f\u00fcr folgende Konfiguration entschieden:<\/p>\n<div id=\"attachment_601\" style=\"width: 245px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/8-android-sdk-install.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-601\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/8-android-sdk-install-235x300.png\" alt=\"API Auswahl\" title=\"API Auswahl\" width=\"235\" height=\"300\" class=\"size-medium wp-image-601\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/8-android-sdk-install-235x300.png 235w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/8-android-sdk-install.png 733w\" sizes=\"auto, (max-width: 235px) 100vw, 235px\" \/><\/a><p id=\"caption-attachment-601\" class=\"wp-caption-text\">API Auswahl<\/p><\/div>\n<p><b>Wichtig:<\/b> Unbedingt die API Version 7 (Android 2.1) ausw\u00e4hlen, sonst mag Titanium das SDK sp\u00e4ter nicht finden. Die Samples k\u00f6nnen getrost ignoriert werden, wir wollen ja nicht mit Java sondern mit Titanium entwickeln. Ob ihr Android 3.X mit dabei haben wollt (aktuell noch kaum verbreitet, eher f\u00fcr Tablets geschaffen) bleibt euch \u00fcberlassen. Nachinstallieren ist \u00fcbrigens jederzeit m\u00f6glich.<\/p>\n<p>Die Google API-Versionen scheinen die normalen API&#8217;s mit ein paar Erweiterungen f\u00fcr die Google Dienste &#8211; aka maps und Konsorten &#8211; zu sein. Kann also nicht schaden, die auch noch mit zu installieren.<\/p>\n<p>Der Spa\u00df kann jetzt eine ganze Weile dauern.<br \/>\n<div id=\"attachment_602\" style=\"width: 581px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/10-android-sdk-installed.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-602\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/10-android-sdk-installed.png\" alt=\"Geschafft!\" title=\"Geschafft!\" width=\"571\" height=\"574\" class=\"size-full wp-image-602\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/10-android-sdk-installed.png 571w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/10-android-sdk-installed-150x150.png 150w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/10-android-sdk-installed-298x300.png 298w\" sizes=\"auto, (max-width: 571px) 100vw, 571px\" \/><\/a><p id=\"caption-attachment-602\" class=\"wp-caption-text\">Geschafft!<\/p><\/div>\n<\/p>\n<h2>Schritt 7: Umgebungsvariablen f\u00fcrs Android SDK<\/h2>\n<p>Zum Path hinzuzuf\u00fcgen:<\/p>\n<pre data-enlighter-language=\"enlighter\" class=\"EnlighterJSRAW\">\r\nC:\\Android\\android-sdk\\platform-tools;C:\\Android\\android-sdk\\tools\r\n<\/pre>\n<p>Sowie unter der neu zu erstellenden Variablen <b>ANDROID_SDK<\/b>:<\/p>\n<pre data-enlighter-language=\"enlighter\" class=\"EnlighterJSRAW\">C:\\Android\\android-sdk\\<\/pre>\n<div id=\"attachment_603\" style=\"width: 370px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/15-PATH-android-sdk.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-603\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/15-PATH-android-sdk.png\" alt=\"Android SDK Umgebungsvariable\" title=\"Android SDK Umgebungsvariable\" width=\"360\" height=\"154\" class=\"size-full wp-image-603\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/15-PATH-android-sdk.png 360w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/15-PATH-android-sdk-300x128.png 300w\" sizes=\"auto, (max-width: 360px) 100vw, 360px\" \/><\/a><p id=\"caption-attachment-603\" class=\"wp-caption-text\">Android SDK Umgebungsvariable<\/p><\/div>\n<h2>Schritt 8: Ausprobieren<\/h2>\n<p>Jetzt testen wir, ob adb (android debug bridge) das Handy findet. Dazu muss euer Android Handy erstmal entsprechend konfiguriert werden. Dazu klaue ich frei <a href=\"http:\/\/developer.android.com\/guide\/developing\/device.html\">von hier<\/a>:<\/p>\n<blockquote>\n<ol>\n<li>Set up your device to allow installation of non-Market applications. On the device, go to Settings > Applications and enable Unknown sources.<\/li>\n<li>Turn on &#8222;USB Debugging&#8220; on your device. On the device, go to Settings > Applications > Development and enable USB debugging.<\/li>\n<\/blockquote>\n<p>Nun testen wir das. Konsole auf, und <i>adb devices<\/i> eingeben. ADB wird von Titanium genutzt und sollte direkt gefunden werden, da es sich unter <i>C:\\Android\\android-sdk\\platform-tools<\/i> und damit ja im PATH befindet.<\/p>\n<p><b>Ohne angeschlossenes Handy:<\/b><\/p>\n<div id=\"attachment_604\" style=\"width: 315px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/11-adb-devices.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-604\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/11-adb-devices.png\" alt=\"ADB Devides ohne Handy\" title=\"ADB Devides ohne Handy\" width=\"305\" height=\"114\" class=\"size-full wp-image-604\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/11-adb-devices.png 305w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/11-adb-devices-300x112.png 300w\" sizes=\"auto, (max-width: 305px) 100vw, 305px\" \/><\/a><p id=\"caption-attachment-604\" class=\"wp-caption-text\">ADB Devices ohne Handy<\/p><\/div>\n<p><b>Mit angeschlossenem Handy:<\/b><\/p>\n<div id=\"attachment_605\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/11.5-adb-devices.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-605\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/11.5-adb-devices-300x64.png\" alt=\"ADB Devices mit Handy\" title=\"ADB Devices mit Handy\" width=\"300\" height=\"64\" class=\"size-medium wp-image-605\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/11.5-adb-devices-300x64.png 300w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/11.5-adb-devices.png 673w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-605\" class=\"wp-caption-text\">ADB Devices mit Handy<\/p><\/div>\n<p>Sollte ADB euer Ger\u00e4t nicht fressen wollen, liegt es an Treiberproblemen. Wenn Windows euer Handy als Massenspeicherger\u00e4t erkennt und mit seinen Default-Treibern zu Werke geht, findet ADB das Ger\u00e4t nicht mehr. In diesem Fall: Alles aus dem Ger\u00e4temanager kicken, was nach Handy aussieht und dann mit <a href=\"http:\/\/developer.android.com\/sdk\/oem-usb.html\">eurem Hersteller USB-Treiber<\/a> neu versuchen. <a href=\"http:\/\/www.google.de\/search?aq=0&#038;oq=adb+dev&#038;sourceid=chrome&#038;ie=UTF-8&#038;q=adb+device+not+found\">Ihr seid nicht allein<\/a>.<\/p>\n<p>\u00dcbrigens: Der im Android SDK ausw\u00e4hlbare USB Treiber wird euch nicht helfen, er ist nur f\u00fcr die Google Nexus Ger\u00e4te.<\/p>\n<h2>Schritt 9: Titanium selbst installieren<\/h2>\n<p>Vorarbeit geschafft! <a href=\"https:\/\/my.appcelerator.com\/auth\/signup\/offer\/community\">Titanium Account erstellen (kostenlos, wie das Programm selbst)<\/a> und dann Titanium herunterladen. Aktuell (18.9.2011) ist die Version 1.72. Das Titanium Studio basiert \u00fcbrigens auf Aptana und damit auf Eclipse.<\/p>\n<div id=\"attachment_606\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/12.5-titanium-install.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-606\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/12.5-titanium-install-300x232.png\" alt=\"Titanium Installation\" title=\"Titanium Installation\" width=\"300\" height=\"232\" class=\"size-medium wp-image-606\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/12.5-titanium-install-300x232.png 300w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/12.5-titanium-install.png 708w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-606\" class=\"wp-caption-text\">Titanium Installation<\/p><\/div>\n<p>Auch hier solltet ihr ein Verzeichnis w\u00e4hlen, welches bestenfalls keine Leerzeichen im Pfad hat. Dies gilt auch f\u00fcr den Workspace:<\/p>\n<div id=\"attachment_607\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/13-titanium-workspace.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-607\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/13-titanium-workspace-300x137.png\" alt=\"Titanium Workspace\" title=\"Titanium Workspace\" width=\"300\" height=\"137\" class=\"size-medium wp-image-607\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/13-titanium-workspace-300x137.png 300w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/13-titanium-workspace.png 627w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-607\" class=\"wp-caption-text\">Titanium Workspace<\/p><\/div>\n<p>Jetzt verlangt Titanium noch GIT, bietet euch aber &#8211; sofern es nicht installiert und von Titanium gefunden wurde &#8211; die Option, Portable Git zu installieren und verwenden.<\/p>\n<div id=\"attachment_608\" style=\"width: 541px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/14-portable-git.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-608\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/14-portable-git.png\" alt=\"Portable Git\" title=\"Portable Git\" width=\"531\" height=\"352\" class=\"size-full wp-image-608\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/14-portable-git.png 531w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/14-portable-git-300x198.png 300w\" sizes=\"auto, (max-width: 531px) 100vw, 531px\" \/><\/a><p id=\"caption-attachment-608\" class=\"wp-caption-text\">Portable Git<\/p><\/div>\n<p>Schlussendlich muss noch das Android SDK in Titanium verlinkt werden. Dazu unter <i>Window -> Preferences<\/i> den Pfad zum SDK ausw\u00e4hlen und eure gew\u00fcnschte API Version als Default setzen:<\/p>\n<div id=\"attachment_609\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/16-sdk-in-titanium-verlinken.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-609\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/16-sdk-in-titanium-verlinken-300x205.png\" alt=\"SDK in Titanium\" title=\"SDK in Titanium\" width=\"300\" height=\"205\" class=\"size-medium wp-image-609\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/16-sdk-in-titanium-verlinken-300x205.png 300w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/16-sdk-in-titanium-verlinken.png 802w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-609\" class=\"wp-caption-text\">SDK in Titanium<\/p><\/div>\n<h2>Schritt 10: Ready to go.<\/h2>\n<p>Nun ist alles eingerichtet. Wir klicken beschwingt auf &#8222;create project&#8220;:<\/p>\n<div id=\"attachment_610\" style=\"width: 413px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/17-create-project.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-610\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/17-create-project.png\" alt=\"Neues Projekt\" title=\"Neues Projekt\" width=\"403\" height=\"275\" class=\"size-full wp-image-610\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/17-create-project.png 403w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/17-create-project-300x204.png 300w\" sizes=\"auto, (max-width: 403px) 100vw, 403px\" \/><\/a><p id=\"caption-attachment-610\" class=\"wp-caption-text\">Neues Projekt<\/p><\/div>\n<p>Den &#8222;new project wizard&#8220; stellen wir so zufrieden:<\/p>\n<div id=\"attachment_611\" style=\"width: 525px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/18-new-project.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-611\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/18-new-project.png\" alt=\"Projekt-Wizard\" title=\"Projekt-Wizard\" width=\"515\" height=\"514\" class=\"size-full wp-image-611\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/18-new-project.png 515w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/18-new-project-150x150.png 150w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/18-new-project-300x300.png 300w\" sizes=\"auto, (max-width: 515px) 100vw, 515px\" \/><\/a><p id=\"caption-attachment-611\" class=\"wp-caption-text\">Projekt-Wizard<\/p><\/div>\n<p>Und ab daf\u00fcr. Auf den gr\u00fcnen Startpfeil geklickt und dann erstmal nen Kaffee machen. Android l\u00e4uft n\u00e4mlich in einem Emulator, der beim ersten Kaltstart gern mal 3 Minuten braucht. <\/p>\n<div id=\"attachment_612\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/19-starting.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-612\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/19-starting-300x235.png\" alt=\"Emulator startet\" title=\"Emulator startet\" width=\"300\" height=\"235\" class=\"size-medium wp-image-612\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/19-starting-300x235.png 300w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/19-starting-1024x804.png 1024w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/19-starting.png 1194w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-612\" class=\"wp-caption-text\">Emulator startet<\/p><\/div>\n<p>Nach dem vollst\u00e4ndigen Start und dem Entriegeln des Emulators sollte eure <i>Hello World<\/i> &#8211; App automatisch starten. <\/p>\n<p>Links oben im Screenshot markiert ist der Start-Button f\u00fcr den Emulator. Alternativ kann auch der gewohnte, gr\u00fcne Pfeil oben genommen werden. Rechts unten ist der Button zum Umschalten zur anderen Konsole markiert. Fehler beim Build gibt Titanium in Rot aus, in der Regel wird man aber nach kurzer google Suche schnell f\u00fcndig &#8211; es gibt noch einige Kinderkrankheiten.<\/p>\n<div id=\"attachment_614\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/HelloWorld.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-614\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/HelloWorld-300x211.png\" alt=\"Hello, World\" title=\"Hello, World\" width=\"300\" height=\"211\" class=\"size-medium wp-image-614\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/HelloWorld-300x211.png 300w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/HelloWorld.png 803w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-614\" class=\"wp-caption-text\">Hello, World<\/p><\/div>\n<p>Eventuell kommt beim Start des Emulators eine Dosbox hoch, in der &#8222;Error loading Preferences&#8220; steht. Das soll euch aber keine Gedanken bereiten, scheint beim Android Emulator zum guten Ton zu geh\u00f6ren.<\/p>\n<h2>Schritt 11: Fastdev!<\/h2>\n<p>Einmal gestartet, den Emulator blo\u00df nicht wieder schlie\u00dfen! Titanium Studio verf\u00fcgt standardm\u00e4\u00dfig \u00fcber die Eigenschaft <a href=\"http:\/\/developer.appcelerator.com\/blog\/2011\/05\/titanium-mobile-intro-series-fastdev-for-android.html\">fastdev<\/a>, welche es euch erm\u00f6glicht, ohne erneuten Emulatorstart \u00c4nderungen an der App vorzunehmen. Dazu einfach im Codefenster die <i>app.js<\/i> manipulieren (Tabtitel umbenennen bspw.) und erneut bei laufendem Emulator auf den Startknopf dr\u00fccken. Sollte nun viel flotter gehen. Alternativ kann die App auch manuell geschlossen werden (nur die App, nicht den Emulator). Beim Neustart der App sind eure \u00c4nderungen dann auch bereits ber\u00fccksichtigt.<\/p>\n<h2>Schritt 12: Einstieg in die Entwicklung<\/h2>\n<p>Titanium bietet das wunderbare Spielplatzprojekt <i>Kitchen Sink<\/i> an, in dem so gut wie alle Features von Titanium mal vorgestellt werden. Durch einfaches Copy und Paste kommt man so recht schnell zu brauchbaren Ergebnissen. Kitchensink findet sich als Musterprojekt <a href=\"https:\/\/github.com\/appcelerator\/KitchenSink\">bei Github<\/a>. Ich muss dazusagen, dass Kitchen Sink ein Spielplatz ist und nicht immer funktionieren muss. Da scheint so ziemlich jeder dran herumbasteln zu d\u00fcrfen, weswegen nicht unbedingt garantiert ist, dass die App immer funktioniert. Bei mir kam bspw. gern der Fehler <i>Could not find shared library<\/i>. Achja, Kitchen Sink sollte mit den Google API&#8217;s ausprobiert werden, da u.a. von google maps Gebrauch gemacht wird.<\/p>\n<h2>Schritt 13: Deployen aufs Ger\u00e4t<\/h2>\n<p>Das oben erw\u00e4hnte USB-Debugging auf dem Handy anschalten und auch &#8222;nicht vertrauensw\u00fcrdigen Quellen&#8220; vertrauen, Handy anst\u00f6pseln und mit <i>adb devices<\/i> best\u00e4tigen lassen, dass das Handy gefunden wurde. Dann nur noch in Titanium auf &#8222;Android Device&#8220; &#8211; der Rest geht wie von Geisterhand.<\/p>\n<div id=\"attachment_613\" style=\"width: 247px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/Unbenannt.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-613\" src=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/Unbenannt.png\" alt=\"Run on Device\" title=\"Run on Device\" width=\"237\" height=\"389\" class=\"size-full wp-image-613\" srcset=\"https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/Unbenannt.png 237w, https:\/\/d-mueller.de\/blog\/wp-content\/uploads\/2011\/09\/Unbenannt-182x300.png 182w\" sizes=\"auto, (max-width: 237px) 100vw, 237px\" \/><\/a><p id=\"caption-attachment-613\" class=\"wp-caption-text\">Run on Device<\/p><\/div>\n<h2>Und was ist mit iOS?<\/h2>\n<p>Wie uns die <a href=\"http:\/\/wiki.appcelerator.org\/display\/guides\/Titanium+Compatibility+Matrix\">Kompatibilit\u00e4tsmatrix<\/a> verr\u00e4t, wird f\u00fcr die App-Entwicklung unter iOS zwingend ein Mac ben\u00f6tigt, deswegen kann ich dazu aktuell noch nichts sagen.<\/p>\n<h2>Weitere Ressourcen<\/h2>\n<ul>\n<li><a href=\"http:\/\/wiki.appcelerator.org\/display\/guides\/Home\">Alle Guides direkt bei Titanium<\/a><\/li>\n<li><a href=\"http:\/\/wiki.appcelerator.org\/display\/guides\/Installing+on+Windows+7\">\u00dcberdetaillierter, allerdings veralteter, Installationsguide f\u00fcr Windows 7<\/a><\/li>\n<li><a href=\"http:\/\/developer.appcelerator.com\/apidoc\/mobile\/\">Titanium API Dokumentation f\u00fcr die Ger\u00e4tfunktionen<\/a><\/li>\n<li><a href=\"http:\/\/mobile.tutsplus.com\/tutorials\/appcelerator\/titanium-mobile-build-a-pizza-ordering-app\/\">Nettes Tutorial zur App-Entwicklung mit Titanium<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Apps sind zur Zeit in aller Munde. Bekanntlich gibt es mit Android und iOS mal mindestens 2 ernst zu nehmende Plattformen, auf denen man in der Regel vertreten sein m\u00f6chte. Hei\u00dft: Zwei mal dasselbe programmieren, einmal in Java und einmal &hellip; <a href=\"https:\/\/d-mueller.de\/blog\/appentwicklung-webtechniken-mit-appcelerator-titanium\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,3],"tags":[],"class_list":["post-593","post","type-post","status-publish","format-standard","hentry","category-javascript","category-webdev"],"_links":{"self":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/593","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/comments?post=593"}],"version-history":[{"count":0,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/593\/revisions"}],"wp:attachment":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/media?parent=593"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/categories?post=593"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/tags?post=593"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}