Android-Konzepte (für Webentwickler)

Peter Conn
Peter Conn
Joyce Toh
Joyce Toh

Wenn du ein Webentwickler bist und Android und Google Play neu für dich sind, gibt es einige Dinge, die du beachten solltest. Dafür gibt es (dank dem Android-Team) bereits viele Ressourcen und Dokumentationen, aber hier gehen wir auf einige wichtige Konzepte ein und wie sie mit Bubblewrap in Zusammenhang stehen.

Upload- und Signaturschlüssel

Wenn Sie mit Bubblewrap ein Android App Bundle (AAB) generieren möchten (Hinweis: Ab August 2021 müssen alle neuen Apps bei Google Play das Android App Bundle-Format) oder APK verwenden, um sie bei Google Play hochladen und veröffentlichen zu können. Dann müssen Sie Ihre App mit einem Signaturschlüssel signieren. Google Play bietet Ihnen zwei Möglichkeiten, dies zu ändern:

  • Play App-Signatur (dringend empfohlen): Google verwaltet und schützt den Signaturschlüssel Ihrer App für Sie. Damit werden Ihre APKs für den Vertrieb signiert. Die Play App-Signatur verwendet zwei Schlüssel. Den App-Signaturschlüssel, den Google für Sie verwaltet, und den Uploadschlüssel, den Sie aufbewahren und für Sie privat bleiben. Mit dem Uploadschlüssel signieren Sie Ihre App für den Upload in die Play Console. Über dieses System können Sie Ihren Uploadschlüssel zurücksetzen, wenn er verloren geht oder kompromittiert wird. Wenden Sie sich dazu an das Play-Supportteam. Derzeit können Sie Ihre App bei Google Play als AAB oder APK hochladen:
    • Android App Bundle (AAB): Wenn Sie ein AAB in die Play Console hochladen, verschieben Sie das Erstellen und Generieren von APKs auf den Google Play Store. Wenn ein Nutzer deine App herunterlädt und installiert, wird sie von Google Play als signiertes APK bereitgestellt. Daher muss das Signieren der APKs auch von Google Play erfolgen. Wenn Sie Ihre App also als AAB in die Play Console hochladen, müssen Sie dafür standardmäßig die Play App-Signatur verwenden.
    • APK: Bei APKs können Sie die Play App-Signatur aktivieren. Die Aktivierung der Play App-Signatur wird dringend empfohlen, da sie die Sicherheit Ihres Signaturschlüssels erhöht. Wie bereits erwähnt, müssen alle neuen Apps bei Google Play bald im AAB-Format hochgeladen werden. Daher empfehlen wir, dies anstelle von APKs hochzuladen.
  • Eigenen Signaturschlüssel verwalten: Wenn du deinen eigenen Schlüssel verwalten und nicht die Play App-Signatur aktivieren möchtest, bist du allein für den Signaturschlüssel deiner App verantwortlich. Anders als bei der Play App-Signatur kann sie bei Verlust des Schlüssels nicht zurückgesetzt werden. Wenn Sie den Signaturschlüssel verlieren, können Sie die App also nicht mehr aktualisieren.

Wenn Sie bei der Einrichtung von bubblewrap init zum Abschnitt Schlüsselinformationen (5/5) gelangen, werden Sie aufgefordert, einen Schlüsselspeicherstandort und einen Schlüsselnamen einzugeben oder die Standardwerte zu verwenden. Der Standardspeicherort für den Schlüsselspeicher ist die Datei android.keystore in Ihrem Projektverzeichnis und der Standardschlüsselname ist android. Wenn Bubblewrap an diesem Speicherort keinen vorhandenen Schlüsselspeicher mit diesem Schlüsselnamen findet, wird ein Speicher für Sie erstellt. Außerdem werden Sie zur Eingabe von Passwörtern aufgefordert. Notieren Sie sich die Passwörter, die Sie während des Build-Prozesses eingegeben haben (bubblewrap build). Dort wird der Schlüssel zum Signieren Ihrer App verwendet. Wenn Sie sich für die Play App-Signatur anmelden, wird der Signaturschlüssel, der von Bubblewrap generiert und zum Signieren Ihrer App verwendet wurde, zum „Uploadschlüssel“. Unabhängig davon, ob Sie den mit Bubblewrap generierten Schlüssel als Signatur- oder Uploadschlüssel verwenden, sollten Sie den Schlüssel schützen und geheim halten. Wir raten davon ab, es einer Versionsverwaltung zuzuweisen. Beschränken Sie stattdessen die Anzahl der Personen, die Zugriff darauf haben.

