Какова цель как целевого API, так и minSDK - PullRequest
5 голосов
/ 03 мая 2010

Может кто-нибудь объяснить мне разницу между целью проекта и минимальным SDK? Я хочу, чтобы мое приложение работало на устройствах Donut, а созданный мной APK с целевым значением 7 работал просто отлично. Когда я установил явный минимальный SDK в манифесте Android 4 (1.6), компилятор поссорился, что цель превысила минимум. Я сбросил цель на 4, чтобы посмотреть, что произойдет, и теперь у меня есть ошибки компилятора. Примером является константа START_NOT_STICKY в android.app.Service. Он не существует на уровне API 4, но существует на уровне API 7. Это также относится и к Service.onStartCommand (). На уровне API 7 этот метод необходимо переопределить явным образом, а на уровне 4 API - нет.

Так почему же приложение работает в версии 1.6, несмотря на все это? Как мог 1.6 знать, как использовать SERVICE_NOT_STICKY, когда соответствующий уровень API не знает об этом?

1 Ответ

4 голосов
/ 03 мая 2010

Если вы хотите использовать какую-то новую необычную функцию, но также хотите поддерживать обратную совместимость, вот где вступают в игру targetSdkVersion и minSdkVersion.

Чтобы поддерживать обратную совместимость, вам нужно бережно относиться к каждому новому API сверху minSdkVersion. Т.е. дважды проверьте, что у вас есть доступ к ним, используя отражение или Build.VERSION.SDK_INT . Если вы этого не сделаете, ваше приложение упадет и сгорит, потому что не может найти API, который вы пытаетесь использовать.

Вы также хотите прочитать каждую строку документации, касающуюся измененных API (т. Е. Service .onStartCommand (..)), чтобы вы могли обрабатывать каждый фрагмент данных, который он получает правильно и обратно совместимым способом. .

Что касается констант, они, скорее всего, скомпилированы в ваш код как строки / целые числа, и когда более старая версия получает неизвестное, она просто игнорирует ее. Однако это теория, поэтому вы должны проверить ее, прежде чем широко ее использовать.

Кроме того, насколько я знаю, система не проверяет ни minSdkVersion, ни targetSdkVersion. Это делает только Android Market. Так что, если вы заполучили некоторые приложения, которые не должны работать на вашем устройстве, и вы все еще пытаетесь их использовать, снова вылетайте и горите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...