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



我刚刚将应用程序的compileSdkVersion升级到28(Pie(。

我收到编译警告:

警告:[弃用] 版本包信息中的代码已被弃用

警告来自以下代码:

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

我查看了文档,但它没有说明如何解决此问题或应该使用什么而不是弃用的字段。

它说明了在 Java 文档上该怎么做(我建议不要过多地使用 Kotlin 文档;它并没有真正维护得很好(:

版本代码

此字段在 API 级别 28 中已弃用。改用getLongVersionCode((,它包括这个和额外的版本CodeMajor属性。此程序包的版本号,由标记的版本代码属性指定。

不过,这是一个API 28方法,因此请考虑使用PackageInfoCompat。它有一个静态方法:

getLongVersionCode(PackageInfo info)

我推荐的解决方案:

把它包含在你的主构建中:

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;
}

对于使用 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;
}

这里是kotlin的解决方案:

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

Kotlin中获取版本的简单代码包信息中的代码

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

截至 API33,来自库:

<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

相关内容

  • 没有找到相关文章

最新更新