N'hésitez pas à jeter un coup d'oeil à la documentation de Flutter flutter.dev/docs .

APK vs Android App Bundle

L'APK (ou Android Package Kit) est le format habituel pour diffuser des applications sur Android, vous pouvez facilement l'installer sur un appareil Android ou l'uploader sur n'importe quel store. Flutter est souvent ciblé par des remarques sur la taille de l'APK générée à cause de son core qui est embarqué, une application native sera moins lourde qu'une application Flutter et un utilisateur sera plus enclin à télécharger une application légère qui s'installera rapidement et qui ne prendra pas trop s'espace disque sur son téléphone.

C'est pourquoi le Play Store demande depuis quelques années de générer l'Android App Bundle à chaque mise à jour d'une application. La différence fondamentale tient dans le fait que l'AAB ne peut pas s'installer directement sur un appareil Android et que le Play Store fournira une APK spécifique à chaque fois qu'un utilisateur téléchargera l'application en suivant le hardware de l'appareil. Par conséquent cela amène à avoir une application plus légère au final, même si l'Android App Bundle peut être lui-même assez lourd. Pour l'instant seulement le Play Store demande de générer des Android App Bundle.

Il est possible de récupérer une APK depuis un AAB avec le Bundletool .

Vous pouvez installer directement l'application sur un device, que ce soit un émulateur ou physique, avec une commande qui installera directement l'APK, utile pour faire une démonstration sur l'appareil d'un client.

flutter build apk
flutter install

1. Générer l'application

Il est possible d'installer l'application depuis l'APK générée en la transférant sur l'appareil et en l'installant manuellement, cela demande davantage de manipulations, si vous voulez simplement installer une release sur un appareil disponible, utilisez flutter install. L'App Bundle ne peut pas être installée directement sur un appareil Android, elle n'est utile que pour le Google Play.

1. a. Android App Bundle

To generate Android App Bundle for Play Store. Check github.com/google/bundletool .

flutter build appbundle
cp build\app\outputs\bundle\release\app-release.aab

You can get Android App Bundle from build\app\outputs\bundle\release\app-release.aab

1. b. APK per ABI

--split-per-abi to reduce size of APK by CPU architecture.

flutter build apk --split-per-abi
cp build\app\outputs\flutter-apk\app-armeabi-v7a-release.apk

You can get APK from build\app\outputs\flutter-apk\app-armeabi-v7a-release.apk

2. Déploiement

N'hésitez pas à consulter la page dédiée sur flutter.dev

TIP

Un premier déploiement prend quelques jours, une mise à jour prend quelques heures.

Il est nécessaire de créer l'application si elle n'existe pas, en théorie, elle est déjà disponible. Rendez-vous sur play.google.com/console et connectez-vous avec le compte user@mail.com pour sélectionner le compte PROJECT, com.group.project.flutter devrait être disponible. Si ce n'est pas le cas, il faudra sans doute la créer.

2. a. Clé de signature

WARNING

Cette partie explique comment fonctionne la clé de signature mais tout a été mis en place pour que vous n'ayez pas à faire de configuration.

Si l'application a déjà été déployée sur le Google Play, une clé a été utilisée qui est un fichier JKS. Si cette clé est perdue, il faut republier l'application ou contacter Google pour en obtenir une autre. Par conséquent, la clé utilisée par l'application actuelle est disponible sur le dépôt Git afin d'éviter tout risque.

  • Le fichier représentant les variables d'environnement de la clé : android\key.properties
  • La clé est située dans l'application : android\app\key.jks
  • La configuration pour gérer la signature : android\app\build.gradle
android\app\build.gradle
// ...

def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
  keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

// ...

android {
  signingConfigs {
    release {
      if (keystorePropertiesFile.exists()) {
        keyAlias keystoreProperties['keyAlias']
        keyPassword keystoreProperties['keyPassword']
        storeFile file(keystoreProperties['storeFile'])
        storePassword keystoreProperties['storePassword']
      }
    }
  }
  buildTypes {
      release {
        if (keystorePropertiesFile.exists()) {
          signingConfig signingConfigs.release
          println "Signing with key.properties"
        } else {
          signingConfig signingConfigs.debug
          println "Signing with debug keys"
        }
      }
    }
  }
}

Vous n'aurez, en théorie, pas à modifier ces fichiers ou à installer la clé car tout ce système a pour but de toujours garder la clé en place pour pouvoir mettre facilement l'application à jour. Mais si vous souhaitez générer une nouvelle clé, n'hésitez pas à consulter la page dédiée sur flutter.dev .

2. b. Créer l'application

Depuis Toutes les applications, vous aurez un bouton Créer une application et vous pourrez configurer une nouvelle application où vous devrez répondre à de nombreuses questions sur le contenu de l'application.

2. c. Mettre à jour l'application

TIP

Que ce soit mettre à jour ou publier une première version, la méthode est la même.

Mettez à jour la version dans le pubspec.yml à l'entrée version qui comprend le numéro de version comme 1.1.1 et le numéro de build comme 46 qui sont séparés par l'opérateur +. Veillez à incrémenter le build à chaque fois et à modifier le numéro de version selon les règles de la version sémantique. Le plus important étant d'avoir une version différente lorsque l'app bundle sera généré.

Lancez la commande de génération de l'Android App Bundle et récupérez app-release.aab à la racine du dépôt.

flutter build appbundle
cp build\app\outputs\bundle\release\app-release.aab

Sur play.google.com/console , connectez-vous au compte PROJECT et sélectionnez l'application concernée. Dans la barre de navigation latérale, sélectionnez Production dans la catégorie Publier, puis Créer une release en haut à droite. Vous aurez alors une interface où déposer le ficheir AAB et vous devrez indiquer plus bas le Nom de la release et les Notes de version (ces informations seront visible par les utilisateurs sur le Google Play). Une mise à jour se fait en quelques heures.

Déploiement de test

Vous pouvez utiliser les services de test du Google Play mais ils peuvent être compliqués à mettre en place. Le plus rapide est d'utiliser les services de Firebase, rendez-vous sur la console Firebase pour cela.

Dans la barre de navigation latérale, sélectionnez App Distribution dans Publier et surveiller et vous aurez la possibilité d'upload des APK, il vous suffit alors de générer un APK :

flutter build apk
cp build\app\outputs\flutter-apk\app-release.apk

Récupérez app-release.apk à la racine du dépôt et uploader cette version sur App Distribution. Vous pourrez choisir parmi une sélection de testeurs ou de groupes à qui envoyer cette version de test. Vous aurez deux options possibles :

  • envoyer à n'importe quelle adresse e-mail, l'utilisateur recevera alors un e-mail avec les indications pour récupérer la version de test
  • demander aux testeurs d'installer l'application App Tester sur Android, d'envoyer à une adresse gmail, pour ouvrir le lien de l'application directement avec cette application qui vous permettra de conserver toutes les versions proposées à travers App Distribution et de les réinstaller quand vous souhaitez.