<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-291891282254894629</id><updated>2012-02-16T13:43:42.050+01:00</updated><category term='Swing'/><title type='text'>blog.javaseiten</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://javaseiten.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://javaseiten.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Harald Roeder</name><uri>http://www.blogger.com/profile/16933081947840846509</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-291891282254894629.post-6203588553195710813</id><published>2008-07-07T15:52:00.010+02:00</published><updated>2008-07-07T16:14:41.221+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Swing'/><title type='text'>Swing: Nimbus Look And Feel</title><content type='html'>&lt;p&gt;Mit dem Java-Update-Release &lt;a href="http://java.sun.com/javase/downloads/ea/6u10/6u10beta.jsp"&gt;Java SE 6 update 10&lt;/a&gt; kann ein neues Look And Feel genutzt werden. Das &lt;b&gt;Nimbus&lt;/b&gt; Look And Feel basiert auf Synth Look And Feel und kann mit Hilfe der Anweisung&lt;/p&gt;&lt;pre&gt;UIManager.setLookAndFeel("
  com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel
");&lt;/pre&gt;&lt;p&gt;genutzt werden. Die folgenden drei Screenshots zeigen der Reihe nach die Swing Look And Feels: Metal, Nimbus, Windows.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Metal (Ocean) Look And Feel&lt;/b&gt;&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eDZdiJ5w5D8/SHIgnoMHDSI/AAAAAAAAABo/3aCqIc8bB3w/s1600-h/swinglafexample1.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_eDZdiJ5w5D8/SHIgnoMHDSI/AAAAAAAAABo/3aCqIc8bB3w/s320/swinglafexample1.jpg" alt="" id="BLOGGER_PHOTO_ID_5220270783251025186" border="0" /&gt;&lt;/a&gt;
&lt;p&gt;&lt;b&gt;Nimbus Look And Feel&lt;/b&gt;&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eDZdiJ5w5D8/SHIg5e5XujI/AAAAAAAAABw/-UiZaQ5SFFc/s1600-h/swinglafexample2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eDZdiJ5w5D8/SHIg5e5XujI/AAAAAAAAABw/-UiZaQ5SFFc/s320/swinglafexample2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5220271089994152498" /&gt;&lt;/a&gt;
&lt;p&gt;&lt;b&gt;Windows Look And Feel&lt;/b&gt;&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eDZdiJ5w5D8/SHIhFZ30lZI/AAAAAAAAAB4/kTmVFqLF26M/s1600-h/swinglafexample3.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eDZdiJ5w5D8/SHIhFZ30lZI/AAAAAAAAAB4/kTmVFqLF26M/s320/swinglafexample3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5220271294803907986" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/291891282254894629-6203588553195710813?l=javaseiten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaseiten.blogspot.com/feeds/6203588553195710813/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=291891282254894629&amp;postID=6203588553195710813' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/6203588553195710813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/6203588553195710813'/><link rel='alternate' type='text/html' href='http://javaseiten.blogspot.com/2008/07/mit-dem-java-update-release-java-se-6.html' title='Swing: Nimbus Look And Feel'/><author><name>Harald Roeder</name><uri>http://www.blogger.com/profile/16933081947840846509</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_eDZdiJ5w5D8/SHIgnoMHDSI/AAAAAAAAABo/3aCqIc8bB3w/s72-c/swinglafexample1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-291891282254894629.post-3775979664182793490</id><published>2008-02-14T11:54:00.004+01:00</published><updated>2008-02-14T12:03:51.758+01:00</updated><title type='text'>Android-SDK: Neuer Milestone (SDK-M5-RC14)</title><content type='html'>&lt;p&gt;Auf den SDK-Milestone M3-RC37a vom 14.12.2007 folgt nun SDK-M5-RC14. Das neue Android-Upgrade beinhaltet Änderungen der Developer-Tools und der Android-API (siehe &lt;a href="http://code.google.com/android/RELEASENOTES.html"&gt;RELEASENOTES&lt;/a&gt; und &lt;a href="http://code.google.com/android/migrating/m3-to-m5/m5-api-changes.html"&gt;API-Änderungen&lt;/a&gt;). Es gibt u.a. einige Neuerungen für Manifest-Dateien (&lt;code&gt;AndroidManifest.xml&lt;/code&gt;). Z.B.&lt;/p&gt;&lt;pre&gt;&lt;b&gt;vorher (M3-RC37a):&lt;/b&gt;

&amp;lt;intent-filter&amp;gt;
  &amp;lt;action &lt;b&gt;android:value&lt;/b&gt;="android.intent.action.INSERT"/&amp;gt;
  &amp;lt;category &lt;b&gt;android:value&lt;/b&gt;=
      "android.intent.category.DEFAULT"/&amp;gt;
  &amp;lt;&lt;b&gt;type android:value&lt;/b&gt;=
      "vnd.android.cursor.dir/vnd.google.note"/&amp;gt;
&amp;lt;/intent-filter&amp;gt;

&lt;b&gt;nachher (M5-RC14):&lt;/b&gt;

&amp;lt;intent-filter&amp;gt;
  &amp;lt;action &lt;b&gt;android:name&lt;/b&gt;="android.intent.action.INSERT"/&amp;gt;
  &amp;lt;category &lt;b&gt;android:name&lt;/b&gt;=
      "android.intent.category.DEFAULT"/&amp;gt;
  &amp;lt;&lt;b&gt;data android:mimeType&lt;/b&gt;=
      "vnd.android.cursor.dir/vnd.google.note"/&amp;gt;
