Die Fallstricke bei der Entwicklung von Google Play Instant



Hi, Habr! Mein Name ist Kamo Spertsyan, ich bin in der Android-Entwicklung von PROFI.RU tätig. Ich habe vor kurzem eine Anwendung mit sofortigem Start für unsere Kunden geschrieben. Wenn Sie mit der Technologie nicht vertraut sind, lade ich Sie ein, zuerst die Android-Entwickler zu besuchen .

Seit der Präsentation von Instant Apps (Google Play Instant) auf Google I / O 2016 sind mehr als zwei Jahre vergangen. Es gibt viele Artikel im Internet, wie Sie Anwendungen mit sofortigem Start erstellen können. Nach ihnen zu urteilen, nichts komplizierter. Tatsächlich ist dies jedoch nicht ganz richtig. Ich werde versuchen, die Hauptschwierigkeiten zu beschreiben, die ich von der Erstellung eines leeren Projekts bis zur Veröffentlichung der Instant-App bei Google Play hatte. Ich hoffe, dass der Artikel für Entwickler nützlich ist, die noch über diesen Weg verfügen.

Wahl des Ansatzes


Die meisten Quellen beschreiben den Prozess der Konvertierung der gesamten Hauptanwendung in die Instant App. Unsere Anwendung erfüllte jedoch nicht die 4-MB-Grenze und bot viel mehr Funktionalität, als für die Kenntnis des Dienstes vor der Installation erforderlich war. Jetzt hat Google im Testmodus die zulässige Größe der Anwendung mit einem sofortigen Start von bis zu 10 MB erhöht.

Ich hatte zwei Möglichkeiten, eine Instant-App zu erstellen. Die erste besteht darin, die fertige Anwendung herauszunehmen und unnötige Funktionen auszuschneiden. Die zweite ist das Erstellen eines leeren Projekts und das Übertragen der erforderlichen Funktionalität. In Anbetracht der ersten Option versuchten es meine Kollegen und ich auf einem lokalen Hackathon. Gleichzeitig waren wir überzeugt, dass es hoffnungslos war. Zunächst dauerte es sehr viel Zeit (etwa 40 Mannstunden). Zweitens erwies sich die Größe der Anwendung aufgrund des zusätzlichen Codes und der zusätzlichen Ressourcen als sehr groß. Drittens erschwert der zusätzliche Code die Wartung. Wir haben verzweifelt versucht, die resultierende Anwendung von 4 MB während des Hackathons anzupassen, und am Ende hatten wir immer noch keine Zeit.

Migration der Funktionalität


Nachdem ich aus bitteren Erfahrungen gelernt hatte, erstellte ich ein leeres Projekt und fing an, nur die erforderlichen Anwendungsmodule darin zu kopieren. Wir haben eine modulare Architektur, so dass es einfach war. Hier bin ich auf das erste Problem gestoßen - in Instant Apps können Sie keine Dienste nutzen. In meinem Fall war diese Einschränkung nicht kritisch: Wir haben den Dienst zum Hochladen von Fotos verwendet. In der Instant-App lehnten wir diese Funktion ab und motivierten die Benutzer, die Hauptanwendung herunterzuladen. Dieser Punkt sollte jedoch berücksichtigt werden, wenn Ihre Anwendung auch Dienste verwendet.

Zu meiner Überraschung passte die Anwendung, die durch Kopieren nur der erforderlichen Codestücke erhalten wurde, immer noch nicht in die zulässigen 4 MB und wog etwa 5 MB. In diesem ArtikelGoogle gibt Ratschläge zu diesem Fall, aber sie haben mir ein wenig geholfen. Das einzige, was wir ablehnen konnten, waren benutzerdefinierte Schriftarten, deren Gewicht sich jedoch nicht wesentlich auf die Größe der APK auswirkte.

Dann fiel mir ein, dass ProGuard in unserem Projekt in Debug-Builds deaktiviert ist. Einfache Inklusion

minifyEnabled true

Die Größe der Anwendung wurde fast verdoppelt. Über ein Wunder - das Limit von 4 MB ist erreicht!

Datenmigration


