Donnerstag, 30. Mai 2013

K2.5 - Android Entwicklungsumgebung und modulare Projektstruktur mit Maven und Eclipse

Einleitung

Die Mobile Entwicklung ist eine eigenständige Disziplin in der Softwareentwicklung und als Java Entwickler hat man den Vorteil, dass man keine komplett neue Programmiersprache erlernen muss, um eine Mobile App zu entwickeln. Mit Android® von Google® steht eine Mobile Plattform zur Verfügung, die zu den 3 führenden Betriebssystemen für Smartphones und Tablets gehört neben Apple iOS® und Windows Phone®.

Natürlich sollte man den Aufwand nicht unterschätzen die Architektur, Life-cycle und die API der Android Plattform kennenzulernen. Mehr dazu auf der offiziellen Android Entwickler Plattform von Google®.

In diesem Artikel geht es um den Einstieg in die Android Entwicklung mit Eclipse und Maven. Allerdings ist der erste Schritt beim Erlernen neuer Technologien immer die lokale Entwicklungsumgebung aufzusetzen, und nicht das Programmieren. Die Installation aller Voraussetzungen kann sehr komplex sein, und bis man eine saubere und professionelle Infrastruktur bzw. Entwicklungsumgebung aufgebaut und konfiguriert hat braucht man einiges an KnowHow und Erfahrung. Ich möchte hier nun eine Entwicklungsbasis vorstellen von der ich denke, dass sie ausgereift und flexibel ist.

Mit dieser Basis können Einsteiger, aber auch Fortgeschrittene, einfach und schnell für Android® entwickeln.

Motivation

Die eine Seite der Basis sind die Installationen auf der lokalen Workstation, also Eclipse, Plugins, Maven, etc.
Die andere Seite ist die Code Basis, um mit der Programmierung starten zu können. Diese Projektstruktur kann man sich am Anfang mit Project Wizards zusammenklicken oder sogar auf Maven Archetypes setzen. Ich kenne allerdings aktuell keinen Archetype, der eine wirklich profesionelle Android Projektbasis bereitstellt. Mit einer Ausnahme: STAND for Android.
Dieses Projekt habe ich erst einige Wochen nachdem ich diesen Artikel zu Ende geschrieben hatte entdeckt. Das tolle dabei ist, dass mein Ansatz ebenfalls auf dem Maven Android Plugin basiert und mit der Integration von Android Library Projects zwecks Modularisierung, sogar die bessere Lösung bietet, als RINDIRECT.
Allerdings hat das STAND for Android Projekt noch weitaus mehr Lösungen zu bieten, die man unbedingt beachten sollte, z.B. ANDROLOG, MARVIN oder ROBOJECT. Diese Lösungen können per Maven Dependency ganz einfach in dem hier vorgestellten Template Projekt integriert werden. Mehr dazu ganz am Ende dieses Artikels.

Eine ähnliche und mindestens genauso professionelle Android Projektbasis habe ich nun nach meinen Vorstellungen erstellt und werde sie in diesem Artikel als Eclipse Projekt bereitstellen. Sobald ich mir mal angeschaut habe, wie man Maven Archetypes entwickelt, wird dieses Template wohl auch als Archetype bezogen werden können.
Das Ergebnis wird dann ungefähr so aussehen:

 


Vorab noch ein kleines Diagramm meiner Idee einer modularen Projektbasis für die native Android Entwicklung. Sie bekommen später in diesem Artikel die komplette rechte Seite (templateproject) als ZIP Archiv zum Herunterladen.



Besonders hervorheben möchte ich an dieser Stelle das templateapklib Projekt auf der rechten Seite. Dies ist ein Android Library (.apklib) Projekt und ermöglicht letztlich die modulare Entwicklung von wiederverwendbaren Android Komponenten!

