Обратная совместимость и библиотеки Android Open Accessory

Проблема. Я пишу приложение для Android, и для одной из его функций требуется совместимость с Open Accessory, которая доступна только в версии 3.1 и выше (а также резервная копия для некоторых версий 2.3.4). Пакеты, которые мне нужны (android.hardware.usb или android.future.usb), полностью отсутствуют на более ранних уровнях API, но мне нужно, чтобы приложение работало как минимум на Android 2.2. Прямо сейчас он даже не устанавливается (я получаю «INSTALL_FAILED_MISSING_SHARED_LIBRARY» в Eclipse).

Я провел некоторое исследование и предложил следующие возможные решения, но мне нужна помощь в выборе того, какое из них является «лучшим» (самое простое в реализации, самое чистое, простое в обслуживании, самое логичное...) или если есть другое решение, которое я упустили из виду.


Решение 1. Создайте две ветви проекта: одну для аксессуаров и одну для старых телефонов.

За: сохраняет чистоту, и я могу просто обозначить один проект как только для телефонов, а другой — только для планшетов.

Против: требуется, чтобы я настроил проект библиотеки или разработал какой-то собственный скрипт сборки, чтобы мне не приходилось дублировать весь мой код в двух проектах.


Решение № 2. Используйте отражение, чтобы вручную загрузить необходимые классы во время выполнения и создать исключение, если класс не существует.

За: я могу поддерживать обратную совместимость, не создавая несколько проектов.

Против: это кажется немного грязным/хакерским


Итак, в двух словах... как я могу использовать пакет, который существует только в уровне API 12 и выше, но при этом запускать приложение в более ранних версиях?

Мы будем очень признательны за любые советы. Спасибо!




Ответы (1)


В итоге я остановился на решении Library Project. Подавляющее большинство кода приложения находилось в проекте Library, но все, что касалось Open Accessory, было перемещено в отдельный проект. На самом деле оказалось, что его довольно легко поддерживать, поскольку так много общего кода. Никаких сложных сценариев сборки не требуется!

person bmat    schedule 01.06.2012