Andrés Blog

Krams. Und so.

Jul 16, 2013

Google Maps API auf gerootetem Android installieren

Mal wieder ein neuer Eintrag! Wieder einmal hatte ich ein einfach zu lösendes Problem, wobei die Lösung wiederum gewohnt schwer zu finden war. Zumindest, wenn es mal wieder schnell gehen soll ;)

Folgende Situation: Ich habe mein Android Smartphone (Samsung Galaxy Ace) bereits vor einiger Zeit gerootet, wollte nun jedoch mal den CyanogenMod ausprobieren. Kein Problem soweit, schnell ein Backup der bisherigen ROM gemacht (Stocklite v8) und CM7.2 nightly aufgespielt. Ersteindruck: Flott unterwegs und schön viel RAM frei :)

CyanogenMod hat von Haus aus keine Google Apps installiert, was mir zunächst sehr gut gefällt. Allerdings sind damit auch einige Einschränkungen verbunden. So können nicht wie üblich Apps einfach im Play Store gesucht und geladen werden - dieser ist ja nicht vorhanden. Abhilfe können dort proprietäre Angebote, wie AndroidPit, oder Open Source Angebote, wie F-Droid, bieten.

Zwei Apps jedoch, welche ich gerne wieder mein Eigen nennen würde, ließen sich nicht auf diese Weise installieren. Zum einen möchte ich die App der Bahn nutzen, zum anderen Öffi. Bei beiden Apps schlug die Installation zunächst fehl und es wurde keine genauere Fehlerbeschreibung seitens Android geliefert.

Erst der Versuch, eine der Apps über ADB zu installieren, meldete den Fehler [INSTALL_FAILED_MISSING_SHARED_LIBRARY]. Ein Blick in logcat konnte das genaue Problem aufzeigen: ERROR/PackageManager(58): Package xyz requires unavailable shared library com.google.android.maps; failing! Beide Apps benötigen die Google Maps API! Öffi gibt es zwar auch ohne Goole Maps API-Abhängigkeit zum Download, aber die Bahn-App nicht.

Mein erster Gedanke: Okay, dann fehlt sicherlich Google Maps, das sollte auch ohne Play Store etc. funktionieren. Also habe ich mir eine .apk für Google Maps besorgt (Version 6, für Version 7 ist mein CM7.2 dann doch zu alt). Die Installation hat funktioniert; Google Maps startet und funktioniert. Aber die gwünschten Apps ließen sich weiterhin nicht Installieren - gleiche Fehlermeldung.

Nach kurzer Recherche stand fest: Die API ist Bestandteil der GApps. Diese habe ich (nach einem Backup) dann doch installiert und wurde (nach Android Startup/Einrichtungsassistenten) direkt darauf hingewiesen, dass nun kaum mehr Speicherplatz vorhanden ist - na klasse. Aber immerhin ließen sich die Apps jetzt installieren. Aber so ist das ja kein Zustand, daher das Backup ohne GApps wieder eingespielt - das muss doch auch anders zu lösen sein!

Das Durchsuchen der GApps*.zip zeigt in system/framework und in system/etc/permissions 2 Dateien mit dem Namen com.google.android.maps.(jar|xml). Vielleicht reichen diese Dateien aus? Also habe ich diese Dateien in den jeweiligen Pfad auf meinem Smartphone kopiert und nach einem Reboot ließen sich die beiden Apps dann auch starten und (bislang ohne Probleme) benutzen. Es hätte so viel einfacher sein können, hätte es auch von der Bahn eine Alternative ohne Abhängigkeit gegeben. Oder würde Android direkt beim Installieren sagen, was ihm fehlt. Oder hätte ich direkt gewusst/gefunden, wie man nur die Google Maps API nachinstalliert.

Wie auch immer, es ist geschafft. Und ich hoffe, ich konnte mit diesem Eintrag vielleicht noch jemandem beim gleichen Problem etwas (Such-)Arbeit abnehmen :)

TL;DR:

  • GApps runterladen

  • Entpacken
  • per adb shell als root /system mit Schreibrechten neu mounten: mount -o remount,rw /system
  • adb push gapps-jb-20130812-signed/system/framework/com.google.android.maps.jar /system/framework/com.google.android.maps.jar
  • adb push gapps-jb-20130812-signed/system/etc/permissions/com.google.android.maps.xml /system/etc/permissions/com.google.android.maps.xml
  • Reboot!
  • Fertig.