Webhosting mit Host Europe

Linux und Ich

Blog über Ubuntu, Linux, Android und IT

Android-SDK mit Bezug auf 64-bit Ubuntu und das Samsung Galaxy

Android-SDK mit Bezug auf 64-bit Ubuntu und das Samsung Galaxy

| 7 Kommentare

Um Anwendungen für Android zu Entwickeln oder tief in das System des Smartphones einzugreifen braucht man ein “Software Development Kit”, kurz SDK. Das Kit ist unter der Apache License lizenziert und kann als Quellcode oder auch als fertige Binaries von der Homepage des Android-Projektes heruntergeladen werden.

Auf einem 32-bit System ist das SDK schnell installiert, auf einem 64-bit Ubuntu braucht es jedoch noch ein paar Klimmzüge um es zum Laufen zu bekommen. Dazu kommt, dasd man mit dem SDK das Samsung Galaxy bislang noch nicht ansprechen kann. Erst mit einem gepatchten Programmteil klappt dies….

Installation

Zur Installation selber möchte ich nicht viele Wort verlieren. Alle relevanten Informationen bekommt Ihr etwa auf ubuntuverse.at oder natürlich auch auf developer.android.com.

Auf einem 64-bit System

Etwas aufwändiger wird es, wenn man Ubuntu in der 64-bit Variante betreibt. Das SDK benötigt ein 32-bittiges Java, startet man es ohne dies, kommen nur Fehlermeldungen auf den Bildschirm…

$ ./ddms 
Error Loading Preferences
52:23 E/ddms: shutting down due to uncaught exception
52:23 E/ddms: java.lang.UnsatisfiedLinkError: /opt/android-sdk-linux_x86-1.5_r3/tools/lib/libswt-pi-gtk-3236.so: /opt/android-sdk-linux_x86-1.5_r3/tools/lib/libswt-pi-gtk-3236.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)
	at java.lang.ClassLoader$NativeLibrary.load(Native Method)
	at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1767)
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1676)
	at java.lang.Runtime.loadLibrary0(Runtime.java:840)
	at java.lang.System.loadLibrary(System.java:1047)
[...]

Abhilfe schaft die Installation des Paketes ia32-sun-java6-bin…

$ sudo apt-get install ia32-sun-java6-bin

…und das setzen von ia32-java-6-sun als JVM…

$ sudo update-alternatives --config java
Es gibt 3 Alternativen, die »java« bereitstellen.

  Auswahl      Alternative
-----------------------------------------------
          1    /usr/lib/jvm/java-6-sun/jre/bin/java
*+        2    /usr/lib/jvm/java-6-openjdk/jre/bin/java
          3    /usr/lib/jvm/ia32-java-6-sun/jre/bin/java

Drücken Sie die Eingabetaste, um die Vorgabe[*] beizubehalten,
oder geben Sie die Auswahlnummer ein: 3
Verwende »/usr/lib/jvm/ia32-java-6-sun/jre/bin/java«, um »java« bereitzustellen.

Diese Methode hat jedoch den Nachteil dass die 32-bit JVM nun für ALLE Java-Programme auf dem System benutzt wird. Wahrscheinlich passender ist es daher die Datei ddm selber anzupassen. Dazu öffnet Ihr die Datei in einen Editor und ändert den Abschnitt…

[...]
else
    os_opts=
    java_cmd="java"
fi
[...]

…entsprechend in…

[...]
else
    os_opts=
    #java_cmd="java"
    java_cmd="/usr/lib/jvm/ia32-java-6-sun/jre/bin/java"
[...]
fi

Somit ruft ddms direkt das 32-bit Java auf.

Das SDK und das Samsung Galaxy

Beim Einstecken von USB-Geräten werden eine Reihe von udev-Regeln ausgeführt. Auch für das Galaxy muss eine Regel erstellt werden. Im Netz findet man viele an die HTC Geräte G1 (Dream) und G2 (Hero) angepasste Anleitungen. Diese darf man jedoch nicht 1:1 übernehmen, da die Regel an die Hersteller-ID angepasst werden muss. Über…

$ lsusb
[...]
Bus 001 Device 025: ID 04e8:6640 Samsung Electronics Co., Ltd Usb Modem Enumerator
[...]

