Man kann eine Capacitor-App auf Huawei AppGallery mit dem gleichen Android-Build veröffentlichen, den man auf Google Play verschickt. Registriere ein kostenloses HUAWEI-Entwicklerkonto, überprüfe, welche Plugins auf Google Play-Dienste (fehlen auf Huawei-Handys, die seit Ende 2019 veröffentlicht wurden) angewiesen sind, verstecke oder ersetze diese Funktionen, und laden Sie dann ein signiertes APK in AppGallery Connect hoch, mit einer Liste und warten Sie auf die Überprüfung. Diese Anleitung deckt jeden Schritt ab, einschließlich eines kleinen nativen Checks, den Sie in Ihre App einfügen können, um Google Play-Dienste ohne zusätzliche Abhängigkeiten zu erkennen.
Wer sollte auf AppGallery veröffentlichen
AppGallery ist die Standard-App-Store auf Huawei-Handys und -Tablets. Es ist wichtig, wenn Ihre Benutzer enthalten:
- Leute in Europa, dem Nahen Osten, Afrika, Lateinamerika und Südostasien, die Huawei-Geräte mit dem 2019er US-Handelsbeschränkungen veröffentlicht haben, die ohne Google Play-Dienste und ohne den Play-Store ausgeliefert wurden.
- Unternehmen oder Regierungsstellen, die sich auf Huawei-Hardware standardisiert haben.
Eine Anmerkung zu HarmonyOS: Huawei-Geräte, die außerhalb des chinesischen Festlands verkauft werden, laufen EMUI, das auf Android basiert und APKs installiert. Geräte im chinesischen Festland, die HarmonyOS NEXT (HarmonyOS 5 und später) laufen, können nur native HarmonyOS-Apps ausführen, daher erreicht ein Android-APK sie nicht. Diese Anleitung befasst sich mit dem Android-basierten AppGallery.
Schritt 1: Überprüfung von Google Play-Dienste-Abhängigkeiten
Capacitor hängt sich selbst nur an AndroidX und seine eigene Android-Bibliothek. Der Risiko kommt von Plugins, die Google-Bibliotheken ziehen. Schauen Sie sich Ihre 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
Sortieren Sie sie dann in „funktioniert ohne Google Play-Dienste“ und „benötigt Google Play-Dienste“.
| 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-Anmeldung (play-services-auth, Google-Konto-Manager ID) |
Funktioniert nicht | Google-Anbieter von @capgo/capacitor-social-login |
| Google Play-Billing | Funktioniert nicht | @capgo/capacitor-native-purchases, RevenueCat auf Android |
| Play In-App-Bewertung | Funktioniert nicht | @capgo/capacitor-in-app-review |
| Play In-App-Updates | Funktioniert nicht | Play-Update-Helfer in @capgo/capacitor-updater |
| Play-Integrität | Funktioniert nicht | App-Attestations-Plugins auf Android |
Fused Standort (play-services-location) |
Abhängig vom Plugin; einige fallen auf Androids LocationManager zurück | @capacitor/geolocation, Hintergrund-Geolokalisierungs-Plugins |
play-services-tasks, play-services-basement allein |
Fein (einfache Bibliotheken) | Viele Plugins |
| Firestore, Realtime-Datenbank, Storage, Remote-Konfiguration, Crashlytics, E-Mail-/Passwort-Authentifizierung | Work | Firebase-Plugins |
| Capgo Live-Updates | Work | @capgo/capacitor-updater |
| Apple und Facebook-Login | Arbeit | @capgo/capacitor-social-login Apple / Facebook-Anbieter |
„Funktioniert nicht“ bedeutet normalerweise, dass die Anfrage ausgelöst oder nie aufgelöst wird. Es kommt nur sehr selten zu einem Crash des gesamten Apps, aber die Rezensionen werden auf Huawei-Geräten getestet und ein toter Button oder ein leerer Bildschirm ist ein häufiger Ablehnungsgrund.
Schritt 2: Erkennen Sie Google Play-Dienste bei Laufzeit
Sie können Google Play-Dienste ohne die Hinzufügung einer Google-Abhängigkeit überprüfen, indem Sie Androids Paketmanager fragen, ob com.google.android.gms ist installiert. Fügen Sie eine kleine lokale Erweiterung Ihrem Capacitor Android-Projekt 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);
}
}
Registrieren Sie es in MainActivity.java vorher 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);
}
}
Da Android 11 Apps nur andere Pakete sehen lässt, die sie deklarieren, fügen Sie eine <queries> Block zu android/app/src/main/AndroidManifest.xml, innerhalb <manifest>:
<queries>
<package android:name="com.google.android.gms" />
<package android:name="com.huawei.hwid" />
</queries>
Rufen Sie 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 Präsenz des Pakets ist ein vernünftiger Proxy. Es sagt Ihnen jedoch nicht, ob Google Play Services aktuell ist oder aktiviert ist; wenn Sie auch das benötigen, fügen Sie com.google.android.gms:play-services-base und verwenden GoogleApiAvailability.isGooglePlayServicesAvailable(), die auch auf Geräten ohne GMS funktioniert.
Schritt 3: Rutscht sanft ab
Verwenden Sie das Ergebnis, um Funktionen an- 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 Ausfallmöglichkeiten:
- Anmeldung: Verbergen Sie die Google-Schaltfläche und zeigen Sie stattdessen E-Mail, Apple- oder Facebook-Anmelden an. Mit
@capgo/capacitor-social-logininitialisieren Sie nur die Anbieter, die Sie anzeigen. - Zahlungen: Google Play Billing ist nicht verfügbar. AppGallery hat seinen eigenen Huawei IAP. Wenn digitale Kaufs sind für Ihre App von entscheidender Bedeutung, integrieren Sie entweder Huawei IAP oder versenden Sie die AppGallery-Build ohne Kaufs und sagen Sie es in der Liste an.
- Push: verwenden Sie das Huawei Push Kit für HMS-Geräte. Es gibt keine offizielle Capacitor-Erweiterung; Huawei veröffentlicht Cordova-Plugins unter
@hmscore/*which laufen in Capacitor, oder Sie können eine kleine native Erweiterung um das Push Kit SDK herum schreiben. - Maps: verwenden Sie eine Web-Karte (Leaflet, MapLibre GL JS) innerhalb des WebView, die auf jedem Gerät funktioniert, oder das Huawei Map Kit.
- Bewerte die App: auf Huawei verlinken Sie stattdessen auf Ihre AppGallery-Seite anstatt die Play-Bewertungsseite API aufzurufen.
- Store links: Die Schaltflächen „Die App aktualisieren“ sollten auf AppGallery (
appmarket://details?id=com.example.app) auf Huawei-Geräten öffnen, nicht auf die Play Store.
Testen Sie die App auf einem echten Huawei-Gerät oder auf Huawei’s Cloud-Debugging-Dienst. Ein Emulator mit Google-APIs wird jede dieser Probleme verbergen.
Schritt 4: Registrieren Sie ein HUAWEI-Entwicklerkonto
- Erstelle einen HUAWEI-Konto bei developer.huawei.com.
- Abschließe die Identitätsüberprüfung als Einzelperson oder Unternehmen. Einzelpersonen müssen in der Regel ein Identitätsdokument und Bankkartenangaben bereitstellen; Unternehmen müssen Unternehmensregisterdokumente bereitstellen. Die Überprüfung dauert in der Regel einen bis zwei Arbeitstage.
- Wähle den Kontotyp und das Land sorgfältig aus. Huawei lässt Sie nicht umstellen, wenn Sie ein individuelles Konto in ein Unternehmenskonto umstellen möchten, und das verifizierte Land oder die Region kann nicht später geändert werden.
Die Registrierung ist kostenlos.
Schritt 5: Erstelle die App in AppGallery Connect
- Öffne AppGallery Connect > Meine Apps > Neue App.
- Plattform: AndroidGerät: Smartphone (auch Tablets abgedeckt).
- App-Name, Standard-Sprache und Paket-Name. Der Paket-Name muss mit
appIdincapacitor.config.tsund kann nach der ersten Hochladung nicht mehr geändert werden. - Wählen Sie die Anwendungs-Kategorie.
Schritt 6: Erstelle und signiere das Release-Paket
AppGallery akzeptiert APK und AAB. Die APK-Routen sind einfacher: Sie signieren es mit Ihrem eigenen Schlüssel, und Huawei muss Ihren Signierungs-Schlüssel nicht speichern.
bun run build
bunx cap sync android
cd android
./gradlew assembleRelease
Konfigurieren Sie das Signieren in android/app/build.gradle (Laden Sie Passwörter aus Umgebungsvariablen oder keystore.properties, nie speichern Sie sie):
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 ein Keystore benötigen, erstellt der Android-Keystore-Generator eines. Bewahren Sie es sicher auf: Jede zukünftige AppGallery-Update muss mit demselben Schlüssel signiert werden.
Wenn Sie stattdessen ein AAB hochladen, erfordert AppGallery seinen App-Signingservice, was bedeutet, dass Huawei den Schlüssel für die endgültige Signierung erstellt und aufbewahrt, genauso wie bei Play App Signing.
Einige Dinge überprüfen, bevor Sie hochladen:
versionCodemuss mit jedem Hochladen zunehmen.- Der App-Name in der APK sollte dem AppGallery-Listennamen entsprechen.
- Wenn Sie außerhalb von China verteilen, sollten Sie Englisch (US) als Sprache in der Liste angeben.
- Seit dem 30. September 2026 gilt für Apps, die auf zertifizierten Geräten in Brasilien, Indonesien, Singapur und Thailand installiert werden, die Entwicklerverifizierung von Android. Huawei-Geräte ohne Google-Dienste sind nicht Google-zertifiziert, aber wenn das gleiche Paket auch von außerhalb von Google Play auf zertifizierten Geräten installiert wird, müssen Sie den Paketnamen in der Android-Entwickler-Konsole registrieren.
Schritt 7: Die Liste vorbereiten
AppGallery hat eigene Spezifikationen, die sich von denen von Apple und Google unterscheiden.
| Feld | Anforderung |
|---|---|
| Icon | 216 x 216 PNG (512 x 512 ebenfalls akzeptiert), keine abgerundeten Ecken, die Sie hinzugefügt haben |
| Bildschirmfotos | 3 bis 8, 450 x 800 oder 800 x 450 px (oder proportional größer), gleiche Orientierung |
| Kurze Einführung | Bis zu 80 Zeichen |
| Einführung | Bis zu 8.000 Zeichen |
| URL der Datenschutzrichtlinie | Wenn die App personenbezogene Daten sammelt |
| Altersfreigabe | Fragebogen in AppGallery Connect |
| Testkonto | Erforderlich, wenn die App eine Anmeldung enthält |
| Länder / Regionen | Wählen Sie die Verteilungsländer explizit |
Verwenden Sie keine Screenshot, die das Google Play Logo, Android-Geräterahmen, die von anderen Herstellern gebrandeten oder "Get it on Google Play"-Bilder zeigen. Huawei lehnt die Liste ab, die auf andere Stores verweist. Für die restlichen Assets können Sie die, die Sie für die anderen Stores erstellt haben, wieder verwenden; unsere App Store und Google Play-Listungshinweise umfassen sie.
Schritt 8: Hochladen, Einreichen und Überprüfen
- In Version Informationen > EntwurfUploaden Sie das APK unter Softwareversion.
- Beschreiben Sie die Liste, Bewertung, Datenschutz und Länder.
- Legen Sie die Veröffentlichungszeit fest (unmittelbar nach Genehmigung oder geplant).
- Stellen Sie zur Überprüfung ein.
Die Überprüfung dauert in der Regel einige Arbeitstage. Ablehnungen erhalten Sie per E-Mail mit der Hinweisreferenz. Die häufigsten für Capacitor-Apps sind:
- Funktionen, die ohne Google Play-Dienste nicht funktionieren (Login-Button, der nichts tut, leere Kartenansicht).
- Duplicate-App: Eine App mit demselben Paketnamen existiert bereits auf AppGallery von einem anderen Entwickler oder Huawei hat Ihre App aus Google Play kopiert. Kontaktieren Sie den Huawei-Entwickler-Service mit Beweisen der Eigentümerschaft.
- Verweise auf andere Stores in Bildschirmfotos oder Text.
- Fehlende englische Informationen für die internationale Verteilung.
- Datenschutzrichtlinie fehlen oder sind nicht erreichbar von innen im App.
AppGallery Connect hat auch eine Veröffentlichungs API, sodass Sie Uploads von CI automatisieren können, sobald die erste Version live ist.
Schritt 9: Halten Sie Updates schnell
Kontext: Seite/Bereich: Über Capgo-Seite. Rolle: UI-Label. Gesehen in: Seite über .astro. Nachrichten Schlüssel `about_how_step_label` (Über wie Schritt-Label). Capgo Live-Updates deliver the new bundle directly to installed apps on Huawei, Google and Apple devices with one upload, because the updater fetches bundles from your Capgo endpoint and does not use Google Play services. Use a dedicated channel if your Huawei build has different features:
bunx @capgo/cli@latest bundle upload --channel huawei
Setze die Standardkanal für die Huawei-Buildung bei der Buildzeit oder zuweise Geräte an den Kanal von deiner App. Capgo updater docs Erkläre Kanäle und Konfiguration.
Übersicht
- Dependency audit done, GMS-only features listed
- Überprüfung der Laufzeitdienste hinzugefügt und auf einem realen Huawei-Gerät getestet
- Google-fähige Funktionen versteckt oder ersetzt (Push, Anmeldung, Abrechnung, Maps, Bewertung)
- HUAWEI-Entwicklerkonto bestätigt
- Anwendung erstellt mit demselben Paketnamen wie
capacitor.config.ts - Release-APK mit einem gesicherten Keystore signiert,
versionCodebumpen - Icon, 3 bis 8 Screenshot, kurze und vollständige Einführung, Datenschutzrichtlinie
- Keine Google Play-Referenzen in den Verkaufsanzeigeeinrichtungen
- Testkonto für Rezensionen falls erforderlich
- Eingereicht, Überprüfungs-E-Mail wird überwacht
Wenn Sie auch Google Play vorbereiten, lesen Sie Wie Sie Apple- und Google Play-Entwicklerkonten erstellen für die 12-Testanwender-Regel, die dort nur gilt.