android - 在 Android 应用发布版本中获取错误的版本代码和版本名称

标签 android gradle

我正在使用下面的代码在 MyApplication 类中以编程方式获取版本名称和版本代码,并将它们声明为静态成员

public class MyApplication extends Application {
   Public static String MY_VERSION_NAME;
   Public static int MY_VERSION_NAME;  
    @Override
    public void onCreate() {
       getPackageInfo();
    }  
    private void getPackageInfo() {
        Context context = getApplicationContext();
        PackageManager manager = context.getPackageManager();
        try {
            PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
            MY_VERSION_NAME = info.versionName;
            MY_VERSION_CODE = (int) PackageInfoCompat.getLongVersionCode(info);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            myversionName = "Unknown-01";
        }
   } 
}

我的应用程序 gradle 文件是:
android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
    applicationId "com.example"
    minSdkVersion 19 
    targetSdkVersion 28
    versionCode 15
    versionName "0.95"
    vectorDrawables.useSupportLibrary = true
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
    debug {
        applicationIdSuffix '.debug'
        versionNameSuffix '-DEBUG'
    }
}
lintOptions {
    disable 'MissingTranslation'
}


compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}}

它在 Debug模式下显示正确的版本名称(0.95-DEBUG)和版本代码(15),但在 Release模式下显示旧版本名称(0.85)和版本代码(11)。

我该如何解决这个问题?
我在很多设备上都试过了,结果都是一样的。

编辑:问题也存在于设置>应用>应用信息中。

最佳答案

而不是使用

PackageManager manager = context.getPackageManager();
        try {
            PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
            MY_VERSION_NAME = info.versionName;
            MY_VERSION_CODE = (int) PackageInfoCompat.getLongVersionCode(info);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            myversionName = "Unknown-01";
        }

采用
BuildConfig.VERSION_NAME
BuildConfig.VERSION_CODE

*编辑

当您想要获取信息时,YOUR_MODULE_PACKAGE_NAME 是模块的名称。

请记住,如果您传递应用程序的上下文,您将获得有关该模块的信息
PackageInfo packageInfo = getPackageManager().getPackageInfo(YOUR_MODULE_PACKAGE_NAME, 0);
packageInfo.versionName;
packageInfo.versionCode;

关于android - 在 Android 应用发布版本中获取错误的版本代码和版本名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54803001/

相关文章:

android - Android Studio如何在 Activity 开始时自动播放背景音乐

gradle - Gradle ant.importBuild在导入和重命名ant目标名称时失败

android - 在 BOOTUP 上启动服务,然后安排服务每 10 分钟运行一次?

android - 明确的 com.google.android.c2dm.intent.REGISTER Intent

Android:GoogleAnalytics 与 EasyTracker

android - 如何复制应用程序以在Android Studio中与其他资源一起使用?

java - Gradle找不到本地依赖项目

android - Gradle:顶部或底部为 "apply plugin"

java - Gradle:单个进程中的 JavaExec

android - 在同一气泡中显示来自用户的连续聊天