Android SDK 28 -PackageInfo中的版本代码已被弃用

wnavrhmk  于 2023-11-15  发布在  Android
关注(0)|答案(7)|浏览(241)

我刚刚升级了我的应用程序的compileSdkVersion28(Pie)。
我收到一个编译警告:
警告:[deprecation] PackageInfo中的versionCode已被弃用
警告来自于这段代码:

final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
int versionCode = info.versionCode;

字符串
我查看了文档,但它没有说明如何解决这个问题,或者应该使用什么来代替弃用的字段。

hzbexzde

hzbexzde1#

它说明了在Java文档上要做什么(我建议不要过多使用Kotlin文档;它维护得不好):
versionCode
此字段在API级别28中不推荐使用。请改用getLongVersionCode(),它同时包含此属性和附加的versionCodeMajor属性。此包的版本号,由标记的versionCode属性指定。
不过,这是一个API 28方法,所以考虑使用PackageInfoCompat。它有一个静态方法:

getLongVersionCode(PackageInfo info)

字符串

uxh89sit

uxh89sit2#

我推荐的解决方案:
将其包含在您的主构建中。gradle:

implementation 'androidx.appcompat:appcompat:1.0.2'

字符串
然后使用这个代码:

PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
long longVersionCode= PackageInfoCompat.getLongVersionCode(pInfo);
int versionCode = (int) longVersionCode; // avoid huge version numbers and you will be ok


如果您在添加appcompat库时遇到问题,请使用此替代解决方案

final PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
int versionCode;
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
    versionCode = (int) pInfo.getLongVersionCode(); // avoid huge version numbers and you will be ok
} else {
    //noinspection deprecation
    versionCode = pInfo.versionCode;
}

i2byvkas

i2byvkas3#

对于其他使用Xamarin的人,我的回答是:

public long GetBuild()
{
    var context = global::Android.App.Application.Context;
    PackageManager manager = context.PackageManager;
    PackageInfo info = manager.GetPackageInfo(context.PackageName, 0);

    return info.LongVersionCode;
}

字符串

lrl1mhuk

lrl1mhuk4#

这里的解决方案在**kotlin**:

val versionCode: Long =
    if (Build.VERSION.SDK_INT >= VERSION_CODES.P) {
           packageManager.getPackageInfo(packageName, 0).longVersionCode
    } else {
            packageManager.getPackageInfo(packageName, 0).versionCode.toLong()
    }

字符串

new9mtju

new9mtju5#

Kotlin中获取PackageInfo中的versionCode的简单代码

val packageInfo = this.packageManager.getPackageInfo(this.packageName, 0)
val verCode = PackageInfoCompat.getLongVersionCode(packageInfo).toInt()

字符串

tyu7yeag

tyu7yeag6#

从API 33开始,来自库:

<applicationContext>.run {
    val info =
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) 
            packageManager.getPackageInfo(packageName, 0)
        else packageManager.getPackageInfo(packageName,
            PackageManager.PackageInfoFlags.of(0))
    PackageInfoCompat.getLongVersionCode(info)
}

字符串
从你自己的应用程序,这仍然是一个有效的答案:https://stackoverflow.com/a/21119027/2115403

elcex8rz

elcex8rz7#

你也可以使用这个扩展变量:

val PackageInfo.versionCodeCompat: Long
    get() = PackageInfoCompat.getLongVersionCode(this)

字符串

相关问题