我只是将应用程序的compileSdkVersion
升级为28
(Pie)。
我收到编译警告:
警告:PackageInfo中的[deprecation] versionCode已弃用
警告来自以下代码:
final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
int versionCode = info.versionCode;
我查看了documentation,但它没有说明如何解决此问题或应使用什么代替已弃用的字段。
答案 0 :(得分:19)
它说明了要怎么做on the Java doc(我建议不要过多使用Kotlin文档;它的维护并不很好):
versionCode
此字段在API级别28中已弃用。请改用getLongVersionCode(),它包括this和附加的versionCodeMajor属性。该程序包的版本号,由标记的versionCode属性指定。
不过,这是API 28方法,因此请考虑使用PackageInfoCompat。它有一个静态方法:
getLongVersionCode(PackageInfo info)
答案 1 :(得分:10)
我推荐的解决方案:
将此包含在您的主build.gradle中:
lib
然后只需使用以下代码:
implementation 'androidx.appcompat:appcompat:1.0.2'
如果您在添加appcompat库时遇到问题,则只需使用此替代解决方案:
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
答案 2 :(得分:7)
对于其他使用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;
}
答案 3 :(得分:0)
在 kotlin
中找到解决方案:
val versionCode: Long =
if (Build.VERSION.SDK_INT >= VERSION_CODES.P) {
packageManager.getPackageInfo(packageName, 0).longVersionCode
} else {
packageManager.getPackageInfo(packageName, 0).versionCode.toLong()
}