Je dois trouver comment obtenir ou créer un numéro de build pour mon application Android. J'ai besoin que le numéro de build s'affiche dans l'interface utilisateur.
Est-ce que je dois faire quelque chose avec AndroidManifest.xml
?
Je dois trouver comment obtenir ou créer un numéro de build pour mon application Android. J'ai besoin que le numéro de build s'affiche dans l'interface utilisateur.
Est-ce que je dois faire quelque chose avec AndroidManifest.xml
?
Si vous utilisez le plugin Gradle/Android Studio, à partir de la version 0.7.0, le code de version et le nom de version sont disponibles statiquement dans BuildConfig
. Assurez-vous d'importer le package de votre application, et non un autre BuildConfig
:
import com.votrepackage.BuildConfig;
...
int versionCode = BuildConfig.VERSION_CODE;
String versionName = BuildConfig.VERSION_NAME;
Aucun objet Context requis!
Assurez-vous également de les spécifier dans votre fichier build.gradle
au lieu du AndroidManifest.xml
.
defaultConfig {
versionCode 1
versionName "1.0"
}
Attention, pour un projet multi-module, vous pouvez obtenir des résultats inattendus lors de la requête de ceci dans un module spécifique. Il est probablement préférable de lier cela dans un espace de noms global dans votre classe Application/Activity principale.
Existe-t-il un moyen d'obtenir le code de version de mon application qui se trouve sur le Play Store?
Cela ne fonctionne pas si vous voulez l'utiliser dans un module de bibliothèque pour obtenir des informations sur l'application. Il n'y a pas de fichier BuildConfig dans le module de bibliothèque
Utilisez :
try {
PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
String version = pInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Et vous pouvez obtenir le code de version en utilisant ceci
int verCode = pInfo.versionCode;
@Felix vous ne pouvez pas appeler getPackageManager() en dehors du contexte, donc getApplicationContext() (ou le contexte passé) pourrait être nécessaire.
Si vous obtenez null, veuillez vérifier le fichier AndroidManifest : probablement android:versionName est manquant.
Qu'en est-il si vous avez besoin de ce numéro dans une méthode statique où vous ne pouvez pas passer le contexte? Mauvaise conception de ma part?
+1 J'ai implémenté votre solution qui fonctionne très bien! Cependant, cette solution devrait être entourée de try et catch comme l'a suggéré Igor ET il est bon de pratique (par exemple pour le débogage) de mettre chaque appel de méthode sur une ligne séparée au lieu d'appeler context.methodName().subMethod().anotherSubMethod()etc. sur une seule ligne. J'ai donc fourni une solution plus propre ci-dessous
C'est la bonne solution, merci ;) Mais, comme suggéré par @IgorGanapolsky, cela doit être entouré de try / catch :)
Il y a deux parties dont vous avez besoin:
versionCode est un nombre, et chaque version de l'application que vous soumettez sur le marché doit avoir un nombre plus élevé que le précédent.
VersionName est une chaîne de caractères et peut être ce que vous voulez. C'est là que vous définissez votre application comme "1.0" ou "2.5" ou "2 Alpha EXTREME!" ou autre.
Exemple:
Kotlin:
val manager = this.packageManager
val info = manager.getPackageInfo(this.packageName, PackageManager.GET_ACTIVITIES)
toast("PackageName = " + info.packageName + "\nVersionCode = "
+ info.versionCode + "\nVersionName = "
+ info.versionName + "\nPermissions = " + info.permissions)
Java:
PackageManager manager = this.getPackageManager();
PackageInfo info = manager.getPackageInfo(this.getPackageName(), PackageManager.GET_ACTIVITIES);
Toast.makeText(this,
"PackageName = " + info.packageName + "\nVersionCode = "
+ info.versionCode + "\nVersionName = "
+ info.versionName + "\nPermissions = " + info.permissions, Toast.LENGTH_SHORT).show();
La description officielle d'Android de android:versionCode
et android:versionName
peut être trouvée ici : developer.android.com/tools/publishing/…
Quand vous collez un extrait de code, il est utile d'expliquer la signification des paramètres.... même si tout le monde peut comprendre ce que this.getPackageName()
représente, le 0
que vous venez de taper là n'a aucune indication sur sa signification
Voici une solution propre, basée sur la solution de scottyab (éditée par Xavi). Cela montre comment obtenir d'abord le contexte, s'il n'est pas fourni par votre méthode. De plus, cela utilise plusieurs lignes au lieu d'appeler plusieurs méthodes par ligne. Cela rend plus facile le débogage de votre application.
Context context = getApplicationContext(); // or activity.getApplicationContext()
PackageManager packageManager = context.getPackageManager();
String packageName = context.getPackageName();
String myVersionName = "not available"; // initialize String
try {
myVersionName = packageManager.getPackageInfo(packageName, 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Maintenant que vous avez reçu le nom de version dans la chaîne myVersionName
, vous pouvez le définir sur un TextView ou tout ce que vous voulez..
// Définir le nom de version sur un TextView
TextView tvVersionName = (TextView) findViewById(R.id.tv_versionName);
tvVersionName.setText(myVersionName);
Pensez-vous que NNFE peut vraiment être lancé ? Ce serait étrange de ne pas trouver une application en cours d'exécution dans le gestionnaire de packages :)
Je suis d'accord avec vous, cela pourrait sembler étrange, mais c'est l'exception par défaut de cette méthode - consultez l'API : elle indique Lance PackageManager.NameNotFoundException si un package avec le nom donné ne peut être trouvé sur le système.
. Cependant, je ne peux pas imaginer de scénario pour cela !
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
Pas certain, mais je pense que vous pouvez l'obtenir en analysant le fichier AndroidManifest.xml.
1 votes
Dupliqué: stackoverflow.com/questions/4471025/…
37 votes
Pour obtenir le code de version, utilisez
int versionCode = BuildConfig.VERSION_CODE;
et pour obtenir le nom de la version, utilisezString versionName = BuildConfig.VERSION_NAME;