&amp;lt;/intent-filter&amp;gt;&lt;/pre&gt;&lt;p&gt;Auch wird innerhalb von XML-Layoutdateien das Attribut &lt;code&gt;id&lt;/code&gt; durch &lt;code&gt;android:id&lt;/code&gt; ersetzt.&lt;/p&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;LinearLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  &lt;b&gt;android:id&lt;/b&gt;=id="@+id/layout"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"&amp;gt;

  &amp;lt;Button &lt;b&gt;android:id&lt;/b&gt;="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button1"/&amp;gt;
  
  ...
  
&amp;lt;/LinearLayout&amp;gt;&lt;/pre&gt;&lt;p&gt;Die SDK-Upgrade-Prozedur wird auf der Seite &lt;a href="http://code.google.com/android/intro/upgrading.html"&gt;Upgrading the SDK&lt;/a&gt; beschrieben.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/291891282254894629-3775979664182793490?l=javaseiten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaseiten.blogspot.com/feeds/3775979664182793490/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=291891282254894629&amp;postID=3775979664182793490' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/3775979664182793490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/3775979664182793490'/><link rel='alternate' type='text/html' href='http://javaseiten.blogspot.com/2008/02/android-sdk-neuer-milestone-sdk-m5-rc14.html' title='Android-SDK: Neuer Milestone (SDK-M5-RC14)'/><author><name>Harald Roeder</name><uri>http://www.blogger.com/profile/16933081947840846509</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-291891282254894629.post-468847069599996066</id><published>2008-02-10T10:28:00.000+01:00</published><updated>2008-02-10T11:31:51.582+01:00</updated><title type='text'>the Da Vinci Machine</title><content type='html'>&lt;p&gt;Die &lt;a href="http://openjdk.java.net/projects/mlvm/"&gt;Da Vinci Machine&lt;/a&gt; ist eine neue virtuelle Maschine!? Schaut man sich im Netz ein wenig um, fällt sofort der Untertitel "a multilingual renaissance for the Java Virtual Machine architecture" auf.&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eDZdiJ5w5D8/R67EB8DFxLI/AAAAAAAAABg/AXpwyx6vYUk/s1600-h/Leonardo_da_Vinci_helicopter_2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_eDZdiJ5w5D8/R67EB8DFxLI/AAAAAAAAABg/AXpwyx6vYUk/s320/Leonardo_da_Vinci_helicopter_2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5165281360218539186" /&gt;&lt;/a&gt;&lt;p&gt;(Quelle: &lt;a href="http://de.wikipedia.org/wiki/Bild:Leonardo_da_Vinci_helicopter.jpg"&gt;Wikipedia-Bild&lt;/a&gt;, public domain)&lt;/p&gt;&lt;p&gt;Sun Microsystems arbeitet an einer Weiterentwicklung der bekannten virtuellen Java-Maschine (JVM). Die JVM ist speziell auf die Programmiersprache Java zugeschnitten. Im Gegensatz dazu soll die Da Vinci VM sowohl Java als auch andere Sprachen besser unterstützen. Dabei sollen vor allem &lt;b&gt;dynamische Sprachen&lt;/b&gt; mit der &lt;b&gt;gleichen Effizienz wie die Programmiersprache Java selbst&lt;/b&gt; abgearbeitet werden können (zum derzeitigen Zeitpunkt gibt es eine Vielzahl von Programmiersprachen für die virtuelle Java-Maschine: &lt;a href="http://robert-tolksdorf.de/vmlanguages.html"&gt;http://robert-tolksdorf.de/vmlanguages.html&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;Programmiersprachen wie z.B. Ruby, Perl oder Python werden als Skriptsprachen oder auch dynamische Sprachen bezeichnet. Stichworte sind hier "Static Typing" und "Dynamic Typing". Bei dynamischen Programmiersprachen erfolgt z.B. das Type Checking während der Laufzeit (Late Binding). Die derzeitige virtuelle Java-Maschine besitzt keine built-in-Unterstützung für "Dynamic Typing".&lt;/p&gt;&lt;p&gt;Fazit der JVM-Weiterentwicklung: Die Da Vinci Machine als universelle und effiziente VM, sowohl für Java als auch für zusätzliche Programmiersprachen.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/291891282254894629-468847069599996066?l=javaseiten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaseiten.blogspot.com/feeds/468847069599996066/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=291891282254894629&amp;postID=468847069599996066' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/468847069599996066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/468847069599996066'/><link rel='alternate' type='text/html' href='http://javaseiten.blogspot.com/2008/02/da-vinci-machine.html' title='the Da Vinci Machine'/><author><name>Harald Roeder</name><uri>http://www.blogger.com/profile/16933081947840846509</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_eDZdiJ5w5D8/R67EB8DFxLI/AAAAAAAAABg/AXpwyx6vYUk/s72-c/Leonardo_da_Vinci_helicopter_2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-291891282254894629.post-2286095763401347024</id><published>2008-02-08T09:18:00.000+01:00</published><updated>2008-02-08T09:23:15.090+01:00</updated><title type='text'>Applet: DroidDraw</title><content type='html'>&lt;p&gt;Unter der Adresse &lt;a href="http://www.droiddraw.org"&gt;droiddraw.org&lt;/a&gt; wird ein Applet zur Verfügung gestellt, mit dem online grafische Benutzeroberflächen (GUIs) für einen &lt;a href="http://code.google.com/android/"&gt;Android&lt;/a&gt;-Screen erstellt werden können.&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eDZdiJ5w5D8/R6wQsYiyuTI/AAAAAAAAABY/WtXbm4AICRA/s1600-h/appletandroiddraw.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_eDZdiJ5w5D8/R6wQsYiyuTI/AAAAAAAAABY/WtXbm4AICRA/s320/appletandroiddraw.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5164521227375786290" /&gt;&lt;/a&gt;&lt;p&gt;DroidDraw ist in drei Bereich unterteilt. Auf der linken Seite ist ein Display des Android-Emulators dargestellt in dem per Drag and Drop einzelne grafische Elemente (Widgets) platziert werden können. Über der Display-Box kann das Grundlayout der Anzeige, z.B. LinearLayout, ausgewählt werden. Auf der rechten Seite im unteren Bereich kann anschließend der Button Generate betätigt werden, um das Layout im XML-Format zu erhalten. Die folgende erzeugte Beispielausgabe enthält als Grundlayout LinearLayout. Darin ist ein Button und ein ScrollView eingebettet. Innerhalb des XML-Elements ScrollView könnte z.B. ein TextView eingebettet werden. Bei entsprechend vielem Anzeigetext kann der Text dann gescrollt werden.&lt;/p&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;LinearLayout
id="@+id/widget27"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffffff"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
&amp;gt;
&amp;lt;Button
id="@+id/widget30"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
&amp;gt;
&amp;lt;/Button&amp;gt;
&amp;lt;ScrollView
id="@+id/widget29"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ffffffff"
xmlns:android="http://schemas.android.com/apk/res/android"
&amp;gt;
&amp;lt;/ScrollView&amp;gt;
&amp;lt;/LinearLayout&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/291891282254894629-2286095763401347024?l=javaseiten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaseiten.blogspot.com/feeds/2286095763401347024/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=291891282254894629&amp;postID=2286095763401347024' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/2286095763401347024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/2286095763401347024'/><link rel='alternate' type='text/html' href='http://javaseiten.blogspot.com/2008/02/applet-droiddraw.html' title='Applet: DroidDraw'/><author><name>Harald Roeder</name><uri>http://www.blogger.com/profile/16933081947840846509</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_eDZdiJ5w5D8/R6wQsYiyuTI/AAAAAAAAABY/WtXbm4AICRA/s72-c/appletandroiddraw.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-291891282254894629.post-4448862213686928885</id><published>2008-01-31T10:03:00.000+01:00</published><updated>2008-01-31T10:11:08.761+01:00</updated><title type='text'>Android-Gemeinden</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eDZdiJ5w5D8/R6GPGYiyuSI/AAAAAAAAABI/-kLhIZm56Ac/s1600-h/android-wallpaper6_thumbnail.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_eDZdiJ5w5D8/R6GPGYiyuSI/AAAAAAAAABI/-kLhIZm56Ac/s320/android-wallpaper6_thumbnail.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5161563987773667618" /&gt;&lt;/a&gt;&lt;p&gt;(Quelle: &lt;a href="http://code.google.com/android/goodies/index.html"&gt;Android Goodies&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;Heute möchte ich drei Verweise auf Foren posten, die sich mit der Plattform Android beschäftigen. Die Suchmaschinen-Experten kennen diese natürlich ;-) bereits. Zunächst stehen die englischsprachigen "Google-eigenen" Groups "Android Beginners" und "Android Developers" zur Verfügung:&lt;/p&gt;&lt;p&gt;&lt;a href="http://groups.google.com/group/android-beginners/topics?gvc=2"&gt;
http://groups.google.com/group/android-beginners/topics?gvc=2&lt;/a&gt;&lt;br&gt;&lt;a href="http://groups.google.com/group/android-developers/topics?gvc=2"&gt;http://groups.google.com/group/android-developers/topics?gvc=2&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Ein weiteres Android-Forum ist unter&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.anddev.org"&gt;http://www.anddev.org&lt;/a&gt;&lt;/p&gt;&lt;p&gt;erreichbar. Es enthält interessante Unterforen zu Tutorials. Auch zur Nutzung von 3D-Grafiken auf der Android-Plattform mit OpenGL ES steht ein Unterabschnitt bereit.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/291891282254894629-4448862213686928885?l=javaseiten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaseiten.blogspot.com/feeds/4448862213686928885/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=291891282254894629&amp;postID=4448862213686928885' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/4448862213686928885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/4448862213686928885'/><link rel='alternate' type='text/html' href='http://javaseiten.blogspot.com/2008/01/android-gemeinden.html' title='Android-Gemeinden'/><author><name>Harald Roeder</name><uri>http://www.blogger.com/profile/16933081947840846509</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_eDZdiJ5w5D8/R6GPGYiyuSI/AAAAAAAAABI/-kLhIZm56Ac/s72-c/android-wallpaper6_thumbnail.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-291891282254894629.post-8005093742899888377</id><published>2008-01-23T12:55:00.000+01:00</published><updated>2008-01-23T16:56:26.301+01:00</updated><title type='text'>Android: DEX Intern</title><content type='html'>&lt;p&gt;Die Java/Linux-Plattform Android enthält die Dalvik Virtual Machine. Die virtuelle Maschine verarbeitet Dateien im Dex File Format. Diese DEX-Dateien können mit dem vorgefertigten Tool dexdump näher untersucht werden. Das Tool kann mit Hilfe der Shell der Android Debug Bridge (adb) aufgerufen werden. Ein Beispieldump einer DEX-Datei könnte dann wie folgt aussehen:&lt;/p&gt;&lt;pre&gt;DEX version '009'

