JAXenter.de

Das Portal für Java, Architektur, Cloud & Agile
X

#Docker-Woche auf JAXenter: Top-Artikel, Tutorials & Videos in unserem Docker-Special!

Grün geärgert mit Eclipse?

Wenn Eclipse Android-Entwicklern Probleme macht

Android, Eclipse

Eclipse ist zweifelsohne eine sehr gute Entwicklungsumgebung. Trotzdem hat auch sie einige Eigenheiten, die Android-Programmierern den letzten Nerv ziehen. In dieser Serie stellen wir Ihnen einige Choke Points vor, die beim Entwickeln des in Google Play erhältlichen und sehr empfehlenswerten Kommunikationsclients GottaTxt dokumentiert wurden.

Da dieser Artikel auf praktischer Entwicklungsarbeit basiert, reihen wir die Fehler mehr oder minder zufällig – wenn Sie eine der Headlines anspricht, haben Sie sofort die Lösung zur Hand.

Emulator versus Bildschirm

Wir leben heute mit der paradoxen Situation, dass die Bildschirmauflösung eines Handys oft höher ist als die der durchschnittlichen Workstation. Das Nexus 10 verschlimmert die Lage zusätzlich – es gibt kaum ein (bezahlbares) Notebook, das mit dem Bildschirm des Geräts auch nur annähernd mithält.

Erfreulicherweise gibt es im Simulator ein optionales Workaround für dieses höchst ärgerliche Problem. Die virtuellen Handys sind von Haus aus in der Lage, ihre Bildschirminhalte anzupassen. Leider ist die Option dafür relativ gut versteckt und in neueren Versionen des AVD-Managers nicht mehr ansprechbar. Stattdessen öffnen Sie die Launch-Konfiguration des jeweiligen Programms (Menü Debug oder Run) und wechseln danach in die Rubrik Target. Scrollen Sie das Fenster ganz nach unten, bis Sie das Textfeld für Kommandozeilenoptionen finden. Dort geben Sie dann den String -scale 0.75 ein. Die Zahl gibt dabei an, wie stark skaliert werden soll – ein Wert von .75 entspricht einer Herunterskalierung auf eine Größe von 75 % (Abb. 1).

Abb. 1: Mit dem richtigen Skalierungsfaktor lässt sich auch am Notebook entwickeln

Tod durch leere TextView

Das im GUI-Stack von Android enthaltene TextView-Element ist sehr vielseitig. Es ist aus diesem Grund nicht unüblich, dass das Steuerelement als Label-Ersatz verwendet wird. Leider tritt dabei ein hässlicher Bug des GUI-Stacks zum Vorschein – eine TextView muss von Haus aus immer mit Text befüllt werden. Das ist heimtückisch, da Code nach dem folgenden Schema im Visual Editor keinerlei Probleme verursacht. Die Abstürze treten erst zur Laufzeit auf:

<TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" />

Erfreulich ist, dass das Beheben des Fehlers nur wenig Arbeit verursacht. Erweitern Sie die Definition des Steuerelements einfach um ein Textattribut, dessen Wert Sie in der Methode onCreate überschreiben:

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_world" />

Projekt findet keine Klassen aus externer Bibliothek

An sich ist das Einbinden einer externen Bibliothek in ein Java-Programm ein absolutes Kinderspiel. Leider hat Eclipse hier einige Eigenheiten, die von Zeit zu Zeit zu skurrilem Compilerverhalten führen. Erfreulicherweise ist das Beheben dieser Fehler in der Regel sehr einfach. Navigieren Sie in die Bibliotheksliste Ihres Projekts und entfernen Sie das für die Probleme verantwortliche .jar-File. Nach dem Schließen des Fensters öffnen Sie dieses erneut und wiederholen die zum Einfügen der Bibliothek erforderlichen Schritte. In seltenen Fällen reicht auch das nicht aus, um die IDE zur Kooperativität zu erziehen. Die Menüoption Project | Clean... hilft in diesem Fall so gut wie immer weiter.

