Рекомендуемые способы создания переносимого приложения между Android и «другими платформами» - PullRequest
15 голосов
/ 12 февраля 2011

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

Маловероятно, что пользовательский интерфейс каким-либо образом будет переносимым (слишком большая разница между хорошим сенсорным интерфейсом с 4-дюймовым экраном и мышью иклавиатура (19-дюймовый экранный интерфейс), так что я достаточно счастлив, что реализую это отдельно.

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

Мой вопрос состоит из двух частей:

  • Какие инструменты доступны, чтобы помочь мне использовать связанные с Androidклассы и функции (например, ресурсы, базы данных) на платформах, отличных от Android;и
  • Какие классы, функции и т. д. платформы Android следует полностью избегать (ради простоты давайте исключим элементы, связанные с пользовательским интерфейсом) из-за непереносимости и что вместо этого следует использовать для улучшенияПортативность.

Ответы, которые состоят из "хахахаха, ты обречен", в порядке, если есть некоторые обоснования.

(PS Я бы сделал это сообщество вики, еслиэто все еще было доступно, мне кажется, это идеальный CW вопрос - список советов и инструментов по переносимости Android)

Ответы [ 8 ]

3 голосов
/ 30 декабря 2011

Я начал делать нечто похожее - я хотел написать приложение для Android, Blackberry и J2ME.Концептуально вы можете наложить свой дизайн так, чтобы компоненты платформы (пользовательский интерфейс, доступ к сети, хранилище данных) были отделены от основной бизнес-логики.

На практике я не нахожу это удовлетворительным.Все проблемы, с которыми я столкнулся, были связаны с тем, что базовая версия Java отличалась на разных платформах (в Blackberry она основана на J2Se 1.4, в то время как Android использовал Java 6 в качестве базовой).Это приводило к раздражениям, таким как

  • Невозможно повторно использовать код, который использует дженерики
  • Мои предпочтительные классы не были доступны равномерно (например, вынуждены использовать Vector сверх List)

Я начал обсуждение этого вопроса на SO ( здесь и здесь ), но не смог прийти к выводу.

3 голосов
/ 12 февраля 2011

Похоже, вы уже определили ключевой момент, сохранив интерфейс и логику / модель бизнеса.Также сам sqlite используется не только в Android.Но, разумеется, способ взаимодействия с ним (например, SQLDBOpenHelper) снова будет другим.

Так что, я думаю, логика и модель бизнеса должны быть как можно более раздельными.Затем вы можете обернуть его вокруг него (например, шаблон «Объект доступа к данным», который обращается к конкретной БД).

Помните, что пользовательский опыт лучше всего подходит, когда вы максимально специфичны для платформы.на стороне пользовательского интерфейса.Пример: на рынке Android есть приложение (Push & Ride), которое работает в эмуляторе J2ME.Таким образом, для ввода с экрана используется не обычная мягкая (или жесткая) клавиатура устройства, а имитируемая клавиатура телефона с сочетанием «abc» и «def» на цифровых клавишах, что делает ввод данных немного странным.Это приложение, безусловно, очень портативное (и его функциональность действительно великолепна), но оно просто не кажется правильным.

Когда вы хотите стать мультиплатформенным, вы можете также взглянуть на такие вещи, как Appcelerator или AdobeAIR

2 голосов
/ 03 января 2012

Кроме того, вы можете попробовать это

http://wp7mapping.interoperabilitybridges.com/Home/Library?source=Android

Содержит документацию и инструменты для сопоставления вашего Android-приложения с Windows Phone

Также прочтите это, даже если оно содержит инструкции, специфичные для взаимодействия с Android - Windows Phone, но я уверен, что они применимы и к другим платформам

http://windowsphone.interoperabilitybridges.com/media/49652/wp7_guide_for_android_application_developers.pdf

2 голосов
/ 28 декабря 2011

Уровень ведения журнала можно сделать переносным с помощью Simple Logging Facade для Java (SLF4J) , который доступен для java / log4j и для android .

1 голос
/ 30 декабря 2011

Что я делаю, это создаю веб-сервис вне приложения для Android, который может использоваться приложением для Android, а также другими системами (веб-сайты, приложения для Windows, приложения для iPhone и т. Д.).

Простой веб-сервис REST, который поддерживает JSON, является хорошим примером для извлечения данных, а также для вставки / обновления данных. JSON особенно подходит, потому что он очень легкий и не требует большой полосы пропускания, что отлично подходит для медленных мобильных соединений.

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

0 голосов
/ 03 января 2012

Я склонен предложить попробовать новые собственные расширения для Adobe Air.Он позволяет вам создать блок нативного кода для конкретного устройства и подключить его к платформе Air, получая доступ к нему так же, как к другим объектам в Air.(См. http://www.adobe.com/devnet/air/articles/extending-air.html). Это позволяет вам сохранить код только для Android как есть, а затем при необходимости заменить этот код на код iOS, Windows DLL и т. д.

Это не решает проблемупроблема перевода кода Java на другие языки / платформы, конечно. Тем не менее, некоторая логика, которую вы делаете изначально, вполне может существовать уже кросс-платформенной в Air. Например, вы можете получить доступ к камере в Air во всех поддерживаемых ОСбез написания какого-либо специфичного для устройства кода.

Возможно, вам потребуется выйти за рамки текущих классов Air, поэтому могут помочь некоторые примеры:

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

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

Полезным шаблоном для этой цели будет внедрение зависимостей.Существуют разные платформы, и некоторые из них больше подходят для Android (например, roboguice) или для настольных компьютеров (Spring, Picocontainer или Guice).

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

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

Уровень базы данных можно сделать более переносимым с помощью android jdbc или с помощью уровня абстракции базы данных / реляционного сопоставителя объектов / реализации ActiveRecord .

Кто-нибудь пробовал сделать android.database (.sqlite) работоспособным на не Android-системе?

...