Scoateți compileSdkVersion, minSdkVersion, and targetSdkVersion

Ian Lake

Follow

6 ianuarie, 2016 – 5 min citește

În funcție de perioada anului, s-ar putea ca abia la câteva luni după ce ați lansat o aplicație să fie anunțată o nouă versiune de Android. Totuși, ce înseamnă acest lucru pentru aplicația dvs. – se va strica totul?

Vă veți bucura să știți că compatibilitatea viitoare este un obiectiv puternic al Android – aplicațiile existente construite pe baza SDK-urilor anterioare nu ar trebui să se strice atunci când utilizatorul se actualizează la o nouă versiune de Android. Aici intervin compileSdkVersion, minSdkVersion și targetSdkVersion: acestea controlează ce API-uri sunt disponibile, care este nivelul API necesar și, respectiv, ce moduri de compatibilitate sunt aplicate.

compileSdkVersion este modalitatea prin care îi puteți spune lui Gradle cu ce versiune a SDK-ului Android să vă compileze aplicația. Folosirea noului SDK Android este o cerință pentru a utiliza oricare dintre noile API-uri adăugate în acel nivel.

Ar trebui subliniat faptul că schimbarea compileSdkVersion nu schimbă comportamentul în timpul execuției. În timp ce noi avertismente/erori ale compilatorului pot fi prezente atunci când vă schimbați compileSdkVersion, compileSdkVersion nu este inclusă în APK-ul dvs.: este pur și simplu utilizată în momentul compilării. (Totuși, ar trebui să remediați cu adevărat aceste avertismente – au fost adăugate cu un motiv!)

De aceea, se recomandă cu tărie să compilați întotdeauna cu cel mai recent SDK. Veți beneficia de toate avantajele noilor verificări de compilare asupra codului existent, veți evita API-urile recent depreciate și veți fi gata să utilizați noile API-uri.

Rețineți că, dacă utilizați Support Library, compilarea cu cel mai recent SDK este o cerință pentru a utiliza cele mai recente versiuni ale Support Library. De exemplu, pentru a utiliza versiunea 23.1.1 Support Library, trebuie să aveți o versiune compileSdkVersion de cel puțin 23 (aceste prime numere trebuie să se potrivească!). În general, o nouă versiune a Support Library este lansată odată cu o nouă versiune a platformei, oferind șaibe de compatibilitate cu API-urile nou adăugate, precum și cu noile caracteristici.

minSdkVersion

Dacă compileSdkVersion stabilește cele mai noi API-uri disponibile pentru dumneavoastră, minSdkVersion este limita inferioară pentru aplicația dumneavoastră. MinSdkVersion este unul dintre semnalele pe care magazinul Google Play Store le folosește pentru a determina pe care dintre dispozitivele unui utilizator poate fi instalată o aplicație.

De asemenea, joacă un rol important în timpul dezvoltării: în mod implicit, lint rulează împotriva proiectului dumneavoastră, avertizându-vă atunci când utilizați API-uri peste minSdkVersion, ajutându-vă să evitați problema de execuție a încercării de a apela o API care nu există. Verificarea versiunii sistemului în timpul execuției este o tehnică obișnuită atunci când se utilizează API-uri doar pe versiuni mai noi ale platformei.

Rețineți că bibliotecile pe care le utilizați, cum ar fi oricare dintre bibliotecile de suport sau serviciile Google Play, pot avea propria minSdkVersion – minSdkVersion a aplicației dvs. trebuie să fie cel puțin la fel de mare ca minSdkVersion a dependențelor dvs. – dacă aveți biblioteci care necesită 4, 7 și 9, minSdkVersion trebuie să fie cel puțin 9. În cazurile rare în care doriți să continuați să utilizați o bibliotecă cu o minSdkVersion mai mare decât aplicația dvs. (și să vă ocupați de toate cazurile limită/asigurați-vă că biblioteca este utilizată numai pe versiuni mai noi ale platformei), puteți utiliza marcajul tools:overrideLibrary, dar asigurați-vă că testați temeinic!

Când vă decideți asupra unei versiuni minSdkVersion, ar trebui să luați în considerare statisticile de pe Dashboards, care vă oferă o privire globală asupra tuturor dispozitivelor care au vizitat Magazinul Google Play în ultimele 7 zile – acesta este publicul dumneavoastră potențial atunci când puneți o aplicație pe Google Play. În cele din urmă, este o decizie de afaceri dacă susținerea unui procent suplimentar de 3% de dispozitive merită timpul de dezvoltare și de testare necesar pentru a asigura cea mai bună experiență.