Die linke Seite (developmentproject) hat im Prinzip die gleichen Module, nur stellt es ein anderes Projekt dar mit einer anderen Intention. Man benötigt während der Entwicklung insbesondere von wiederverwendbaren Modulen auch eine Möglichkeit diese Module zu testen bzw. auszuführen. Und genau diesen Zweck soll dieses Projekt erfüllen.
Man sieht, dass auf das Modul Devdroidlib alle anderen Module zugreifen! Dies bedeutet, dass dieses Modul eine allgemeine Bibliothek darstellt. Es gibt jedoch einen wichtigen Unterschied zu dem Modul Devdroidapklib. Und zwar kann das letztere echte Android Resources einbinden, z.B. /res/*, Activities, Services, Providers, etc.
Diese Ressourcen müssten ansonsten direkt im Android App Projekt (Devdroidapp) liegen, was nicht besonders modular ist.

Sie können also auf Basis der rechten Seite (templateproject) die komplette linke Seite als eigenes Hauptprojekt erstellen und darin dann eigene wiederverwendbare Android Komponenten entwickeln, die Sie in neuen Projekten per Maven Dependency einfach einbinden können.

Voraussetzungen

  • Eclipse IDE
  • Eclipse Plugins: m2e (Maven), Android Development Tools
  • Maven auf der lokalen Workstation
  • Android SDK auf der lokalen Workstation
  • Android Testgerät (Smartphone oder Tablet)

Umsetzung


Kurzübersicht aller Schritte

  1. Eclipse Basis Setup (~10min)
  2. Eclipse Setup - Installation von Plugins für die Android Entwicklung (~20min)
  3. Herunterladen des Android Template Maven Projekts (~5min)
  4. Importieren des Maven parent Projekts in Eclipse (~5min)
  5. Einrichten der Eclipse Run Configuration für das templateapp Projekt (~5min)
  6. Kompilieren des Maven parent Projekts (~0,5min)
  7. Deployment der Template App auf einem Testgerät (~0,5min)

1. Eclipse Basis Setup

Sie benötigen als Basis für dieses Android Projekt mindestens das Maven Plugin für Eclipse. Optimialerweise installieren Sie auch EGit zwecks Versionskontrolle. Folgen Sie den Schritten dieser Anleitung:



Hinweis: 
Fügen Sie diese XML Konfiguration in Ihre .m2/settings.xml in Ihrem Benutzerverzeichnis. Falls die Datei noch nicht existiert erstellen Sie sie manuell.
  <profiles>

    <profile>

      <id>android-sdk</id>



      <properties>

        <android.sdk.path>...\android-sdk</android.sdk.path>

      </properties>

    </profile>

  </profiles>

  <activeProfiles>

    <activeProfile>android-sdk</activeProfile>

  </activeProfiles>

</settings>



2. Eclipse Setup für Android

Führen Sie die Schritte 1 bis 3 aus dieser Anleitung durch:



Sie haben dann diverse Eclipse Perspectives und Views für Android zur Verfügung, sowie direkte Buttons zur Verwaltung der Android SDKs und Virtual Devices:



3. Herunterladen des Template Projekts

 


Entpacken Sie das Archiv in ein lokales Verzeichnis Ihrer Wahl. Folgende Verzeichnisse und Dateien sollten Sie vorfinden:

4. Importieren des Maven parent Projekts in Eclipse

Gehen Sie in Eclipse über File -> Import... und wählen Sie "Existing Maven Projects" und bestätigen Sie alle folgenden Dialoge:




5. Einrichten der Eclipse Run Configuration

In den Maven pom.xml Dateien der beiden Projekte templateapp und templateapklib wird das Android Maven Plugin von Jayway genutzt:


Erstellen Sie in Eclipse folgende Maven Run Configuration:


6. Kompilieren des Maven parent Projekts

Bevor wir die Android App (das templateapp Projekt) auf einem Android Gerät testen können müssen alle Maven Module gebaut werden. Gehen Sie folgendermaßen vor:
  1. Rechtsklick auf das Maven parent Projekt templateproject
  2. Im Kontextmenü wählen Sie Run As...
  3. Wählen Sie nun "7 Maven install"
Anschließend sollte in der Eclipse Maven Console die erfolgreiche Kompilierung der Projekte bestätigt werden:


7. Deployment der Template App auf einem Testgerät

Ein Android Entwickler sollte mindestens 1 Testgerät besitzen, um sich nicht ausschließlich auf die Virtual Devices verlassen zu müssen. Optimal wäre ein Smartphone, um auch Telefon Funktionalität testen zu können, alternativ kann auch ein Tablet die Zwecke erfüllen.

Schließen Sie jetzt bitte Ihr Testgerät per USB an Ihre Workstation an. Vergessen Sie nicht den Entwicklermodus auf dem Gerät zu aktivieren.

Öffnen Sie danach in Eclipse die Android DDMS Perspective. Sie sollten dann das angeschlossene Gerät dort gelistet sehen:


Nun können Sie die Run Configuration starten, die Sie in Schritt 5 erstellt haben. Das Ergebnis in der Maven Eclipse Console sollte ungefähr so aussehen:


Und jetzt ist die Android Template App auf Ihrem Testgerät installiert und gestartet:


Nach einem Touch auf den Button sollten Sie folgendes sehen:


Schauen Sie sich den Quelltext der Projekte templateapp und templateapklib an, um die App nachzuvollziehen.

Zusammenfassung

Sie haben nun eine Basis für die Android Entwicklung, die in Sachen Automatisierung, Erweiterbarkeit und Modularität kaum noch Optimierung bedarf. Dank Eclipse und Maven ist das eine Entwicklungsumgebung mit der man auch in größeren Teams an einem Android Projekt arbeiten und/oder sogar allgemeine Android Maven Module als .apklib entwickeln kann, die man in App Projekten einfach wiederverwenden kann.

Vielleicht kam bei dem ein oder anderen Leser die Frage auf, wo eigentlich der Unterschied zwischen den Modulen templatelib und templatemodule ist. Dies ist kurz erklärt. Es gibt eigentlich keinen Unterschied, es sei denn man definiert einen für sich selbst. Die Struktur der Verzeichnisse und Dateien ist wie man sieht die selbe, nur nutzt ein templatemodule die API einer templatelib, was durch die Maven Dependency konfiguriert ist. Sie können also selbst entscheiden, welche dieser Maven Module sie in Ihrem Projekt benötigen.

Falls Sie sich nun noch fragen, wo der Unterschied zwischen einem templatemodule und templateapklib Maven Modul ist, dann ist das ebenfalls kurz erklärt. Da letzteres wie bereits erläutert ein Android Library (.apklib) Projekt ist, hat es spezielle Vorteile, z.B. kann man Android Ressourcen in diesem Projektmodul verwalten und im App Projekt darauf zugreifen. Dies funktioniert nur recht eingeschränkt mit einem normalen Maven Modul wie es das templatemodule ist.

Weitere Schritte

Für Einsteiger in die Android Entwicklung kann ich das Tutorial von Lars Vogel unter vogella.com empfehlen. Er hat auch ein Tutorial zu den speziellen Android Library Projects geschrieben.

Für etwas weiter fortgeschrittene Android Entwickler brauche ich sicherlich nicht erwähnen, dass unter javacodegeeks.com immer hilfreiche Tutorials zu finden sind.

Und wer speziell für Facebook eine Android App entwickeln möchte sollte einen Blick auf das Facebook SDK for Android werfen.

Ach ja, wer sich für die s.g. cross-platform Entwicklung interessiert findet hier einen Blog Post dazu.

Google scheint so ziemlich die selben Build Workflows in Zukunft anzustreben, allerdings mit Gradle, aber immerhin ohne ANT. Hier gibts eine 45min Präsentation dazu. Sehenswert für alle, die sich auch für diese Anleitung interessiert haben.

Außerdem kann ich fast uneingeschränkt das STAND for Android Projekt empfehlen. Die Komponenten für Logging und Testing werde ich in einer meiner nächsten Blog Artikel vorstellen und auf diesem Template Projekt aufbauen.

Ich arbeite privat an einem Projekt für das ich auch eine Android App baue. Natürlich halte ich mich dabei an die hier vorgestellte Modulstruktur, wer daran interessiert ist kann sich auf Github alles genauer anschauen.

Happy coding, developers!


Keine Kommentare:

Kommentar veröffentlichen