你怎么能得到从应用程序的(布局)XML变量清单版本号?你怎么能得到从应用程序的(布局)XML变量清单

2019-05-13 08:35发布

我想有一种方式来引用的代码的主要部分项目的清单版本号。 我一直在做,直到在一个字符串的XML文件清单(@字符串/版)链接的版本号。 我想这样做的是周围做它的其他方式,连接字符串XML变量清单中的版本。 原因? 我想只需要改变在一个位置,清单文件中的版本号。 有没有办法做到这一点? 谢谢!

Answer 1:

我认为已经回答了这里 。

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

要么

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


Answer 2:

有没有办法直接获取的版本出来,但也有可能通过两种变通。

  1. 该版本可以存储在一个资源字符串,并放入清单:

     <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.somepackage" android:versionName="@string/version" android:versionCode="20"> 
  2. 人们可以创建自定义视图,并将其放置到XML。 该视图将使用此指定的名称:

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

这两种解决方案将允许在XML将版本名称。 不幸的是,没有一个很好的简单的解决方案,像android.R.string.version或类似的东西。



Answer 3:

您可以使用versionName在XML资源,如活动布局。 首先建立在一个字符串资源app/build.gradle与在下面的代码段android节点:

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

所以整个build.gradle文件内容可能如下:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 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 "string", "versionName", variant.versionName
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
} 

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:design:23.3.0'
    compile 'com.android.support:support-v4:23.3.0'
}

然后你可以使用@string/versionName的XML。 Android的工作室将迎来它的红色,但应用程序将编译没有问题。 例如,这可以在使用这样app/src/main/res/xml/preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory
        android:title="About"
        android:key="pref_key_about">

        <Preference
            android:key="pref_about_build"
            android:title="Build version"
            android:summary="@string/versionName" />

    </PreferenceCategory>


</PreferenceScreen>


Answer 4:

我通过扩展爱好级别的解决了这个问题。

package com.example.android;

import android.content.Context;
import android.preference.Preference;
import android.util.AttributeSet;

public class VersionPreference extends Preference {
    public VersionPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
        String 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);
        }
    }
}

然后在我的喜好XML:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <com.example.android.VersionPreference android:title="Version" />
</PreferenceScreen>


Answer 5:

我用BuildConfig.VERSION_NAME.toString(); 。 那是什么,并从packageManager得到它的区别?

没有基于XML的解决方案已经为我工作,对不起。



Answer 6:

如果您使用的摇篮,你可以使用的build.gradle文件在编译时以编程方式增加价值的XML资源。

示例代码从提取: https://medium.com/@manas/manage-your-android-app-s-versioncode-versionname-with-gradle-7f9c5dcf09bf

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

现在使用@string/app_version根据需要XML

这将增加.debug的版本名称为在调试模式下时,链接的文章中介绍。



Answer 7:

你不能从XML使用它。

您需要延长您正在使用的XML的小部件,并添加逻辑用在什么康斯坦丁波罗夫的答复中提到对设置文本。



Answer 8:

太迟了,但你可以不用@string/xyz使用?android:attr

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="?android:attr/versionName"
     />
    <!-- or -->
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="?android:attr/versionCode"
     />


文章来源: How can you get the Manifest Version number from the App's (Layout) XML variables?