Du kannst eine Capacitor-App in Huawei AppGallery veröffentlichen und dabei denselben Android-Build verwenden, den du für Google Play einreichst. Registriere ein kostenloses HUAWEI-Developer-Konto, prüfe, welche Plugins von Google Play Services abhängen (diese fehlen auf Huawei-Handys, die seit Ende 2019 erschienen sind), verstecke oder ersetze diese Funktionen und lade dann eine signierte APK mit einem Store-Eintrag in AppGallery Connect hoch. Warte anschließend auf die Prüfung. Dieser Leitfaden behandelt jeden Schritt, inklusive einer kleinen nativen Prüfung, die du in deine App einbauen kannst, um Google Play Services ohne zusätzliche Abhängigkeiten zu erkennen.
Wer auf AppGallery veröffentlichen sollte
AppGallery ist der Standard-Store auf Huawei-Handys und Tablets. Das ist relevant, wenn deine Nutzer zu folgenden Gruppen gehören:
- Personen in Europa, dem Nahen Osten, Afrika, Lateinamerika und Südostasien, die Huawei-Geräte verwenden, die nach den US-Handelsbeschränkungen von 2019 erschienen sind. Diese Geräte werden ohne Google Play Services und ohne Play Store ausgeliefert.
- Enterprise-Kunden oder Behörden, die auf Huawei-Hardware standardisiert haben.
Ein Hinweis zu HarmonyOS: Huawei-Handys, die außerhalb des chinesischen Festlands verkauft werden, laufen mit EMUI, das auf Android basiert und APKs installiert. Geräte in Festlandchina mit HarmonyOS NEXT (HarmonyOS 5 und neuer) führen nur native HarmonyOS-Apps aus, ein Android-APK erreicht sie also nicht. Dieser Leitfaden behandelt die Android-basierte AppGallery.
Schritt 1: Abhängigkeiten von Google Play Services prüfen
Capacitor selbst hängt nur von AndroidX und seiner eigenen Android-Bibliothek ab. Das Risiko entsteht durch Plugins, die Google-Bibliotheken einbinden. Schau dir deine Abhängigkeiten an:
cd android
./gradlew :app:dependencies --configuration releaseRuntimeClasspath \
| grep -E "com.google.android.gms|com.google.firebase|com.google.android.play|billingclient" \
| sort -u
Dann sortiert sie in „funktioniert ohne Google Play-Dienste“ und „benötigt Google Play-Dienste“ ein.
| Abhängigkeit | Auf Huawei ohne GMS | Typische Plugins |
|---|---|---|
| Firebase Cloud Messaging | Funktioniert nicht | @capacitor/push-notifications, Firebase-Messaging-Plugins |
| Google Maps SDK | Funktioniert nicht | @capacitor/google-maps |
Google Sign-In (play-services-auth, Credential Manager Google ID) |
Funktioniert nicht | Google-Anbieter von @capgo/capacitor-social-login |
| Google Play Billing | Funktioniert nicht | @capgo/capacitor-native-purchases, RevenueCat auf Android |
| In-App-Bewertung abspielen | Funktioniert nicht | @capgo/capacitor-in-app-review |
| In-App-Updates abspielen | Funktioniert nicht | Play-Update-Helfer in @capgo/capacitor-updater |
| Play Integrity | Funktioniert nicht | App-Attestations-Plugins auf Android |
Fused Location (play-services-location) |
Hängt vom Plugin ab; einige fallen auf Androids LocationManager zurück | @capacitor/geolocation, Hintergrund-Geolocation-Plugins |
play-services-tasks, play-services-basement alleine |
Fine (einfache Bibliotheken) | Viele Plugins |
| Firestore, Realtime Database, Storage, Remote Config, Crashlytics, E-Mail/Passwort-Auth | Work | Firebase-Plugins |
| Capgo Live Updates | Work | @capgo/capacitor-updater |
| Apple- und Facebook-Login | Fehler | @capgo/capacitor-social-login Apple- / Facebook-Provider |
„Funktioniert nicht“ bedeutet in der Regel, dass der Call eine Exception wirft oder nie aufgelöst wird. Es stürzt selten die gesamte App ab, aber Reviewer testen auf Huawei-Geräten, und eine tote Schaltfläche oder ein leerer Bildschirm sind häufige Ablehnungsgründe.
Schritt 2: Google Play-Dienste zur Laufzeit erkennen
Du kannst nach Google Play-Diensten suchen, ohne eine Google-Abhängigkeit hinzuzufügen, indem du den Android-Paketmanager fragst, ob com.google.android.gms installiert ist. Füge deinem Capacitor-Android-Projekt ein kleines lokales Plugin hinzu.
android/app/src/main/java/com/example/app/ServicesCheckPlugin.java:
package com.example.app;
import android.content.pm.PackageManager;
import com.getcapacitor.JSObject;
import com.getcapacitor.Plugin;
import com.getcapacitor.PluginCall;
import com.getcapacitor.PluginMethod;
import com.getcapacitor.annotation.CapacitorPlugin;
@CapacitorPlugin(name = "ServicesCheck")
public class ServicesCheckPlugin extends Plugin {
private boolean isInstalled(String packageName) {
try {
getContext().getPackageManager().getPackageInfo(packageName, 0);
return true;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
@PluginMethod
public void getStatus(PluginCall call) {
JSObject ret = new JSObject();
ret.put("gms", isInstalled("com.google.android.gms"));
ret.put("hms", isInstalled("com.huawei.hwid"));
call.resolve(ret);
}
}
Registriere es in MainActivity.java bevor super.onCreate:
package com.example.app;
import android.os.Bundle;
import com.getcapacitor.BridgeActivity;
public class MainActivity extends BridgeActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
registerPlugin(ServicesCheckPlugin.class);
super.onCreate(savedInstanceState);
}
}
Seit Android 11 sehen Apps nur noch Pakete, die sie deklarieren. Füge ein <queries> Block zu android/app/src/main/AndroidManifest.xml, innerhalb von <manifest>:
<queries>
<package android:name="com.google.android.gms" />
<package android:name="com.huawei.hwid" />
</queries>
Rufe es aus TypeScript auf:
import { Capacitor, registerPlugin } from '@capacitor/core';
interface ServicesCheckPlugin {
getStatus(): Promise<{ gms: boolean; hms: boolean }>;
}
const ServicesCheck = registerPlugin<ServicesCheckPlugin>('ServicesCheck');
export async function getMobileServices() {
if (Capacitor.getPlatform() !== 'android') {
return { gms: true, hms: false };
}
return ServicesCheck.getStatus();
}
Die Paketpräsenz ist ein sinnvoller Indikator. Sie sagt aber nicht, ob Google Play Services aktuell oder aktiviert ist; wenn du das auch brauchst, füge hinzu com.google.android.gms:play-services-base und nutze GoogleApiAvailability.isGooglePlayServicesAvailable(), das auch auf Geräten ohne GMS funktioniert.
Schritt 3: Graceful degradieren
Nutze das Ergebnis, um Features ein- und auszuschalten:
import { PushNotifications } from '@capacitor/push-notifications';
import { getMobileServices } from './services';
export const features = {
push: true,
googleSignIn: true,
playBilling: true,
inAppReview: true,
};
export async function initFeatures() {
const { gms } = await getMobileServices();
features.push = gms;
features.googleSignIn = gms;
features.playBilling = gms;
features.inAppReview = gms;
if (features.push) {
const perm = await PushNotifications.requestPermissions();
if (perm.receive === 'granted') {
await PushNotifications.register();
}
}
}
Praktische Fallbacks:
- Anmeldung: Blende den Google-Button aus und zeige stattdessen E-Mail-, Apple- oder Facebook-Login. Mit
@capgo/capacitor-social-logininitialisierst du nur die Provider, die du anzeigst. - Zahlungen: Google Play Billing ist nicht verfügbar. AppGallery hat sein eigenes Huawei IAP. Wenn digitale Käufe zentral für deine App sind, integriere entweder Huawei IAP oder liefere den AppGallery-Build ohne Käufe aus und erwähne das in der Beschreibung.
- Push: Nutze Huawei Push Kit für HMS-Geräte. Es gibt kein offizielles Capacitor-Plugin; Huawei veröffentlicht Cordova-Plugins unter
@hmscore/*, die in Capacitor laufen, oder du schreibst ein kleines natives Plugin um die Push Kit SDK herum. - Karten: Nutze eine Web-Karte (Leaflet, MapLibre GL JS) im WebView, die auf jedem Gerät funktioniert, oder Huawei Map Kit.
- App bewerten: Bei Huawei verlinken Sie stattdessen Ihre AppGallery-Seite, anstatt die Play-Bewertung API aufzurufen.
- Store-Links: „App aktualisieren“-Buttons sollten AppGallery öffnen (
appmarket://details?id=com.example.app) auf Huawei-Geräten, nicht im Play Store.
Teste auf einem echten Huawei-Gerät oder mit dem Huawei-Cloud-Debugging-Dienst. Ein Emulator mit Google-APIs verdeckt all diese Probleme.
Schritt 4: HUAWEI-Developers-Konto registrieren
- Erstelle eine HUAWEI-ID unter developer.huawei.com.
- Abgeschlossen Identitätsprüfung als Privatperson oder Unternehmen. Privatpersonen geben in der Regel Ausweisdokumente und Bankkartendaten an; Unternehmen legen Handelsregisterauszüge vor. Die Prüfung dauert in der Regel ein bis zwei Werktage.
- Wählen Sie den Kontotyp und das Land sorgfältig. Huawei erlaubt keine Umwandlung eines Privatkontos in ein Unternehmenskonto, und das verifizierte Land oder die Region kann später nicht geändert werden.
Die Registrierung ist kostenlos.
Schritt 5: App in AppGallery Connect erstellen
- Öffne AppGallery Connect > Meine Apps > Neue App.
- Plattform: Android. Gerät: Smartphone (deckt auch Tablets ab).
- App-Name, Standardsprache und Paketname. Der Paketname muss mit
appIdin einemcapacitor.config.tsund kann nach dem ersten Upload nicht mehr geändert werden. - App-Kategorie auswählen.
Schritt 6: Release-Paket bauen und signieren
AppGallery akzeptiert APK und AAB. Der APK-Weg ist einfacher: Du signierst es mit deinem eigenen Schlüssel, und Huawei muss deinen Signierschlüssel nicht aufbewahren.
bun run build
bunx cap sync android
cd android
./gradlew assembleRelease
Signierung konfigurieren in android/app/build.gradle (Passwörter aus Umgebungsvariablen laden oder keystore.properties, niemals committen):
android {
signingConfigs {
release {
storeFile file(System.getenv("ANDROID_KEYSTORE_PATH") ?: "upload-keystore.jks")
storePassword System.getenv("ANDROID_KEYSTORE_PASSWORD")
keyAlias System.getenv("ANDROID_KEY_ALIAS")
keyPassword System.getenv("ANDROID_KEY_PASSWORD")
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
Die APK befindet sich in android/app/build/outputs/apk/release/. Wenn Sie einen Keystore benötigen, erstellt der Android Keystore Generator einen. Bewahren Sie ihn sicher auf: Jede zukünftige AppGallery-Update muss mit demselben Schlüssel signiert werden.
Wenn Sie stattdessen eine AAB hochladen, verlangt AppGallery den App Signing Service. Das bedeutet, dass Huawei den finalen Signierungskey generiert und verwaltet – dasselbe Modell wie bei Play App Signing.
Einige Punkte, die Sie vor dem Upload prüfen sollten:
versionCodemuss bei jedem Upload erhöht werden.- Der App-Name in der APK sollte mit dem AppGallery-Listing-Namen übereinstimmen.
- Wenn Sie außerhalb des chinesischen Festlandes verteilen, geben Sie Englisch (US) als Sprache im Listing an.
- Seit dem 30. September 2026 gilt die Android-Entwicklerverifizierung für Apps, die auf zertifizierten Geräten in Brasilien, Indonesien, Singapur und Thailand installiert werden. Huawei-Geräte ohne Google-Dienste sind nicht Google-zertifiziert, aber wenn das gleiche Paket auch außerhalb von Google Play auf zertifizierten Geräten installiert wird, registrieren Sie den Paketnamen in der Android Developer Console.
Schritt 7: Listing vorbereiten
Das AppGallery-Listing hat eigene Spezifikationen, die sich von Apple und Google unterscheiden:
| Feld | Voraussetzung |
|---|---|
| Icon | 216 x 216 PNG (512 x 512 wird ebenfalls akzeptiert), keine abgerundeten Ecken von Ihnen hinzugefügt |
| Screenshots | 3 bis 8, 450 x 800 oder 800 x 450 px (oder proportional größer), gleiche Ausrichtung |
| Kurze Einführung | Bis zu 80 Zeichen |
| Einführung | Bis zu 8.000 Zeichen |
| URL zur Datenschutzerklärung | Pflichtfeld, wenn die App personenbezogene Daten sammelt |
| Altersfreigabe | Fragebogen in AppGallery Connect |
| Testkonto | Erforderlich, wenn die App einen Login hat |
| Länder / Regionen | Verteilungsländer explizit auswählen |
Verwenden Sie keine Screenshots erneut, die das Google Play-Logo, Android-Geräterahmen anderer Hersteller oder „Get it on Google Play“-Badges zeigen. Huawei lehnt Listings ab, die auf andere Stores verweisen. Für die restlichen Assets können Sie wiederverwenden, was Sie für die anderen Stores erstellt haben; unsere App Store- und Google Play-Listing-Anleitung deckt diese ab.
Schritt 8: Hochladen, einreichen und prüfen
- Unter Versionsinformationen > Entwurf, die APK hochladen unter Softwareversion.
- Listing, Bewertung, Datenschutz und Länder ausfüllen.
- Veröffentlichungszeitpunkt festlegen (sofort nach Freigabe oder geplant).
- Zur Prüfung einreichen.
Die Prüfung dauert in der Regel einige Werktage. Ablehnungen werden per E-Mail mit Verweis auf die Richtlinie zugestellt. Häufige Gründe bei Capacitor-Apps:
- Funktionen, die ohne Google Play-Dienste nicht funktionieren (z. B. Login-Button ohne Funktion, leere Kartendarstellung).
- Doppelte App: Eine App mit demselben Paketnamen existiert bereits in der AppGallery von einem anderen Entwickler, oder Huawei hat Ihre App zuvor von Google Play kopiert. Kontaktieren Sie den Huawei-Entwicklersupport mit Eigentumsnachweis.
- Andere Store-Referenzen in Screenshots oder Text.
- Fehlende englische Version für die internationale Distribution.
- Datenschutzerklärung fehlt oder ist aus der App nicht erreichbar.
AppGallery Connect bietet auch eine Publishing API, sodass du Uploads aus der CI automatisieren kannst, sobald die erste Version live ist.
Updates schnell halten
Jede native Änderung muss erneut durch die Huawei-Prüfung, wie bei den anderen Stores. Für Änderungen an JavaScript, HTML und CSS Capgo Live Updates liefere das neue Bundle direkt an installierte Apps auf Huawei-, Google- und Apple-Geräten mit einem einzigen Upload aus, da der Updater Bundles von deinem Capgo-Endpunkt abruft und keine Google Play-Dienste nutzt. Verwende einen dedizierten Channel, wenn dein Huawei-Build andere Funktionen hat:
bunx @capgo/cli@latest bundle upload --channel huawei
Setze den Standard-Channel für den Huawei-Build zur Build-Zeit oder weise Geräte dem Channel aus deiner App zu. Die Capgo-Updater-Doku erklärt Channels und Konfiguration.
Checkliste
- Dependency-Audit abgeschlossen, nur GMS-Funktionen aufgelistet
- Runtime-Service-Check hinzugefügt und auf einem echten Huawei-Gerät getestet
- Nur-Google-Funktionen ausgeblendet oder ersetzt (Push, Sign-in, Billing, Maps, Reviews)
- HUAWEI Developers-Konto verifiziert
- App mit demselben Paketnamen erstellt wie
capacitor.config.ts - Release-APK mit einem gesicherten Keystore signiert,
versionCodeerhöht - Icon, 3 bis 8 Screenshots, kurze und vollständige Beschreibung, Datenschutzerklärung
- Keine Google-Play-Referenzen in den Listing-Assets
- Testkonto für Reviewer, falls benötigt
- Eingereicht, Review-E-Mail überwacht
Falls du auch Google Play vorbereitest, lies so erstellst du Apple- und Google-Play-Developer-Accounts für die 12-Tester-Regel, die nur dort gilt.