<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sevo&#039;s Blog</title>
	<atom:link href="http://www.sevo.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sevo.org</link>
	<description>Technik und Development</description>
	<lastBuildDate>Mon, 21 Jun 2010 16:58:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Doxygen und Visual Basic .NET</title>
		<link>http://www.sevo.org/2010/06/doxygen-und-visual-basic-net/</link>
		<comments>http://www.sevo.org/2010/06/doxygen-und-visual-basic-net/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 17:39:16 +0000</pubDate>
		<dc:creator>Vsevolod Kukol</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[Doxygen]]></category>
		<category><![CDATA[Filter]]></category>
		<category><![CDATA[Visual Basic]]></category>

		<guid isPermaLink="false">http://www.sevo.org/?p=257</guid>
		<description><![CDATA[Im vorherigen Artikel &#8220;Visual Basic .NET – Code/API Dokumentation erstellen&#8221; habe ich bereits über die Möglichkeiten der Erzeugung einer Dokumentation für Visual Basic .NET Code geschrieben und möchte nun in diesem Artikel genauer auf Doxygen eingehen. Doxygen ist ein sehr umfangreiches Programm zur automatischen Erzeugung einer Dokumentation aus dokummentiertem Quellcode. Diese kann neben HTML auch [...]]]></description>
			<content:encoded><![CDATA[<p>Im vorherigen Artikel &#8220;<a href="http://www.sevo.org/2010/06/visual-basic-net-codeapi-dokumentation-erstellen/">Visual Basic .NET – Code/<acronym title="Application Programming Interface">API</acronym> Dokumentation erstellen</a>&#8221; habe ich bereits über die Möglichkeiten der Erzeugung einer Dokumentation für Visual Basic .NET Code geschrieben und möchte nun in diesem Artikel genauer auf Doxygen eingehen.<span id="more-257"></span></p>
<p><a href="http://www.stack.nl/~dimitri/doxygen/index.html" target="_blank">Doxygen</a> ist ein sehr umfangreiches Programm zur automatischen Erzeugung einer Dokumentation aus dokummentiertem Quellcode. Diese kann neben <acronym title="HyperText Markup Language">HTML</acronym> auch als <acronym title="Portable Document Format">PDF</acronym>, HtmlHelp (<acronym title="Compiled HTML Help">CHM</acronym>), Man, LaTex und <acronym title="Rich Text File">RTF</acronym> ausgegeben werden. Zum Funktionsumfang gehört unter anderem eine eingebaute Suchfunktion und das Einbetten von <acronym title="Unified Modelling Language">UML</acronym>-Diagrammen mit Hilfe von <a href="http://www.graphviz.org/" target="_blank">Graphwiz</a>.</p>
<p>Zu den unterstützten Sprachen gehören unter anderem C, C++, C#, Java, <acronym title="Pre-Hypertext Processing">PHP</acronym> und Fortran. Obwohl Doxygen keine eingebaute Unterstützung von Visual Basic .NET hat, lässt sich diese mit Hilfe eines Filters nachrüsten.</p>
<h3>Visual Basic .NET Filter</h3>
<p>Inspiriert durch den <a href="http://www.stack.nl/~dimitri/doxygen/helpers.html" target="_blank"><acronym title="Visual Basic">VB</acronym> Filter von Mathias Henze</a>, der leider viele Eigenheiten von <acronym title="Visual Basic">VB</acronym>.NET nicht unterstützt, habe ich einen neuen <a href="http://trac.sevo.org/projects/doxyvb/" target="_blank"><acronym title="Visual Basic">VB</acronym>.NET Filter</a> geschrieben. Dieser unterstützt neben Klassen-Deklarationen auch Strunkturen, Schnittstellen, Enums und Declares. Als Member werden neben einfachen Feldern, Methoden und Funktionen, auch Eigenschaften erkannt.</p>
<p>Die Funktionsweise entspricht im Ansatz dem alten <acronym title="Visual Basic">VB</acronym> Filter. Die Notation und Syntax wird so verändert, dass sie der üblichen C# Notation ähnelt und von Doxygen als solche erkannt wird. So werden beispielsweise Zugriffsmodifikatoren und einige andere Schlüsslwörter klein geschrieben, sowie Klammern und Semikolons eingefügt.</p>
<p>Im Gegensatz zum alten Filter von Mathias Henze, werden Typen vor die Bezeichner gesetzt (statt mit &#8220;As&#8221; dahinter), Basisklassen und implementierte Schnittstellen (Inherits, Imports) sowie Arrays werden korrekt ausgegeben und Inline-Kommentare werden teilweise umgeschrieben.</p>
<h4>Beide Filter im Vergleich:</h4>

<table id="wp-table-reloaded-id-1-no-1" class="wp-table-reloaded wp-table-reloaded-id-1">
<thead>
	<tr class="row-1">
		<th class="column-1"></th><th class="column-2">VB Filter</th><th class="column-3">VB.NET Filter</th>
	</tr>
</thead>
<tbody class="row-hover">
	<tr class="row-2">
		<td class="column-1"></td><td class="column-2">von Mathias Henze</td><td class="column-3">von Vsevolod Kukol</td>
	</tr>
	<tr class="row-3">
		<td class="column-1">Konvertiert in Sprache:</td><td class="column-2">C++</td><td class="column-3">C#</td>
	</tr>
	<tr class="row-4">
		<td class="column-1">Klammern und Semikolons einfügen:</td><td class="column-2"><span class="green">Ja</span></td><td class="column-3"><span class="green">Ja</span></td>
	</tr>
	<tr class="row-5">
		<td class="column-1">Zugriffsmodifizierer konvertieren:<br />
(z.B.: Public -> public)</td><td class="column-2"><span class="green">Ja</span></td><td class="column-3"><span class="green">Ja</span></td>
	</tr>
	<tr class="row-6">
		<td class="column-1">Kommentare konvertieren:</td><td class="column-2"><span class="orange">Eingeschränkt</span></td><td class="column-3"><span class="green">Ja</span></td>
	</tr>
	<tr class="row-7">
		<td class="column-1">- VS-Typische Dokummentation mit ''':</td><td class="column-2"><span class="green">Ja</span></td><td class="column-3"><span class="green">Ja</span></td>
	</tr>
	<tr class="row-8">
		<td class="column-1">- File Header mit ' eingeleitet:</td><td class="column-2"><span class="red">Nein</span></td><td class="column-3"><span class="green">Ja</span></td>
	</tr>
	<tr class="row-9">
		<td class="column-1">- Inline Kommentare für Member:</td><td class="column-2"><span class="orange">Eingeschränkt</span></td><td class="column-3"><span class="green">Ja</span></td>
	</tr>
	<tr class="row-10">
		<td class="column-1">- Inline Kommentare von Enum Werten:<br />
(Kommas richtig setzen bzw. verschieben)</td><td class="column-2"><span class="red">Nein</span></td><td class="column-3"><span class="green">Ja</span></td>
	</tr>
	<tr class="row-11">
		<td class="column-1">Schnittstellen werden unterstützt:</td><td class="column-2"><span class="red">Nein</span></td><td class="column-3"><span class="green">Ja</span></td>
	</tr>
	<tr class="row-12">
		<td class="column-1">Mehrfachverwerbung/-Implementierung:</td><td class="column-2"><span class="red">Nein</span></td><td class="column-3"><span class="green">Ja</span></td>
	</tr>
	<tr class="row-13">
		<td class="column-1">Typen von Membern umschreiben:<br />
(Typ vor Bezeichner, damit Doxygen diesen erkennt))</td><td class="column-2"><span class="red">Nein</span></td><td class="column-3"><span class="green">Ja</span></td>
	</tr>
	<tr class="row-14">
		<td class="column-1">Parameter von Methoden umschreiben:<br />
(Doxygen braucht Typ vor Bezeichner)</td><td class="column-2"><span class="red">Nein</span></td><td class="column-3"><span class="green">Ja</span></td>
	</tr>
	<tr class="row-15">
		<td class="column-1">Eigenschaften umschreiben:<br />
(Typ-/Parametererkennung durch Doxygen)</td><td class="column-2"><span class="red">Nein</span></td><td class="column-3"><span class="green">Ja</span></td>
	</tr>
	<tr class="row-16">
		<td class="column-1">Arrays erkennen:<br />
(Runde durch eckige Klammern ersetzen)<br />
</td><td class="column-2"><span class="red">Nein</span></td><td class="column-3"><span class="green">Ja</span></td>
	</tr>
	<tr class="row-17">
		<td class="column-1">Namespaces erkennen und ggf. hinzufügen:<br />
(damit Doxygen Zusammenhänge besser erkennt)</td><td class="column-2"><span class="red">Nein</span></td><td class="column-3"><span class="green">Ja</span></td>
	</tr>
	<tr class="row-18">
		<td class="column-1">Declares sinnvoll umschreiben:<br />
(Lib * Alias * stören Doxygen)</td><td class="column-2"><span class="orange">Lib/Alias wird entfernt</span></td><td class="column-3"><span class="green">Lib/Alias werden durch<br />
sinnvolle Kommentare<br />
ersetzt</span></td>
	</tr>
	<tr class="row-19">
		<td class="column-1">Algorithmen bzw. eigentlichen Quellcode konvertieren:</td><td class="column-2"><span class="red">Nein</span></td><td class="column-3"><span class="red">Nein</span></td>
	</tr>
</tbody>
</table>

<h4>Beispiel:</h4>
<p>Einige Beispiele zum Vergleichen der beiden Filter gibt es auf der <a href="http://trac.sevo.org/projects/doxyvb/" target="_blank">Projektseite</a> des neuen <acronym title="Visual Basic">VB</acronym>.NET Filters. Die Dokumentation der <a href="http://trac.sevo.org/projects/doxyvb/browser/trunk/samples/" target="_blank">Beispieldateien</a> im Projektrepository wird automatisch jeweils mit dem alten und dem neuen Filter erzeugt. Alle anderen Einstellungen im <a href="http://trac.sevo.org/projects/doxyvb/browser/trunk/samples/Doxyfile" target="_blank">Doxyfile</a> (auch im Beispielordner zu finden) bleiben identisch.</p>
<ul>
<li>Zum Vergleich herangezogene Dateien:
<ul>
<li><a href="http://trac.sevo.org/projects/doxyvb/browser/trunk/samples/" target="_blank">http://trac.sevo.org/projects/doxyvb/browser/trunk/samples</a>/</li>
</ul>
</li>
<li>Dokumentation der Beispieldateien mit dem <acronym title="Visual Basic">VB</acronym> Filter von Mathias Henze:
<ul>
<li><a href="http://trac.sevo.org/doxyvb.old/html/index.html" target="_blank">http://trac.sevo.org/doxyvb.old/html/index.html</a></li>
</ul>
</li>
<li>Dokumentation der Beispieldateien mit dem neuen <acronym title="Visual Basic">VB</acronym>.NET Filter:
<ul>
<li><a href="http://trac.sevo.org/doxyvb/html/index.html" target="_blank">http://trac.sevo.org/doxyvb/html/index.html</a></li>
</ul>
</li>
</ul>
<h3>Fazit:</h3>
<p>Mit dem neuen <acronym title="Visual Basic">VB</acronym>.NET Filter lassen sich problemlos Visual Basic .NET Projekte mit Doxygen dokumentieren. Zwar werden keine Verlinkungen zur <acronym title="Microsoft Developer Network">MSDN</acronym> hinzugefügt, wie bei Sandcastle, dafür können aber <acronym title="Unified Modelling Language">UML</acronym>-Diagramme hinzugefügt, oder Ordner und Dateien dokummentiert werden.</p>
<p>Alle Klassen, Strukturen und Schnittstellen werden mit allen ihren Membern richtig dargestellt und miteinander in der Dokumentation verlinkt. Nur der Quellcode lässt sich nicht korrekt in der Dokumentation anzeigen, da Doxygen die gefilterte Fassung übernimmt. Dies kann man jedoch auch mit dem geschickten Einsatz von <em>&lt;A HREF=&#8221;&#8230;&#8221;&gt;&#8230;&lt;/A&gt;</em> Tags in den Kommentaren verbessern, indem man die Originaldateien in der Dokumentation verlinkt. Durch den Einsatz von SvnView oder Trac lassen sich sogar einzelne Zeilen verlinken.</p>
<h3>Links:</h3>
<p>Doxygen: <a href="http://www.stack.nl/~dimitri/doxygen/index.html" target="_blank">http://www.stack.nl/~dimitri/doxygen/</a></p>
<p><acronym title="Visual Basic">VB</acronym> Filter von Mathias Henze: <a href="http://www.stack.nl/~dimitri/doxygen/helpers.html" target="_blank">http://www.stack.nl/~dimitri/doxygen/helpers.html</a></p>
<p><acronym title="Visual Basic">VB</acronym>.NET Filter von Vsevolod Kukol: <a href="http://trac.sevo.org/projects/doxyvb/" target="_blank">http://trac.sevo.org/projects/doxyvb/</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.sevo.org/2010/06/doxygen-und-visual-basic-net/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Visual Basic .NET &#8211; Code/API Dokumentation erstellen</title>
		<link>http://www.sevo.org/2010/06/visual-basic-net-codeapi-dokumentation-erstellen/</link>
		<comments>http://www.sevo.org/2010/06/visual-basic-net-codeapi-dokumentation-erstellen/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 13:45:18 +0000</pubDate>
		<dc:creator>Vsevolod Kukol</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[Doxygen]]></category>
		<category><![CDATA[Sandcastle]]></category>
		<category><![CDATA[Visual Basic]]></category>

		<guid isPermaLink="false">http://www.sevo.org/?p=176</guid>
		<description><![CDATA[Die Dokumentation des Quellcodes ist mindestens genauso wichtig wie das Entwickeln selbst. Vor allem bei Projekten mit mehreren Entwicklern, aber auch für sich selber, trägt die Dokumentation sehr viel zur Nachvollziehbarkeit des Quellcodes bei. Bei der objektorientierten Entwicklung und der Entwicklung von APIs ist die Dokumentation der verfügbaren Klassen und Methoden besonders wichtig. Erst diese [...]]]></description>
			<content:encoded><![CDATA[<p><!--adsensestart--><br />
Die Dokumentation des Quellcodes ist mindestens genauso wichtig wie das Entwickeln selbst. Vor allem bei Projekten mit mehreren Entwicklern, aber auch für sich selber, trägt die Dokumentation sehr viel zur Nachvollziehbarkeit des Quellcodes bei. Bei der objektorientierten Entwicklung und der Entwicklung von APIs ist die Dokumentation der verfügbaren Klassen und Methoden besonders wichtig. Erst diese ermöglicht eine einfache und problemfreie Verwendung von Bibliotheken ohne dessen Quellcode zu kennen.<span id="more-176"></span></p>
<p>Das Visual Studio .NET bietet die Möglichkeit Kommentare mit <acronym title="eXtensible Markup Language">XML</acronym> Tags zu versehen, die vom Objektbrowser automatisch erkannt und angezeigt werden. Diese werden beim Erstellen eines Projektes automatisch in eine <acronym title="eXtensible Markup Language">XML</acronym> Datei exportiert und können gemeinsam mit der Assembly ausgeliefert werden. Wird diese <acronym title="eXtensible Markup Language">XML</acronym> Datei beim Importieren einer Assembly als Verweis in ein neues Projekt gefunden, erkennt Visual Studio die Zusammenhänge und zeigt automatisch die passende Dokumentation an.<br />
<!--adsensestop--></p>
<p>Das folgende Beispiel zeigt eine dokumentierte Schnittstelle und ihr Aussehen im Objektbrowser:</p>
<pre class="brush: vb;">
''' &lt;summary&gt;
''' Sample Interface 1
''' &lt;/summary&gt;
''' &lt;remarks&gt;A simple interface&lt;/remarks&gt;
Public Interface IInterface1
    ''' &lt;summary&gt;
    ''' Simple string property
    ''' &lt;/summary&gt;
    ''' &lt;value&gt;some string&lt;/value&gt;
    ''' &lt;remarks&gt;stores a string value&lt;/remarks&gt;
    Property Property1() As String
    ''' &lt;summary&gt;
    ''' simple integer property
    ''' &lt;/summary&gt;
    ''' &lt;value&gt;some numeric value&lt;/value&gt;
    ''' &lt;remarks&gt;stores a numeric value&lt;/remarks&gt;
    Property Property2() As Integer
End Interface
</pre>
<p><a href="http://www.sevo.org/wp-content/uploads/2010/06/Objektbrowser.png" rel="lightbox[176]"><img class="aligncenter size-medium wp-image-184" title="Objektbrowser" src="http://www.sevo.org/wp-content/uploads/2010/06/Objektbrowser-300x263.png" alt="" width="300" height="263" /></a></p>
<p>Diese Funktion ist jedoch sehr rudimentär und an Visual Studio gebunden. Die Dokumentation lässt sich weder mit Klassendiagrammen verknüpfen, noch kann diese in gängige Formate wie <acronym title="Portable Document Format">PDF</acronym> oder <acronym title="HyperText Markup Language">HTML</acronym> exportiert werden. Soll eine Dokumentation im <acronym title="HyperText Markup Language">HTML</acronym> Format erzeugt werden und eventuell sogar in ein <acronym title="Content Management System">CMS</acronym> System wie Trac eingebunden werden, muss Visual Studio passen und eine Zusatzsoftware zum Einsatz kommen.</p>
<p><!--adsensestart--><br />
Bei meiner Suche nach einer handfesten Lösung für Visual Basic Projekte konnte ich lediglich zwei Programme finden, die zuverlässig den Quellcode analysieren und eine gute Dokumentation erzeugen können.</p>]]></content:encoded>
			<wfw:commentRss>http://www.sevo.org/2010/06/visual-basic-net-codeapi-dokumentation-erstellen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>.NET plattformunabhängig mit Mono Teil 1</title>
		<link>http://www.sevo.org/2010/04/net-plattformunabhangig-mit-mono-und-gtk/</link>
		<comments>http://www.sevo.org/2010/04/net-plattformunabhangig-mit-mono-und-gtk/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 01:57:39 +0000</pubDate>
		<dc:creator>Vsevolod Kukol</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[MonoDevelop]]></category>

		<guid isPermaLink="false">http://www.sevo.org/?p=106</guid>
		<description><![CDATA[Bereits bei der Planung von Softwareprojekten stellt sich immer öfter die Frage, unter welchen Betriebssystemen diese laufen können müssen. Immer öfter kommt beispielsweise Linux bei Desktops, vor allem in staatlichen Einrichtungen, aber auch an Universitäten und im privaten Sektor zum Einsatz. Aber auch Mac Nutzer dürfen nicht unterschätzt werden. Die Entwicklung von plattformunabhängiger Software ist [...]]]></description>
			<content:encoded><![CDATA[<p>Bereits bei der Planung von Softwareprojekten stellt sich immer öfter die Frage, unter welchen Betriebssystemen diese laufen können müssen. Immer öfter kommt beispielsweise Linux bei Desktops, vor allem in staatlichen Einrichtungen, aber auch an Universitäten und im privaten Sektor zum Einsatz. Aber auch Mac Nutzer dürfen nicht unterschätzt werden.<span id="more-106"></span></p>
<p>Die Entwicklung von plattformunabhängiger Software ist immer mit einem relativ hohen Mehraufwand verbunden. Mit Hilfe von <a href="http://www.cygwin.com/">Cygwin</a> ist es möglich native Linux Anwendungen auch für Windows zu kompilieren, wobei meistens der Quellcode zusätzlich angepasst werden muss. Oft werden auch komplett getrennte Code-Repositories verwendet, da die zusätzliche Pflege des Kompiliervorganges für viele zu kompliziert erscheint.</p>
<p>Als Alternative zur nativen Anwendung kann ein Framework wie Java, oder .NET verwendet werden. Allerdings sehen die so entwickelten Anwendungen nicht auf jedem Betriebssystem gleich aus und die Laufzeitumgebung muss auf dem Zielsystem installiert sein. Da die .NET Laufzeitumgebung bereits in Windows integriert ist, hat diese einen entscheidenden Vorteil gegenüber Java. Der Benutzer muss keine zusätzliche Software installieren und die Anwendungen starten schneller. Unter Linux und Mac <acronym title="Operating System">OS</acronym> verschwindet dieser Vorteil allerdings, denn Microsoft bietet keine .NET Implementierung für andere Betriebssysteme. Hier kann auf die freie .NET Implementierung names &#8220;Mono&#8221; zurückgegriffen werden.</p>
<h2>Mono</h2>
<p><a href="http://mono-project.com/" target="_blank">Mono</a> ist eine freie .NET Implementierung, die sich an die <a href="http://www.mono-project.com/ECMA" target="_blank">ECMA</a> Standards für C# und <abbr title="Common Language Runtime">CLR</abbr> hält. Das opensource Projekt unterliegt der <a href="http://www.opensource.org/licenses/gpl-license.html" target="_blank"><acronym title="GNU General Public License">GPL</acronym></a> und <a href="http://www.opensource.org/licenses/mit-license.html" target="_blank"><acronym title="Massachusetts Institute of Technology">MIT</acronym> X11</a> (genauereres weiter unten) und wird von Novell gesponsort. Die Laufzeitumgebung läuft unter Linux, Mac <acronym title="Operating System">OS</acronym> X und neuerdings auch auf dem <a href="http://monotouch.net/" target="_blank">iPhone</a>. Damit kann beinahe jede .NET Anwendung (auch <acronym title="Active Server Pages">ASP</acronym>.NET), direkt auf einem dieser Betriebsysteme ausgeführt werden und muss nicht extra übersetzt werden. Dies funktioniert jedoch nur solange die Anwendung nicht die Windows <acronym title="Application Programming Interface">API</acronym>, oder neuste .NET Technologien verwendet.</p>
<p>So vielversprechend das alles auch klingen mag, kommt es in der Realität oft zu Problemen. So ist Windows Forms nur bis zur Version 2.0 komplett implementiert. Da es zudem unter Unix keine WinForms gibt, versucht Mono die Formulare selber zu rendern, was leider nicht immer gut funktioniert. Zusätzlich fehlen unter Mono die visuellen Stile von Windows.</p>
<div id="attachment_120" class="wp-caption alignright" style="width: 310px"><a href="http://www.sevo.org/wp-content/uploads/2010/04/GUI_VS.png" rel="lightbox[106]"><img class="size-medium wp-image-120 " title=".NET GUI unter Windows" src="http://www.sevo.org/wp-content/uploads/2010/04/GUI_VS-300x158.png" alt="" width="300" height="158" /></a><p class="wp-caption-text">.NET 3.5 Windows Form unter Windows</p></div>
<p>Folgende Screenshots zeigen die Problematik:</p>
<p>Hierfür habe ich einfach ein neues Windows Projekt in VS 2008 erstellt und einige einfache Controls auf dem Formular positioniert. Die resultierende Assembly habe ich dann normal unter Windows und anschliessend unter Ubuntu 10.04 mit mono gestartet.</p>
<div id="attachment_121" class="wp-caption alignright" style="width: 310px"><a href="http://www.sevo.org/wp-content/uploads/2010/04/Bildschirmfoto-Form1.png" rel="lightbox[106]"><img class="size-medium  wp-image-121 " title=".NET GUI unter Ubuntu 10.04 mit Mono" src="http://www.sevo.org/wp-content/uploads/2010/04/Bildschirmfoto-Form1-300x205.png" alt="" width="300" height="187" /></a><p class="wp-caption-text">.NET 3.5 Windows Form unter Ubuntu 10.04 mit Mono</p></div>
<p>Die Unterschiede sind deutlich erkennbar. Weder die Größen noch die Positionierung der Controls stimmen überein. Die Textelemente der einzelnen Controls sind falsch ausgerichtet. Das Fenster weist zudem andere Dimensionen auf und sieht insgesamt schlechter aus, als das Original unter Windows.</p>
<p>Eine mit Visual Studio entwickelte Anwendung läuft also unter Linux, jedoch mit großen Abstrichen bei der Grafik. Für den Benutzer kann das schnell zu einem K.O. Kriterium werden, vor allem wenn grafisch anspruchsvollere Konkurrenzprodukte verfügbar sind.</p>
<p>Welche Möglichkeiten gibt es, um .NET Anwendungen auf allen Systemen gleich aussehen zu lassen?</p>]]></content:encoded>
			<wfw:commentRss>http://www.sevo.org/2010/04/net-plattformunabhangig-mit-mono-und-gtk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hello Android &#8211; erste Aktivität mit GUI</title>
		<link>http://www.sevo.org/2010/03/hello-android-erste-aktivitat-mit-gui/</link>
		<comments>http://www.sevo.org/2010/03/hello-android-erste-aktivitat-mit-gui/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 11:32:24 +0000</pubDate>
		<dc:creator>Vsevolod Kukol</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[GUI Design]]></category>
		<category><![CDATA[Hello World]]></category>
		<category><![CDATA[Strings]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://kukol.wordpress.com/?p=28</guid>
		<description><![CDATA[Aller Anfang ist schwer und hat man gerade Eclipse mit allem Zubehör installiert und gestartet, wird man mit einer für viele (Visual Studio verwöhnten wie mich) gewöhnungsbedürftigen IDE konfrontiert. Das Ganze ist aber viel einfacher als man im ersten Moment glaubt. Ich möchte als Erstes anhand des HelloWorld beispiels den Grundaufbau eines Android Projektes und [...]]]></description>
			<content:encoded><![CDATA[<p>Aller Anfang ist schwer und hat man gerade Eclipse mit allem Zubehör  installiert und gestartet, wird man mit einer für viele (Visual Studio  verwöhnten wie mich) gewöhnungsbedürftigen IDE konfrontiert. Das Ganze  ist aber viel einfacher als man im ersten Moment glaubt.</p>
<p>Ich möchte als Erstes anhand des HelloWorld beispiels den Grundaufbau eines Android Projektes und der <acronym title="Graphical User Interface">GUI</acronym> einer Aktivität erläutern.</p>
<p><span id="more-28"></span></p>
<h2>Neues Projekt erstellen</h2>
<p>Zum Erstellen eines neuen Android Projektes steht im Menü <strong><em>&#8220;File&#8221;</em></strong> -&gt;<strong><em> &#8220;New&#8221; </em></strong>der Eintrag <em><strong>&#8220;Android Project&#8221;</strong></em> zur Verfügung.</p>
<p><strong>Project Name:</strong> der Name des Projektes ohne Leer-/Sonderzeichen</p>
<h2><a href="http://www.sevo.org/wp-content/uploads/2010/03/new_project.png" rel="lightbox[28]"><img class="alignright size-medium wp-image-34" title="Eclipse - neues Android Projekt erstellen" src="http://www.sevo.org/wp-content/uploads/2010/03/new_project.png?w=206" alt="" width="209" height="283" /></a></h2>
<p><strong>Build Target: </strong>die Zieplattform bzw. die zu verwendende <acronym title="Application Programming Interface">API</acronym>. Mit 1.6 ist man für den Anfang auf der sicheren Seite. Sollte man später doch eine neuere <acronym title="Application Programming Interface">API</acronym> benötigen, kann man diese nachträglich im Manifest ändern.</p>
<p><strong>Application Name: </strong>Der lesbare Name der Anwendung, den auch der Benutzer sieht</p>
<p><strong>Package Name:</strong> der Java Paketname sollte mindestens einen Punkt haben. Üblicherweise trägt man hier den Entwicklernamen, Firmennamen, oder die eigene Domain mit ein. Der Name muss eindeutig sein, da Android diesen zur Identifizierung der Anwendung verwendet und darf natürlich weder Sonderzeichen, noch Leerzeichen enthalten.</p>
<p><strong>Create Activity:</strong> Erzeugt direkt eine fertige Aktivität, die als Startpunkt für das Programm dient. Diese wird auch im Android Launcher sichtbar.</p>
<p>Mit einem Klick auf<strong><em> &#8220;Next&#8221; </em></strong>kann man sich noch ein paralleles Testprojekt erstellen lassen. Da dies jedoch für den Anfang nicht notwendig ist, beendet man den Wizard mit<strong><em> &#8220;Finish&#8221;</em></strong></p>
<p><strong><em><br />
</em></strong></p>
<h2>Ordnerstruktur<a href="http://www.sevo.org/wp-content/uploads/2010/03/package_structure.png" rel="lightbox[28]"><img class="alignright size-medium wp-image-49" title="Ordner Struktur eines Android Projektes" src="http://www.sevo.org/wp-content/uploads/2010/03/package_structure.png?w=191" alt="" width="191" height="300" /></a></h2>
<p>Ein Projekt besteht aus vielen Ordnern und Dateien, die über den Package Explorer durchsucht werden können.</p>
<p>Hier sind die wichtigsten:</p>
<p><strong>src: </strong>In diesem Ordner befindet sich der eigentliche Quellcode der Anwendung.  Dieser ist nach Paketen und Klassen sortiert. Jede Klassendefinition  (Quellcode) muss dabei in einer eigenen *.java Datei gespeichert werden.</p>
<p><strong>res: </strong>beinhaltet alle Resourcen, die das Programm benötigt. Dazu gehören Grafiken, und <acronym title="eXtensible Markup Language">XML</acronym> Dateien.</p>
<p><strong>AndroidManifest.xml:</strong> diese <acronym title="eXtensible Markup Language">XML</acronym> Datei beinhaltet alle wichtigen Informationen zu dem Projekt. Neben dem Namen, der <acronym title="Application Programming Interface">API</acronym>, Kompilieroptionen, usw. werden hier auch alle Aktivitäten und Intents deklariert.</p>
<h2>Der Quellcode</h2>
<p>In meinem Beispiel habe ich im Wizard &#8220;Create Activity&#8221; ausgewählt und den Namen &#8220;HelloActivity&#8221; angegeben. Wie man sieht hat der Wizard die Klasse erzeugt und auch richtig benannt.</p>
<p>Öffnet man die Datei &#8220;HelloActivity.java&#8221;, so findet man den automatisch vom Wizard erzeugten Quellcode:</p>
<pre class="brush: java;">
package com.sevo.helloandroid;

import android.app.Activity;
import android.os.Bundle;

public class HelloActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
</pre>
<p>Dieser Beispielcode ist eigentlich ganz simpel. Hier wird eine Klasse <strong><em>HelloActivity </em></strong>von der Basisklasse <strong><em>Activity</em></strong> abgeleitet und die Methode <em><strong>onCreate</strong> </em>überschrieben.</p>
<p>Wie bei einer Ableitung üblich, ruft die Methode <em><strong>onCreate </strong></em>zuerst die gleichnamige Methode der Basisklasse auf, wonach die Anweisung <strong><em>setContentView(R.layout.main)</em></strong> ausgeführt wird.</p>
<p>Damit ist der Quellcode der HelloAndroid App fertig! Die Methode setContentView wird nämlich mit einer Resource parametrisiert. Das R steht dabei für <strong><em>Resources</em></strong>, layout für den <strong><em>Ordner layout</em></strong> und main für die Resource <strong><em>main.xml</em></strong>, die die <acronym title="Graphical User Interface">GUI</acronym> der Aktivität beschreibt. Sie lädt also die Resource und generiert das Layout des Fensters.</p>
<p>Und damit kommen wir zu den Resourcen.</p>
<h2>Resourcen (res Ordner)</h2>
<p>Die Resourcen sind in drei Hauptkategorien unterteilt.</p>
<h3><strong>drawable</strong></h3>
<p>Die drawable-* Ordner beinhalten Grafiken für verschiedene Auflösungen. Möchte man eine Grafik in die Anwendung einbinden, so muss man diese für jede Auflösung optimieren und in dem jeweiligen Ordner speichern. Mehr dazu gibt es später in einem separaten Artikel.</p>
<h3><strong>layout</strong></h3>
<p>Beinhaltet <acronym title="eXtensible Markup Language">XML</acronym> Dateien zur Beschreibung von GUIs.</p>
<p>Die Beispilaktivität <em>HelloActivity </em>enthält eine Referenz zu der <em><strong>main.xml</strong></em> im Ordner <strong><em>res/layout</em></strong>. Wenn man diese öffnet, zeigt Eclipse eine Design-Ansicht. In der Mitte sieht man die Vorschau der <acronym title="Graphical User Interface">GUI</acronym> und auf der linken Seite eine Auswahl von Elementen. Unter der Ansicht findet man noch den Reiter <strong><em>&#8220;Properties&#8221;</em></strong>, den man sich idealerweise auf die rechte Seite vom Designer zieht.</p>
<p><a href="http://www.sevo.org/wp-content/uploads/2010/03/gui_designer.png" rel="lightbox[28]"><img class="aligncenter size-full wp-image-53" title="GUI Design - res/layout/main.xml" src="http://www.sevo.org/wp-content/uploads/2010/03/gui_designer.png" alt="" width="461" height="295" /></a></p>
<p>Der Wizard hat bereits ein <em><strong>TextView </strong></em>Element eingefügt. Klickt man dieses an, werden dessen Eigenschaften im Properties Tab angezeigt. Unter der Designvorschau kann die &#8220;main.xml&#8221; direkt betrachtet werden. Es ist also möglich und manchmal sinnvoll das Design auch manuell über den <acronym title="eXtensible Markup Language">XML</acronym> Code zu bearbeiten.</p>
<p>Die Beispiel-<acronym title="eXtensible Markup Language">XML</acronym> sieht so aus:</p>
<pre class="brush: xml; wrap-lines: false;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
 android:orientation=&quot;vertical&quot;
 android:layout_width=&quot;fill_parent&quot;
 android:layout_height=&quot;fill_parent&quot;
 &gt;
&lt;TextView
 android:layout_width=&quot;fill_parent&quot;
 android:layout_height=&quot;wrap_content&quot;
 android:text=&quot;@string/hello&quot;
 /&gt;
&lt;/LinearLayout&gt;
</pre>
<p>Die interessanteste Zeile stellt in diesem Beispiel die TextView Eigenschaft <strong><em>android:text=&#8221;@string/hello&#8221;</em></strong> dar. Wie man in dem dem Designer erkennen kann, wird in dem TextView Element ein anderer Text angezeigt, als in der <acronym title="eXtensible Markup Language">XML</acronym> Datei angegeben. Es handelt sich hierbei wieder um eine Referenz zu einer anderen Resource, nämlich den Strings.</p>
<p>Klickt man auf den &#8220;&#8230;&#8221; Button neben den Eigenschaftswert &#8220;Text&#8221;, wird ein neues Fenster zur Auswahl von Strings geöffnet. Hier können bereits vorhandene Strings ausgewählt und neue erzeugt werden.</p>
<p>Die bereits  besprochene Methode <strong><em>setContentView(R.layout.main)</em></strong> wertet die main.xml aus und folgt auch den darin enthaltenen  Referenzen. Dadurch wird als Text der mit <strong><em>hello</em></strong> bezeichnete String <em><strong>&#8220;Hello World, HelloActivity!&#8221;</strong></em> angezeigt.</p>
<h3><strong>values</strong></h3>
<p>In dem Ordner values werden <acronym title="eXtensible Markup Language">XML</acronym> Dateien mit Strings, oder anderen Resourcen abgelegt.</p>
<p>Strings bestehen aus einem Namen sowie einer dazugehörigen Zeichnkette und werden in der Datei res/values/strings.xml gespeichert. Öffnet man diese Datei, wird der Resource Designer angezeigt. Hier kann man bereits vorhandene Strings bearbeiten, oder neue hinzufügen.</p>
<p><a href="http://www.sevo.org/wp-content/uploads/2010/03/string_designer.png" rel="lightbox[28]"><img class="aligncenter size-full wp-image-62" title="Resourcen - Strings" src="http://www.sevo.org/wp-content/uploads/2010/03/string_designer.png" alt="" width="468" height="264" /></a></p>
<p>Öffnet man die <acronym title="eXtensible Markup Language">XML</acronym> Ansicht, so findet man den folgenden Inhalt:</p>
<pre class="brush: xml; wrap-lines: false;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;resources&gt;
 &lt;string name=&quot;hello&quot;&gt;Hello World, HelloActivity!&lt;/string&gt;
 &lt;string name=&quot;app_name&quot;&gt;Hello Android&lt;/string&gt;
&lt;/resources&gt;
</pre>
<p>Auf diese Weise lassen sich nicht nur Strings sondern alle erdenklichen Informationen (String Felder/Arrays, Konstanten, Farbcodes, etc) speichern. Möchte man ein Programm in mehrere Sprachen übersetzen, erstellt man für jede Sprache eine eigene <acronym title="eXtensible Markup Language">XML</acronym> Datei und muss nichts am Quellcode ändern (hierzu später mehr).</p>
<h2 style="text-align: left;">AndroidManifest.xml</h2>
<p>Wie bereits erwähnt, beschreibt diese Datei alle Eigenschaften des Projektes. Man kann entweder die Unterstützung von Eclipse in Anspruch nehmen, oder die <acronym title="eXtensible Markup Language">XML</acronym> Datei direkt bearbeiten.</p>
<p>Am interessantesten sind die Abschnitte Application und Permissions.</p>
<p>Unter <strong><em>Application </em></strong>werden neben den Grundinformationen wie Name oder Icon auch die <em><strong>Aktivitäten </strong></em>festgelegt. Es reicht also nicht aus nur eine neue Aktivitätsklasse zu erzeugen, damit diese auch ausgeführt wird. In der AndroidManifest.xml muss diese deklariert und mit Regeln versehen werden.</p>
<p>In dem automatisch erzeugten Beispiel finden wir den folgenden Abschnitt:</p>
<pre class="brush: xml; wrap-lines: false;">&lt;application android:icon=&quot;@drawable/icon&quot; android:label=&quot;@string/app_name&quot;&gt;
 &lt;activity android:name=&quot;.HelloActivity&quot;
 android:label=&quot;@string/app_name&quot;&gt;
 &lt;intent-filter&gt;
 &lt;action android:name=&quot;android.intent.action.MAIN&quot; /&gt;
 &lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&gt;
 &lt;/intent-filter&gt;
 &lt;/activity&gt;
</pre>
<p>Die HelloActivity bekommt hier einen Intent Filter zugewiesen. Dieser legt fest unter welchen Bedingungen die Aktivität wie gestartet werden soll. In diesem Beispiel ist die Aktion MAIN und die Kategorie LAUNCHER. Dies erlaubt also einen Start der HelloActivity aus dem Android Programm-Launcher. Es sind natürlich sehr viele verschiedene Bedingungen möglich. Weitere Informationen gibt es unter <a href="http://developer.android.com/reference/android/content/Intent.htm">http://developer.android.com/reference/android/content/Intent.htm</a>.</p>
<h2 style="text-align: left;">Fazit</h2>
<p>Mit den gemachten Erfahrungen lassen sich problemlos komplette Aktivitäten erstellen, ohne auch nur eine Zeile Code geschrieben zu haben. Natürlich kann man auf die Verwendung von <acronym title="eXtensible Markup Language">XML</acronym> Dateien komplett verzichten und alle <acronym title="Graphical User Interface">GUI</acronym> Elemente direkt im Quellcode erzeugen. Aber dazu später mehr&#8230;</p>
<p>Mit dem Debug oder Run Button in der Symbolleiste kann das Programm im Emulator gestartet werden.</p>]]></content:encoded>
			<wfw:commentRss>http://www.sevo.org/2010/03/hello-android-erste-aktivitat-mit-gui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android SDK einrichten</title>
		<link>http://www.sevo.org/2010/03/android-sdk-einrichten/</link>
		<comments>http://www.sevo.org/2010/03/android-sdk-einrichten/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 09:03:19 +0000</pubDate>
		<dc:creator>Vsevolod Kukol</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[ADT]]></category>
		<category><![CDATA[Android Development Tools]]></category>
		<category><![CDATA[Android SDK]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[MOTODEV]]></category>

		<guid isPermaLink="false">http://kukol.wordpress.com/?p=18</guid>
		<description><![CDATA[Wie bei allen Java Programmen, kann man auch Android Apps einfach in einem Editor schreiben und von den SDK Tools kompilieren lassen. Wesentlich einfacher ist es mit Eclipse. Google hat hier nicht gespart und man bekommt alles Notwendige direkt mitgeliefert. Android SDK Die Android SDK kann von http://developer.android.com/sdk/index.html heruntergeladen werden. In der ZIP (Windows) bzw. [...]]]></description>
			<content:encoded><![CDATA[<p>Wie bei allen Java Programmen, kann man auch Android Apps einfach in einem Editor schreiben und von den <acronym title="Software Development Kit">SDK</acronym> Tools kompilieren lassen. Wesentlich einfacher ist es mit Eclipse. Google hat hier nicht gespart und man bekommt alles Notwendige direkt mitgeliefert.</p>
<h2>Android <acronym title="Software Development Kit">SDK</acronym></h2>
<p>Die Android <acronym title="Software Development Kit">SDK</acronym> kann von <a href="http://developer.android.com/sdk/index.html">http://developer.android.com/sdk/index.html</a> heruntergeladen werden. In der ZIP (Windows) bzw. TGZ (Linux) Datei befindet sich der <strong><acronym title="Software Development Kit">SDK</acronym> Manager</strong> und einige Tools zum Debuggen.</p>
<p><span id="more-18"></span></p>
<p>Um die <acronym title="Software Development Kit">SDK</acronym> zu installieren muss man das Archiv entpacken und den <acronym title="Software Development Kit">SDK</acronym> Manager starten (Linux: tools/android, Windows: <acronym title="Software Development Kit">SDK</acronym> Setup.exe). Dieser bietet beim ersten Start eine Auswahl an Paketen an, die man einzeln mit <strong><em>&#8220;Accept&#8221;</em></strong>, oder <strong><em>&#8220;Reject&#8221;</em></strong> an- und abwählen kann. Vor der Installation sollte man daran denken, dass der <acronym title="Software Development Kit">SDK</acronym> Manager alles in sein aktuelles Verzeichnis installiert. Man wird also nicht nach einem Installationsordner gefragt.</p>
<p>Zur Auswahl stehen mehrere <acronym title="Software Development Kit">SDK</acronym> Versionen angefangen mit 1.1 (API2) bis 2.1 (API7) und neuer. Natürlich kann man alle <acronym title="Application Programming Interface">API</acronym> Versionen installieren und sich später darüber Gedanken machen, was man wirklich braucht. Ich mag es persönlich nicht, wenn unnötig viel installiert wird. Deshalb hier ein Paar Empfehlungen:</p>
<p><strong><acronym title="Application Programming Interface">API</acronym> 2.X:</strong> sollte gewählt werden, wenn man immer auf dem aktuellsten Stand sein will und weiss, dass man Teile der neueren <acronym title="Application Programming Interface">API</acronym> braucht.</p>
<p><strong><acronym title="Application Programming Interface">API</acronym> 1.6:</strong> ist nicht soo aktuell, aber sehr viele Geräte (sowohl ältere als auch neuere!) laufen noch mit Android 1.6, will man also eine Anwendung schreiben, die auf möglichst vielen Geräten läuft, ist das die beste Wahl.</p>
<p>Während der Installation kann die Fehlermeldung<span style="color:#ff0000;"><strong><em> </em></strong><em>&#8220;Failed to fetch <acronym title="Uniform Resource Locator">URL</acronym>&#8221;</em> </span>kommen. In diesem Fall sollte man unter <strong><em>&#8220;Settings&#8221;</em></strong> -&gt; <strong><em>&#8220;Misc&#8221;</em> die Checkbox<em> &#8220;Force https:// &#8230;&#8221;</em></strong> aktivieren. Danach klapps auch mit dem Download.</p>
<p><em>HINWEIS: den <acronym title="Software Development Kit">SDK</acronym> Ordner kann man hinlegen wohin man möchte. Unter Windows habe ich mir unter C: einen Android Ordner dafür angelegt. Alle Einstellungen werden sowieso im Benutzerordner gespeichert.</em></p>
<h2>Eclipse</h2>
<p>Die Eclipse IDE kann von <a href="http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a> heruntergeladen werden.</p>
<p>Die beste Wahl ist <strong>&#8220;Eclipse IDE for Java Developers&#8221;</strong>. Dieses Paket ist kompakt und beinhaltet alles Notwendige.</p>
<p>Nach der Installation kann man Eclipse das erste Mal starten und ein Workspace anlegen (wird automatisch angeboten).</p>
<h2>ADT Plugin für Eclipse</h2>
<p>Eclipse kann von sich aus nichts mit der Android <acronym title="Software Development Kit">SDK</acronym> anfangen. Hierfür benötigt man die <strong>&#8220;Android Development Tools&#8221;</strong>, die direkt in Eclipse installiert werden können.</p>
<ol>
<li><strong><em>&#8220;Install new Software&#8221;</em></strong> im<em> <strong>&#8220;Hilfe&#8221;</strong></em> Menü auswählen</li>
<li>rechts Oben den Button <strong><em>&#8220;Add&#8230;&#8221;</em></strong> anklicken</li>
<li>bei <strong><em>&#8220;Location&#8221;</em> </strong>folgende Adresse eintragen: <a href="https://dl-ssl.google.com/android/eclipse/">https://dl-ssl.google.com/android/eclipse/</a> und mit OK bestätigen<a href="https://dl-ssl.google.com/android/eclipse/"><br />
</a></li>
<li>Die Liste wird nun aktualisiert und man kann<em><strong> &#8220;Android Development Tools&#8221; </strong></em>auswählen</li>
<li>Mit<em> <strong>&#8220;Next&#8221;</strong></em> fortfahren und eventuelle Warnung über unsichere Quellen ignorieren</li>
<li>Ist die Installation fertig, fragt Eclipse ob es neu starten, oder die Konfiguration Übernehmen soll. Hier sollte man unbedingt den Neustart wählen</li>
<li>Als Letztes muss man dem ADT Plugin noch mitteilen, wo sich der <acronym title="Software Development Kit">SDK</acronym> Ordner befindet. Hierzu öffnet man das Menü<strong><em> &#8220;Windows&#8221;</em></strong> -&gt;<strong><em> &#8220;Preferences&#8221;</em></strong> und wählt den Punkt<strong><em> &#8220;Android&#8221;</em></strong> (auf der linken Seite) aus. Rechts oben trägt man nun den <acronym title="Software Development Kit">SDK</acronym> Ordner unter <em><strong>&#8220;<acronym title="Software Development Kit">SDK</acronym> Location&#8221;</strong></em> ein und bestätigt mit<em><strong> &#8220;Apply&#8221;</strong></em>.</li>
</ol>
<p>Ist alles korrekt verlaufen, so werden die vom <acronym title="Software Development Kit">SDK</acronym> Manager installierten <acronym title="Application Programming Interface">API</acronym> Versionen im Preferences Fenster angezeigt.</p>
<p>Weitere Informationen zum ADT Plugin findet man unter <a href="http://developer.android.com/sdk/eclipse-adt.html">http://developer.android.com/sdk/eclipse-adt.html</a>.</p>
<h2>Der erste Start mit ADT</h2>
<p>Ist alles korrekt installiert, findet man in Eclipse einige neue Android-spezifische Funktionen. Als erstes fällt einem das kleine Handy, bzw. bei neueren ADT Versionen das Android  Symbol in der Symbolleiste auf, über das man den <acronym title="Software Development Kit">SDK</acronym> und AVD Manager direkt starten kann. Hier sollte man als allererstes ein <em><strong>&#8220;Virtual Device&#8221;</strong></em> anlegen (Den <acronym title="Software Development Kit">SDK</acronym> Manager findet man auch im Menü <strong><em>&#8220;Window&#8221;</em></strong>).</p>
<p>Jetzt ist alle bereits für die ersten Gehversuche. Das virtuelle Device kann man testweise manuell starten. Es sieht nicht nur aus wie eine normales Android System, sondern das ist es auch. Man kann also alles machen, was Android hergibt (außer Telefonieren <img src='http://www.sevo.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ).</p>
<h2>MOTODEV, die Alternative</h2>
<p>Da ich selber ein Milestone von Motorola habe, wurde ich auf das Developer Studio von Motorola aufmerksam. Es heisst &#8220;MOTODEV Studio for Android&#8221; und man kann es unter <a href="http://developer.motorola.com/">http://developer.motorola.com/</a> nach einer Registrierung herunterladen.</p>
<p>Das Studio baut auf einer durch Motorola angepassten Eclipse Version auf. Also Eclipse mit Zusatzfeatures. Dabei sind alle normalen Funktionen von Eclipse erhalten geblieben. Man hat beispielsweise die Wahl zwischen der optimierten MOTODEV und der normalen Java Ansicht. Die zweite sieht aus und verhält sich genauso wie eine unmodifizierte Eclipse Version.</p>
<p>Folgende Vorteile hat MOTODEV im Vergleich zur manuellen Methode:</p>
<ul>
<li>mehr Wizards</li>
<li>(original) ADT Wizards verbessert</li>
<li><acronym title="Software Development Kit">SDK</acronym> und ADT müssen nicht separat installiert werden</li>
<li>Virtual Device direkt in die IDE eingebunden</li>
<li>optimierte Debug Ansicht</li>
<li>mehr Code Snippets</li>
<li>mehr Beispiele</li>
</ul>
<p>Nachteile:</p>
<ul>
<li>Registrierung notwendig. ACHTUNG: es wird eine Bestätigungsmail verschickt, also einen Fake Account nutzen, auf den man auch Zugriff hat!</li>
<li>ADT und <acronym title="Software Development Kit">SDK</acronym> Versionen hinken einige Wochen hinterher und kommen aus einem Repository von Motorola</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.sevo.org/2010/03/android-sdk-einrichten/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Android Programme verstehen</title>
		<link>http://www.sevo.org/2010/03/android-programme-verstehen/</link>
		<comments>http://www.sevo.org/2010/03/android-programme-verstehen/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 10:56:04 +0000</pubDate>
		<dc:creator>Vsevolod Kukol</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Activity]]></category>
		<category><![CDATA[Content Provider]]></category>
		<category><![CDATA[Intent]]></category>
		<category><![CDATA[Intent Filter]]></category>
		<category><![CDATA[Intent Receiver]]></category>

		<guid isPermaLink="false">http://kukol.wordpress.com/?p=5</guid>
		<description><![CDATA[Für den Anfang möchte ich etwas über die Grundlagen der Android Entwicklung schreiben. Diese unterscheiden sich nämlich sehr stark von der klassischen Struktur (eigenständiges, ausführbares Programm, das im idealfall unabhängig vom Betriebssystem ist). Bevor man mit der Programmierung loslegt, sollte man wissen, dass Android Programme nicht eigenständig sind. Sie sind lediglig Subklassen von bereits vorhandenen [...]]]></description>
			<content:encoded><![CDATA[<p>Für den Anfang möchte ich etwas über die Grundlagen der Android Entwicklung schreiben. Diese unterscheiden sich nämlich sehr stark von der klassischen Struktur (eigenständiges, ausführbares Programm, das im idealfall unabhängig vom Betriebssystem ist).</p>
<p>Bevor man mit der Programmierung loslegt, sollte man wissen, dass Android Programme nicht eigenständig sind. Sie sind lediglig Subklassen von bereits vorhandenen Android Klassen, die diese um gewünschte Funktionen erfweitern. Durch die Ableitung von bereits vorhandene Klassen und Einhaltung, bzw. Implementierung der Android <acronym title="Application Programming Interface">API</acronym>, können diese Klassen von Android zur Laufzeit geladen und instanziert werden. Nichts anderes geschieht beim Start eines &#8220;Apps&#8221; aus dem Android Launcher.</p>
<p>Basierend auf diesem Wissen stellt sich natürlich sofort die Frage, welche Basisklassen man ableiten muss um überhaupt ein &#8220;Hello World&#8221; mit einigen Menüs und Fenstern herbeizuzaubern. Hierzu muss man zuerst den Grundaufbau eines Android Apps versetehen.<span id="more-5"></span></p>
<h2>Activity</h2>
<p>Eine Activity ist der Grundstein einer interaktiven Anwendung. Diese beschreibt meistens ein einzelnes Fenster (eigentlich ein Screen, aber Fenster ist leichter zu verstehen), das bestimmte Steuerelemente anzeigt. Jede Activity muss von der Basisklasse <a href="http://developer.android.com/reference/android/app/Activity.html" target="_blank"><em>Activity</em></a> abgeleitet sein und zumindest die Methode <em>onCreate </em>überschreiben. Eine Activity kann man (wenn auch sehr abstrakt) mit einem Windows Formular vergleichen. Sie kann verschiedene Steuerelemente haben, ein Menü, usw.</p>
<p><em>Begriffserklärung: Activity ist eine Interaktion mit dem Benutzer, also eine Benutzer-&#8221;Aktivität&#8221;, daher der Name &#8220;Activity&#8221;.</em> <em>Dies war für mich persönlich etwas verwirrend, da man sofort an Programmaktivität und nicht an den Benutzer denkt, wenn man den Begriff liest.</em></p>
<h2>Intent</h2>
<p>Intents beschreiben Vorhaben, oder Absichten und sind Instanzen der Klasse <a href="http://developer.android.com/reference/android/content/Intent.html" target="_blank"><em>Intent</em></a>. Eine Aktivität wird immer mit einem Intent gestartet, das beschreibt was die Aktivität machen soll. Ein Intent hat immer eine Aktion und optional auch einen Datenverweis. Beispiel: &#8220;Starte&#8221;, oder &#8220;Offne Kontakt xy aus der Kontaktdatenbank&#8221;. Zusätzlich haben Intents eine Kategorie, die beischreibt in welchem Kontext die Aktion gestartet wurde (nicht mit der Context Klasse verwechseln).</p>
<p>Wird ein Programm, also eine Aktivität einfach aus dem Launcher gestartet, so wird der Aktion &#8220;MAIN&#8221; und der Kategorie &#8220;CATEGORY_LAUNCHER&#8221; zugewiesen. Die Aktivität kann diese Werte abfragen beispielsweise je nach Kontext Steuerelemente ein- oder ausblenden.</p>
<h2>Intent Filter</h2>
<p>Ein Intent Filter ist das Gegenstück vom Intent. Dieser beschreibt welche Intents eine Aktivität akzeptiert. Startet Android oder ein anderes Programm eine Aktivität mit einem Intent, so kann die zu startende Aktivität den Startversuch verweigern oder annehmen (in der Realität überprüft Android vor dem Start einer Aktivität. ob der Filter passt und startet diese ggf. erst garnicht).</p>
<p>Auf diese Weise lässt sich zum Beispiel auch kontrollieren, ob ein Programm (bzw. eine Aktivität) im Launcher von Android auftaucht. Wird ein Programm installiert, wertet Android die Filter der Aktivitäten des Programms aus. Ist die Aktion MAIN mit der Kategorie LAUNCHER vorhanden, so wird ein Icon im Launcher angelegt. Fehlt dieser Filter, taucht das Programm im Launcher garnicht erst auf.</p>
<h2>Intent Receiver (Service/Dienst)</h2>
<p>Möchte man ein Programm schreiben, das keine Interaktion mit dem Benutzer braucht und im Hintergrund läuft, so kann man einen Receiver verwenden. Hierzu leitet man die Basisklasse <a href="http://developer.android.com/reference/android/content/BroadcastReceiver.html" target="_blank"><em>BroadcastReceiver</em></a> ab und überschreibt die Methode <em>onReceive</em>. Genau wie eine Aktivität wird ein Receiver mit einem Intent gestartet. Man könnte beispielsweise ein Intent in bestimmten Zeitabständen erzeugen und den Receiver auf diesen reagieren lassen. Besonders sinnvoll ist das Ganze um Daten von bestimmten Ereignissen im Hintegrund zu sammeln oder in regelmässigen Abständen einen Server abzufragen.</p>
<h2>Content Provider</h2>
<p>Die meisten Programme müssen irgendwo ihre Daten ablegen. Dies kann mit Hilfe von Dateien oder Datenbanken geschehen. Android hat für diesen Zweck SQLite mit an Bord. Man kann Daten entweder direkt in einer <a href="http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html" target="_blank">SQLite Datenbank</a> speichern, oder den <a href="http://developer.android.com/guide/topics/providers/content-providers.html" target="_blank">Content Provider</a> verwenden. Der Content Provider ist dabei ein gemeinsamer Speicher (Datenbank), auf den alle Android Programme zugreifen können. So ist auch der Zugriff auf die Kontakte, oder Termine über den Content Provider möglich. Möchte man den Zugriff auf das eigene Programm einschränken, so kann man eine eigene Datenbank anlegen.</p>
<p>Die SQLite Datenbanken vereinfachen die Datenverwaltung enorm. Allerdings kann es auch sinnvoll sein, direkt auf das Dateisystem zugreifen zu können. Es ist natürlich auch möglich strukturierte <acronym title="eXtensible Markup Language">XML</acronym> Dateien zu erstellen und diese auf der Speicherkarte zu speichern, oder man generiert Benärdateien. Hier sind keine Grenzen gesetzt.</p>]]></content:encoded>
			<wfw:commentRss>http://www.sevo.org/2010/03/android-programme-verstehen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