DEX file header:

magic               : 'dex
009'
checksum            : 8d233641
signature           : 3c8d...8111
file_size           : 2364
header_size         : 92
link_size           : 0
link_off            : 0 (0x000000)
string_ids_size     : 36
string_ids_off      : 92 (0x00005c)
string_objects_size : 1
class_ids_size      : 9
class_ids_off       : 380 (0x00017c)
field_ids_size      : 3
field_ids_off       : 416 (0x0001a0)
method_ids_size     : 13
method_ids_off      : 452 (0x0001c4)
class_defs_size     : 6
class_defs_off      : 608 (0x000260)



Class #0 header:
class_idx           : 0
access_flags        : 131073 (0x20001)
superclass_idx      : 7
interfaces_off      : 0 (0x000000)
sfields_off         : 0 (0x000000)
ifields_off         : 0 (0x000000)
dmeths_off          : 800 (0x000320)
vmeths_off          : 820 (0x000334)

Class #0            -
  Class name        : 'test/android/hello/HelloAndroid'
  Access flags      : 0x20001 (PUBLIC OPTIMIZED)
  Superclass        : 'android/app/Activity'
  Interfaces        -
  Static fields     -
  Instance fields   -
  
  
  
  Direct methods    -
    #0              : (in test/android/hello/HelloAndroid)
      name          : '&amp;lt;init&amp;gt;'
      type          : '()V'
      access        : 0x0001 (PUBLIC)
      code          -
      registers     : 3
      ins           : 1
      outs          : 1
      source_idx    : 7
      insns         : 6 16-bit code units
      
      &lt;span style="color:#029902;"&gt;0005fc:&lt;/span&gt;                 |[0005fc] test/android/hello/
                               HelloAndroid.&amp;lt;init&amp;gt;:
                               ()V
      &lt;span style="color:#029902;"&gt;000600:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;0720&lt;/span&gt;            |0000: &lt;span style="color:#7744dd"&gt;move-object v0, v2&lt;/span&gt;
      &lt;span style="color:#029902;"&gt;000602:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;0701&lt;/span&gt;            |0001: &lt;span style="color:#7744dd"&gt;move-object v1, v0&lt;/span&gt;
      &lt;span style="color:#029902;"&gt;000604:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;6f01 0000 0100&lt;/span&gt;  |0002: &lt;span style="color:#7744dd"&gt;invoke-direct {v1}&lt;/span&gt;, 
                               &lt;span style="color:#7744dd"&gt;android/app/Activity.&lt;/span&gt;
                               &lt;span style="color:#7744dd"&gt;&amp;lt;init&amp;gt;:()V&lt;/span&gt; 
                               // method@0000
      &lt;span style="color:#029902;"&gt;00060a:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;0e00&lt;/span&gt;            |0005: &lt;span style="color:#7744dd"&gt;return-void&lt;/span&gt;
      
      exceptions    : (none)
      positions     : 1
        0x0000 line=7
      locals        : 1
        0x0001 - 0x0006 reg=0 this Ltest/android/hello/
                              HelloAndroid;



  Virtual methods   -
    #0              : (in test/android/hello/HelloAndroid)
      name          : 'onCreate'
      type          : '(Landroid/os/Bundle;)V'
      access        : 0x0001 (PUBLIC)
      code          -
      registers     : 9
      ins           : 2
      outs          : 2
      source_idx    : 7
      insns         : 29 16-bit code units
      
      &lt;span style="color:#029902;"&gt;00060c:&lt;/span&gt;                 |[00060c] test/android/
                               hello/HelloAndroid.
                               onCreate:(Landroid/os/
                               Bundle;)V
      &lt;span style="color:#029902;"&gt;000610:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;0770&lt;/span&gt;            |0000: &lt;span style="color:#7744dd"&gt;move-object v0, v7&lt;/span&gt;
      &lt;span style="color:#029902;"&gt;000612:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;0781&lt;/span&gt;            |0001: &lt;span style="color:#7744dd"&gt;move-object v1, v8&lt;/span&gt;
      &lt;span style="color:#029902;"&gt;000614:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;0703&lt;/span&gt;            |0002: &lt;span style="color:#7744dd"&gt;move-object v3, v0&lt;/span&gt;
      &lt;span style="color:#029902;"&gt;000616:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;0714&lt;/span&gt;            |0003: &lt;span style="color:#7744dd"&gt;move-object v4, v1&lt;/span&gt;
      &lt;span style="color:#029902;"&gt;000618:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;fa02 4c00 4300&lt;/span&gt;  |0004: 
                               &lt;span style="color:#7744dd"&gt;+invoke-super-quick {v3, v4}&lt;/span&gt;,
                               &lt;span style="color:#7744dd"&gt;[004c]&lt;/span&gt; // vtable #004c
      &lt;span style="color:#029902;"&gt;00061e:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;2103 0300&lt;/span&gt;       |0007: &lt;span style="color:#7744dd"&gt;new-instance v3&lt;/span&gt;, 
                               &lt;span style="color:#7744dd"&gt;android/widget/TextView&lt;/span&gt; 
                               // class@0003
      &lt;span style="color:#029902;"&gt;000622:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;0736&lt;/span&gt;            |0009: &lt;span style="color:#7744dd"&gt;move-object v6, v3&lt;/span&gt;
      &lt;span style="color:#029902;"&gt;000624:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;0763&lt;/span&gt;            |000a: &lt;span style="color:#7744dd"&gt;move-object v3, v6&lt;/span&gt;
      &lt;span style="color:#029902;"&gt;000626:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;0764&lt;/span&gt;            |000b: &lt;span style="color:#7744dd"&gt;move-object v4, v6&lt;/span&gt;
      &lt;span style="color:#029902;"&gt;000628:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;0705&lt;/span&gt;            |000c: &lt;span style="color:#7744dd"&gt;move-object v5, v0&lt;/span&gt;
      &lt;span style="color:#029902;"&gt;00062a:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;6f02 0200 5400&lt;/span&gt;  |000d: &lt;span style="color:#7744dd"&gt;invoke-direct {v4, v5}&lt;/span&gt;, 
                               &lt;span style="color:#7744dd"&gt;android/widget/TextView.&lt;/span&gt;
                               &lt;span style="color:#7744dd"&gt;&amp;lt;init&amp;gt;:(Landroid/&lt;/span&gt;
                               &lt;span style="color:#7744dd"&gt;content/Context;)V&lt;/span&gt; 
                               // method@0002
      &lt;span style="color:#029902;"&gt;000630:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;0732&lt;/span&gt;            |0010: &lt;span style="color:#7744dd"&gt;move-object v2, v3&lt;/span&gt;
      &lt;span style="color:#029902;"&gt;000632:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;0723&lt;/span&gt;            |0011: &lt;span style="color:#7744dd"&gt;move-object v3, v2&lt;/span&gt;
      &lt;span style="color:#029902;"&gt;000634:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;1804 0000&lt;/span&gt;       |0012: &lt;span style="color:#7744dd"&gt;const-string v4&lt;/span&gt;, 
                               &lt;span style="color:#7744dd"&gt;"Hello Android!"&lt;/span&gt; // string@0000
      &lt;span style="color:#029902;"&gt;000638:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;f802 e900 4300&lt;/span&gt;  |0014: 
                               &lt;span style="color:#7744dd"&gt;+invoke-virtual-quick {v3,v4}&lt;/span&gt;,
                               &lt;span style="color:#7744dd"&gt;[00e9]&lt;/span&gt; // vtable #00e9
      &lt;span style="color:#029902;"&gt;00063e:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;0703&lt;/span&gt;            |0017: &lt;span style="color:#7744dd"&gt;move-object v3, v0&lt;/span&gt;
      &lt;span style="color:#029902;"&gt;000640:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;0724&lt;/span&gt;            |0018: &lt;span style="color:#7744dd"&gt;move-object v4, v2&lt;/span&gt;
      &lt;span style="color:#029902;"&gt;000642:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;f802 6200 4300&lt;/span&gt;  |0019: 
                               &lt;span style="color:#7744dd"&gt;+invoke-virtual-quick {v3,v4}&lt;/span&gt;,
                               &lt;span style="color:#7744dd"&gt;[0062]&lt;/span&gt; // vtable #0062
      &lt;span style="color:#029902;"&gt;000648:&lt;/span&gt; &lt;span style="color:#bb3333; font-weight:bold;"&gt;0e00&lt;/span&gt;            |001c: &lt;span style="color:#7744dd"&gt;return-void&lt;/span&gt;
      
      exceptions    : (none)
      positions     : 5
        0x0000 line=11
        0x0007 line=12
        0x0011 line=13
        0x0017 line=14
        0x001c line=15
      locals        : 3
        0x0001 - 0x001d reg=0 this Ltest/android/hello/
                              HelloAndroid;
        0x0002 - 0x001d reg=1 icicle Landroid/os/Bundle;
        0x0011 - 0x001d reg=2 tv Landroid/widget/TextView;



