Android Dev – Schneller Android Emulator Genymotion

 Android, Entwicklung  Kommentare deaktiviert für Android Dev – Schneller Android Emulator Genymotion
Jul 292013
 

Im Dezember 2012 habe ich mal was über einen schnellen Android Emulator geschrieben. Dieses Projekt gibt es in der Form nun nicht mehr. War auch ziemlich überrascht. Dafür gibt es aber was besseres. So sieht es jedenfalls für mich aktuell aus. Das Teil nennt sich Genymotion. Aktuell ist die Lösung noch in der BETA und aktuell sind die Android Images noch gratis. In Zukunft soll es auch gratis bleiben, allerdings wird es auch eine kommerzielle Geschichte geben. Die werden dann noch ein paar Features mehr haben, aber zum testen reicht vollkommen aus. Zudem ist das Teil noch immer rasend schnell.

Was auch cool ist, das Teil ist nun einfach nach dem Start im ADB sichtbar und es kann sofort damit gearbeitet werden. Es muss nicht noch rumgefummelt werden bis man sich mit dem Debugger verbinden kann. Zudem kann die Orientierung nun VIEL einfacher gewechselt werden. Mir gefällt das Ding super.

Es gibt sogar noch ein IntelliJ IDEA Plugin und auch eines für Eclipse.

Installation ist relativ einfach. Man lade die gewünschte Version runter. Unter Linux handelt sich um eine .bin Datei. Danach muss/darf man die Datei noch ausführbar machen.

chmod +x genymotion-1.1.0_x64.bin
./genymotion-1.1.0_x64.bin 

Jetzt installiert sich Genymotion. Allerdings lässt sich danach unter Umständen kein Image starten. Wenn das der Fall ist muss man noch die Kernelmodule erstellen. Ist in den FAQ gut beschrieben.

Ach ja. Installiert wird das Tool in das selbe Verzeichnis wo die genymotion-1.1.0_x64.bin liegt. Das muss man unter umständen noch anpassen.

Und jetzt kann das Teil gestartet werden. Ganz einfach mit ./genymotion, sofern man im Installationsverzeichnis ist.

Danach sieht man diesen Dialog hier. Allerdings ohne Android VMs. Diese muss man zuerst hinzufügen. Einfach mal auf Add klicken.

Genymotion Startseite

Dann wählt man ein vorkonfiguriertes Gerät aus …

Neues Gerät auswählen

… klickt auf Add und verfolgt nun was passiert. Ist keine Hexerei.

Download und Installation der VM

Das Android Image wird dann aus der Cloud runtergeladen, parametrisiert und installiert.

Jetzt kann es gestartet werden. Hier im Beispiel ein Image eines Nexus 7.

Gestartetes Nexus 7

Und wie gesagt, man kann gleich loslegen.

Device auswähl beim debuggen

Meine App Com2Cal konnte ich ohne Probleme starten und debuggen.

Gestartete Com2Cal App auf dem Emulator 

Und nun, viel Spass beim emulieren.

Apr 162013
 

Es ist etwas das mich schon immer störte und noch immer stört. Ich, als Entwickler, pflege meine App, stelle regelmässig ein Update zur Verfügung, aber diese werden nicht eingespielt. Bugs werden so über lange Zeit mitgeschleift, füllen mir die Logs und machen die Anwender unzufrieden. Es gibt Mails die man oft mit einem “mach ein Update” abtun kann. Der Google Play Store informiert zwar über neue Updates was aber noch lange nicht heisst das die auch eingespielt werden.

Deshalb baute ich in der Version 2.0 von Com2Cal ein Mechanismus ein der den Anwender über eine neue Version informiert. Ich wollte wissen ob die Updatemoral dann besser wird. Die ganze Sache funktioniert relativ einfach.

Auf meinem Server habe ich eine Datei mit folgendem Aufbau.

GOOGLE;20130;2.0.1.3
PIT;20130;2.0.1.3
SLIDE;20130;2.0.1.3
AMAZON;20120;2.0.1.2

changelog

2.0.1.3
- bug: incorrectly formatted integer in arabic room

