Android SDK 28 - код версии в PackageInfo устарел - PullRequest
0 голосов
/ 24 октября 2018

Я только что обновил compileSdkVersion моего приложения до 28 (Пирог).

Я получаю предупреждение компиляции:

предупреждение: [код устаревания] versionCode в PackageInfoустарела

Предупреждение исходит из этого кода:

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

Я посмотрел документацию , но она ничего не говорит о том, какчтобы решить эту проблему или что следует использовать вместо устаревшего поля.

Ответы [ 3 ]

0 голосов
/ 16 декабря 2018

Мое рекомендуемое решение:

Включите это в ваш основной 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;
}
0 голосов
/ 14 августа 2019

Здесь решение в kotlin:

val versionCode: Long =
    if (Build.VERSION.SDK_INT >= VERSION_CODES.P) {
           packageManager.getPackageInfo(packageName, 0).longVersionCode
    } else {
            packageManager.getPackageInfo(packageName, 0).versionCode.toLong()
    }
0 голосов
/ 24 октября 2018

В нем сказано, что делать на Java doc (я рекомендую не использовать документацию Kotlin слишком часто; она не очень хорошо поддерживается):

versionCode

Это поле устарело на уровне API 28. Вместо этого используйте getLongVersionCode (), который включает в себя и этот, и дополнительный атрибут versionCodeMajor.Номер версии этого пакета, указанный в атрибуте тега versionCode.

Однако это метод API 28, поэтому рассмотрите возможность использования PackageInfoCompat .У него один статический метод:

getLongVersionCode(PackageInfo info)
...