Class #1 header:
...&lt;/pre&gt;&lt;p&gt;Der Dalvik-Bytecode bezüglich des Code-Arrays ist im Dexdump rot markiert. Es kann festgestellt werden, dass die folgenden Abbildungen bzw. Umkehrabbildungen (Dalvik-Bytecode --&amp;gt; Dalvik-Assemblersprache) gelten:&lt;/p&gt;&lt;pre&gt;&lt;span style="color:#bb3333; font-weight:bold;"&gt;0720&lt;/span&gt;             --&amp;gt;   &lt;span style="color:#7744dd"&gt;move-object v0, v2&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;0701&lt;/span&gt;             --&amp;gt;   &lt;span style="color:#7744dd"&gt;move-object v1, v0&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;6f01 0000 0100&lt;/span&gt;   --&amp;gt;   &lt;span style="color:#7744dd"&gt;invoke-direct {v1},&lt;/span&gt; 
                       &lt;span style="color:#7744dd"&gt;android/app/Activity.&amp;lt;init&amp;gt;:()V&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;0e00&lt;/span&gt;             --&amp;gt;   &lt;span style="color:#7744dd"&gt;return-void&lt;/span&gt;

&lt;span style="color:#bb3333; font-weight:bold;"&gt;0770&lt;/span&gt;             --&amp;gt;   &lt;span style="color:#7744dd"&gt;move-object v0, v7&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;0781&lt;/span&gt;             --&amp;gt;   &lt;span style="color:#7744dd"&gt;move-object v1, v8&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;0703&lt;/span&gt;             --&amp;gt;   &lt;span style="color:#7744dd"&gt;move-object v3, v0&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;0714&lt;/span&gt;             --&amp;gt;   &lt;span style="color:#7744dd"&gt;move-object v4, v1&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;fa02 4c00 4300&lt;/span&gt;   --&amp;gt;   &lt;span style="color:#7744dd"&gt;+invoke-super-quick {v3, v4},&lt;/span&gt; 
                       &lt;span style="color:#7744dd"&gt;[004c]&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;2103 0300&lt;/span&gt;        --&amp;gt;   &lt;span style="color:#7744dd"&gt;new-instance v3,&lt;/span&gt; 
                       &lt;span style="color:#7744dd"&gt;android/widget/TextView&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;0736&lt;/span&gt;             --&amp;gt;   &lt;span style="color:#7744dd"&gt;move-object v6, v3&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;0763&lt;/span&gt;             --&amp;gt;   &lt;span style="color:#7744dd"&gt;move-object v3, v6&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;0764&lt;/span&gt;             --&amp;gt;   &lt;span style="color:#7744dd"&gt;move-object v4, v6&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;0705&lt;/span&gt;             --&amp;gt;   &lt;span style="color:#7744dd"&gt;move-object v5, v0&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;6f02 0200 5400&lt;/span&gt;   --&amp;gt;   &lt;span style="color:#7744dd"&gt;invoke-direct {v4, v5},&lt;/span&gt; 
                       &lt;span style="color:#7744dd"&gt;android/widget/TextView.&amp;lt;init&amp;gt;:&lt;/span&gt;
                       &lt;span style="color:#7744dd"&gt;(Landroid/content/Context;)V&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;0732&lt;/span&gt;             --&amp;gt;   &lt;span style="color:#7744dd"&gt;move-object v2, v3&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;0723&lt;/span&gt;             --&amp;gt;   &lt;span style="color:#7744dd"&gt;move-object v3, v2&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;1804 0000&lt;/span&gt;        --&amp;gt;   &lt;span style="color:#7744dd"&gt;const-string v4, "Hello Android!"&lt;/span&gt; 