Desigur, dacă un nou API este cheia pentru întreaga dvs. aplicație, atunci discuția despre minSdkVersion devine mult mai ușoară. Amintiți-vă doar că chiar și 0,7% din 1,4 miliarde de dispozitive reprezintă o mulțime de dispozitive.

targetSdkVersion

Cel mai interesant dintre cele trei, totuși, este targetSdkVersion. targetSdkVersion este principalul mod în care Android asigură compatibilitatea viitoare prin faptul că nu aplică modificări de comportament decât dacă targetSdkVersion este actualizat. Acest lucru vă permite să folosiți noile API-uri (deoarece ați actualizat compilareaSdkVersion, nu-i așa?) înainte de a lucra la modificările de comportament.

Major parte din modificările de comportament pe care le implică targetSdkVersion sunt documentate direct în VERSION_CODES, dar toate detaliile sângeroase sunt, de asemenea, listate în evidențele de platformă ale fiecărei versiuni, frumos legate în tabelul API Levels.

De exemplu, versiunea Android 6.0 modificări vorbesc despre modul în care țintirea API 23 face trecerea aplicației dvs. la modelul de permisiuni în timp de execuție, iar modificările de comportament Android 4.4 detaliază modul în care țintirea API 19 sau mai mare modifică modul în care funcționează alarmele setate cu set() și setRepeating().

Cu unele dintre modificările de comportament foarte vizibile pentru utilizatori (deprecierea butonului de meniu, permisiuni în timp de execuție etc.), actualizarea pentru a ținti cel mai recent SDK ar trebui să fie o prioritate ridicată pentru fiecare aplicație. Asta nu înseamnă că trebuie să folosiți fiecare caracteristică nouă introdusă și nici că ar trebui să vă actualizați orbește targetSdkVersion fără să testați – vă rog, vă rog să testați înainte de a vă actualiza targetSdkVersion! Utilizatorii dvs. vă vor mulțumi.

Gradle și versiunile SDK

De aceea, este important să setați corect compileSdkVersion, minSdkVersion și targetSdkVersion. După cum v-ați putea imagina într-o lume cu Gradle și Android Studio, aceste valori sunt integrate în sistemul de instrumente prin includerea în fișierul build.gradle al modulului dvs. (disponibil, de asemenea, prin intermediul opțiunii Project Structure din Android Studio):

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.example.checkyourtargetsdk"
minSdkVersion 7
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.example.checkyourtargetsdk"
minSdkVersion 7
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
}

CompilareSdkVersion, fiind o chestie de timp de compilare (cine ar fi ghicit!), este una dintre setările android alături de versiunea instrumentelor de compilare. Celelalte două sunt puțin diferite prin faptul că sunt declarate la nivelul variantei de compilare – defaultConfig este baza pentru toate variantele de compilare și unde ai pune valorile implicite pentru acestea, dar ți-ai putea imagina un sistem mai complicat în care anumite versiuni ale aplicației tale au o minSdkVersion diferită, de exemplu.

minSdkVersion și targetSdkVersion diferă, de asemenea, de compileSdkVersion prin faptul că sunt incluse în APK-ul final – dacă ar fi să vă uitați la AndroidManifest.xml generat, ați vedea o etichetă de genul:

<uses-sdk android:targetSdkVersion="23" android:minSdkVersion="7" />

Vă veți da seama că, dacă puneți manual acest lucru în manifestul dvs., va fi ignorat atunci când construiți cu Gradle (deși alte sisteme de construire s-ar putea baza cu siguranță pe faptul că este acolo).

Punând totul laolaltă

Dacă ați reușit să parcurgeți notele scrise cu bold, veți observa o relație între cele trei valori:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

Acest lucru are sens în mod intuitiv – dacă compileSdkVersion este „maximul” și minSdkVersion este „minimul”, atunci maximul trebuie să fie cel puțin la fel de mare ca minimul, iar ținta trebuie să fie undeva la mijloc.

În mod normal, relația ar arăta mai degrabă așa în stare stabilă:

minSdkVersion (lowest possible) <= 
targetSdkVersion == compileSdkVersion (latest SDK)

Vă veți atinge cea mai mare audiență cu o minSdkVersion mică și veți arăta și acționa cel mai bine prin direcționarea și compilarea cu cel mai recent SDK – o modalitate excelentă de a #BuildBetterApps.

Alăturați-vă discuției pe postarea de pe Google+ și urmăriți Android Development Patterns Collection pentru mai multe!

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.