Android SDK 28 - код версии в PackageInfo устарел
Я только что обновил свое приложение compileSdkVersion
до 28
(пирог).
Я получаю предупреждение о компиляции:
предупреждение: [код устаревания] versionCode в PackageInfo устарел
Предупреждение приходит от этого кода:
final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
int versionCode = info.versionCode;
Я посмотрел документацию, но там ничего не говорится о том, как решить эту проблему или что следует использовать вместо устаревшего поля.
Ответы
Ответ 1
Там написано, что делать на Java-документе (я не рекомендую много использовать документацию Kotlin; она не очень хорошо поддерживается):
VersionCode
Это поле устарело на уровне API 28. Вместо этого используйте getLongVersionCode(), который включает в себя и этот, и дополнительный атрибут versionCodeMajor. Номер версии этого пакета, указанный в атрибуте тега versionCode.
Однако это метод API 28, поэтому рассмотрите возможность использования PackageInfoCompat. У него есть один статический метод:
getLongVersionCode(PackageInfo info)
Ответ 2
Мое рекомендуемое решение:
Включите это в ваш основной build.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;
}
Ответ 3
Вот решение в kotlin
:
val versionCode: Long =
if (Build.VERSION.SDK_INT >= VERSION_CODES.P) {
packageManager.getPackageInfo(packageName, 0).longVersionCode
} else {
packageManager.getPackageInfo(packageName, 0).versionCode.toLong()
}