&lt;span style="color:#bb3333; font-weight:bold;"&gt;f802 e900 4300&lt;/span&gt;   --&amp;gt;   &lt;span style="color:#7744dd"&gt;+invoke-virtual-quick {v3,v4},&lt;/span&gt;
                       &lt;span style="color:#7744dd"&gt;[00e9]&lt;/span&gt;]
&lt;span style="color:#bb3333; font-weight:bold;"&gt;0703&lt;/span&gt;             --&amp;gt;   &lt;span style="color:#7744dd"&gt;move-object v3, v0&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;0724&lt;/span&gt;             --&amp;gt;   &lt;span style="color:#7744dd"&gt;move-object v4, v2&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;f802 6200 4300&lt;/span&gt;   --&amp;gt;   &lt;span style="color:#7744dd"&gt;+invoke-virtual-quick {v3,v4},&lt;/span&gt;
                       &lt;span style="color:#7744dd"&gt;[0062]&lt;/span&gt;
&lt;span style="color:#bb3333; font-weight:bold;"&gt;0e00&lt;/span&gt;             --&amp;gt;   &lt;span style="color:#7744dd"&gt;return-void&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;Durch den Dexdump wird auch deutlich, dass die wichtige Methode onCreate als "virtuelle Methode" eingestuft ist. So, genug von Androiden für heute. ;-)&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eDZdiJ5w5D8/R5csE4iyuRI/AAAAAAAAABA/Bl-HABxGlMw/s1600-h/android-wallpaper4_thumbnail.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_eDZdiJ5w5D8/R5csE4iyuRI/AAAAAAAAABA/Bl-HABxGlMw/s320/android-wallpaper4_thumbnail.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5158640360585607442" /&gt;&lt;/a&gt;&lt;p&gt;(Quelle: &lt;a href="http://code.google.com/android/goodies/index.html"&gt;Android Goodies&lt;/a&gt;)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/291891282254894629-8005093742899888377?l=javaseiten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaseiten.blogspot.com/feeds/8005093742899888377/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=291891282254894629&amp;postID=8005093742899888377' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/8005093742899888377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/8005093742899888377'/><link rel='alternate' type='text/html' href='http://javaseiten.blogspot.com/2008/01/android-dex-intern.html' title='Android: DEX Intern'/><author><name>Harald Roeder</name><uri>http://www.blogger.com/profile/16933081947840846509</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_eDZdiJ5w5D8/R5csE4iyuRI/AAAAAAAAABA/Bl-HABxGlMw/s72-c/android-wallpaper4_thumbnail.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-291891282254894629.post-3705014561973408903</id><published>2008-01-22T15:06:00.000+01:00</published><updated>2008-01-22T15:17:41.363+01:00</updated><title type='text'>Android-GUI mit XML-Layoutdatei</title><content type='html'>&lt;p&gt;Android ermöglicht es, grafische Benutzeroberflächen (GUIs) mit Hilfe von XML-Dateien zu designen. Diese Vorgehensweise ähnelt damit dem Design von Webseiten, z.B. mit HTML. Eine XML-Datei main.xml zur Layoutgestaltung befindet sich dabei im Unterverzeichnis res/layout/. Das Display des Emulators soll eine einfache Textausgabe, ein Eingabefeld und zwei Buttons anzeigen.&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eDZdiJ5w5D8/R5X4qPDunWI/AAAAAAAAAA4/5xOWcQrRBUA/s1600-h/androidrelativelayoutexample.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_eDZdiJ5w5D8/R5X4qPDunWI/AAAAAAAAAA4/5xOWcQrRBUA/s320/androidrelativelayoutexample.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5158302352703135074" /&gt;&lt;/a&gt;&lt;p&gt;Die für das Layout zuständige Datei main.xml könnte dann wie folgt aussehen:&lt;/p&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;