Als nächstes wurde das Problem mit der Datenmigration gelöst. Wie Sie wissen, werden Instant Apps ab Android 5.0 vom Betriebssystem Android unterstützt. Gleichzeitig funktioniert die automatische Datenmigration erst ab Android 8.0. Dazu genügt es, die gemeinsam genutzten Namen in den beiden Anwendungen mit demselben Namen zu verwenden. Für die Versionen 5.0 bis 7.1 müssen Sie die Migration manuell mithilfe der Cookie-API oder der Speicher-API schreiben . Ich habe das Cookie ausgenutzt und bin auf keine besonderen Probleme gestoßen - dies machte jedoch Änderungen sowohl auf der Instant App-Seite als auch in der installierten Anwendung erforderlich. Am Ende musste ich eine neue Version der Anwendung veröffentlichen und sie für die gesamte Zielgruppe für die Veröffentlichung von Instant App einführen.

Debuggen


Beim Debugging war alles nicht so einfach.

Erstens unterstützt Google Play Instant keine ungesicherten Netzwerkverbindungen. Vergessen Sie also nur http, nur http. Für mich bedeutete dies ein Test auf Produktionsservern, da alle Prüfstände auf http funktionierten. Nicht kritisch, aber angenehm genug.

Zweitens der Start der Instant-App selbst: Sie können die Anwendung wie üblich installiert installieren, jedoch nur für eine Weile. Bei der Ausführung über Android Studio ist es nicht möglich, das Update der Instant App auf eine voll funktionsfähige Anwendung zu überprüfen. Testen Sie beispielsweise, wie gut die Benutzerdaten übertragen werden. Dazu müssen Sie die Anwendung wie die Instant-App mit einem Sofortstart ausführen. Dies kann auf zwei Arten erfolgen:

  1. Führen Sie die Anwendung mit einem speziellen Dienstprogramm aus dem Android SDK aus.
  2. Legen Sie es für interne Tests in die Konsole und führen Sie den Play Market durch.

Die erste Methode ist ziemlich bequem. Das Dienstprogramm ist im Android SDK enthalten, wird jedoch standardmäßig nicht installiert. Führen Sie die folgenden Schritte aus, um in Android Studio zu installieren:

  1. Gehen Sie zu Einstellungen -> Darstellung & Verhalten -> Systemeinstellungen -> Android SDK .
  2. Wählen Sie die Registerkarte SDK-Tools .
  3. Setzen Sie ein Häkchen in der Nähe des Google Play Instant Development SDK und klicken Sie auf Übernehmen .


Achten Sie im letzten Schritt auf das Verzeichnis, in dem das Dienstprogramm installiert wird. Weitere Informationen zu diesem Pfad interessieren uns für die Datei ./extras/google/instantapps/ia . Damit können Sie einen sofortigen Anwendungsstart simulieren, indem Sie den Befehl ausführen

ia run <путь к APK-файлу, bundle-у или URL>

Bis zu dem Moment, als ich auf dieses Dienstprogramm gestoßen bin, habe ich die zweite Methode verwendet, wobei die Anwendung ständig in der Google Play Console veröffentlicht wurde. Da die veröffentlichte Anwendung jedoch nicht sofort im Laden erscheint, sondern nach einer unbestimmten Zeit (es dauerte eine halbe Stunde bis zu einem Tag), war diese Testmethode wertlos. Es ist jedoch nicht dafür gedacht. Wenn Sie die Instant App häufig in der Google Play Console veröffentlichen, rate ich Ihnen, die Möglichkeit zu geben, den Anwendungsversionscode nach dem Start zu ermitteln. Ansonsten ist es schwer zu verstehen, ob die letzte oder die letzte veröffentlichte Version gestartet wurde.

Veröffentlichung


Schließlich, wenn Ihre Anwendung getestet und zur Veröffentlichung bereit ist, beeilen Sie sich nicht zur Entspannung! Erstens sollte der Versionscode ( versionCode ) der Instant App den Versionscode der zu installierenden Anwendung nicht überschreiten. Ich empfehle vorab, der Kreativität freien Lauf zu lassen: Wenn Sie die Hauptanwendung freigeben, geben Sie den offensichtlich großen Wert des Codes an, damit Sie sich nicht die Hände binden. Löschen Sie die freigegebene Instant-App von der Konsole, um den Versionscode für die andere Assembly "freizugeben". Formell haben Sie die N-MMöglichkeit, die Instant App freizugeben, während Sie eine Hauptanwendung versionCode = Nund eine Anwendung mit Sofortstart von Google Play haben versionCode = M.

