Общая кодовая база для мобильных и веб-приложений?

Я уже некоторое время занимаюсь разработкой мобильного приложения. Он работает на iOS и Android, а также на рабочем столе в виде приложения AIR. Это здорово, и я очень взволнован этим. Однако на прошлой неделе меня спросили, почему я не могу экспортировать версию приложения, работающую в веб-браузере. Я сказал, что полагаю, что могу, и что я изучу это.

Но зачем вам запускать мобильный код на десктопе?

Пара причин:

  • Более широкое -использование кода . Это не имеет смысла во всех случаях, но имеет смысл во многих случаях. (Я не буду вдаваться в подробности, потому что думаю, что это само -очевидно. Если вы не согласны, я был бы рад поговорить об этом, но я не хотел бы засорять этим описание.)
  • Более быстрые/упрощенные демонстрационные версии клиента . Вместо того, чтобы устанавливать apk или ipa на мобильное устройство, я могу просто отправить URL.

Так что же я нашел? Ну, из того, что я пробовал до сих пор... это... не работает. Вернее, я не смог заставить его работать.

Я начал с создания проекта Flex Library для всего общего кода. Затем я создал 2 проекта приложений, которые ссылаются на него -, один для мобильных устройств, а другой для Интернета. Мобильный проект работает нормально, а веб-проект - нет.Вот что я пытался сделать до сих пор, чтобы заставить его работать:

  • Я пытался добавить mobilecomponents.swc и тему mobile.swc в свой веб-проект , чтобы Flash Builder знал о MobileSkin (и других мобильные -только классы ). Это позволяет моему приложению компилироваться, но когда я запускаю его, оно немедленно выдает ошибку времени выполнения внутри UIComponent:VerifyError: Error #1014: Class flash.text::StageText could not be found. Я нашел очень мало об этой ошибке , и один совет, который я нашел (с добавлением --swf-version=13параметра компилятора ), не работает.
  • Я пытался использовать условную компиляцию, чтобы контролировать, какой класс моих компонентов скина унаследован от :MobileSkin или SparkSkin. Это был просто быстрый эксперимент, чтобы проверить, сработает ли он. Я знаю, что это отвратительно, а не производственное решение. Я думал, однако, что если MobileSkin действительно был просто оптимизированной версией SparkSkin, мои скины должны быть в порядке, наследуемые от любого из них. Это не сработало сразу -приложение не компилировалось из-за отсутствия некоторых методов (напр. layoutContents ), поэтому я отказался от него, потому что с самого начала он казался грязным.
  • Я попытался заменить MobileSkin на UIComponent в качестве суперкласса для всех моих скинов, думая, что MobileSkin, вероятно, в любом случае является просто облегченным подклассом UIComponent. Этот подход приводил к некоторым ошибкам компилятора сначала (ex. нет метода layoutContents, нет свойств MeasuredDefaultWidth/MeasuredDefaultHeight, addChild vs addElement и т. д. ). После того, как эти проблемы были решены, приложение скомпилировалось, но вылетело из-за ошибок времени выполнения внутри метода «getState» UIComponent. (Похоже, что MobileSkin переопределяет этот метод, чтобы предотвратить поведение UIComponent по умолчанию.)

Так что ни один из этих подходов мне пока не помог... а что насчет вас, ребята? Вы уже сталкивались с этой проблемой? Удалось ли вам заставить это работать, или вы можете заметить какие-либо очевидные упущения, которые я допустил в методах, которые я упомянул выше? Заранее спасибо, если сможете.


Обновление :Проблема решена

Мне удалось выполнить первый упомянутый выше маршрут :добавление mobilecomponents.swc и темы mobile.swc в мой веб-проект

Оказывается, что Flash Builder ввел меня в заблуждение в этом отношении. Добавление мобильных SWC в проект библиотеки с настройкой «объединено с кодом» приводит к предупреждению компилятора :. swc '/Applications/Adobe Flash Builder

4.6/sdks/4.6.0/frameworks/themes/Mobile/mobile.swc' имеет стиль по умолчанию и находится в пути библиотеки -, что означает, что зависимости будут связаны в без стилей. Это может привести к тому, что приложения, использующие вывод swc, чтобы иметь недостающие скины. SWC должен быть помещен в внешняя -библиотека -путь.

Увидев это в первый раз, я изменил тип связи на «Внешний», и предупреждение исчезло. Затем в своем веб-проекте я также добавил мобильные SWC и установил там тип привязки «слияние с кодом». Flash Builder, похоже, был доволен таким подходом, но при запуске моего приложения я получил странные ошибки времени выполнения (, как упоминалось выше ).

Оказывается, моя первая попытка была правильной. Установите тип связи в проекте библиотеки на «объединенный с кодом», а затем не повторяйте -ссылку из вашего веб-проекта. Flash Builder предупредит вас об этом, но проигнорирует предупреждение. Кажется, сейчас все работает довольно хорошо! У меня есть одна или две проблемы, которые нужно изучить (ex. Компонент списка не прокручивается ), но в целом все выглядит довольно многообещающе!

5
задан bvaughn 7 May 2012 в 19:05
поделиться