Kodėl vis dar matau 34 API lygio įspėjimą?
Kuriant „Flutter“, taikymas pagal naujausią „Android“ API lygį yra labai svarbus siekiant užtikrinti programos suderinamumą su naujomis funkcijomis ir saugos atnaujinimais. Neseniai pakeitę „targetSdkVersion“ į 34 API lygį („Android 14“), kūrėjai pranešė, kad „Play Console“ vis tiek įspėja, kad programa turi būti taikoma 14 ar naujesnės versijos „Android“, nepaisant sėkmingo kūrimo.
Dėl šio skirtumo gali kilti painiavos, ypač kai ankstesni programų paketai vis dar veikia konsolėje. Norint veiksmingai išleisti „Flutter“ programą, labai svarbu suprasti, kaip ankstesnės versijos veikia dabartinį įkėlimą, ir atsižvelgti į šį įspėjimą.
komandą | Aprašymas |
---|---|
compileSdkVersion | Nustato API lygį, naudojamą programai kompiliuoti. Šiuo atveju jis nustatytas į 34, o tai taikoma „Android 14“. |
targetSdkVersion | Apibrėžia Android API lygį, kuriuo programa veiks. Atnaujinimas iki 34 užtikrina suderinamumą su Android 14. |
google.auth.default() | Nuskaito numatytuosius kredencialus, leidžiančius pasiekti „Google“ API, kurios dažniausiai naudojamos kartu su debesijos paslaugomis. |
build('androidpublisher', 'v3') | Inicijuoja „Google Play“ kūrėjo API, kad programų paketai ir leidimai būtų tvarkomi programiškai. |
service.edits().insert() | Atidaroma nauja redagavimo sesija „Google Play Console“, kuri reikalinga norint pakeisti programos metaduomenis arba rinkinius. |
bundles = service.edits().bundles().list() | Pateikiamas visų su konkrečia programos versija susietų programų rinkinių sąrašas. Tai leidžia scenarijui nustatyti, ar senesnės versijos vis dar aktyvios. |
service.edits().bundles().delete() | Pašalina aktyvų paketą iš „Google Play Console“. Tai patogu norint pašalinti pasenusias ar prieštaringas versijas. |
service.edits().commit() | Įsipareigoja redagavimo seanso metu atliktus pakeitimus, įskaitant visus programos konfigūracijos ir paketų pakeitimus. |
„Flutter“ taikymo API lygiu sprendimo supratimas
Pirmasis scenarijus pakeičia projekto Flutter „Android“ sąranką, kad būtų užtikrinta, jog programa tinkamai taikoma pagal 34 API lygį. Svarbiausios komandos yra compileSdkVersion ir targetSdkVersion, kurios nurodo „Android“ SDK versijas, naudojamas kompiliuojant ir diegiant. Nustačius compileSdkVersion į 34 užtikrinama, kad programa sukurta naudojant „Android 14“, o targetSdkVersion nurodo numatomą „Android“ versiją, kurioje programa veiks. Šiais pakeitimais atnaujinami projekto nustatymai, kad jie atitiktų naujausius „Google Play“ parduotuvės pateikimo standartus, pašalinant įspėjimą dėl nepalaikomų API lygių.
Antrasis scenarijus palaiko ryšį su Google Play Console API per Python. Tai automatizuoja senesnių programinės įrangos paketų, galinčių sukelti problemų, aptikimo ir pašalinimo procesą. google.auth.default() pateikia numatytuosius kredencialus, leidžiančius pasiekti „Play“ parduotuvės API, o build('androidpublisher', 'v3') inicijuoja Google Play kūrėjų API. Tada scenarijus naudoja service.edits().bundles().list(), kad gautų aktyvius programų paketus, o jei aptinkama sena versija, service.edits().bundles().delete() jį ištrina. Galiausiai komanda service.edits().commit() išsaugo ir taiko visus pakeitimus, užtikrindama, kad programoje nėra pasenusių paketų, dėl kurių gali būti rodomas klaidos pranešimas.
Sprendimas: Užtikrinkite tinkamą tikslinio SDK lygio naujinį, skirtą „Flutter Apps“.
„Flutter“ („Dart“) „Android“ manifesto naujinimas
android {
compileSdkVersion 34
defaultConfig {
applicationId "com.example.myapp"
minSdkVersion 21
targetSdkVersion 34
versionCode 1
versionName "1.0"
}
}
Backend scenarijus: paketo versijos patikrinimas ir senojo paketo išjungimas
„Google Play Console“ API („Python“), skirta aktyvių programų rinkinių valdymui
import google.auth
from googleapiclient.discovery import build
credentials, project = google.auth.default()
service = build('androidpublisher', 'v3', credentials=credentials)
package_name = 'com.example.myapp'
edit_id = service.edits().insert(body={}, packageName=package_name).execute()['id']
bundles = service.edits().bundles().list(packageName=package_name, editId=edit_id).execute()
for bundle in bundles['bundles']:
if bundle['versionCode'] == 1: # First build still active
service.edits().bundles().delete(packageName=package_name, editId=edit_id,
bundleId=bundle['id']).execute()
service.edits().commit(packageName=package_name, editId=edit_id).execute()
Prieštaringų paketų sprendimas naudojant „Flutter“ programos naujinius.
Viena dažna problema atnaujinant „Flutter“ programos targetSdkVersion yra senų programų rinkinių, kurie vis dar rodomi kaip aktyvūs „Google Play Console“, buvimas. Net jei šie paketai yra pasenę, jie gali neleisti tinkamai atpažinti naujausios versijos, todėl gali būti rodomi įspėjimai, pvz., „Programa turi būti skirta 14 (34 API lygio) ar naujesnės versijos Android“. Nors targetSdkVersion reikia pakeisti į 34, kūrėjai taip pat turi užtikrinti, kad ankstesnės versijos netrikdytų atnaujinimo proceso. Programų versijų tvarkymas, ypač pasenusių paketų pašalinimas, gali padėti išspręsti šią problemą.
Be to, kad faile build.gradle tinkamai apibrėžiamas tikslinis API lygis, aktyvios versijos turėtų būti reguliariai peržiūrimos sistemoje „Google Play Console“. Kūrėjai turėtų naudoti tokius įrankius kaip Google Play Developer API arba rankiniu būdu išjungti pasenusius paketus. Taip užtikrinama, kad „Play“ parduotuvė tiksliai atspindėtų naujausią kūrimo konfigūraciją. Kadangi „Google Play“ reikalauja, kad programos atitiktų griežtus versijų kūrimo kriterijus naujinimams, kodo ir paketų valdymas „Play Console“ garantuoja sklandų perėjimą ir sumažina tikimybę, kad gausite neišspręstų API lygio įspėjimų.
Dažniausiai užduodami klausimai apie taikymą pagal „Android 14“ API 34 lygį naudojant „Flutter“.
- Kodėl API lygio įspėjimas išlieka nepaisant targetSdkVersion atnaujinimo?
- Taip gali nutikti, jei „Play Console“ vis dar yra ankstesnių programų rinkinių, priskirtų aktyviems, todėl gali kilti konfliktų.
- Kaip „Google Play Console“ išjungti pasenusius paketus?
- Jei norite išjungti senesnes versijas, naudokite Google Play Developer API arba darykite tai rankiniu būdu naudodami „Play Console“ sąsają.
- Kokia yra targetSdkVersion funkcija „Flutter“?
- Jis nustato API lygį, kuriame veiks jūsų programa, užtikrinant suderinamumą su naujesnėmis „Android“ funkcijomis.
- Kuo skiriasi compileSdkVersion ir targetSdkVersion?
- compileSdkVersion nurodo kompiliavimo metu naudojamą SDK versiją, o targetSdkVersion nurodo versiją, pagal kurią programa bus taikoma vykdymo metu.
- Kaip galiu peržiūrėti šiuo metu aktyvius paketus „Play Console“?
- Galite juos išvardyti naudodami service.edits().bundles().list() arba peržiūrėti tiesiogiai „Play Console“.
Pagrindiniai API taikymo problemų sprendimo būdai.
Užtikrinti, kad jūsų programa „Flutter“ būtų taikoma atitinkamam API lygiui, labai svarbu, kad būtų laikomasi „Play“ parduotuvės. Atnaujinus „targetSdkVersion“ iki 34, turėtų būti atliktas išsamus aktyvių programų rinkinių „Play Console“ įvertinimas. Senesnės, prieštaraujančios versijos gali neleisti tinkamai atpažinti naujausios versijos. Naudodami tokias technologijas kaip „Google Play“ kūrėjų API, kūrėjai gali išjungti pasenusius paketus, išspręsdami dažnai pasitaikančias problemas ir užtikrindami greitą programų platinimą be įspėjimų.