2.0.1.2
- bug: format Google Maps url
- bug: too often ask for rating app via notification. Now only all two days.
- new: SMS ends with " P", blank + P, shall not tracked.
- new: Open notification item in Google Maps when coordinates are available
- Update many layouts

Wie man sieht führe ich eine Liste mit allen Stores wo ich die App veröffentlicht habe. Jeweils mit der Versionsnummer. Zuunterst dann noch das Changelog. Wenn also die Serverversion aktueller ist als die Installiert wird der Anwender mit einer Notifikation informiert dass es eine neuere Version der App gibt. Anhand des Changelog sieht er dann auch gleich was gemacht wurde. Zudem verlinke ich dabei gleich noch auf die entsprechenden Stores damit das Update noch einfacher wird.

Die Notifikation sieht sehr einfach aus.

Update Notifikation

Dem Anwender werden danach die Informationen wie folgt dargestellt. Beim klick auf den entsprechenden Store landet er gleich beim Download.

Infodialog zum Update - Teil 1 Infodialog zum Update - Teil 2

Das Ergebnis in den Statistiken kann sich durchaus sehen lassen. Als erstes mal ein Beispiel das die Updatemoral vor dieser Implementation darstellt.

Updatemoral vor dem neuen Feature - ganz schlecht

Bei jedem roten Pfeil wurde ein Update veröffentlicht. Wie man sieht bleiben die alten Version extrem lang hängen. Nur ein kleiner Teil der Anwender macht das Update. Der Ausschnitt zeigt den Monat Februar 2013.

Wenn wir uns jetzt mal Mitte März bis Mitte April anschauen sieht es ganz anders aus.

Updatemoral nach dem neuen Feature - sehr gut

Zwei Updates. Die alten Versionen wurde ich innert kurzer Zeit fast ganz los. Der graue Anteil sind Altlasten die ich nie los werde. Orange ist die Version 2.0.0.0 wo ich das Feature eingebaut habe. Grün das erste und violett das zweite Update. Wie man sieht wurden die Updates wesentlich schneller eingespielt als früher.

Daraus lässt sich wohl schliessen dass sich dieses Feature sehr gut bewährt hat. Updates werden viel schneller eingespielt und negative Kritik gab es dazu auch keine. Also ein voller Erfolg.

Dez 152012
 

Jeder der für Android entwickelt wird schnell feststellen, dass die Emulatoren von Google so gut wie nutzlos sind. Sobald die eigene App Funktionen wie Kalender nutzen will wird man mit diesen Emulatoren scheitern. Die haben nämlich keinen Kalender, kein Google Play u.s.w. an Board. Um diese dann zu implementieren muss man einiges an unschönen Sachen anrichten. Zudem sind die original Emulatoren auch grottenlangsam. Es dauert ewig bis sie gestartet sind und die Arbeit darauf macht auch keinen Spass.

Seit der Version 4 – oder 4.1? – von Android gibt es auch eine Version für X86 Prozessoren für Intel. Das hat sich ein Projekt zu nutze gemacht um eine VM anzubieten die auf dieser Version basiert. Damit ist es möglich Android auch in anderen Virtualisierungslösungen zu starten. Konkret nutzt das Projekt AndroVM die VirtualBox von Oracle. Das heisst, dass Teil ist rasend schnell. Beim Starten und auch danach beim Arbeiten.

