В чем разница между compileSdkVersion и targetSdkVersion?
compileSdkVersion
compileSdkVersion — это версия API, с которой компилируется приложение. Это означает, что вы можете использовать функции Android API, входящие в эту версию API (как и все предыдущие версии, очевидно). Если вы попытаетесь использовать функции API 16, но установите compileSdkVersion на 15, вы получите ошибку компиляции. Если вы установите compileSdkVersion в 16, вы все равно можете запустить приложение на устройстве API 15, если ваши пути выполнения приложений не будут пытаться вызывать любые API, специфичные для API 16.
Полный каталог приложений для Huawei и Honor, отсортированный по рейтингу и отзывам пользователей https://appvisor.ru/huawei/
targetSdkVersion
targetSdkVersion не имеет никакого отношения к тому, как скомпилировано ваше приложение или какие API вы можете использовать. Предполагается, что targetSdkVersion указывает, что вы протестировали ваше приложение (предположительно до и включая) указанную вами версию. Это больше похоже на сертификацию или подписку, и вы даете ОС Android как подсказку, как она должна обрабатывать ваше приложение с точки зрения возможностей ОС.
Например, как в документации говорится:
Например, если установить это значение на «11» или выше, система может применить новую тему по умолчанию (Holo) к вашему приложению при работе на Android 3.0 или выше…
ОС Android, во время выполнения, может изменить способ стилизации или стирания вашего приложения в контексте ОС на основе этого значения. Есть несколько других известных примеров, на которые влияет это значение, и этот список, вероятно, только увеличится с течением времени.
Для всех практических целей большинство приложений захотят установить targetSdkVersion в последнюю выпущенную версию API. Это гарантирует, что ваше приложение будет выглядеть как можно лучше на самых последних устройствах Android. Если вы не укажете targetSdkVersion, по умолчанию будет minSdkVersion.