…bekommt ihr diese ID heraus. Im Fall des Samsung Galaxys lautet sie “04e8″. Weitere Android-Geräte von Sony, Motorola und Co. stehen in der Pipeline, daher sollte man nicht blind Anleitungen zum Thema Android und udev übernehmen, die ID wird bei jedem Hersteller anders lauten. Diese ID tragt Ihr nun in die udev-Regel /etc/udev/rules.d/90-android-rules

SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8", MODE="0666"

… ein und lässt am besten nach Erstellen der Datei die Konfiguration von udev neu einlesen.

$ sudo /etc/init.d/udev reload

Es kann gut sein, dass udev die Regel erst dann ausführt.

adb findet das Galaxy nicht

Nun zur nächsten Baustelle. Diese VendorId von Samsung wirkt sich auch im SDK selber aus. Im aktuellen SDK (Version 1.5_r3) ist sie noch nicht eingebaut. Die Folge: Das SDK kann das Galaxy nicht finden, selbst wenn der USB-Debug-Modus aktiviert wurde. Bei adb bleibt die Liste der angeschlossenen Andorid-Geräte leer…

$ ./adb devices
List of devices attached

Abhilfe schafft nur das Patchen von adb. Wer dies nicht möchte kann auf http://floe.butterbrot.org/external/adb.gz zurückgreifen. Diese Version der adb-Datei wurde bereits gepatcht. Man muss sie nur herunterladen, entpacken und gegen die im SDK mitgelieferte tools/adb austauschen. Eventuell ist auch ein Check der Prüfsumme des Archivs angebracht. Diese muss…

$ md5sum adb.gz
82727d3eb69452c50421f9f7196d5cf4  adb.gz

…ergeben. Weitere Informationen und Hintergründe zu diesem Thema findet Ihr im Blog von Heiko Schwarz. Ist nun die adb-Dateo ausgetauscht killt ihr bitte den adb-Daemon (falls ihr adb bereits ausgeführt hattet)…

$ killall adb

und ersetzt die Datei. Nun sollte das Galaxy von adb gefunden werden…

$ ./adb devices
* daemon not running. starting it now *
* daemon started successfully *
List of devices attached 
I75005EYJ4pRPQ6	device

…und dem Erstellen von Anwendungen für Android oder das Rooten des Galaxys sollten nichts mehr im Wege stehen.

DDMS zeigt den Screen des Samsung Galaxy unter Ubuntu 64-bit

Autor: Christoph

Hallo, ich bin Christoph -- Linux-User, Blogger und pragmatischer Fan freier Software. Wie Ihr ohne Zweifel bemerkt haben solltet schreibe ich hier über Linux im Allgemeinen, Ubuntu im Speziellen, sowie Android und andere Internet-Themen. Wenn du Freude an meinen Artikel gefunden haben solltest, dann kannst du mir über Facebook, Google+ oder Twitter oder natürlich dem Blog folgen.

7 Kommentare

  1. Hey Danke, ich war schon am Verzeifeln. Hab ebenfalls das Galaxy und dachte ich wäre schon zu dämlich dafür. Naja, jetzt ist ja das SDK 1.6 rausgekommen. Hast du es mit dem schon probiert? Klappt es da outofthebox?

  2. Ja, mit dem SDK 1.6 ist der Klimmzug “adb ersetzen” zum Glück nicht mehr nötig.

  3. Pingback: Erstellung von Screenshots ohne root - Seite 8 - Android-Hilfe.de

  4. Pingback: MOTODEV Studio for Android & Ubuntu 64-Bit | mgBlog

  5. Hallo christoph,
    ich wollte mir sdk unter ubuntu 11.04 installieren. Das mit der Änderung der ddm Datei macht zweifellos Sinn, nur wo finde ich die?
    Im voraus Danke für die Hilfe.

  6. Du findest sie im entpackten Verzeichnis des SDK als “/wo/auch/immer/android-sdk-linux_x86/tools”. Der Beitrag ist ja schon etwas älter, hab das SDK schon länger nicht mehr unter Ubuntu getestet ;)

  7. Hi! Ich benutze den SDK unter OpenSUSE 64Bit: … Vg, Jan

Hinterlasse eine Antwort

Auf Linux und Ich darf anonym kommentiert werden. Die Felder für Name und E-Mail-Adresse dürfen beim Eintragen eures Kommentars leer bleiben. Ich freue mich aber über jeden Kommentar, zu dem der Autor mit seinem Namen steht.