我刚刚将应用程序的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