Android-Instant-Apps sind eine leistungsstarke neue Möglichkeit, um Ihre App vor möglichst vielen Benutzern zu präsentieren.
Nachdem Sie Ihrem Projekt Instant-App-Support hinzugefügt haben, müssen Benutzer Ihre App nicht einmal installiert haben, um auf deren Inhalt und Funktionen zugreifen zu können. Sie können ganze Bereiche Ihrer Anwendung nach Bedarf laden Tippen Sie auf eine URL.
In dieser dreiteiligen Serie werde ich den gesamten Prozess des Hinzufügens von Sofort-App-Unterstützung zu Ihren Android-Projekten behandeln. Wenn Sie fertig sind, wissen Sie genau, wie Sie Android-Anwendungen erstellen, die für jeden Standort auffindbar und zugänglich sind das URLs unterstützt.
Im ersten Beitrag haben wir uns angesehen, was Instant Apps sind und wie sie funktionieren. Außerdem haben wir untersucht, warum diese neue Funktion sowohl für Android-Entwickler als auch für Android-Benutzer eine so große Neuigkeit ist. Zuvor haben wir ein paar Verknüpfungen verwendet und ein Android-Projekt erstellt, das eine integrierte App-Unterstützung umfasst. Wir haben uns jedoch nicht darum gekümmert, wie Sie die Instant-App-Unterstützung für ein vorhandenes Projekt hinzufügen können. Daher konzentrieren wir uns darauf in diesem Beitrag.
Ich werde Ihnen auch zeigen, wie Sie App-Links implementieren. Am Ende dieses Artikels haben Sie eine voll funktionsfähige Sofort-App erstellt, die Sie auf jedem kompatiblen Android-Gerät starten und testen können.
Um Instant-App-Unterstützung zu einem Projekt hinzuzufügen, müssen Sie normalerweise einige drastische Änderungen an der Struktur dieses Projekts vornehmen.
Die Wahrscheinlichkeit, dass Sie mit einer neuen Funktion von experimentieren, ist Ihnen nicht besonders wichtig vollständig Die Struktur eines eigenen Android-Projekts ändern. Daher habe ich eine Beispiel-App bereitgestellt, die Sie von GitHub herunterladen können. In diesem Artikel arbeiten wir an der Aktualisierung dieses spezifischen Projekts, um die Instant-Apps-Funktion zu unterstützen.
Laden Sie das MyLocation-Projekt von GitHub herunter und öffnen Sie es in Android Studio. Sie werden sehen, dass dies ein ziemlich einfaches Projekt ist, bestehend aus einer einzigen App Modul, das ein enthält Aktivität
(MapsActivity
).
Sie können dieses Projekt zwar im aktuellen Status installieren und starten. Wenn MapsActivity jedoch echten Inhalt anzeigen soll, müssen Sie einen API-Schlüssel generieren und ihn diesem Projekt hinzufügen:
res / values / google_maps_api.xml
Datei.google_maps_api.xml
Datei:Ihre_Schlüssel
Wir werden dieses Projekt so aktualisieren, dass seine einzige Funktion (d. H. Die Anzeige des aktuellen Standorts des Benutzers auf einer Karte) in Form einer sofortigen App verfügbar ist. Um dies zu erreichen, führen wir die folgenden Schritte aus:
Bevor wir beginnen, gibt es noch ein paar Dinge, die Sie beachten sollten:
Unsere erste Aufgabe besteht darin, das App-Modul von MyLocation in ein Basis-Feature-Modul umzuwandeln.
Wenn Sie mit mehreren Modulen arbeiten, ist es hilfreich, frühzeitig eine Namenskonvention festzulegen. In diesem Artikel füge ich den Typ jedes Moduls hinzu (-App
, -Base
, -instantapp
, etc.) zum Namen des Moduls:
Mylocation-Base
Modul build.gradle Datei. Die erste Zeile zeigt, dass dieses Modul immer noch den Standard verwendet com.android.application
Plugin; Alle Funktionsmodule müssen jedoch das verwenden com.android.feature
Plugin, Sie müssen dies also ändern Plugin anwenden: 'com.android.feature'.
.baseFeature true
Attribut zum Android
Codeblock. applicationID
einmal - und das ist im App-Modul. Um Konflikte und Verwirrung zu vermeiden, sollten Sie dieses Attribut aus dem Rest Ihres Projekts entfernen applicationID
Attribut in der Mylocation-Base
build.gradle Datei und löschen Sie es. Nachdem Sie alle diese Schritte ausgeführt haben, wird Ihre Mylocation-Base
build.gradle Die Datei sollte ungefähr so aussehen:
plugin anwenden: 'com.android.feature' android baseFeature true compileSdkVersion 25 buildToolsVersion "26.0.0" defaultConfig minSdkVersion 24 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.runner.AndroidJUnitNun
An diesem Punkt fehlt bei MyLocation ein Anwendungsmodul. Erstellen Sie daher einen Ersatz:
Mylocation-App
Manifest-Datei des Moduls. Wenn Sie an das Projekt denken, das wir im vorherigen Beitrag erstellt haben, werden Sie sich daran erinnern, dass das Manifest des App-Moduls ziemlich leer war, da der Inhalt aller anderen in diesem Projekt verstreuten Manifests mit dieser Datei zusammengeführt werden würde. Genau dies wird mit unserem MyLocation-Projekt geschehen. Um Konflikte während des Zusammenführungsprozesses zu vermeiden, sollten Sie das gesamte Manifest löschen Anwendung
Block. Mylocation-App
Modul build.gradle Datei. Dieses Modul hängt von unserem ab Mylocation-Base
Entfernen Sie den gesamten Code aus dem Abhängigkeiten
blockieren und durch Folgendes ersetzen: Abhängigkeiten Implementierungsprojekt (': mylocation-base')
Wir haben alle Funktionen von MyLocation erfolgreich in ein gemeinsam nutzbares Basisfunktionsmodul umgewandelt. Da wir dazu einige drastische Änderungen an unserer Projektstruktur vornehmen mussten, sollten Sie prüfen, ob MyLocation weiterhin als installierbare App funktioniert:
Das Instant-App-Modul erfüllt die einfache, aber wesentliche Aufgabe, als Container für alle Instant-App-APKs zu fungieren, die von Ihrem Projekt generiert werden. So erstellen Sie dieses Modul:
build.gradle
Datei und deklarieren Mylocation-Base
als abhängigkeit: plugin anwenden: 'com.android.instantapp' Abhängigkeiten Implementierungsprojekt (': mylocation-base')
Der Benutzer startet eine Sofort-App, indem er auf eine URL tippt, die einem Basis-Feature oder Feature-Modul zugeordnet ist. Diese URL kann sich an einer beliebigen Stelle befinden. Möglicherweise handelt es sich um eine URL, die ein Freund direkt per E-Mail oder Sofortnachricht gesendet hat. Vielleicht ist es eine URL, die sie in einem Tweet, einem Forum oder in einem Kommentarthread entdeckt haben, oder eine URL, die in ihren Google-Suchergebnissen angezeigt wird.
Unabhängig davon, wo es angezeigt wird, erkennt Google Play, wenn der Benutzer auf diesen Link tippt, dass er mit einem Basis-Feature oder Feature-Modul verknüpft ist, und ruft den gesamten Code und die Ressourcen ab, die zum Ausführen dieses bestimmten Moduls auf dem Gerät des Benutzers erforderlich sind.
In diesem Abschnitt stellen wir diese Beziehung zwischen unserem Basisfunktionsmodul und einer URL mithilfe von App-Links her. Die Android-App-Links-Funktion wurde ursprünglich eingeführt, um Benutzern zu helfen, den App-Auswahldialog von Android zu umgehen, wenn versucht wurde, auf Inhalte zuzugreifen, die von einer auf ihrem Gerät bereits installierten App verarbeitet werden könnten. Wenn Sie beispielsweise auf einen Link zu einem YouTube-Video tippen, zeigt das System möglicherweise ein Dialogfeld an, in dem Sie gefragt werden, ob Sie diesen Link in der YouTube-App öffnen möchten.
Im Kontext von Instant-Apps können Sie mit App-Links die Einstiegspunktaktivität eines Funktionsmoduls einer bestimmten URL zuordnen. Wir haben den Einstiegspunkt Aktivitäten in Teil 1 untersucht, aber als Reprise ist dies die erste Aktivität, die der Benutzer sieht, wenn er Ihre Basisfunktion oder das "reguläre" Funktionsmodul startet.
Wenn Sie einem realen Projekt Instant-App-Support hinzufügen, müssen Sie entscheiden, welche Aktivität die effektivste Einführung in Ihre Instant-App-Komponente ist, aber seitdem Mylocation-Base
hat nur eine einzige Aktivität, diese Entscheidung wurde bereits für uns getroffen!
In diesem Abschnitt werden wir die integrierte Version von Android Studio verwenden App-Links-Assistent zu assoziieren MapsActivity
mit der URL www.example.com/maps, aber zunächst ein Disclaimer:
Das Hochladen einer Digital Asset Links-Datei in die Domäne, mit der Sie arbeiten (in diesem Fall www.example.com), ist a entscheidend Gehen Sie im App-Links-Prozess vor, da das System überprüft, ob Ihre App die Berechtigung hat, als Standardhandler für alle mit dieser Domäne verknüpften Links zu fungieren.
Obwohl ich mich mit dem Generieren und Hochladen einer Digital Asset Links-Datei beschäftigen werde, können wir diesen Schritt nicht durchführen, da wir nicht die Domäne www.example.com besitzen. Seltsamerweise scheint es zum Zeitpunkt des Schreibens jedoch möglich zu sein, eine Instant-App-Komponente auf einem AVD-Gerät zu testen, selbst wenn Sie keinen Digital Asset Link in die zugehörige Domäne hochgeladen haben. Sie müssen lediglich die Laufzeit von Android Studio optimieren Aufbau.
Wenn Sie leicht auf eine Domäne zugreifen können, in der Sie eine Digital Asset Links-Datei hosten können, würde ich empfehlen, die www.example.com-URLs durch echte URLs zu ersetzen und die resultierende Digital Asset Links-Datei auf Ihre Website hochzuladen. Selbst wenn Sie die URLs "www.example.com" verwenden, sollten Sie dennoch die Instant-App-Komponente von MyLocation testen können, indem Sie die Laufzeitkonfiguration optimieren.
Android Studio 2.3 und höher wird mit einem integrierten App-Links-Assistenten geliefert, der das Hinzufügen von App-Links zu Ihrem Projekt viel einfacher macht:
Im nächsten Schritt geben Sie die spezifische URL ein, die Sie in Ihrem Mapping verwenden möchten. Sie haben hier einige Möglichkeiten, also öffnen Sie die Pfad Dropdown und wählen Sie aus:
MapsActivity
Um auf die URL www.example.com/maps zu antworten, wähle ich aus Pfad aus diesem Dropdown-Menü. Wir haben die Domain www.example.com bereits mit unserem Projekt verbunden. Daher müssen Sie nur den letzten Teil der URL eingeben (/ Karten) in das Begleittextfeld. MapsActivity
würde auf URLs wie www.example.com/maps/mylocation und www.example.com/maps/nearby antworten.Als nächstes müssen Sie auswählen MapsActivity
als Einstiegspunkt Aktivität dieses Moduls:
Der App Links Assistant aktualisiert Ihr Manifest auf hilfreiche Art und Weise mit dem gesamten erforderlichen Code MapsActivity
in die Einstiegspunktaktivität dieses Moduls; Wenn Sie einen Blick auf Ihre Mylocation-Base
Manifest des Moduls, dann wird folgender Code angezeigt:
Als nächstes müssen wir es sagen MapsActivity
wie man reagiert, wenn es über diese URL gestartet wird. Wieder kann der App Links Assistant Sie durch diesen Vorgang führen:
MapsActivity
. MapsActivity
: Absicht appLinkIntent = getIntent (); String appLinkAction = appLinkIntent.getAction (); Uri appLinkData = appLinkIntent.getData ();
Wenn Sie Instant-App-Unterstützung für Ihre eigenen realen Projekte hinzufügen möchten, möchten Sie diesen Code normalerweise erweitern, je nachdem, wie Ihre Activity reagieren soll, wenn sie als Instant-App gestartet wird, jedoch für die Zwecke unserer MyLocation-Projekt, diese wenigen Zeilen erledigen die Arbeit.
In diesem Abschnitt werde ich Ihnen zeigen, wie Sie eine Digital Asset Links-Datei erstellen und wie Sie diese auf Ihre Website hochladen können. Wenn Sie www.example.com als Ersatz für echte URLs verwenden, können Sie diesen Schritt nicht durchführen. Es ist jedoch immer noch wichtig zu wissen, wie Sie diese Datei erstellen und hochladen, wenn Sie dazu bereit sind. Fügen Sie Ihren eigenen Android-Projekten sofortige App-Unterstützung hinzu.
Um diese Zuordnung zwischen Ihrer Domäne und Ihrer Anwendung zu erstellen, müssen Sie die folgenden Schritte ausführen:
assetlinks.json
Datei auf Ihrem Computer. Jetzt können Sie endlich die Instant-App-Komponente von MyLocation testen!
Insbesondere möchten wir das testen, wenn ein Benutzer tut nicht Wenn MyLocation auf ihrem Gerät installiert ist, können Sie durch Tippen auf den Link www.example.com/maps auf das Modul mylocation-base zugreifen:
Android Studio simuliert nun das Tippen auf den Link www.example.com/maps. Der AVD sollte darauf reagieren, indem er das Basisfunktionsmodul lädt. An diesem Punkt ist die MapsActivity
erscheint auf dem Bildschirm, und Sie können genau so mit dem Gerät interagieren, als ob MyLocation auf diesem Gerät installiert wäre.
Um zu überprüfen, ob MyLocation auf diesem Gerät wirklich nicht vorhanden ist, minimieren Sie die Option MapsActivity
und öffnen Sie den Launcher von AVD. Die MyLocation-App sollte vollständig fehlen. Wenn Sie jedoch auf die AVDs klicken, wird die App nicht angezeigt Zurück Softkey, die MapsActivity
ist auf diesem Gerät noch sichtbar und verfügbar.
Sie können das MyLocation-Projekt, das mit vollständiger Instant-App-Unterstützung aktualisiert wurde, von GitHub herunterladen.
Instant-Apps sind immer noch eine sehr neue Funktion, daher ist es nicht ungewöhnlich, dass Fehlermeldungen, Fehler und andere merkwürdige Verhaltensweisen auftreten, insbesondere wenn Sie eine der Vorschau- oder Canary-Versionen von Android Studio 3.0 verwenden.
Das am häufigsten auftretende Problem ist das Auswählen Run> Run instantapp Über die Android Studio-Symbolleiste können Sie eine Antwort des AVD erhalten, indem Sie das Dialogfeld "App-Auswahl" anzeigen oder die URL in ihrem Standardbrowser öffnen. Wenn dies der Fall ist, bedeutet das, dass die AVD nicht richtig erkennt, dass Ihre URL einem Instant-App-Modul zugeordnet ist, und sie wie eine normale URL behandelt.
Unter der Annahme, dass Sie die Instant-App-Unterstützung korrekt implementiert haben, kann es sein, dass Ihr AVD möglicherweise die Zusammenarbeit verweigert:
Abhängig von der von Ihnen erstellten AVD ist es möglich, dass Sie Ihre AVD explizit anweisen müssen, Instant Apps zu unterstützen:
Instant-Apps werden nicht in jedem Gebietsschema unterstützt. Prüfen Sie daher, ob Instant-Apps derzeit in Ihrem Teil der Welt verfügbar sind. Wenn dies nicht der Fall ist, müssen Sie die Befehle adb (Android Debug Bridge) verwenden, um Ihre AVD dazu zu bringen, dass Sie denken, Sie befinden sich an einem anderen Ort:
CD / Benutzer / Jessicathornsby / Bibliothek / Android / SDK / Plattform-Tools
ADB Shell
#
erscheint im Terminal- oder Eingabeaufforderungsfenster, geben Sie den nächsten Befehl ein: setprop persist.sys.locale [ISO-Sprachcode plus Länder- / Regionscode]; Stopp; Schlaf 5; Start
Wenn keine der oben genannten Korrekturen funktioniert, erhalten Sie möglicherweise positive Ergebnisse, indem Sie die Instant-App-Komponente über einen Adb-Befehl auslösen, anstatt durch die verschiedenen Android Studio-Menüs zu navigieren:
CD
Befehl, damit die Terminal- / Eingabeaufforderung auf das Adb-Programm zeigt. vollständiger URL-Pfad
mit der URL, die Sie verwenden möchten:./ adb-shell am start -a android.intent.action.VIEW -d vollständiger-url-pfad
Manchmal weigert sich Android Studio möglicherweise sogar, eine Instant-App-Komponente auf Ihrem AVD zu laden, da einige Entwickler berichtet haben, dass der folgende Fehler aufgetreten ist, wenn sie versuchen, eine Instant-App zu starten:
Das Laden der Sofort-App ist fehlgeschlagen: Das Lesen des Bundles ist abgelaufen.
Wenn diese Fehlermeldung in Android Studio auftritt, können Sie sie normalerweise beheben, indem Sie den Cache leeren:
In diesem Artikel haben wir untersucht, wie Sie ein vorhandenes Android-Projekt für die Unterstützung von Instant-Apps aktualisieren können. Dazu erstellen Sie ein Basis-Feature-Modul und ein Instant-App-Modul, implementieren App Links und testen dieses Projekt auf einer AVD.
An diesem Punkt haben Sie alle Informationen, die Sie benötigen, um Ihren bestehenden Android-Projekten sofortige App-Funktionalität hinzuzufügen, jedoch mit einer Einschränkung: Wir haben nur ein einziges Basisfunktionsmodul erstellt. Dies bedeutet, dass Sie derzeit nur eine Instant-App-Funktion pro Projekt anbieten können.
Im letzten Beitrag dieser Serie werden wir dies korrigieren, indem wir untersuchen, wie Sie dem MyLocation-Projekt ein zusätzliches Funktionsmodul hinzufügen. Das wird bald raus sein. Während Sie warten, lesen Sie einige unserer anderen großartigen Beiträge zur Android-App-Entwicklung!