Настройки совместимости Android в AndroidManifest.XML


У меня есть приложение для выпуска, которое работает на всех экранах android (кроме меньших) и плотностях выше SDK версии 2.0.

Он также будет работать на очень больших экранах. В настоящее время я добавил Это:
<supports-screens
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="false"
        android:anyDensity="true" 
    />

Но мне также нужно добавить android:xlargeScreens="true", чтобы он был виден в android market на устройствах с очень большим экраном, так как по умолчанию он ложен.

Но чтобы добавить android:xlargeScreens мне нужно изменить мои Eclipse targetsettings на 2.3, так как этот атрибут был добавлен с уровня API 9.

Итак что делать с настройками целевой компиляции для этого сценария ? Должен ли он быть 2.3 при компиляции ? Если да, то не будет ли приложение давать никаких проблем при работе на устройствах с версией 2.0 ?

7 4

7 ответов:

Да, вам нужно изменить uses sdk на 2.3, но убедитесь, что вы не используете более новые API, которые не входят в 2.0 или любую другую минимально поддерживаемую версию sdk. Или, если вы хотите использовать их, вы должны использовать отражение.

Но Подробнее о том, как использовать версии sdk, здесь и подробнее об использовании-sdk здесь.

Я делаю то же самое в своем приложении и удостоверяюсь, что вы тестируете свое приложение в обеих [всех] версиях перед вами освобождать.

Лучший, П.

Я перемещаю это из комментариев, чтобы сделать его более ясным для других, рассматривающих этот вопрос в будущем.

При поддержке как старых, так и новых версий Android может быть непонятно, как приложения могут работать, несмотря на то, что многие вещи меняются с фреймворками во время каждого нового выпуска, я собираюсь попытаться прояснить это здесь.

Приложение, написанное для 1.5 sdk, может вызывать только те функции, которые существуют для этого уровня API, поэтому, например, API multi touch не существовать в 1.5 и никогда не будет. Теперь вы говорите: "Хорошо, но мне не нужно вызывать новые API, я просто хочу, чтобы мое приложение работало в 2.3 и имело поддержку a2sd", и я говорю: "Хорошо, просто измените targetApi в манифесте, установите minSDK и скомпилируйте против 2.3, и вы можете идти."

Так почему же это работает? Что, если метод onMeasure () для ListView был изменен в 2.2 и теперь вызывает betterCalculateFunction () в onMeasure ()? Почему мое приложение все еще работает?

Это преимущество поздней привязки в Java. Видите ли, Java никогда не компилируется, пока она не достигнет устройства и не запустится, то, что вы делаете в Eclipse, - это преобразование ее в байтовый код, который содержит кучу инструкций байтового кода, которые позже интерпретируются устройством. Байтовый код никогда не будет содержать ссылку на betterCalculateFunction (), хотя (если вы непосредственно не вызовете его. Вызов onMeasure() является косвенным). Это может произойти, потому что, когда ваш код выполняется на устройстве, он связывается с платформой Android на устройстве. устройство и ваш код вызывают onMeasure () напрямую, потому что это открытый внешний API. Путь выполнения затем войдет в фреймворк и вызовет все, что ему нужно, а затем, как только это будет сделано, вернется к вашему коду.

Итак, на 1.5 вы можете увидеть

DoStuff (ваш код) - > onMeasure (public API) - > готово

И 2.2

DoStuff (ваш код) - > onMeasure (публичный API) - > betterCalculateFunction (частная функция) - > сделано

Теперь, если вам нужно вызвать функции, которые могут или не могут существовать в зависимости от уровня API, тогда я предлагаю вам посмотреть на соответствующий ответ моего здесь stackoverflow: изящно понизить ваше приложение

Надеюсь, это прояснит некоторые вещи.

Я не пробовал 2.3, но это то, что я делаю с 2.2.

Я компилирую для 2.2 и тестирую на 1.6, чтобы убедиться, что все работает так, как я ожидаю. Я не сталкивался с какими-либо проблемами с этим.

Чтобы перепроверить, установите целевое значение для 2.3, а затем установите эмулятор для более низкой версии rev, чтобы убедиться, что все это работает.

Значение по умолчанию для android: xlargeScreens равно true, поэтому вам не нужно ничего менять - оно включено по умолчанию, пока ваша minSdkVersion или targetSdkVersion выше 4. http://developer.android.com/guide/topics/manifest/supports-screens-element.html

Вот официальный блог разработчика Android объяснение того, как это works:
http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html

Вкратце: вы можете использовать новейший XML, все еще поддерживая старые версии ОС обратно совместимым способом.

Читая этот пост в блоге, я думаю, что у меня есть ответ на мой старый вопрос. Приведенная ниже выдержка (которая относится к другому атрибуту манифеста "requiresSmallestWidthDp", введенному из 3.2):

"загвоздка в том, что вы должны скомпилировать свое приложение на Android 3.2 или выше, чтобы использовать атрибут requiresSmallestWidthDp. Более старые версии не понимают этот атрибут и вызовут ошибку во время компиляции. Самое безопасное, что можно сделать, - это разработать приложение на основе платформы, которая соответствует уровню API, установленному для minSdkVersion. Когда вы завершаете подготовку к сборке вашего кандидата на выпуск, измените цель сборки на Android 3.2 и добавьте атрибут requiresSmallestWidthDp. Android версии старше 3.2 просто игнорируют этот атрибут XML, так что нет никакого риска сбоя во время выполнения."

Для разных экранов вы должны создать несколько apk, то это уменьшает размер вашего application.In манифест каждого приложения вы должны определить по следующей ссылке. http://developer.android.com/guide/practices/screens-distribution.html