Und so richtet man sich die Geschichte ein.

  1. Download der VirtualBox mit anschliessender Installation.
  2. Download der der gewünschten Version als OVA Datei.
  3. Import der OVA Datei in VirtualBox.
    OVA Datei improtieren
  4. Datei auswählen.
    OVA Datei auswählen
  5. Danach einfach alles mit weiter durchklicken. Die OVA Datei wird importiert. Danach müsste es in etwa wie folgt aussehen.
    VM direkt nach dem Import
  6. Jetzt würde ich der VM noch einen sinnvollen Namen geben. Dies wird wie folgt gemacht.
    VM Name anpassen
  7. Wenn man gedenkt auf dem Emulator eine App zu debuggen muss man die Netzwerkschnittstelle noch anpassen. Ich habe es nicht ganz so gelöst wie auf der Webseite beschrieben, da mir das zu aufwendig war. Einfach im Adapter 1 “Angeschlossen an:” auf Netzwerkbrücke stellen. Damit bezieht die VM eine IP vom Router im eigenen Netzwerk. Bei mir ist das eine IP im 192.168.1.xx Netz. Funktioniert logischerweise nur wenn man einen DHCP Dienst im Netzwerk hat. Ist aber bei den meisten Routern der Fall.
    VM Netzwerk anpassen
  8. Jetzt ist man so weit und kann die VM das erste mal starten. Bei mir dauert es etwa 20 Sekunden und Android ist da. Beim ersten Start wird man noch vom Einrichtungsassistent begrüsst. Dort kann man nun seine Daten angeben und hat dann zugriff auf Google Play.
  9. Unter den Anwendungen findet man die App androVM Configurator. Die App kann gestartet werden und zeigt einem welche IP der VM vergeben wurde. Bei mir 192.168.1.45. Mit den Einstellungen in der App kann nun gespielt werden. Aber bei einigen Veränderungen startete mir danach die VM nicht mehr. Also Vorsicht.

Jetzt ist man soweit um App’s aus Google Play zu installieren. Aber ich will ja meine eigene App im Emulator testen. Da dieser Emulator alles unterstützt was ich brauche, muss ich ihn nur noch dazu bringen das ich aus Eclipse raus meine App installieren kann. Geht wie folgt.

  1. Wie man sieht erkennt Eclipse die neue VM noch nicht.
    Device in Eclipse vor dem adb connect
  2. Wenn man jetzt aber im cmd ein “adb connect <ip>” eingibt ändert sich das.
    adb connect <ip>
    Device in Eclipse nach dem adb connect
  3. Nun kann man in eigene App auf der VM starten.
    Debugger in Eclipse starten auf der VM
  4. Als Beweis:
    Der Beweis - gestartete App

Jetzt ist man in der Lage ganz normal mit der VM zu entwickeln. Und das viel schneller und flüssiger als mit den Emulatoren von Google.

Ach ja. Wenn die Maus in der VM gefangen ist drückt man einfach die rechte CTRL Taste. Nervte mich persönlich. Deshalb habe ich die auf die linke CTRL Taste verlegt. Kann in den Einstellungen gemacht werden.

Android Dev – Google scheint Probleme zu haben – ADT 20.0.2

 Android, Entwicklung  Kommentare deaktiviert für Android Dev – Google scheint Probleme zu haben – ADT 20.0.2
Jul 252012
 

Heute Morgen machte Eclipse ein update der ADT für die Android Entwicklung. Anlässlich der Google I/O 2012 wurde die Version 20.0.0 veröffentlicht. Kurz darauf kam die 20.0.1 und noch kürzer auf diese Version, also heute Morgen dann die Version 20.0.2. Aber das Zeugs ist noch so fehlerhaft.

Ein schönes Beispiel gefällig?

Ich habe ein neues Projekt erstellt. Das ADT macht nun die Activities nicht mehr mit LinearLayout sondern mit RelativeLayout, was schon mal begrüssenswert ist. Die Standardactivity sieht dann so aus.

Standard Activity

Jetzt will ich die TextView löschen. Brauche ich nicht. Dazu klicke ich im “Outline” Dialog auf die TextView.

Selektierte TextView

Sieht ja auch noch wunderbar aus. Dann drückt man, logischerweise, die Delete Taste auf der Tastatur. Hmmm, wo den sonst. Egal.
Resultat:

Nach dem drücken der Delete Taste - hmmm

Man achte sich mal auf den Eintrag im “Outline” Dialog. Hmmm
Dann schaut man sich mal das XML an und staunt nicht schlecht.

Na ja - Gut wäre anders.

Komisch was da gelöscht wurde.

Ich verkneife mir jetzt mal einiges an Kommentaren und Gedanken die mir so durch den Kopf schiesse wenn ich sowas erlebe.