Vergewissern Sie sich auch für die Veröffentlichung von Instant App, dass diese für keine größere Zielgruppe verfügbar ist als die Hauptanwendung. Mit anderen Worten, jeder Instant App-Benutzer sollte in der Lage sein, die Hauptanwendung zu installieren.

Die in der Manifest-Datei angegebenen Berechtigungen der Anwendung ( Berechtigungen ) wirken sich zunächst auf die Zielgruppe aus - sie sollten für beide Anwendungen gleich sein (außer für Berechtigungen, die sich nicht auf die Zielgruppe auswirken). Wenn Ihre Hauptanwendung beispielsweise eine Berechtigung zur Ermittlung des geografischen Standorts erfordert und in der Instant-App nicht erforderlich ist, müssen Sie sie dennoch dort und dort angeben.

Auch einige Zusatzbibliotheken können den Kreis der Endbenutzer einschränken. So war es in unserem Fall. Die Konsole hat einen Fehler "Targeting apk difference", obwohl die Auflösungen beider Anwendungen gleich waren. Auf der Suche nach einer Lösung stieß ich auf diese Frage von Stack Overflow, wo es ratsam ist, die APK-Anwendungsdateien über das Dienstprogramm aapt auszuführen . Es werden detaillierte Informationen zu den Dateien angezeigt, einschließlich aller Abhängigkeiten. Nachdem ich den Unterschied in der Ausgabe für beide Dateien berechnet hatte, bemerkte ich einen Hinweis: Die zu installierende Anwendung hatte eine Zeile uses-gl-es: '0x20000', die in der Instant-App fehlte. Ein kurzes Surfen im Internet führte mich zu einem Hinweis: Diese Zeile besagt, dass die Anwendung die OpenGL-Bibliothek verwendet, die wiederum in Karten verwendet wird. In der Tat hat unsere Hauptanwendung die Bibliothek verwendet play-services-maps, die Instant-App jedoch nicht. Durch das Hinzufügen dieser Abhängigkeit zur Instant App konnte ich die Anwendung endlich freigeben.

Zusammenfassen


  1. In Instant Apps können Sie keine Dienste und ungeschützte Netzwerke (http) verwenden. Die Größe der endgültigen APK-Datei sollte 4 MB nicht überschreiten (vielleicht wird dieses Limit bald auf 10 MB vereinfacht).
  2. Um die Größe der APK-Datei zu reduzieren, können Sie Optimierer und Code-Verschleierer (z. B. ProGuard) verwenden.
  3. Die Übertragung von SharedPreferences von der Instant App zur Hauptanwendung erfolgt automatisch für Android 8.0 und höher. Bei älteren Versionen ist es erforderlich, manuell über die Cookie-API oder die Speicher-API zu schreiben . Es muss berücksichtigt werden, dass eine Anwendung zur Freigabe der Datenmigration vor der Veröffentlichung von Instant App freigegeben werden muss.
  4. Zum Debuggen der Instant App können Sie ein spezielles Hilfsprogramm aus dem Google Play Instant Development SDK verwenden, das im Android SDK enthalten ist.
  5. Die Darstellung der Instant-App, die in der Konsole auf Endgeräten veröffentlicht wird, kann mit einer Verzögerung von einer halben Stunde bis zu einem Tag auftreten. Es ist notwendig, auf die Möglichkeit zu achten, eindeutig zu bestimmen, welche Version der Instant App jetzt vom Play Market gestartet wurde.
  6. Der Versionscode der Instant App sollte den Versionscode der Hauptanwendung nicht überschreiten.
  7. Die Liste der Geräte, für die Instant App verfügbar ist, sollte die Liste der Geräte, für die die Hauptanwendung verfügbar ist, nicht überschreiten. Geben Sie dazu die gleichen Berechtigungen in den Manifest-Dateien an und beachten Sie auch mögliche Einschränkungen aufgrund der Zusatzbibliotheken.

Das ist alles Ich hoffe, diese Informationen werden Ihnen nützlich sein. Ich freue mich über jede Rückmeldung!

Nützliche Quellen:


  1. Google Play Instant-Dokumentation für Android-Entwickler
  2. Tipps zum Verkleinern der APK-Datei Instant App
  3. Google Play Instant-FAQ
  4. Datenmigration mit Cookie-API
  5. Datenmigration mit der Speicher-API

Jetzt auch beliebt: