你如何获取你的Android应用程序的构建/版本号?

1574
我需要弄清楚如何为我的Android应用程序获取或生成一个版本号。我需要在用户界面中显示版本号。
我需要在AndroidManifest.xml文件中做一些操作吗?

1
重复的问题:https://dev59.com/1m855IYBdhLWcg3wNhd1 - Idemax
37
获取版本号使用int versionCode = BuildConfig.VERSION_CODE;,获取版本名使用String versionName = BuildConfig.VERSION_NAME; - Lukas
39个回答

2
PackageInfo pinfo = null;
try {
    pinfo = getPackageManager().getPackageInfo(getPackageName(), 0);
}
catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}
int versionNumber = pinfo.versionCode;
String versionName = pinfo.versionName;

1
    Log.e("TAG","VERSION.RELEASE {" + Build.VERSION.RELEASE + "}");
    Log.e("TAG","\nVERSION.INCREMENTAL {" + Build.VERSION.INCREMENTAL + "}");
    Log.e("TAG","\nVERSION.SDK {" + Build.VERSION.SDK + "}");
    Log.e("TAG","\nBOARD {" + Build.BOARD + "}");
    Log.e("TAG","\nBRAND {" + Build.BRAND + "}");
    Log.e("TAG","\nDEVICE {" + Build.DEVICE + "}");
    Log.e("TAG","\nFINGERPRINT {" + Build.FINGERPRINT + "}");
    Log.e("TAG","\nHOST {" + Build.HOST + "}");
    Log.e("TAG","\nID {" + Build.ID + "}");

感谢https://dev59.com/FZzha4cB1Zd3GeqPBje1#40421709


1
有用于构建系统的功能:生成的APK文件中有一个名为output.json的文件,其中包含每个生成的APK文件的信息数组,包括versionName和versionCode。
例如,
[
    {
        "apkInfo": {
            "baseName": "x86-release",
            "enabled": true,
            "filterName": "x86",
            "fullName": "86Release",
            "outputFile": "x86-release-1.0.apk",
            "splits": [
                {
                    "filterType": "ABI",
                    "value": "x86"
                }
            ],
            "type": "FULL_SPLIT",
            "versionCode": 42,
            "versionName": "1.0"
        },
        "outputType": {
            "type": "APK"
        },
        "path": "app-x86-release-1.0.apk",
        "properties": {}
    }
]

1
只有两种方法
public static String getVersionName(Context context) {
    PackageInfo packageInfo;
    try {
        packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
    } catch (PackageManager.NameNotFoundException e) {
        throw new RuntimeException(e);
    }
    return packageInfo.versionName;
}

public static int getVersionCode(Context context) {
    PackageInfo packageInfo;
    try {
        packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
    } catch (PackageManager.NameNotFoundException e) {
        throw new RuntimeException(e);
    }
    return packageInfo.versionCode;
}

1
在这里,我可以为您提供一种解决方案,以便在您的Android应用程序中以编程方式访问这些版本值,您可以使用PackageManager
**try {
        PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
        int versionCode = packageInfo.versionCode;
        String versionName = packageInfo.versionName;
        // Now, you can use versionCode and versionName as needed.
        // For example, you can display them in a TextView or log them.
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }**

1

2023年11月
要检索VERSION_CODE,你可以简单地使用BuildConfig类,就像下面的代码一样:

val versionCode = BuildConfig.VERSION_CODE

只要记住,默认情况下(Gradle插件8.0.0+),所有Android模块都会自动生成BuildConfig类,但是如果您使用的是旧版本的插件或者在您的BuildConfig类中使用自定义字段,您需要在模块的build.gradle文件中显式启用BuildConfig。(就像在Compose项目中一样)
要解决在Jetpack Compose项目中导入BuildConfig的问题,请按照以下步骤操作:
1. 在build.gradle(应用程序模块)的android块中添加以下代码。
     //....
     buildFeatures {
        //...
        buildConfig = true // add this
        //...
     }
     //....
 }

2. 将您的项目与Gradle文件同步(带有向下箭头的大象按钮)。这一步确保构建系统应用更改并生成所需的代码。
3. (如果问题仍然存在)从“文件”菜单中运行“无效缓存并重新启动”。
4. 最后,从“构建”菜单中运行“重建项目”。

0
非常简单:

非常容易:

从构建

   val manufacturer = Build.MANUFACTURER
   val model = Build.MODEL
   val versionRelease = Build.VERSION.RELEASE

从 BuildConfig

 val versionCode = BuildConfig.VERSION_CODE
 val versionName = BuildConfig.VERSION_NAME

2
这些数据显示了您的设备型号及其Android版本。这与您的应用程序版本完全无关。 - FrankKrumnow
没错,我会编辑它。 - AmirMohamamd

0

只需编写这个。

XML 代码

<TextView
        android:id="@+id/appversion"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

初始化TextView变量

TextView appversion;

将TextView的ID设置为变量。
appversion = findViewById(R.id.appversion);

这是展示应用版本的主要代码 BuildConfig.VERSION_NAME,只需将其作为字符串值使用即可。
textview.setText("v"+BuildConfig.VERSION_NAME);

-1
try {
    PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
    String versionName = packageInfo.versionName;
    int versionCode = packageInfo.versionCode;
    //binding.tvVersionCode.setText("v" + packageInfo.versionName);
}
catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}

你的回答相对于之前的回答有什么补充?请不要重复回答。 - David Miguel
需要解释一下。 - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接