Am letzten Mittwoch bin ich selbst einmal mehr Opfer einer schlechten Design-Entscheidung geworden. Und das kam so.
In letzter Zeit befasse ich mich recht stark mit der Android-Entwicklung und besonders mit dem Schreiben von Testfällen für Android-Apps. Am letzten Mittwoch funktionierte dann plötzlich einer meiner Tests nicht mehr.
Weil ich kurz zuvor die Android-Version auf meinem Tablet auf 4.03 aktualisiert hatte lag es zunächst nahe, das Android SDK und die Android Development Tools auf meinem Testrechner an dem ich die Testfälle entwickle ebenfalls zu aktualisieren.
Gesagt getan. Mein Problem war zwar verschwunden, aber meine Testanwendung lief immer nicht mehr. Nun hatte ich eine ClassNotFoundException, die offensichtlich daher rührte, dass die Java Bibliotheken die ich in mein Test-Projekt eingebunden hatte nicht mit auf das Tablet deployt wurden.
Warum - diese Frage sollte mich nur einen Arbeitstag kosten.
Kurz vor Feierabend und nach einigen Stunden Internetrecherche fand ich die Lösung (StackOverflow sei Dank!): Seit dem letzten ADT Update wird in Android Projekten anstelle von Projekteinstellungen eine Code-Konvention für die Lage von Libraries verwendet. Der Ordner in dem diese liegen muss nun zwingend libs heißen. In meinem Fall hieß er aber leider lib. Ein simples Umbenennen des Ordners löste mein Problem.
Dass der StackOverflow-Beitrag der die Lösung des Problems beinhaltete bereits 27 anderen Personen geholfen hatte, macht deutlich, wie fatal eine solche Design-Entscheidung seitens der ADT-Entwickler sein kann.
Zuvor konnten Entwickler einen beliebigen Ordner für ihre JARs verwenden, nun muss dieser zwingeng libs heißen. Im Eclipse compilieren die Projekte nach wie vor, so dass einem der Fehler auch erst zur Laufzeit auf dem Android-Gerät auffällt. Auch ist diese Entscheidung nirgendwo dokumentiert. Anstelle von offiziellen Projekt-Settings werden nun interne Code-Conventions verwendet. Das stinkt geradezu nach einer schlechten Entscheidung.
Ich möchte nicht wissen, wie hoch der weltweite finanzielle Schaden dieser Design-Entscheidung für Software-Entwickler ist und wie viele Entwickler tagelang frustiert nach Lösungen suchen werden.