Могу ли я запустить приложение для Android в качестве отдельного настольного приложения без эмулятора? - PullRequest
5 голосов
/ 23 декабря 2009

Можно ли разработать приложение для Android, предназначенное для мобильных устройств, а также использовать тот же код для выполнения на windows, linux или osx, что и отдельное приложение java для настольных компьютеров, без использования эмулятора? То есть иметь внешний вид обычного Java-приложения, работающего в автономном режиме?

Ответы [ 4 ]

3 голосов
/ 23 декабря 2009

Android использует пользовательский интерфейс пользовательского интерфейса, который не работает на рабочем столе. Итак, короткий ответ - нет.

Более длинный ответ:

Несмотря на вышесказанное, вы все равно сможете повторно использовать не-пользовательский код между ними. Любой код, который не вызывает Android. *, Вероятно, будет перенесен.

Вы также можете написать слой абстракции, который скрывает детали инструментария пользовательского интерфейса.

Наконец, есть также некоторые сторонние среды разработки приложений, которые работают на разных платформах. Тот, что сразу приходит на ум, это Титаниум Appcelerator , но есть и другие. Возможно, вам повезет с ними.

2 голосов
/ 23 декабря 2009

Приложения Android работают на Dalvik Virtual Vachine , которая представляет собой настраиваемую виртуальную машину (ВМ), которая напрямую не совместима со стандартной виртуальной машиной Java.

Насколько мне известно, единственные реализации виртуальной машины Dalvik - на устройствах Android и эмуляторе.

Очевидно, что Android-приложения написаны на Java, поэтому ничто не мешает вам поделиться каким-то кодом между Android-приложением и Java-приложением для рабочего стола, но это, вероятно, будет частью «бизнес-логики». Будет трудно заставить их выглядеть так же, как классы Android не были перенесены на Java VM, и нет реализации AWT или Swing для Android.

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

1 голос
/ 23 декабря 2009

Проект Skorpios позволяет запускать приложения OpenGL как на настольном компьютере, так и на Android с использованием единой кодовой базы.

Есть несколько минимальных примеров. Здесь - это общий код для них.

Чтобы запустить общий код на рабочем столе, передайте экземпляр Game в DesktopGLView . Я использую этот класс для запуска тестов, просто передаю простое имя тестового класса в качестве аргумента командной строки. Например, "FontTest".

Чтобы запустить общий код на Android, передайте экземпляр Game в AndroidGLView , который представляет собой android.view.SurfaceView, который вы можете добавить в свой android.app.Activity. Часто вам понадобится Activity, которая просто отображает вашу игру, и в этом случае вы можете просто передать экземпляр Game в GameActivity вместо AndroidGLView. Если вы просто хотите запустить тестовые приложения на телефоне Android, вы можете просто развернуть на своем телефоне skorpios-android-test project .

Скорпиос довольно гладкий и хорошо работает. Скорость разработки значительно возросла благодаря использованию Java HotSwap на рабочем столе, поскольку время развертывания Android часто составляет более 60 секунд. Разработайте на рабочем столе, и после того, как вы добьетесь определенного прогресса, запустите ваше приложение на Android, и оно просто работает. Кстати, у меня есть несколько связанных проектов, которые также поддерживают рабочий стол и Android для клиент-серверных сетей с TCP / UDP и еще один с HTTP / servlets / Google App Engine .

Однако Скорпиос все еще находится на ранней стадии своей жизни. Я автор и в последнее время отвлекаюсь на другие вещи. Пока у него много базовых функций OpenGL . Поддержка новых функций очень проста (просто добавьте их в GL, DesktopGL и AndroidGL), и я добавлял их по мере необходимости.

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

  • Предпочтения сохраняет HashMap на диске на рабочем столе и использует android.content.SharedPreferences на Android.

  • База данных обеспечивает простой доступ к SQLite на Android и в настоящее время недоступна для настольных компьютеров.

  • Устройство обеспечивает доступ к вибрации Android и в настоящее время недоступно на рабочем столе.

  • ResourceLoader обеспечивает доступ к файлам, настройкам и базам данных на каждой платформе.

1 голос
/ 23 декабря 2009

Что ж, для этого нужно написать стандартный уровень абстракции для пользовательского интерфейса и определенных API-интерфейсов Android. В основном скрывают все специфические вызовы Android и Desktop за интерфейсами.

Это не должно быть большой проблемой, так как между Android SDK и JDK такое большое совпадение.

Кроме того, для таких вещей, как разбор XML, сеть, вы можете просто использовать классы, которые работают на обоих.

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

...