Обратная совместимость и открытые библиотеки аксессуаров Android
Проблема: я пишу приложение для Android, и одна из его функций требует открытой совместимости аксессуаров, которая доступна только в 3.1 и выше (а также backport для некоторых версий 2.3.4). Пакеты, которые мне нужны (android.аппаратура.usb или android.будущее.usb) полностью отсутствуют на более ранних уровнях API, но мне нужно, чтобы приложение работало по крайней мере на Android 2.2. Сейчас он даже не устанавливается (я получаю "INSTALL_FAILED_MISSING_SHARED_LIBRARY" в Eclipse).
Я кое-что сделал. исследуйте и придумайте следующие потенциальные решения, но мне нужна помощь в выборе, какое из них "лучшее" (самое простое в реализации, самое чистое, самое простое в обслуживании, самое логичное...) или если есть другое решение, которое я упустил из виду.
Решение №1: Создайте две ветви проекта: одну для вспомогательных аксессуаров и одну для старых телефонов.
Pro: держит вещи в чистоте, и я мог бы просто обозначить один проект как телефоны-только один, а другой как таблетки-только.
Con: требует, чтобы я настроил проект Библиотеки или разработал какой-то пользовательский сценарий сборки, поэтому мне не нужно дублировать весь мой код в двух проектах.
Решение №2: Используйте отражение, чтобы вручную загрузить необходимые классы во время выполнения и создать исключение, если класс не существует.
Pro: я могу поддерживать обратную совместимость без необходимости создавать несколько проектов.
Кон: кажется немного грязный / hacky
Так что в двух словах... как я могу использовать пакет, который существует только на уровне API 12 и выше,но все еще работает на более ранних версиях?
Любой совет был бы очень признателен. Спасибо!
1 ответ:
В итоге я выбрал решение библиотечного проекта. Подавляющее большинство кода приложения находилось в проекте библиотеки, но все, что было связано с открытым аксессуаром, было перенесено в его собственный проект. На самом деле это оказалось довольно легко поддерживать, так как так много кода было общим. Никаких сложных сценариев сборки не требуется!