Pour une bonne prise en compte, par Android, d'une nouvelle version
Ajouté par Alexandre Journaux il y a 2 jours
Afin qu'Android prenne bien en compte la nouvelle version de votre application et installe bien cette nouvelle version comme une mise à jour, il est nécessaire de suivre les 2 points ci-dessous.
Si vous ne mettez pas en place les 2 points ci-dessous, les utilisateurs devront désinstaller l'application avant d'installer la nouvelle version. Ce qui peut vite les agacer. ;-)
1. Renseigner les numéros de versions au bon endroit¶
En Xamarin, cela se fait dans le fichier AndroidManifest.xml du projet .Android¶
Avec les 2 attributs de la balise <manifest> :- android:versionCode : Code de la version. C'est un numéro unique à changer à chaque version
- android:versionName : Libellé de la version. C'est le libellé de la version visible pour l'utilisateur
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="170" android:versionName="1.7.0" package="fr.inrae.sicpa.xamame" android:installLocation="auto"> <uses-sdk android:minSdkVersion="25" android:targetSdkVersion="33" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> ... <application android:label="Xamame.Android"></application> </manifest>
En MAUI, il est recommandé de faire cela dans le fichier .csproj¶
Avec les 2 balises :- <ApplicationVersion> : Code de la version. C'est un numéro unique à changer à chaque version
- <ApplicationDisplayVersion> : Libellé de la version. C'est le libellé de la version visible pour l'utilisateur
<PropertyGroup> <TargetFrameworks>net8.0-android</TargetFrameworks> <!-- Uncomment to also build the tizen app. You will need to install tizen by following this: https://github.com/Samsung/Tizen.NET --> ... <!-- Versions --> <ApplicationDisplayVersion>1.6.1</ApplicationDisplayVersion> <ApplicationVersion>161</ApplicationVersion> ... </PropertyGroup>
2. Créer une clé de signature¶
Explication¶
La clé de signature est un fichier cryptographique (généralement au format .keystore ou .jks) utilisé pour signer numériquement votre application Android. Elle est essentielle pour garantir l'intégrité et l'identité de votre application sur la plateforme Android.
Android exige que toutes les versions successives d'une application soient signées avec la même clé de signature. Si vous avez changé la clé de signature entre les versions, Android refusera l'installation de la mise à jour.
Or, au moment de la génération de l'apk, si on laisse Visual Studio signer automatiquement l’APK, il utilise une clé de signature temporaire différente à chaque compilation. Android considère, alors, que chaque version est signée par un développeur différent, ce qui empêche l'installation en tant que mise à jour. Conséquence : Vous pouvez installer l'APK en tant que nouvelle application après avoir désinstallé l'ancienne, mais pas en tant que mise à jour.
Générer une clé de signature permanente¶
Pour générer la clé de signature, il faut utiliser keytool
.
keytool est inclus avec le JDK (Java Development Kit)
Lancer la commande :
Avec :keytool -genkeypair -v -keystore my-release-key.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias
- my-release-key.keystore : Nom de votre fichier de clé. (ex : appli-bea.keystore)
- my-key-alias : Alias de la clé, que vous utiliserez dans la configuration. (ex : appli-bea)
- Un mot de passe pour protéger la clé
- Votre nom et prénom
- Votre organisation (exemple : "INRAE")
- Votre pays (exemple : "FR")
- La durée de validité de la clé (en jours, par défaut 10 000 jours soit ~27 ans)
Configurer le projet pour prendre en compte cette clé¶
- Placer le fichier .keystore généré à la racine de votre projet (à côté du fichier .csproj)
- Modifier le fichier .csproj comme indiqué ci-dessous :
Version Xamarin :
<PropertyGroup> <AndroidKeyStore>True</AndroidKeyStore> <AndroidSigningKeyStore>xamame.keystore</AndroidSigningKeyStore> <AndroidSigningStorePass>xxx</AndroidSigningStorePass> <AndroidSigningKeyAlias>xxx</AndroidSigningKeyAlias> <AndroidSigningKeyPass>xxx</AndroidSigningKeyPass> </PropertyGroup>
Version MAUI :
<PropertyGroup> <TargetFrameworks>net8.0-android</TargetFrameworks> <!-- Uncomment to also build the tizen app. You will need to install tizen by following this: https://github.com/Samsung/Tizen.NET --> ... <AndroidSigningKeyStore>appli-bea.keystore</AndroidSigningKeyStore> <AndroidSigningKeyAlias>xxx</AndroidSigningKeyAlias> <AndroidSigningKeyPass>xxx</AndroidSigningKeyPass> <AndroidSigningStorePass>xxx</AndroidSigningStorePass> <!-- Versions --> <ApplicationDisplayVersion>1.6.1</ApplicationDisplayVersion> <ApplicationVersion>161</ApplicationVersion> ... </PropertyGroup>
Bon à savoir :¶
Un fichier .keystore peut être utilisé pour plusieurs projets Android.
Il est donc possible d'utiliser le même fichier sur tous les projets Android que vous développez.
Des applications signées avec la même clé peuvent partager des données (via des permissions spécifiques) ou utiliser les mêmes services Android (comme des ContentProviders ou des SharedUserId).