Mehr Informationen über den Kompilationsvorgang

Obwohl die Problemansicht von Eclipse in der Regel sauber arbeitet, ist sie nicht auf alle erdenklichen Compilerfehler vorbereitet. In diesem Fall erscheint entweder eine unvollständige oder sogar eine irreführende Fehlermeldung. Erfahrene Entwickler setzen dann auf die Konsolenausgabe, die die im Rahmen der Kompilation angefallenen Meldungen sorgfältig auflistet. Ein verbose compile genannter Modus sorgt dafür, dass die diversen Werkzeuge noch mehr Informationen auswerfen. Seine Aktivierung erfolgt für jedes Projekt über seine Eigenschaften. Öffnen Sie eine Datei im Editor und klicken Sie danach auf Window | Preferences, um die Einstellungen des jeweiligen Projekts auf den Bildschirm zu holen.

Im daraufhin erscheinenden Dialog wechseln Sie in die Rubrik Android | Build und aktivieren die Option Verbose. Ab diesem Zeitpunkt arbeitet der Compiler im Sonderregime und liefert zusätzliche Informationen. Leider ist dieser alternative Betriebsmodus nicht ohne Tücken: Unter Windows erscheint beim Kompilieren unter Umständen ein Dialog, der auf einen Fehler in der Datei aapt.exe hinweist. In diesem Fall müssen Sie die hier beschriebenen Einstellungen rückgängig machen.

Weitere Fehler

ERROR: tried to execute code in unprepared class: Dieser Fehler ist besonders bösartig, da er nur sehr selten auftritt und sich nicht ohne Weiteres reproduzieren lässt. Er weist in der Regel auf eine Beschädigung des internen Zustands eines Projekts hin – irgendeine Konfigurationsdatei ist so verstellt, dass die Kompilation an einer Stelle „leise“ scheitert. Im Normalfall ist es möglich, den angezeigten Fehler direkt auf eine Klasse zurückzuführen. Der ideale Workaround für dieses Problem ist das Erstellen einer neuen Klasse mit einem anderen Namen, die den existieren Code ihres Vorgängers weiterverwendet. Nach einem automatischen Refactoring und dem Löschen der alten Datei verschwindet auch dieses Problem im digitalen Orcus.

Virtuelles Keyboard scheint beim Laden der Activity auf: An sich ist die virtuelle Tastatur von Android sehr nützlich und auch sauber realisiert. Google setzt auf eine Vielzahl von Automatismen, die dem Benutzer das Leben erleichtern – kaum ein anderes Betriebssystem erfreut sich einer so ausgereiften Eingabemöglichkeit. Die Auto-Pop-up-Funktion ist manchmal nützlich, aber in den meisten Fällen lästig. Sollte eines Ihrer Formulare das Anzeigen der Tastatur auslösen, so hilft das Hinzufügen der mit android:windowSoftInputMode beginnenden Zeile:

  <activity android:name=".ActivityInvite"
     android:theme="@style/Invite"
     android:windowSoftInputMode="stateHidden|adjustResize" />