&amp;lt;RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:background="#ffc5d1d4" 
android:padding="10px"&amp;gt;

  &amp;lt;TextView id="@+id/label" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:text="Your Input:"/&amp;gt;
  &amp;lt;EditText id="@+id/input" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:layout_below="@id/label"/&amp;gt;
  &amp;lt;Button   id="@+id/ok" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:layout_below="@id/input"
            android:layout_alignParentRight="true"
            android:layout_marginLeft="10px"
            android:text="OK"/&amp;gt;
  &amp;lt;Button   id="@+id/cancel"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:layout_toLeft="@id/ok"
            android:layout_alignTop="@id/ok"
            android:text="Cancel" /&amp;gt;
&amp;lt;/RelativeLayout&amp;gt;&lt;/pre&gt;&lt;p&gt;Jetzt fehlt nur noch das kurze Java-Listing, das die Layout-Ressource lädt bzw. verarbeitet. Innerhalb der Methode onCreate ist hierzu der Aufruf von setContentView nötig. Die Applikation ist damit vollständig und kann aus Eclipse heraus gestartet werden.&lt;/p&gt;&lt;pre&gt;/* RelativeLayoutExample.java */

package examples.android.relativelayoutexample;

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

public class RelativeLayoutExample extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    
    setContentView(R.layout.main);
  } 
}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/291891282254894629-3705014561973408903?l=javaseiten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaseiten.blogspot.com/feeds/3705014561973408903/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=291891282254894629&amp;postID=3705014561973408903' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/3705014561973408903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/3705014561973408903'/><link rel='alternate' type='text/html' href='http://javaseiten.blogspot.com/2008/01/android-gui-mit-xml-layoutdatei.html' title='Android-GUI mit XML-Layoutdatei'/><author><name>Harald Roeder</name><uri>http://www.blogger.com/profile/16933081947840846509</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_eDZdiJ5w5D8/R5X4qPDunWI/AAAAAAAAAA4/5xOWcQrRBUA/s72-c/androidrelativelayoutexample.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-291891282254894629.post-929114540818812625</id><published>2008-01-21T11:52:00.000+01:00</published><updated>2008-01-21T11:58:50.772+01:00</updated><title type='text'>Android: Widget ListView</title><content type='html'>&lt;p&gt;Das Android-SDK stellt verschiedene sogenannte Views zur Verfügung, darunter auch das grafische Steuerelement ListView. Die zugehörige Klasse befindet sich im Paket android.widget. Ein ListView zeigt eine vertikale Liste im Display des Emulators an.&lt;/p&gt;&lt;pre&gt;/* ListViewExample.java */

