Яка різниця між мінімальною версією SDK / цільовою версією SDK від компільованої версії SDK?


214

Які відмінності між "min sdk версія / цільова версія sdk" та "компілювати sdk версія"? Я знаю, що означає min та target sdk, але що означає компілювати sdk версія?

У Eclipse у мене min / max і цільовий sdk, але в андроїд-студії є ці три налаштування.


Зараз я працюю над додатком, де я використовував targetdkversion як 12, і всі мої макети дуже непрацездатні, тоді я змінюю його назад на 23, і це працює як шарм, тому я думаю, що версія targetdk повинна бути завжди такою ж, як і компільована версія
Шахід Сарвар

Відповіді:


232

Версія min sdk - це найбільш рання версія Android SDK, на якій може працювати ваша програма. Зазвичай це пов’язано з проблемою з більш ранніми API, відсутністю функціональності або іншим поведінковим питанням.

Версія цільової SDK є версія ваша заявка була направлена працювати на. В ідеалі це пов'язано з якимись оптимальними умовами пробігу. Якби ви "зробили свою програму для версії 19", це було б визначено. Він може працювати на більш ранніх чи пізніших випусках, але це те, чого ви прагнули. Це здебільшого свідчить про те, наскільки поточною є ваша програма для використання на ринку тощо.

Версія для компіляції sdk - це версія андроїда, який ваш IDE (або, можливо, інший спосіб компіляції) використовує для створення вашого додатка під час публікації .apkфайлу. Це корисно для тестування вашої програми, оскільки звичайна потреба збирати додаток під час його розробки. Оскільки це буде версія для компіляції в APK, вона, природно, буде версією вашого випуску. Так само бажано, щоб це збігалося з цільовою версією sdk.


Моя версія компіляції sdk та цільова версія sdk однакові. Це 21. Моя програма виходить з ладу, коли я запускаю її на пристроях з нижчим рівнем API. Я новачок в Android, як мені діяти зараз?
prgmrDev

2
@prgmrDev Якщо ваш додаток виходить з ладу для версій нижче 21, ви, мабуть, встановите мінімальну версію SDK на 21. Це фактично не фіксує вашу програму на цілях нижче 21, просто зазначається, що ваш додаток не підтримується на нижчих версіях. У вас також є можливість визначити, що саме порушує вашу програму (що змінилося у версії 21,) та додати підтримку, щоб подолати цю залежність, але я підозрюю, що це буде багато роботи, а не в межах Android для початківців проект.
Метт

1
Що станеться, якщо я встановлю мін minSdkVersion = 14; targetSdkVersion = 23; і компілювати SDK до 19?
thadeuszlay

5
@thadeuszlay ваше запитання не має значення, тому що ви повинні трохи подумати, що якщо ви орієнтуєтеся на запуск версії 23, то як це можливо скласти з 19! Дотримуйтесь формули minSdkVersion <= targetSdkVersion <= compileSdkVersion
Asad

@Matt Чи може статися так, що, наприклад, при використанні compileVersion 26, я випадково використовую функцію або java API, який не підтримується у версії 21, що становить min sdk? Вибачте, що тут я не отримую фундаментальних понять
Харт

83

Формула така

minSdkVersion <= targetSdkVersion <= compileSdkVersion

minSdkVersion - це маркер, який визначає мінімальну версію Android, на яку програма зможе встановити. Також Lint використовується для запобігання виклику API, який не існує. Також це впливає на час побудови. Таким чином, ви можете використовувати побудову ароматів, щоб переоцінити minSdkVersion на максимум під час розробки. Це допоможе швидше будувати, використовуючи всі вдосконалення, які надає нам команда Android. Наприклад, деякі функції Java 8 доступні лише в певній версії minSdkVersion.

targetSdkVersion - говорить система Android, щоб увімкнути конкретні зміни поведінки.

Наприклад:

  • Починаючи з Android 6.0 (API рівень 23) Runtime Permissionsбули представлені. Якщо встановлено targetSdkVersionзначення 22 або нижче, програма не вимагає від користувача дозволу на час виконання.

  • Починаючи з Android 8.0 (рівень API 26), усі notificationsповинні бути призначені каналу, інакше він не з’явиться. На пристроях під керуванням Android 7.1 (рівень API 25) та новіших версій користувачі можуть керувати сповіщеннями лише на основі програми (фактично кожен додаток має лише один канал на Android 7.1 і новіші).

  • Починаючи з Android 9 (рівень API 28) Web-based data directories separated by process,. Якщо targetSdkVersionвам більше 28 років, і ви створите декілька WebViewв різних процесах, які ви отримаєтеjava.lang.RuntimeException

compileSdkVersion - насправді це версія платформи SDK і каже Gradle, який Android SDK використовувати для компіляції. Якщо ви хочете використовувати нові функції або налагоджувати .javaфайли з Android SDK, вам слід подбати про compileSdkVersion. Ще одним прикладом є використання AndroidX, який змушує використовувати compileSdkVersion- рівень 28 compileSdkVersion не включений у ваш APK : він використовується виключно в compile time. Зміна компілятораSdkVersion не змінює поведінку часу виконання. Він може створити, наприклад, нові попередження / помилки компілятора. Тому настійно рекомендується завжди компілювати з найновішими SDK. Ви отримаєте всі переваги нових перевірок компіляції наявного коду, уникнете нещодавно застарілих API та будете готові використовувати нові API. Ще один фактcompileSdkVersion >= Support Library version

Більше про це можна прочитати тут . Також рекомендую поглянути на приклад переходу на Android 8.0.


9
Найкраща відповідь тут, оскільки вона фактично пояснює практичну різницю між targetSdkVersion та compileSdkVersion
Дін Дикий

@ yoAlex5 Дякуємо за вашу відповідь. Я бачу, що багато випадків targetSdkVersion і compileSdkVersion однакові. Чому андроїд зробив два як окремі, одного не може бути достатньо, щоб обробити, чи є якась конкретна причина, що стосується введення в два окремих поля?
Манджу

@Manju ви можете знайти більше SO нитка stackoverflow.com/questions/26694108 / ...
yoAlex5

@ yoAlex5, що ви маєте на увазі "Система Android, щоб увімкнути конкретні зміни поведінки", можете пояснити, будь ласка?
k_kumar

@atishr "специфічні зміни поведінки" вказані в блоці "Наприклад"
yoAlex5

74

Версія min sdk - це мінімальна версія операційної системи Android, необхідна для запуску вашої програми.

Версія цільового SDK є версією Android , що ваш додаток було створено , щоб працювати далі.

Версія для компіляції sdk - це версія Android, яку інструменти збирання використовують для компіляції та складання програми для випуску, запуску чи налагодження.

Зазвичай версія компіляції sdk і цільова версія sdk однакові.


23
А коли вони не ті самі плюси / мінуси?
порошок366

4

compileSdkVersion : compileSdkVersion - це версія API, з якої компілюється додаток. Це означає, що ви можете використовувати функції Android API, включені до цієї версії API (як і всі попередні версії, очевидно). Якщо ви спробуєте використовувати функції API 16, але встановите compileSdkVersion на 15, ви отримаєте помилку компіляції. Якщо встановити compileSdkVersion на 16, ви все одно можете запустити додаток на пристрої API 15.

minSdkVersion : версія min sdk - це мінімальна версія операційної системи Android, необхідна для запуску програми.

targetSdkVersion : цільовою версією sdk є версія, на яку орієнтовано ваше додаток.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.