如何从应用程序的(布局)XML变量中获取Manifest版本号?

我想有一种方法可以在代码的主要部分中引用项目的清单版本号。 到目前为止,我一直在做的是将String XML文件中的版本号链接到清单(@ string / Version)。 我想要做的是以相反的方式执行此操作,将字符串XML变量链接到清单中的版本。 原因? 我只想在一个位置更改版本号,即清单文件。 有没有办法做到这一点? 谢谢!


我相信这已经在这里得到解答。

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

要么

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

没有办法直接获取版本,但有两种解决方法可以完成。

  • 版本可以存储在资源字符串中,并通过以下方式放入清单中:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.somepackage"
         android:versionName="@string/version" android:versionCode="20">
    
  • 可以创建一个自定义视图,并将其放入XML中。 该视图将使用它来分配名称:

    context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
    
  • 这两种解决方案都允许将版本名称放入XML中。 不幸的是,没有一个简单的解决方案,比如android.R.string.version或类似的东西。


    您可以在XML资源中使用versionName ,例如活动布局。 首先在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'
    }
    

    然后你可以在XML中使用@string/versionName 。 Android Studio会将其标记为红色,但该应用程序将无问题地编译。 例如,这可以在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>
    
    链接地址: http://www.djcxy.com/p/16119.html

    上一篇: How can you get the Manifest Version number from the App's (Layout) XML variables?

    下一篇: disable landscape mode?