Warning: Could not find lib.apk! Dieser Fehler verweist auf eine falsch eingebundene Bibliothek, die die Auslieferung des Projekts verhindert. Erfreulicherweise ist es sehr leicht, den Übeltäter hinter dieser Nachricht zu stellen. Der häufigste Verursacher derartiger Probleme ist ein Java-Entwickler, der die von der Anwendung zu verwendenden .jar-Files und APKs über die Option:

  ]Project Name[ > [Properties] > [Java Build Path] > [Projects] > [Add] 

einbindet. Diese unter Java mit Sicherheit nicht falsche Vorgehensweise ist beim Entwickeln von Android-Anwendungen völlig fehl am Platz. Entfernen Sie deshalb die im Java Build Path hinzugefügten Bibliotheken – sie gehören ins Verzeichnis

]Project Name[ > [Properties] > [Android] > [Add].  

Danach ist auch dieser Fehler Geschichte.

Problem Occurred: 'Cleaning selected projects' has encountered a problem: An sich sollte ein Bereinigungszyklus ein Projekt von dem im Laufe der Zeit angesammelten Ballast befreien. Es ist deshalb umso ärgerlicher, wenn dieser Prozess auf einmal mit einer kryptischen Fehlermeldung abbricht. Erfreulicherweise liegt das – so gut wie nur unter Windows auftretende – Problem nicht bei Eclipse, sondern beim Betriebssystem aus dem Hause Microsoft. Das geht nämlich davon aus, dass die zu bereinigenden Dateien noch geöffnet sind. Zum Glück ist es einfach, dem Spuk ein Ende zu bereiten. Schließen Sie alle geöffneten Programme und starten Sie die Anlage neu.

Inhalte von EditText-Feldern gehen beim Drehen des Bildschirms verloren: Wer sein Handy oft zwischen Portrait und Landscape Mode umschaltet, kennt dieses Problem mit relativer Sicherheit. Kaum ist der Änderungsvorgang vollzogen, sind die Textboxen wieder leer. Das Beheben dieses Problems erfordert keine Zeile Programmlogik. Stattdessen öffnen Sie das Programmmanifest und erweitern die betroffene Activity um das Attribut android:configChanges="orientation".

Eclipse startet nicht: Wenn sich die IDE als Ganzes nicht mehr starten lässt, ist oft Panik angesagt. Zuallererst: Das ist unnötig. Quellcodes, Ressourcen und Logik sind streng getrennt vom Rest des Programms – sie liegen in einem Workspace, der mit der eigentlichen Installation nichts zu tun hat.

Meist verschluckt sich die Entwicklungsumgebung an einer Temporärdatei, die häufig im Ordner C:\active\eclipse\.metadata\.plugins\org.eclipse.core.resources zu finden ist. Sichern Sie die Inhalte und leeren Sie den Ordner danach – meist startet das Programm nach dieser Radikalkur wieder. Wenn das noch immer nicht reicht, kopieren Sie Ihren Workspace-Ordner einfach auf einen USB-Stick und löschen die vorhandene Installation der IDE. Danach installieren Sie sie neu und weisen beim ersten Start den auf dem USB-Stick befindlichen Workspace-Ordner zu.

The container 'Android Dependencies' refers to non existing library 'C\active\eclipse\lib\bin\lib.jar: Eclipse wird unabhängig vom Rest des Android-SDKs weiterentwickelt. Nach einem Update der IDE tritt oft dieser Fehler auf. Erfreulicherweise ist seine Behebung sehr einfach – öffnen Sie den Properties-Dialog des befallenen Projekts und wechseln Sie in die Rubrik Java Build Path. Dort gibt es einen Libraries-Dialog, in dem die Option Android Dependencies mit einem Fehlerkreuz markiert ist. Markieren Sie diese Option und klicken Sie auf Remove, um sie aus dem Projekt zu entfernen.

Fazit

Damit endet der erste Teil der Gallery of Pain. Im zweiten Teil der Serie geht es weiter. In Eclipse schlummert eine Vielzahl weiterer Probleme, die im Rahmen der Entwicklung von GottaTxt ans Tageslicht kamen. Wie immer bitten wir auch um Ihre Mithilfe – teilen Sie uns doch mit, was Sie quält und wie Sie damit umgehen!

Feature-Bild: Android robot sitting with a Tablet Computer von Shutterstock, Urheberrecht: Kirill__M

Mehr aus dieser Ausgabe

Artikel erschienen in

Wer Anwendungen für Smart-TVs entwickeln möchte, landet über kurz oder lang bei…
Android, Eclipse
Eclipse ist zweifelsohne eine sehr gute Entwicklungsumgebung. Trotzdem hat auch…
 

Kommentare

Ihr Kommentar zum Thema

Als Gast kommentieren:

Gastkommentare werden nach redaktioneller Prüfung freigegeben (bitte Policy beachten).