Digital Asset Links sind erforderlich, um die Beziehung zwischen deiner Website und deiner Android-App anzugeben. Damit deine von Bubblewrap generierte Android-App ordnungsgemäß bestätigt und als vertrauenswürdige Webaktivität (und nicht als benutzerdefinierter Chrome-Tab) gestartet wird, musst du der Datei assetlinks.json den entsprechenden Schlüssel hinzufügen. Laden Sie es dann unter .well-known/assetlinks.json (relativ zum Stamm) auf Ihre Website hoch. Ihre assetlinks.json-Datei muss dieses Format haben:

[{
 "relation": ["delegate_permission/common.handle_all_urls"],
 "target": {
   "namespace": "android_app",
   "package_name": "com.your.package_name",
   "sha256_cert_fingerprints": [
     "XX:XX:XX:..."
   ]
 }
}]

Fingerabdruck des SHA256-Zertifikats abrufen

Zum Erstellen der Datei assetlinks.json benötigen Sie den Fingerabdruck des SHA-256-Zertifikats, der dem Signaturschlüssel Ihrer App zugeordnet ist. Wichtig ist, dass sich die mit Ihren Signatur- und Uploadschlüsseln verknüpften Fingerabdrücke unterscheiden. Diese Unterscheidung ist wichtig, insbesondere wenn Sie beobachten, wie Ihre App als benutzerdefinierter Chrome-Tab gestartet wird und die Browserleiste sichtbar ist. Dann hat die Datei assetlinks.json wahrscheinlich nicht den Fingerabdruck, der dem entsprechenden Schlüssel entspricht.

Es empfiehlt sich, sowohl den Fingerabdruck des Signaturzertifikats als auch den Fingerabdruck des Uploadzertifikats in der Datei „assetlinks.json“ zu haben, um Fehler in der App einfacher lokal zu beheben. Weitere Informationen dazu, wie Sie beide Schlüssel in der Datei assetlinks.json haben, finden Sie im Abschnitt Weitere Schlüssel hinzufügen unten.

Es gibt verschiedene Möglichkeiten, den Fingerabdruck zu erhalten. Diese werden in den nächsten Abschnitten beschrieben. Sie sollten alle dieselben Fingerabdrücke erhalten. Sie können also die Methode wählen, die am bequemsten ist.

Über die Play Console

Je nachdem, ob Sie die Play App-Signatur aktivieren oder nicht, können Sie eine oder zwei Tasten verwenden. So rufen Sie den entsprechenden SHA256-Fingerabdruck für jeden Schlüssel ab:

  1. Rufen Sie die Play Console auf.
  2. Wählen Sie die gewünschte App aus.
  3. Klicken Sie links im Navigationsmenü unter Release auf Einrichten -> App-Integrität.
  4. Kopieren Sie den SHA256-Algorithmus für den entsprechenden Schlüssel:

Geeigneten SHA256-Zertifikat-Fingerabdruck für Ihren Signatur- oder Uploadschlüssel abrufen

  • Signaturschlüssel: Kopieren Sie den SHA256-Fingerabdruck für „Zertifikat für den App-Signaturschlüssel“. Dieser Fingerabdruck entspricht deiner App, wenn du sie aus dem Google Play Store herunterlädst, da Google Play deine App mit dem Signaturschlüssel signiert vertreibt.

  • Uploadschlüssel: Kopieren Sie den SHA256-Fingerabdruck für das Feld Uploadschlüsselzertifikat. Dieser Fingerabdruck entspricht der App, wenn Sie sie lokal installieren (z. B. über ADB über USB). Dieses APK (auf deinem lokalen Computer) wurde von Bubblewrap erstellt und daher mit dem Schlüssel signiert, den es (während der Einrichtung von init) auch für dich erstellt hat. Denken Sie daran, dass dies der Signaturschlüssel für Ihre lokal installierte App sein kann. Tatsächlich wird er jedoch zum „Uploadschlüssel“, wenn Sie Ihre App über Google Play veröffentlichen.

Über keytool

