Android
Créez et exécutez des applications Wails sur Android — configuration de la chaîne d’outils, émulateur, signature des APK, empaquetage pour le Play Store et référence de l’API
Les applications Wails v3 s’exécutent sur Android comme des applications natives : une WebView Android affiche le frontend, les ressources sont servies dans le processus par un WebViewAssetLoader adossé au serveur de ressources Go (sans serveur localhost ni port ouvert), et le mécanisme @wailsio/runtime standard fonctionne sans modification : les liaisons de services, les événements, les boîtes de dialogue et le presse-papiers passent par le processeur de messages Go.
Le même main.go permet de compiler pour les environnements de bureau et Android. Le code Go est compilé sous forme de bibliothèque partagée C (libwails.so, GOOS=android avec la chaîne d’outils du NDK), puis chargé par un petit hôte Java. Le comportement propre à Android se trouve dans des fichiers Go spécifiques à la plateforme, protégés par //go:build android.
Prérequis
- Le SDK Android avec les outils de plateforme, une plateforme SDK (API 35), les outils de compilation et le NDK (26.3.x) —
wails3 doctorindique les éléments détectés - Un JDK (par exemple OpenJDK 21) pour Gradle ; définissez
JAVA_HOMEsijavane figure pas dans votrePATH - Go 1.25+ et npm
ANDROID_HOME(ouANDROID_SDK_ROOT) pointant vers le SDK
Installez les composants du SDK avec les outils en ligne de commande :
sdkmanager "platform-tools" "platforms;android-35" "build-tools;35.0.0" \
"ndk;26.3.11579264" "emulator" \
"system-images;android-35;google_apis;arm64-v8a"
avdmanager create avd --name wails \
--package "system-images;android-35;google_apis;arm64-v8a" \
--device pixel_7
Exécution sur l’émulateur
Depuis le répertoire de votre projet :
wails3 task android:run
Cette commande démarre un émulateur si aucun n’est en cours d’exécution, génère les liaisons, compile le frontend, compile votre code Go en libwails.so pour l’ABI de l’émulateur, assemble un APK de débogage avec Gradle, puis l’installe et le lance.
Commandes complémentaires utiles :
wails3 task android:logs # stream the app's logcat output
Dans les versions de débogage, vous pouvez inspecter la WebView depuis Chrome à l’adresse chrome://inspect.
Empaquetage
wails3 task android:package # production release APK
wails3 task android:deploy-emulator # install + launch it
wails3 task android:bundle # production release AAB (Android App Bundle)
wails3 task android:bundle:fat # release AAB containing all ABIs
wails3 task android:run:device # debug install + launch on a physical device
wails3 task android:deploy-device # install + launch on a physical device
DEVICE_ID=<serial> wails3 task android:run:device
DEVICE_ID=<serial> wails3 task android:deploy-device
Les versions de production utilisent -tags production,android, sont débarrassées de leurs symboles et excluent à la compilation les diagnostics internes du framework. wails3 task android:package:fat intègre à la fois arm64-v8a et x86_64 dans un seul APK.
Google Play exige le format Android App Bundle (.aab) pour toute nouvelle application, qui doit cibler Android 15 (API 35) ou une version ultérieure ; le modèle de projet définit compileSdk et targetSdk sur 35 dans build/android/app/build.gradle. wails3 task android:bundle:fat produit bin/<AppName>.aab en incluant les deux ABI ; Google Play génère à partir de celui-ci des APK optimisés pour chaque appareil. Ce bundle universel est donc l’artefact approprié à envoyer sur la boutique. Les APK restent la solution la plus rapide pour les tests locaux et sur émulateur, car un .aab ne peut pas être installé directement avec adb.
android:run et android:deploy-emulator sont des tâches destinées à l’émulateur. Pour un appareil Android physique, utilisez android:run:device pour un APK de débogage ou android:deploy-device pour un APK de production. Ces deux tâches compilent pour arm64, sélectionnent la première entrée connectée qui n’est pas un émulateur dans adb devices, installent l’APK et lancent com.wails.app.MainActivity. Passez DEVICE_ID=<serial> pour cibler un appareil précis.
Signature et versions de production
En l’absence de magasin de clés, les versions de production sont signées avec le magasin de clés Android de débogage afin de permettre leur installation à des fins de test. Pour les signer avec votre propre magasin de clés, définissez :
ANDROID_KEYSTORE_FILE=/path/to/release.jks \
ANDROID_KEYSTORE_PASSWORD=... \
ANDROID_KEY_ALIAS=... \
ANDROID_KEY_PASSWORD=... \
wails3 task android:package
Les mêmes variables permettent de signer les App Bundles : exécutez wails3 task android:bundle:fat après les avoir définies afin de produire un .aab prêt pour le Play Store. Sans ces variables, le bundle est signé avec le magasin de clés de débogage et Google Play le rejettera ; la tâche affiche donc un avertissement.
Configuration
Le frontend contrôle les fonctionnalités Android à l’exécution par l’intermédiaire de l’objet d’exécution Android : Android.Haptics.Vibrate(durationMs), Android.Device.Info(), Android.Toast.Show(message). Le nom du paquet est défini par APP_ID dans les tâches de compilation.
Ce qui fonctionne et ce qui ne fonctionne pas
| Domaine | État |
|---|---|
WebView et ressources servies dans le processus (WebViewAssetLoader) |
✅ |
| Liaisons de services et événements (dans les deux sens) | ✅ |
| Boîtes de dialogue de message | ✅ AlertDialog avec fonctions de rappel pour les boutons |
| Boîtes de dialogue d’ouverture d’un ou de plusieurs fichiers | ✅ Storage Access Framework (fichiers importés sous forme de copies dans le cache) |
| Boîtes de dialogue de sélection d’un répertoire ou d’enregistrement d’un fichier | ❌ Renvoient une erreur — écrivez plutôt dans le bac à sable de l’application |
| Presse-papiers | ✅ ClipboardManager |
| API Screens | ✅ WindowMetrics, y compris la zone de travail délimitée par les barres système |
Événements du cycle de vie (events.Android.*) |
✅ |
| Retour haptique, informations sur l’appareil et notifications toast | ✅ API d’exécution Android.* |
| Compilations pour émulateur et appareil physique | ✅ android:run, android:run:device, android:deploy-emulator, android:deploy-device |
| Géométrie des fenêtres, menus et zone de notification système | Opérations intentionnellement sans effet |
| Fenêtres multiples | Seule la première fenêtre est affichée |
Notes de portage
- Le code destiné aux environnements de bureau se compile sans modification sous
GOOS=android; les appels relatifs à la géométrie, aux menus et à la zone de notification deviennent des opérations sans effet, car les applications Android s’exécutent en plein écran. androidimplique la balise de compilationlinux(Android repose sur un noyau Linux) : les fichiers réservés à Linux pour environnement de bureau nécessitent//go:build linux && !androidet, à l’exécution,runtime.GOOSvaut"android".- Remplacez les boîtes de dialogue d’enregistrement de fichier et de sélection de répertoire par des écritures dans le bac à sable de l’application, associées à un flux de partage par intent. Les boîtes de dialogue d’ouverture de fichier fonctionnent et importent les documents sélectionnés sous forme de copies dans le répertoire de cache ; vous obtenez ainsi de véritables chemins de système de fichiers.
- Une application réelle est toujours compilée avec
CGO_ENABLED=1et le NDK ; le chemin sans cgo existe uniquement pour que des outils tels quewails3 generate bindingspuissent charger le paquet. - Concevez une interface adaptative ; la zone de travail
Screensexclut les barres d’état et de navigation.