package examples.android.listviewexample;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class ListViewExample extends ListActivity {
  @Override
  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    
    String[] str = new String[]{"Alida", 
                                "Dennis", 
                                "Clara"};
    
    this.setListAdapter(new ArrayAdapter&amp;lt;String&amp;gt;(this,
        android.R.layout.simple_list_item_1, str));
  }
}&lt;/pre&gt;&lt;p&gt;Das String-Array str enthält die Zeichenketten, die im Display angezeigt werden sollen. Um auf eine Auswahl eines Listenelements reagieren zu können, müsste die Methode onListItemClick überschrieben (überlagert) werden. Ein Screenshot des Android-Emulators könnte dann wie folgt aussehen:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eDZdiJ5w5D8/R5R59PDunVI/AAAAAAAAAAw/nTFgmo_l3_8/s1600-h/androidlistviewexample.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_eDZdiJ5w5D8/R5R59PDunVI/AAAAAAAAAAw/nTFgmo_l3_8/s320/androidlistviewexample.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5157881566167211346" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/291891282254894629-929114540818812625?l=javaseiten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaseiten.blogspot.com/feeds/929114540818812625/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=291891282254894629&amp;postID=929114540818812625' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/929114540818812625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/929114540818812625'/><link rel='alternate' type='text/html' href='http://javaseiten.blogspot.com/2008/01/android-widget-listview.html' title='Android: Widget ListView'/><author><name>Harald Roeder</name><uri>http://www.blogger.com/profile/16933081947840846509</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_eDZdiJ5w5D8/R5R59PDunVI/AAAAAAAAAAw/nTFgmo_l3_8/s72-c/androidlistviewexample.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-291891282254894629.post-8076875146910894407</id><published>2008-01-18T20:56:00.000+01:00</published><updated>2008-01-18T21:12:02.636+01:00</updated><title type='text'>Android ist grün!?</title><content type='html'>&lt;p&gt;Naja, zumindest das Android-Logo hat einen helleren grünen Farbton.&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eDZdiJ5w5D8/R5EEzvDunTI/AAAAAAAAAAg/vY1vlIrAZ3A/s1600-h/android-wallpaper1_thumbnail.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_eDZdiJ5w5D8/R5EEzvDunTI/AAAAAAAAAAg/vY1vlIrAZ3A/s320/android-wallpaper1_thumbnail.png" alt="" id="BLOGGER_PHOTO_ID_5156908335167872306" border="0" /&gt;&lt;/a&gt;&lt;p&gt;(Quelle: &lt;a href="http://code.google.com/android/goodies/index.html"&gt;Android Goodies&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;Um bei der Farbe grün zu bleiben: Das anschließende kurze Java-Listing ist
auch ein Android-Listing und erzeugt einen fließenden Hintergrundverlauf auf
dem Display des Android-Emulators (Android-SDK, Eclipse und Plugin ADT).&lt;/p&gt;&lt;pre&gt;/* GradientExample.java */

package examples.android;

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

import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.GradientDrawable.Orientation;
import android.graphics.Color;


public class GradientExample extends Activity {
  @Override
  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);

    GradientDrawable grad = new GradientDrawable(
      Orientation.TOP_BOTTOM,
      new int[] {Color.GREEN, Color.WHITE}
    );
  this.getWindow().setBackgroundDrawable(grad);
  }
}&lt;/pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eDZdiJ5w5D8/R5EFOfDunUI/AAAAAAAAAAo/xFDTW5811YE/s1600-h/android-emulator-shge.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_eDZdiJ5w5D8/R5EFOfDunUI/AAAAAAAAAAo/xFDTW5811YE/s320/android-emulator-shge.jpg" alt="" id="BLOGGER_PHOTO_ID_5156908794729372994" border="0" /&gt;&lt;/a&gt;&lt;p&gt;Dann ist ja doch alles grün - naja zumindest fast. ;-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/291891282254894629-8076875146910894407?l=javaseiten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaseiten.blogspot.com/feeds/8076875146910894407/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=291891282254894629&amp;postID=8076875146910894407' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/8076875146910894407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/8076875146910894407'/><link rel='alternate' type='text/html' href='http://javaseiten.blogspot.com/2008/01/android-ist-grn.html' title='Android ist grün!?'/><author><name>Harald Roeder</name><uri>http://www.blogger.com/profile/16933081947840846509</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_eDZdiJ5w5D8/R5EEzvDunTI/AAAAAAAAAAg/vY1vlIrAZ3A/s72-c/android-wallpaper1_thumbnail.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-291891282254894629.post-6381989944103117434</id><published>2008-01-14T11:56:00.000+01:00</published><updated>2008-01-18T19:03:57.224+01:00</updated><title type='text'>Androiden in Dalvik?</title><content type='html'>Am 5. November 2007 ist der öffentliche Startschuss für die neue Smartphone-Plattform Android gefallen. Android basiert auf dem Betriebssystem-Kern Linux und besitzt eine virtuelle Maschine mit dem Namen Dalvik. Zur Erstellung von Applikationen wird auf die Programmiersprache Java zurückgegriffen. Doch was bzw. wo ist Dalvik? Gibt man mal "Dalvik" in Google-Maps ein erscheint eine Karte von Island auf dem Bildschirm - Dalvik ist eine kleinere Stadt im Norden von Island. Der bzw. die Entwickler der Dalvik Virtual Machine scheinen eine Verbindung zur besagten Gemeinde zu haben. Der zur virtuellen Maschine gehörende Bytecode wird als Dalvik-Bytecode bezeichnet und ist für eine Registermaschine ausgelegt. Dalvik-Bytecode wird in Dateien mit der Endung .dex abgelegt (dalvik executable). Dabei unterliegen die einzelnen Zahlenwerte der .dex-Datei einem eigenen Format, dem Dex File Format.