keytool ist ein Tool zur Schlüssel- und Zertifikatsverwaltung. Mit dem Keytool können Sie den SHA-256-Fingerabdruck extrahieren, der mit dem generierten APK oder AAB-Bubblewrap verknüpft ist. Dieser Fingerabdruck ist für den lokalen Signaturschlüssel bestimmt. Wenn du deine App bei Google Play hochlädst und die Play App-Signatur aktivierst, wird er zum „Uploadschlüssel“.

keytool -printcert -jarfile [path to APK or AAB] | grep SHA256

Sie können die richtige Digital Asset Links-Datei für Ihre App auch mit dem Tool „Asset-Link“ abrufen:

  1. Installieren Sie das Tool zur Asset-Verknüpfung aus dem Play Store.
  2. Laden Sie die App auf demselben Gerät aus dem Google Play Store herunter oder installieren Sie sie lokal.
  3. Öffne die Asset-Link-Tool-App. Eine Liste aller auf deinem Gerät installierten Apps wird anhand des Paketnamens angezeigt. Filtern Sie die Liste nach der Anwendungs-ID, die Sie zuvor während des bubblewrap init-Vorgangs ausgewählt haben, und klicken Sie auf diesen Eintrag.
  4. Es wird eine Seite mit der Signatur Ihrer App und einem generierten Digital Asset Link angezeigt. Über die Schaltflächen „Kopieren“ oder „Teilen“ unten kannst du den Bericht nach Belieben exportieren (z.B. in Google Notizen speichern oder per E-Mail an dich selbst senden).

Dasselbe gilt für Signatur- oder Uploadschlüssel. Wenn Sie Ihre App über den Google Play Store installiert haben, erhalten Sie über das Asset-Link-Tool den Fingerabdruck für den Signaturschlüssel Ihrer App. Wenn du die App direkt von deinem lokalen Computer installiert hast, ist der Fingerabdruck für den generierten Bubblewrap-Schlüssel.

Nachdem Sie es hochgeladen haben, prüfen Sie, ob Sie in einem Browser auf die Asset-Link-Datei zugreifen können. Prüfen Sie, ob https://example.com/.well-known/assetlinks.json in die Datei aufgelöst wird, die Sie gerade hochgeladen haben.

Jekyll-basierte Websites

Wenn Ihre Website von Jekyll generiert wird (z. B. GitHub-Seiten), müssen Sie eine Konfigurationszeile hinzufügen, damit das Verzeichnis .well-known in die Ausgabe aufgenommen wird. In der GitHub-Hilfe finden Sie weitere Informationen zu diesem Thema. Erstellen Sie eine Datei namens _config.yml im Stammverzeichnis Ihrer Website (oder fügen Sie sie hinzu, falls sie bereits vorhanden ist) und geben Sie Folgendes ein:

# Folders with dotfiles are ignored by default.
include: [.well-known]

Weitere Schlüssel hinzufügen

Eine Digital Asset Link-Datei kann mehrere Apps und für jede App mehrere Schlüssel enthalten. Wenn Sie beispielsweise einen zweiten Schlüssel hinzufügen möchten, ermitteln Sie diesen einfach mit dem Tool „Asset-Verknüpfung“ und fügen Sie ihn als zweiten Eintrag hinzu. Der Code in Chrome, der diese JSON-Datei parst, ist ziemlich streng. Achten Sie daher darauf, nicht versehentlich ein zusätzliches Komma am Ende der Liste einzufügen.

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.your.package_name",
    "sha256_cert_fingerprints": [
      "XX:XX:XX:..."
    ]
  }
},{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.your.package_name",
    "sha256_cert_fingerprints": [
      "XX:XX:XX:..."
    ]
  }
}]

Fehlerbehebung

Chrome protokolliert die Ursache für das Fehlschlagen der Digital Asset Links-Überprüfung und du kannst die Protokolle auf einem Android-Gerät mit adb logcat aufrufen. Wenn Sie unter Linux/Mac entwickeln, können Sie die relevanten Protokolle von einem verbundenen Gerät mit folgenden Funktionen aufrufen:

> adb logcat -v brief | grep -e OriginVerifier -e digital_asset_links

Wenn beispielsweise die Meldung Statement failure matching fingerprint. angezeigt wird, sollten Sie das Tool „Asset-Link“ verwenden, um die Signatur Ihrer App zu sehen und zu prüfen, ob sie mit der Signatur in der Datei assetlinks.json übereinstimmt.