Как сделать мой проект совместимым с различными версиями SDK при использовании функций для конкретной версии - PullRequest
8 голосов
/ 12 января 2012

Я разрабатываю проект, который использует Flash-видео в веб-просмотре.Я решил все свои проблемы, связанные с кодом, но работал только ниже Сота.

Чтение это Я узнал, как решить проблемы для Android 3.0 и более поздних версий (включая ICS), но теперь этобольшой вопрос ... Если я сделаю свой проект совместимым с ICS, мне придется использовать директиву, но тогда я не буду работать на Gingerbread.

Чтобы предоставить больше информации ... проблемная частьследующий код:

android:hardwareAccelerated="true"

, который является свойством, включенным в Android 3.0.

Итак, что я могу сделать, чтобы избежать создания двух разных apks (что-то вродеpre-HoneyComb apk и post-HoneyComb apk)?

Это часть моего манифеста Android:

<application android:label="@string/app_name" 
             android:icon="@drawable/elabora"
             android:theme="@android:style/Theme.NoTitleBar">
    <activity android:name="es.fundacionvodafone.elabora.android.controlador.InicioElaboraTest"
              android:label="@string/app_name"
              android:noHistory="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="es.fundacionvodafone.elabora.android.controlador.InicioElabora"
              android:configChanges="orientation|keyboardHidden"
              android:label="@string/app_name"  
              android:hardwareAccelerated="true">
            <!--            
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            -->
    </activity>

Заранее спасибо.

Обновление: я уже былиспользуя то, что объяснил Майк, можно сказать, правильно определив minSdk и targetSdk, но меня смутил следующий факт.При такой конфигурации проекта, когда вы запускаете проект в Eclipse, он предлагает следующее окно: Capture of eclipse running a project with a targetSdk above the device api level Красный крестик означает, что уровень targetSdk проекта выше уровня API устройства.Поэтому я подумал, что это устройство просто не работает, но дело в том, что вы можете запустить его, и он работает как положено.

Ответы [ 2 ]

8 голосов
/ 12 января 2012

Комментарий, опубликованный ОП под его вопросом (в основном утверждающий, что targetSDK не влияет на компиляцию приложения), абсолютно неверен! Извините за тупость.

Короче говоря, здесь есть цель объявить другой targetSDK из minSDK: это означает, что вы используете функции из SDK более высокого уровня, чем ваш минимум, но вы обеспечили обратную совместимость. Другими словами, представьте, что вы хотите использовать функцию, которая была введена совсем недавно, но это не критично для вашего приложения. Затем вы должны установить targetSDK на версию, в которой была представлена ​​эта новая функция, а минимальную - на более низкую, чтобы все могли по-прежнему использовать ваше приложение.

В качестве примера предположим, что вы пишете приложение, которое широко использует обнаружение жестов. Тем не менее, каждая команда, которая может быть распознана жестом, также может быть выполнена кнопкой или из меню. В этом случае жесты - это «круто», но они не обязательны. Поэтому вы должны установить целевой sdk на 7 («Eclair», когда была представлена ​​библиотека GestureDetection), а минимальный SDK - на уровень 3 («Cupcake»), чтобы даже люди с очень старыми телефонами могли использовать ваше приложение. Все, что вам нужно сделать, это убедиться, что ваше приложение проверило версию Android, на которой оно работало, прежде чем пытаться использовать библиотеку жестов, чтобы не пытаться использовать ее, если она не существует. (По общему признанию, это устаревший пример, так как вряд ли у кого-то все еще есть телефон v1.5, но было время, когда поддержание совместимости с v1.5 было действительно важно.)

Чтобы привести другой пример, вы можете использовать это, если хотите использовать функцию из Gingerbread или Honeycomb. Некоторые люди получат обновления в ближайшее время, но многие другие, особенно со старым оборудованием, могут застрять в Eclair, пока не купят новое устройство. Это позволит вам использовать некоторые интересные новые функции, но не исключая часть вашего возможного рынка.

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

ФП: Я написал это в основном для тех, кто случайно наткнется на этот вопрос в будущем.

3 голосов
/ 12 января 2012

У меня похожая проблема с версиями манифеста Android.Для старых телефонов я хочу иметь виджеты нескольких предопределенных размеров, для новых телефонов, которые поддерживают изменение размера, я хочу иметь один виджет с изменяемым размером.Не могу пока найти способ сделать это.Возможно, именно поэтому в Google появилась поддержка множественного APK .

В статье Адама Пауэлла, упомянутой выше, не рассматривается этот тип управления версиями.(отличная статья Кстати).

Редактировать : есть решение.Определение виджетов в манифесте android имеет логический атрибут «enabled», который может быть установлен из логических значений ресурсов.Значения ресурса могут иметь значения для каждой версии с использованием стандартных имен квалифицированных каталогов ресурсов.Проблема решена.

...