minSdkVersion — το ελάχιστο επίπεδο API Android στο οποίο μπορεί να εγκατασταθεί και να εκτελεστεί μια εφαρμογή. Η παράμετρος ορίζεται στο build.gradle στο μπλοκ defaultConfig και καθορίζει το κατώτερο όριο συμβατότητας: εάν το επίπεδο API της συσκευής είναι χαμηλότερο από την τιμή minSdk, το σύστημα αποκλείει την εγκατάσταση και το Google Play δεν εμφανίζει την εφαρμογή σε μια τέτοια συσκευή. Σύμφωνα με το Android Developers, η σωστή επιλογή του minSdk είναι κρίσιμη για την ισορροπία μεταξύ κάλυψης κοινού και διαθεσιμότητας σύγχρονων API.
Κύρια Σημεία
minSdkVersion — μια ακέραια παράμετρος στο build.gradle που ορίζει το ελάχιστο επίπεδο API Android για την εγκατάσταση της εφαρμογής. Εάν το επίπεδο API της συσκευής είναι χαμηλότερο από την καθορισμένη τιμή, ο PackageManager αποκλείει την εγκατάσταση και το Google Play Store κρύβει την εφαρμογή από τα αποτελέσματα αναζήτησης για μια τέτοια συσκευή. Το minSdkVersion γράφεται στο AndroidManifest.xml κατά τη φάση κατασκευής μέσω της ετικέτας <uses-sdk android:minSdkVersion> και ελέγχεται σε κάθε εγκατάσταση.
Η τιμή του minSdkVersion είναι ένας συμβιβασμός μεταξύ της κάλυψης κοινού και της πρόσβασης σε νέα API. Όσο χαμηλότερο είναι το minSdk, τόσο περισσότερες συσκευές μπορούν να εγκαταστήσουν την εφαρμογή, ειδικά σε αναπτυσσόμενες περιοχές όπου τα παλιά Android smartphone είναι δημοφιλή. Όσο υψηλότερο είναι το minSdk, τόσο λιγότερος κώδικας προς τα πίσω συμβατότητας απαιτείται και τόσο περισσότερα σύγχρονα API είναι διαθέσιμα χωρίς ελέγχους χρόνου εκτέλεσης. Android Jetpack και βιβλιοθήκες AndroidX παρέχουν backport πολλών νέων API σε παλιές εκδόσεις Android, επιτρέποντας την επιλογή χαμηλότερου minSdk χωρίς απώλεια λειτουργικότητας.
Το minSdkVersion επηρεάζει όλα τα στάδια ανάπτυξης: στατική ανάλυση (το lint χρησιμοποιεί minSdk για προειδοποιήσεις), συμβατότητα εξαρτήσεων (οι βιβλιοθήκες μπορεί να απαιτούν το δικό τους minSdk), δοκιμές (πρέπει να δοκιμάζεται σε συσκευές με minSdk) και Google Play Console (η κάλυψη κοινού υπολογίζεται βάσει minSdk). Η αλλαγή του minSdkVersion είναι μία από τις πιο υπεύθυνες αποφάσεις στη διαμόρφωση του έργου, καθώς επηρεάζει τον κώδικα, τις δοκιμές και τη βάση χρηστών.
Build.gradle.kts (Kotlin DSL) — το σύγχρονο πρότυπο σε έργα Android. Η παράμετρος minSdk ορίζεται στο μπλοκ defaultConfig σε επίπεδο ενότητας. Η τιμή μπορεί να παρακαμφθεί για διαφορετικούς τύπους κατασκευής και γεύσεις προϊόντος, επιτρέποντας δοκιμές σε χαμηλότερα API χωρίς αλλαγή της κύριας τιμής.
// build.gradle.kts — βασική διαμόρφωση minSdk
android {
namespace = "com.example.myapp"
compileSdk = 36
defaultConfig {
applicationId = "com.example.myapp"
minSdk = 26 // Android 8.0 Oreo
targetSdk = 36
versionCode = 1
versionName = "1.0.0"
}
// Παράκαμψη minSdk για διαφορετικά flavor
flavorDimensions += "tier"
productFlavors {
create("free") {
minSdk = 26
}
create("premium") {
minSdk = 26
}
}
}Στο παράδειγμα, το minSdk = 26 αντιστοιχεί στο Android 8.0 Oreo. Αυτή είναι μια δημοφιλής τιμή το 2026: σύμφωνα με το Android Studio Distribution Dashboard, αποκόπτει μόνο ~15% των συσκευών. Το compileSdk = 36 παρέχει πρόσβαση σε όλα τα API του Android 16 και το targetSdk = 36 ενεργοποιεί τις αλλαγές συμπεριφοράς της τελευταίας έκδοσης. Για debug builds, το minSdk μπορεί να μειωθεί για δοκιμές σε παλιούς εξομοιωτές.
Η επιλογή του minSdkVersion — μια στρατηγική απόφαση που βασίζεται στην ανάλυση του κοινού-στόχου, των απαιτήσεων API και του οικοσυστήματος βιβλιοθηκών. Δεν υπάρχει μία ενιαία σωστή τιμή για όλα τα έργα. Το 2026, το Android Studio συνιστά minSdk = 26 (Android 8.0) ως βασικό επίπεδο για νέα έργα, αλλά για εφαρμογές B2B ή εταιρικές λύσεις, χαμηλότερες ή υψηλότερες τιμές είναι αποδεκτές.
Πρώτος παράγοντας — Distribution Dashboard. Το Android Studio παρέχει στατιστικά ενεργών συσκευών ανά επίπεδο API βάσει δεδομένων Google Play, που ενημερώνονται μηνιαία. Το minSdkVersion πρέπει να καλύπτει τουλάχιστον το 90-95% των ενεργών συσκευών της αγοράς-στόχου. Για διεθνείς εφαρμογές με κοινό στην Αφρική και τη Νοτιοανατολική Ασία, το minSdk θα πρέπει να μειωθεί στο 21 (Android 5.0) λόγω του υψηλού ποσοστού παλιών συσκευών.
Δεύτερος παράγοντας — απαιτήσεις εξαρτήσεων. Κάθε βιβλιοθήκη έχει το δικό της minSdkVersion που ορίζεται στο manifest της. Εάν μια βιβλιοθήκη απαιτεί minSdk 29 και η εφαρμογή — minSdk 26, η κατασκευή θα αποτύχει με σφάλμα manifest merger. Οι σύγχρονες βιβλιοθήκες Google Play Services έχουν minSdk 21, Firebase — minSdk 21, οι περισσότερες βιβλιοθήκες Jetpack — minSdk 21 ή 26, Compose BOM — minSdk 21. Για το Compose το ελάχιστο όριο — API 21.
Τρίτος παράγοντας — απαραίτητα API. Εάν η βασική λειτουργικότητα της εφαρμογής απαιτεί API διαθέσιμο μόνο από ένα συγκεκριμένο επίπεδο (π.χ. PhotoPicker — API 34, Predicted Navigation — API 35), αυτό μπορεί να δικαιολογήσει την αύξηση του minSdk. Ωστόσο, συχνότερα χρησιμοποιείται ένας συνδυασμός backport AndroidX (Activity Result API, NotificationCompat) και ελέγχων χρόνου εκτέλεσης για τη διατήρηση χαμηλού minSdk.
| minSdk | Έκδοση Android | Κάλυψη (~2026) | Σύσταση |
|---|---|---|---|
| 21 | 5.0 Lollipop | 97% | Μέγιστη κάλυψη, πολύς κώδικας fallback |
| 23 | 6.0 Marshmallow | 95% | Runtime Permissions διαθέσιμα εγγενώς |
| 26 | 8.0 Oreo | 85% | Προτεινόμενο βασικό επίπεδο |
| 29 | 10 Q | 72% | Scoped Storage εγγενώς, λιγότερες δοκιμές |
| 31 | 12 Snow Cone | 55% | Εξειδικευμένες εφαρμογές, σύγχρονα API |
Βήμα 1: ανοίξτε το Android Studio, File → New Project και δείτε το προτεινόμενο minSdk στον οδηγό. Βήμα 2: ελέγξτε το Distribution Dashboard στο Android Studio (View → Tool Windows → App Inspection → Distribution Dashboard). Βήμα 3: αναλύστε τις εξαρτήσεις του έργου — εκτελέστε την κατασκευή και διορθώστε τις συγκρούσεις manifest merger. Βήμα 4: αξιολογήστε ποια API επιπέδου X χρησιμοποιούνται πραγματικά χωρίς backport. Βήμα 5: ορίστε το minSdk ως την ελάχιστη τιμή που καλύπτει το 90%+ του κοινού-στόχου και είναι συμβατή με όλες τις εξαρτήσεις.
Κατανομή συσκευών ανά επίπεδο API — ένας δυναμικός δείκτης που αλλάζει κάθε τρίμηνο. Σύμφωνα με το Android Studio Distribution Dashboard για τον Ιούνιο του 2026, περίπου το 85% των ενεργών συσκευών Android λειτουργούν σε API 26 (Android 8.0) και άνω, 72% — σε API 29 (Android 10) και άνω, 55% — σε API 31 (Android 12) και άνω. Η κινεζική αγορά έχει τη δική της στατιστική λόγω της απουσίας Google Play Services σε πολλές συσκευές Huawei.
Συσκευές GMS (Google Mobile Services) ενημερώνονται ταχύτερα: το μερίδιο API 31+ σε αυτές φτάνει το 68% χάρη στις υποχρεωτικές απαιτήσεις του Google Play προς τους κατασκευαστές. Συσκευές non-GMS (Huawei, Honor, ορισμένες κινεζικές μάρκες) έχουν παλαιότερη κατανομή: το μερίδιο API 31+ σε αυτές είναι περίπου 35%. Εάν η εφαρμογή απευθύνεται στη διεθνή αγορά, βασιστείτε στα παγκόσμια στατιστικά. Εάν στην κινεζική — λάβετε υπόψη το τμήμα non-GMS.
| Επίπεδο API | Έκδοση Android | Παγκόσμια κάλυψη | Κάλυψη non-GMS |
|---|---|---|---|
| 21-25 | 5.0-6.0 | ~2% | ~5% |
| 26-28 | 8.0-9.0 | ~13% | ~20% |
| 29-30 | 10-11 | ~15% | ~25% |
| 31-33 | 12-13 | ~20% | ~25% |
| 34-35 | 14-15 | ~30% | ~15% |
| 36 | 16 | ~20% | ~10% |
Συμπέρασμα: για μια διεθνή εφαρμογή, το minSdk 26 καλύπτει το 85% των συσκευών με ελάχιστο κόστος προς τα πίσω συμβατότητας. Για εφαρμογές με κοινό σε αναπτυσσόμενες περιοχές, το minSdk 21 (κάλυψη 97%) είναι δικαιολογημένο, αλλά θα απαιτήσει περισσότερο κώδικα για εργασία με παλιά API. Για εφαρμογές Enterprise με ελεγχόμενο στόλο συσκευών, μπορείτε να ορίσετε minSdk 31 και να απαλλαγείτε εντελώς από τον κώδικα fallback.
Προς τα πίσω συμβατότητα — η κύρια δυσκολία σε χαμηλό minSdkVersion. Το AndroidX (πρώην Support Library) παρέχει backport σύγχρονων API σε παλιές εκδόσεις Android: AppCompatActivity για Material Design, FragmentManager, Loader, NotificationCompat, PreferenceFragmentCompat και δεκάδες άλλα στοιχεία. Η χρήση ισοδύναμων AndroidX αντί για εγγενή API — το πρώτο βήμα προς τη συμβατότητα.
lint (στατικός αναλυτής του Android Studio) σαρώνει τον κώδικα για κλήσεις API πάνω από το minSdkVersion. Εάν μια μέθοδος έχει επισημανθεί με @RequiresApi με επίπεδο API υψηλότερο από το minSdk και κληθεί χωρίς έλεγχο, το lint επισημαίνει το σφάλμα. Για να καταστείλετε την προειδοποίηση, χρησιμοποιήστε τον σχολιασμό @SuppressLint("NewApi") στη μέθοδο ή @RequiresApi(Build.VERSION_CODES.TIRAMISU) σε ολόκληρη τη συνάρτηση. Έλεγχοι χρόνου εκτέλεσης μέσω Build.VERSION.SDK_INT — ο κύριος μηχανισμός ασφαλούς κλήσης νέων API σε παλιές συσκευές.
// Παράδειγμα προς τα πίσω συμβατότητας: PhotoPicker (API 34+) και fallback
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
class ImagePickerActivity : AppCompatActivity() {
// Activity Result API (AndroidX) — λειτουργεί σε οποιοδήποτε επίπεδο API
private val pickImageLauncher = registerForActivityResult(
ActivityResultContracts.GetContent()
) { uri ->
uri?.let { displayImage(it) }
}
fun pickImage() {
// PhotoPicker διαθέσιμο μόνο από API 34
if (VERSION.SDK_INT >= VERSION_CODES.UPSIDE_DOWN_CAKE) {
// Χρησιμοποιούμε PhotoPicker (API 34+)
val intent = android.provider.MediaStore
.ACTION_PICK_IMAGES
startActivityForResult(intent, 100)
} else {
// Fallback: GetContent (λειτουργεί σε όλες τις εκδόσεις)
pickImageLauncher.launch("image/*")
}
}
@RequiresApi(VERSION_CODES.UPSIDE_DOWN_CAKE)
fun usePhotoPickerOnly() {
// Αυτή η μέθοδος δεν μπορεί να κληθεί σε API < 34
val intent = android.provider.MediaStore
.ACTION_PICK_IMAGES
startActivityForResult(intent, 100)
}
}Η κλάση ImagePickerActivity παρουσιάζει τρία επίπεδα προς τα πίσω συμβατότητας. Το Activity Result API από το AndroidX λειτουργεί σε όλα τα επίπεδα API, επομένως για τη βασική επιλογή εικόνας το minSdk δεν έχει σημασία. Το PhotoPicker (ACTION_PICK_IMAGES) είναι διαθέσιμο μόνο από το API 34 και καλείται υπό έλεγχο SDK_INT με fallback στο GetContent. Η μέθοδος usePhotoPickerOnly έχει επισημανθεί με @RequiresApi — το lint δεν θα επιτρέψει την κλήση της χωρίς έλεγχο. Το AppCompat από το AndroidX προσαρμόζει αυτόματα το θέμα, τα τμήματα και τις κινούμενες εικόνες στην έκδοση του λειτουργικού συστήματος.
Βιβλιοθήκες (AAR, JAR) έχουν επίσης minSdkVersion που ορίζεται στο manifest τους. Κατά τη σύνδεση μιας βιβλιοθήκης, το Gradle ελέγχει τη συμβατότητα: εάν το minSdk της βιβλιοθήκης είναι υψηλότερο από το minSdk της εφαρμογής, η κατασκευή αποτυγχάνει με σφάλμα. Για δημόσιες βιβλιοθήκες, συνιστάται να ορίζεται το χαμηλότερο δυνατό minSdk (21 στις περισσότερες περιπτώσεις) για να μην περιορίζονται οι καταναλωτές. Εάν μια βιβλιοθήκη απαιτεί API 29+, χάνει ~28% των πιθανών χρηστών.
Πολυ-αρθρωτικά έργα μπορεί να έχουν διαφορετικό minSdkVersion για διαφορετικές ενότητες. Για παράδειγμα, η ενότητα :core:network μπορεί να έχει minSdk 26 και η ενότητα :feature:camera — minSdk 29 (λόγω του CameraX με συγκεκριμένες απαιτήσεις). Το Google Play απαιτεί το minSdk της κύριας ενότητας :app να είναι χαμηλότερο ή ίσο με το minSdk όλων των εξαρτώμενων ενοτήτων. Στην πράξη, όλες οι ενότητες μιας εφαρμογής έχουν συνήθως το ίδιο minSdk για απλοποίηση της συντήρησης.
// build.gradle.kts — ενότητα βιβλιοθήκης με χαμηλό minSdk
plugins {
id("com.android.library")
id("org.jetbrains.kotlin.android")
}
android {
namespace = "com.example.mylibrary"
compileSdk = 36
defaultConfig {
minSdk = 21 // Ελάχιστο για μέγιστη κάλυψη
targetSdk = 36
}
}
dependencies {
// AndroidX Core — minSdk 21, προσθέτει backport
implementation("androidx.core:core-ktx:1.15.0")
implementation("androidx.appcompat:appcompat:1.7.0")
}Μια ενότητα βιβλιοθήκης με minSdk = 21 είναι συμβατή με το 97% των συσκευών και δεν περιορίζει τους καταναλωτές. Εάν η βιβλιοθήκη χρησιμοποιεί API άνω του 21, ο προγραμματιστής πρέπει να προσθέσει ελέγχους χρόνου εκτέλεσης ή να ορίσει @RequiresApi στις αντίστοιχες μεθόδους. Το AndroidX Core KTX (minSdk 21) παρέχει backport για Context, Bundle, Locale και άλλες κλάσεις συστήματος, επιτρέποντας στη βιβλιοθήκη να διατηρήσει χαμηλό minSdk.
Λάθη κατά την επιλογή minSdk μπορεί να κοστίσουν χιλιάδες εγκαταστάσεις ή εβδομάδες πρόσθετης ανάπτυξης. Το πρώτο συνηθισμένο λάθος — η αντιγραφή του minSdk από το πρότυπο έργου χωρίς ανάλυση του Distribution Dashboard. Πολλοί προγραμματιστές αφήνουν minSdk = 21 από το πρότυπο του Android Studio, ενώ για το κοινό τους το minSdk 26 θα ήταν αρκετό και θα μείωνε τον αριθμό των ελέγχων SDK_INT στον κώδικα.
Το δεύτερο λάθος — πολύ υψηλό minSdk χωρίς να λαμβάνεται υπόψη η αγορά. Εάν ορίσετε minSdk = 31 (Android 12) για μια διεθνή εφαρμογή, χάνετε ~45% των συσκευών. Για μια νεοφυή επιχείρηση ή εφαρμογή με μαζικό κοινό, αυτό είναι καταστροφή. Ελέγχετε πάντα το Distribution Dashboard πριν αυξήσετε το minSdk και χρησιμοποιείτε A/B δοκιμές στο Google Play Console εάν δεν είστε σίγουροι.
Το τρίτο λάθος — αγνόηση του minSdk των εξαρτήσεων. Κατά την προσθήκη μιας νέας βιβλιοθήκης, ελέγξτε το minSdk της στην τεκμηρίωση ή στο αρχείο POM. Το Firebase ML Kit απαιτεί minSdk 21, ορισμένες προσαρμοσμένες βιβλιοθήκες κάμερας απαιτούν minSdk 29. Εάν το manifest merger αποτύχει στην παραγωγή λόγω νέας βιβλιοθήκης, η επιδιόρθωση μπορεί να διαρκέσει ημέρες.
// Παράδειγμα: έλεγχος συμβατότητας API σε χρόνο εκτέλεσης
fun checkFeatureAvailability(): Boolean {
// Συνηθισμένο λάθος — κλήση API χωρίς έλεγχο SDK_INT
return when {
VERSION.SDK_INT >= VERSION_CODES.UPSIDE_DOWN_CAKE -> {
// API 34+ — χρησιμοποιούμε PhotoPicker
true
}
VERSION.SDK_INT >= VERSION_CODES.Q -> {
// API 29-33 — χρησιμοποιούμε MediaStore
true
}
else -> {
// API < 29 — χρησιμοποιούμε ACTION_GET_CONTENT
true
}
}
}Η σωστή αρχιτεκτονική ελέγχων επιπέδου API — when με εύρη που καλύπτουν όλες τις πιθανές τιμές από minSdk έως compileSdk. Ο βασικός κανόνας: κάθε κλήση API επιπέδου X πρέπει να προστατεύεται με έλεγχο VERSION.SDK_INT για όλες τις συσκευές με επίπεδο API από minSdk έως X. Το lint βοηθά στην ανίχνευση μη ελεγμένων κλήσεων, αλλά δεν μπορεί να εγγυηθεί πλήρη κάλυψη για δυναμικό κώδικα.
Συχνές Ερωτήσεις
minSdkVersion — το ελάχιστο επίπεδο API Android στο οποίο μπορεί να εγκατασταθεί η εφαρμογή. Ορίζεται στο build.gradle στο μπλοκ defaultConfig. Εάν το επίπεδο API της συσκευής είναι χαμηλότερο από minSdk, η εγκατάσταση αποκλείεται από το σύστημα και το Google Play δεν εμφανίζει την εφαρμογή σε μια τέτοια συσκευή. Το minSdk επηρεάζει την κάλυψη κοινού: minSdk = 26 καλύπτει ~85% συσκευών, minSdk = 21 — ~97%.
minSdkVersion επιλέγεται βάσει στατιστικών Distribution Dashboard στο Android Studio και κοινού-στόχου. Για μαζικές εφαρμογές συνιστάται minSdk 26 (Android 8.0) — καλύπτει ~85% συσκευών. Για εφαρμογές B2B μπορείτε να ορίσετε minSdk 31 (Android 12). Είναι σημαντικό να ελέγξετε ότι όλες οι χρησιμοποιούμενες βιβλιοθήκες υποστηρίζουν το επιλεγμένο minSdk. Για εφαρμογές Compose το ελάχιστο όριο — API 21.
Νέα API μπορούν να χρησιμοποιηθούν με χαμηλό minSdkVersion μέσω AndroidX με backport (AppCompat, Core KTX, Activity Result API) ή μέσω ελέγχων χρόνου εκτέλεσης Build.VERSION.SDK_INT με κώδικα fallback. Ο σχολιασμός @RequiresApi υποδεικνύει στο lint ότι η μέθοδος απαιτεί ένα συγκεκριμένο επίπεδο API. Τα AndroidX Material Components παρέχουν επίσης προς τα πίσω συμβατότητα για στοιχεία UI. Χωρίς ελέγχους, η εφαρμογή θα καταρρεύσει με NoSuchMethodError.
Εάν μια βιβλιοθήκη έχει υψηλότερο minSdkVersion από την εφαρμογή, το Android Studio εμφανίζει σφάλμα κατασκευής: Manifest merger failed. Η λύση — αυξήστε το minSdk της εφαρμογής στο επίπεδο της βιβλιοθήκης, βρείτε εναλλακτική με χαμηλότερο minSdk ή χρησιμοποιήστε περιτύλιγμα. Οι περισσότερες βιβλιοθήκες Jetpack έχουν minSdk 21 ή 26. Το Firebase ML Kit απαιτεί minSdk 21, CameraX — minSdk 21.
Η αύξηση του minSdkVersion μετά τη δημοσίευση είναι δυνατή, αλλά μπορεί να οδηγήσει σε απώλεια χρηστών σε παλιές συσκευές. Συνιστάται η αύξηση του minSdk όχι περισσότερο από 1-2 επίπεδα API κάθε φορά, αναλύοντας στατιστικά ενεργών συσκευών στο Google Play Console. Η μείωση του minSdkVersion είναι τεχνικά δυνατή, αλλά απαιτεί έλεγχο του κώδικα για κλήσεις API πάνω από το νέο minSdk και μπορεί να απαιτήσει επανεγγραφή τμημάτων του κώδικα.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης