Настройки совместимости Android в AndroidManifest.xml - PullRequest
4 голосов
/ 01 февраля 2011

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

Он также будет работать на очень больших экранах. В настоящее время я добавил это:

<supports-screens
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="false"
        android:anyDensity="true" 
    />

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

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

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

Ответы [ 7 ]

2 голосов
/ 01 февраля 2011

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

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

Приложение, написанное для SDK 1.5, может вызывать только те функции, которые существуют для этого уровня 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 на устройстве, и ваш код вызывает метод непосредственного вызова метода (), потому что это открытый API-интерфейс, обращенный наружу. После этого путь выполнения войдет в структуру и вызовет все, что ему нужно, а затем вернется к вашему коду.

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

doStuff (ваш код) -> onMeasure (общедоступный API) -> сделано

и 2,2

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

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

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

2 голосов
/ 01 февраля 2011

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

Но больше о том, как использовать версии SDK, здесь , а , больше об использовании-SDK здесь * 1006.*.

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

Best, Achie.

0 голосов
/ 21 декабря 2011

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

0 голосов
/ 20 сентября 2011

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

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

0 голосов
/ 24 мая 2011

Вот официальное объяснение того, как это работает, в блоге разработчиков Android:
http://android -developers.blogspot.com / 2010/07 / как к -имеют-ваш-кекс-и-едят его-too.html

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

0 голосов
/ 05 апреля 2011

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

0 голосов
/ 01 февраля 2011

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

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

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

...