it-swarm.com.de

Android SDK 28 - versionCode in PackageInfo ist veraltet

Ich habe gerade das compileSdkVersion meiner App auf 28 (Pie) aktualisiert.

Ich erhalte eine Zusammenstellungswarnung:

warnung: [veraltet] versionCode in PackageInfo ist veraltet

Die Warnung kommt von diesem Code:

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

Ich habe mir die Dokumentation angesehen, aber es sagt nichts darüber aus, wie dieses Problem behoben werden kann oder was anstelle des veralteten Felds verwendet werden sollte.

19

Es sagt, was zu tun ist auf dem Java doc (Ich empfehle, die Kotlin-Dokumentation nicht für viel zu verwenden; es ist nicht wirklich gut gepflegt):

versionCode

Dieses Feld war auf API-Ebene 28 veraltet. Verwenden Sie stattdessen getLongVersionCode (), das sowohl dieses als auch das zusätzliche versionCodeMajor-Attribut enthält. Die durch das versionCode-Attribut des Tags angegebene Versionsnummer dieses Pakets.

Dies ist jedoch eine API-28-Methode. Erwägen Sie daher die Verwendung von PackageInfoCompat . Es gibt eine statische Methode:

getLongVersionCode(PackageInfo info)
27
TheWanderer

Meine empfohlene Lösung:

Fügen Sie dies in Ihr main build.gradle ein:

implementation 'androidx.appcompat:appcompat:1.0.2'

dann benutze einfach diesen Code:

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

Falls Sie Probleme beim Hinzufügen der appcompat-Bibliothek haben, verwenden Sie einfach dieses alternative Lösung:

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

Hier die Lösung in 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
Noelia