Aber: Bin ich der Einzige der solchen Ärger mit dem Zeugs hat? Oder bin ich der Einzige der mal mit Visual Studio programmiert hat und weiss was möglich wäre? Kann doch jetzt echt nicht sein.

Android Dev – Eclipse GC overhead limit exceeded

 Android, Entwicklung  Kommentare deaktiviert für Android Dev – Eclipse GC overhead limit exceeded
Jul 242012
 

Was ich mich in den letzten paar Tagen genervt habe. Bei meinem Projekt kommen immer mehr externe Libraries hinzu. Es gibt solche die als *.jar Datei eingebunden werden und solche die man als Projekt einbindet. Um so mehr davon vorhanden sind um so häufiger kommt folgende Meldung.

Eclipse GC overhead limit exceeded

Und die nervt gewaltig. Wenn man Pech hat verhaut es einem das ganze Eclipse. Es startet einfach nicht mehr obwohl man die .lock Datei und die snap Datei gelöscht hat. Mir blieb dann meistens nichts anderes übrig als alles im .metadata Verzeichnis zu löschen. Allerdings kann man dann in Eclipse wieder alles neu einstellen.

Um diesen Fehler zu beseitigen kann man folgendes versuchen. Bei mir hat es zumindest funktioniert.

Im Installationsverzeichnis von Eclipse öffnet man die eclipse.ini.

Alles was fett ist habe ich angepasst.

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
–launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20120522-1813
-product
org.eclipse.epp.package.mobile.product
–launcher.defaultAction
openFile
–launcher.XXMaxPermSize
1024M
-showsplash
org.eclipse.platform
–launcher.XXMaxPermSize
1024m
–launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Dhelp.lucene.tokenizer=standard
Xms512m
Xmx1024m

Anwendbar auf eigenes Risiko.

Quelle: Unable to execute dex: GC overhead limit exceeded

Com2Cal – Update auf Version 1.0.6

 Com2Cal, Entwicklung  Kommentare deaktiviert für Com2Cal – Update auf Version 1.0.6
Jul 192012
 

Wie schon mal erwähnt sind noch einige Ideen vorhanden. Einen wichtigen Punkt habe ich nun mit der Version 1.0.4 umgesetzt. Seit dieser Version werden auch ausgehende SMS protokolliert. Damit habe ich einen der, für mich, wichtigsten Punkte umgesetzt.

Mit der Version 1.0.6 stellt ich auf die ActionBar um. Da Com2Cal auch auf Geräten vor der Android 3 Ära funktionieren soll musste ich dazu eine Library bemühen. Auswahl scheint es da nicht sehr viel zu geben. Deshalb nutze ich neu dafür die ActionBarSherlock.  Ich hoffe die tut so wie ich es mir vorstelle und macht mir nicht zu grosse Probleme. Leider wurde die APK Datei, also der Download der App, um einiges grösser. Ich war ziemlich überrascht. Von 348KB auf 811KB, was doch ziemlich viel ist.

Zudem habe ich in dieser Version auch sehr viel Code ausgemistet der nicht mehr benötigt wurde. Durch die Erfahrung mit der App, die ich bei der Arbeit machen kann, habe ich nun eine Basisklasse, der Entwickler weiss um was es geht, für die Activities gemacht um sehr viel redundanten Code zu eliminieren. Funktioniert wunderbar.

Ach ja, und dann noch die ungeliebte Werbung. Bis anhin habe ich diverse Experimente mit diversen Werbeanbietern gemacht. Tauglich war NUR AdMob, ist halt Google und die wissen wie man es macht. Ich stolperte aber noch über Mobclix die ein sehr cooles Feature bieten. Auf der Webseite kann man noch andere Anbieter dazu schalten. Ich kann also noch AdMob einschalten und definieren wie viele % AdMob eingeblendet werden soll. Also sollte aktuell nur noch AdMob und Mobclix erscheinen. Mal schauen ob es was bringt.

Bekommen tut man die App bei Google Play.

Get it on Google Play

PS: Bewertet die App doch bitte mal bei Google. Ach ja, ob die Werbung überhaupt funktioniert weiss ich gar nicht. Es hat noch keiner geklickt. Testet es doch mal. Smiley