Für eine Beispieldatei classes.dex kann dieses Format gegliedert sein zu:
&lt;pre&gt;classes.dex

header:
  header_file_signature (bytes): 100 101 120 10 48 48 57 0
  header_1 (bytes): 65 54 35 141
  header_2 (bytes): 60 141 61 87 68 75 195 95 199 97 5 66 32 
                    252 0 100 245 158 129 17
  header_length_file: 2364
  header_length_header: 92
  header_padding (bytes): 0 0 0 0 0 0 0 0
  header_string_table_entries: 36
  header_string_table_offset: 92
  header_8 (bytes): 1 0 0 0
  header_class_list_entries: 9
  header_class_list_offset: 380
  header_field_table_entries: 3
  header_field_table_offset: 416
  header_method_table_entries: 13
  header_method_table_offset: 452
  header_class_definition_table_entries: 6
  header_class_definition_table_offset: 608

string table:
  0. offset: 1806, length: 14, Hello Android!
  1. offset: 1692, length: 3, ()V
  2. offset: 1696, length: 28, (Landroid/content/Context;)V
  3. offset: 1725, length: 22, (Landroid/os/Bundle;)V
  4. offset: 1748, length: 22, (Landroid/view/View;)V
  5. offset: 1771, length: 27, (Ljava/lang/CharSequence;)V
  6. offset: 1799, length: 6, &lt;init&gt;
  7. offset: 1821, length: 17, HelloAndroid.java
  8. offset: 1839, length: 1, I
  9. offset: 1841, length: 19, Landroid/os/Bundle;
  10. offset: 1861, length: 25, Landroid/widget/TextView;
  11. offset: 1887, length: 33, Ltest/android/hello/
                                HelloAndroid;
  12. offset: 1921, length: 27, Ltest/android/hello/R$attr;
  13. offset: 1949, length: 31, Ltest/android/hello/
                                R$drawable;
  14. offset: 1981, length: 29, Ltest/android/hello/R$layout;
  15. offset: 2011, length: 29, Ltest/android/hello/R$string;
  16. offset: 2041, length: 22, Ltest/android/hello/R;
  17. offset: 2064, length: 6, R.java
  18. offset: 2071, length: 20, android/app/Activity
  19. offset: 2092, length: 23, android/widget/TextView
  20. offset: 2116, length: 8, app_name
  21. offset: 2125, length: 6, icicle
  22. offset: 2132, length: 4, icon
  23. offset: 2137, length: 16, java/lang/Object
  24. offset: 2154, length: 4, main
  25. offset: 2159, length: 8, onCreate
  26. offset: 2168, length: 14, setContentView
  27. offset: 2183, length: 7, setText
  28. offset: 2191, length: 31, test/android/hello/
                                HelloAndroid
  29. offset: 2223, length: 20, test/android/hello/R
  30. offset: 2244, length: 25, test/android/hello/R$attr
  31. offset: 2270, length: 29, test/android/hello/R$drawable
  32. offset: 2300, length: 27, test/android/hello/R$layout
  33. offset: 2328, length: 27, test/android/hello/R$string
  34. offset: 2356, length: 4, this
  35. offset: 2361, length: 2, tv

class list:
  0. string pool index: 28, test/android/hello/HelloAndroid
  1. string pool index: 32, test/android/hello/R$layout
  2. string pool index: 29, test/android/hello/R
  3. string pool index: 19, android/widget/TextView
  4. string pool index: 30, test/android/hello/R$attr
  5. string pool index: 33, test/android/hello/R$string
  6. string pool index: 31, test/android/hello/R$drawable
  7. string pool index: 18, android/app/Activity
  8. string pool index: 23, java/lang/Object
...&lt;/pre&gt;

Die DEX-Datei beginnt mit den Zahlenwerten 100 101 120 10 48 48 57 0. Beachtet man die Codierung nach ASCII folgt: d e x LF 0 0 9 NULL. Der Datei-Header gibt schon die Struktur
der Datei wieder: String-Tabelle, Klassenliste, Feldtabelle, Methodentabelle und ein Byteabschnitt zur Defintion von Klassen. In der Beipiel-DEX-Datei sind sechs Klassendefinitionen vorhanden. Eine .class-Datei enthält die Defintion einer einzigen Klasse (Interface).

Aber Androiden sind keine Aliens: Mit Hife des im Android-SDK enthaltenen Tools dx können .class-Dateien in .dex-Dateien konvertiert werden.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/291891282254894629-6381989944103117434?l=javaseiten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaseiten.blogspot.com/feeds/6381989944103117434/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=291891282254894629&amp;postID=6381989944103117434' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/6381989944103117434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/291891282254894629/posts/default/6381989944103117434'/><link rel='alternate' type='text/html' href='http://javaseiten.blogspot.com/2008/01/androiden-in-dalvik.html' title='Androiden in Dalvik?'/><author><name>Harald Roeder</name><uri>http://www.blogger.com/profile/16933081947840846509</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
