Comment obtenir le numéro de version du manifeste à partir des variables XML de l’application (mise en page)?

Je voudrais avoir un moyen de référencer le numéro de version du manifeste du projet dans la partie principale du code. Ce que j’ai fait jusqu’à maintenant, c’est de lier le numéro de version dans un fichier XML Ssortingng au manifeste (@ ssortingng / Version). Ce que je voudrais faire, c’est faire l’inverse, lier une variable XML de chaîne à la version du manifeste. La raison? Je voudrais seulement changer le numéro de version dans un endroit, le fichier manifeste. Est-ce qu’il y a un moyen de faire ça? Merci!

Je crois que cela a déjà été répondu ici .

Ssortingng versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName; 

OU

 int versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode; 

Il n’y a pas moyen de sortir directement la version, mais il y a deux solutions possibles.

  1. La version pourrait être stockée dans une chaîne de ressources et placée dans le manifeste par:

      
  2. On pourrait créer une vue personnalisée et la placer dans le XML. La vue l’utilisera pour atsortingbuer le nom:

     context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName; 

Chacune de ces solutions permettrait de placer le nom de la version en XML. Malheureusement, il n’existe pas de solution simple, comme android.R.ssortingng.version ou quelque chose comme ça.

Vous pouvez utiliser la versionName dans les ressources XML, telles que les présentations d’activité. Commencez par créer une ressource de chaîne dans l’ app/build.gradle avec l’extrait suivant dans le nœud android :

 applicationVariants.all { variant -> variant.resValue "ssortingng", "versionName", variant.versionName } 

Le contenu du fichier build.gradle peut donc ressembler à ceci:

 apply plugin: 'com.android.application' android { comstackSdkVersion 23 buildToolsVersion '24.0.0 rc3' defaultConfig { applicationId 'com.example.myapplication' minSdkVersion 15 targetSdkVersion 23 versionCode 17 versionName '0.2.3' jackOptions { enabled true } } applicationVariants.all { variant -> variant.resValue "ssortingng", "versionName", variant.versionName } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } productFlavors { } comstackOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { comstack fileTree(include: ['*.jar'], dir: 'libs') testComstack 'junit:junit:4.12' comstack 'com.android.support:appcompat-v7:23.3.0' comstack 'com.android.support:design:23.3.0' comstack 'com.android.support:support-v4:23.3.0' } 

Vous pouvez ensuite utiliser @ssortingng/versionName dans le XML. Android Studio le marquera en rouge, mais l’application se comstackra sans problèmes. Par exemple, cela peut être utilisé comme ceci dans app/src/main/res/xml/preferences.xml :

       

J’ai résolu ce problème en étendant la classe Preference.

 package com.example.android; import android.content.Context; import android.preference.Preference; import android.util.AtsortingbuteSet; public class VersionPreference extends Preference { public VersionPreference(Context context, AtsortingbuteSet attrs) { super(context, attrs); Ssortingng versionName; final PackageManager packageManager = context.getPackageManager(); if (packageManager != null) { try { PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0); versionName = packageInfo.versionName; } catch (PackageManager.NameNotFoundException e) { versionName = null; } setSummary(versionName); } } } 

Ensuite, dans mes préférences XML:

    

J’utilise BuildConfig.VERSION_NAME.toSsortingng(); . Quelle est la différence entre cela et le récupérer depuis le gestionnaire de paquets?

Aucune solution basée sur XML n’a fonctionné pour moi, désolé.

Vous ne pouvez pas l’utiliser depuis le XML.

Vous devez étendre le widget que vous utilisez dans le XML et append la logique pour définir le texte en utilisant ce qui est mentionné dans la réponse de Konstantin Burov.

Si vous utilisez gradle, vous pouvez utiliser le fichier build.gradle pour append facilement la valeur aux ressources XML au moment de la compilation.

Exemple de code extrait de: https://medium.com/@manas/manage-your-android-app-s-versioncode-versionname-with-gradle-7f9c5dcf09bf

 buildTypes { debug { versionNameSuffix ".debug" resValue "ssortingng", "app_version", "${defaultConfig.versionName}${versionNameSuffix}" } release { resValue "ssortingng", "app_version", "${defaultConfig.versionName}" } } 

utilisez maintenant @ssortingng/app_version selon vos besoins en XML

Il appenda .debug au nom de la version comme décrit dans l’article lié en mode débogage.

En fin de partie, mais vous pouvez le faire sans @ssortingng/xyz en utilisant ?android:attr