Введение переводчика Занимаясь разработкой для платформы Windows Mobile в течение последних двух лет, я не мог не услышать о новых платформах, таких как Apple IPhone, Google Android, Palm Pre. Некоторое время назад я наткнулся на блог разработчика Windows Mobile, который вел блог в довольно издевательском стиле, пародируя «30 дней Windows Mobile», его посты из этой серии назывались «30 дней скуки о .
NET CF», что в переводе как «30 дней сплетен за спиной .
NET CF».
В этих постах он описал подводные камни, с которыми столкнулся во время разработки.
Несколько месяцев назад этот блогер приобрел HTC G1 и окунулся в мир Android-разработки.
Выпустив пару приложений на Android Market, Кошик Дутта (так его зовут) решил написать сравнительный анализ опыта разработки под Windows Mobile и Android. Оригинал находится Здесь .
Статья написана в ноябре 2008 г.
; на сегодняшний день часть информации несколько устарела, но от этого хуже не становится.
В тексте есть несколько ссылок вида [X], в самом конце есть их расшифровка.
Android против Windows Mobile Я хотел воздержаться от ведения блога на эту тему, пока не углублюсь в разработку Android. Хотя я ни в коем случае не являюсь гуру платформы Android, я считаю, что могу делать довольно общие заявления, наступать кому-то на ногу и защищать свое мнение.
[0]
Байт-код
Google принял несколько интересных архитектурных и стратегических решений относительно Android. Наиболее примечательными являются Java как язык разработки и Далвик как виртуальная машина.Короче говоря, Dalvik — это байт-код, который интерпретируется во время выполнения, как байт-код в Sun Java или Microsoft Intermediate Language (IL) [1].
Я не мог понять, почему Google решил создать собственную спецификацию байт-кода для Java, пока не прочитал это.
Суть в том, что у Sun есть проблемы с лицензированием Java ME, а Open Handset Alliance действительно не может иметь открытую платформу без возможности того, что какая-нибудь мегакорпорация попытается на них нажиться.
счет.[2] Но остается открытым вопрос — зачем изобретать новый байткод, когда IL не защищен таким лицензированием (это Стандарт, одобренный ECMA )? Возможно, Google посмотрел и решил, что IL не подходит для мобильной платформы, а может быть, они не хотели спать в одной постели с Microsoft. Я думаю, что скорее всего последнее.
Язык
Вообще говоря, генерируемый за кулисами байт-код так же важен, как и цвет моих носков.Я не думаю об этом регулярно.
Но что действительно важно, так это язык, на котором вы пишете.
Я могу понять, что Google выбрал Java, чтобы облегчить целевым разработчикам переход на новую платформу, но все же… да, я все равно скажу это напоследок.
Ява отстой.
Почему Java — отстой? Давайте посчитаем.
- Ужасные ограничения на имена пакетов/файлов/каталогов/классов.
- Никаких анонимных методов
- Отсутствие закрытия (закрытие)
- Нет лямбда-выражений
- Нет событий/делегатов
- Нет частичных классов
- Забавная реализация перечислений
- Ужасная реализация дженериков
- Отсутствие структур и как следствие невозможность хранения составных объектов целиком в стеке.
Это оказывает существенное влияние на производительность там, где это важно.
- Строки неизменяемы, но не интернированы (см.
стажер )
- Нет доступа к небезопасному коду
- Нет методов получения/установки свойств.
- Никакой перегрузки оператора
- Нет методов расширения
- Наконец глупое и неинтуитивное расстановка скобок
Однако отмечу, что анонимные классы мне в какой-то степени нравятся, но без событий/делегатов они практически бесполезны.
Я понимаю, что все, что я перечислил, по большому счету синтаксический сахар, и ни Java, ни C# не являются мощнее друг друга — оба языка умеют все, что вам нужно, просто нужно в каждом языке делать это по-разному, чтобы твой собственный.
За исключением того, что C# позволяет разрабатывать быстрее, эффективнее и изящнее.
[3]
Среда разработки
«Затмение» — это огромный, ароматный кусок… ага.Да, очень богато, гибко, но тот, кто проводит юзабилити-тестирование на этой фигне, должен поработать над проверкой силы сжатия веревки на шее.
Моя самая большая неприятность — это невозможность просто нажать на режим «Выражения» и отредактировать что-либо на месте.
Обязательно щелкните правой кнопкой мыши и выберите «Добавить/изменить».
В результате открывается примитивный текстовый редактор без Intellisense, в котором можно набрать выражение, помолиться, чтобы оно было без ошибок и нажать ОК.
Если вы допустили ошибку, повторите все заново.
Ранее я хвалил мощь внутренних классов в Java. Какими бы хорошими они ни были, Eclipse почти сводит на нет их удобство: вы не можете увидеть значение переменной родительского класса внутреннего класса! Это превращает отладку в настоящую боль: приходится загружать родительские классы в локальные переменные, если что-то пойдет не так, иначе найти и исправить даже самые простые ошибки просто невозможно.
Однако я не уверен, является ли это проблемой в Eclipse, Java или Android. Автодополнение в Eclipse ужасно раздражает. Насильно добавить всё не получится, независимо от желания разработчика.
В итоге я вообще все отключил, потому что то, что он мне вставлял, было по большей части бесполезным.
Но даже если автозаполнение полностью отключено, Eclipse продолжает делать круглые скобки за меня.
SDK
Хотя я много жаловался на разработку Android, хочу отметить, что я не жаловался на саму Android. По сути, каждый API, который я могу придумать, стандартизирован и существует. Моей лакмусовой бумажкой в этом смысле стало портирование Клаксон на Андроиде.Это действительно помогло подчеркнуть огромные различия между двумя платформами.
Лично для меня самым заметным отличием стал API для доступа к аппаратным датчикам.
Android SDK 1.0 предлагает простой класс SensorManager, с которым я разобрался за 5 минут. У Microsoft было 6 версий Windows Mobile без какого-либо Sensor API. Во-вторых, запускать приложения по расписанию на Android бесконечно проще, чем на Windows Mobile. Давайте сравним, как я с этим справился на Windows Mobile:
- Я начал с CeRunAppAtTime .
Написал большой P/Invoke. Это работает какое-то время, а потом полностью прекращается.
ты другие люди были те же проблемы.
Пришлось перейти на другой механизм.
- Дальше я попробовал CeSetUserNotificationEx .
Написал еще один здоровенный P/Invoke.
- Для того, чтобы это работало, мне пришлось придумать, как правильно заполнить структуру.
Пользовательское уведомление триггер .
- Потом оказалось, что если устройство спит, то Клаксон не всегда работает корректно .
- Еще раз порывшись в документации, я решил эту проблему — оказывается, мне нужно было явно послать устройству команду на включение, иначе оно снова засыпало.
- Клаксон работал некоторое время, пока не наступило летнее время.
На некоторых телефонах уведомления срабатывают через час.
Понятия не имею, почему.
Я сдался.
- Говорить с Менеджер тревог
- Настройте событие, которое будет запускаться (намерение) в определенное время
- Обработать событие
Я должен сказать, что события просты в использовании, удивительно гибки и в равной степени мощны.
Таким образом, одна из двух сложных частей разработки для Windows Mobile на Android оказалась проще простого.
И последнее, но не менее важное: пользовательский интерфейс.
Windows Forms против XML-макета Android. Windows Forms работает с абсолютными размерами и позиционированием.
Android работает с относительным размером и позиционированием.
«Статические» элементы управления по сравнению с анимированными элементами управления.
На самом деле сравнивать не с чем, поэтому пробовать не буду.
Проще говоря, Android SDK разрывает на куски Windows Mobile SDK (не учитывая особенности языков и фреймворков).
У Windows Mobile гораздо лучшая документация (MSDN), но это судьба любого молодого SDK.
Платформы
Android довольно жесткий с точки зрения безопасности.Приложения должны зарегистрировать необходимые им возможности, а пользователь должен их одобрить.
Но несмотря на то, что это очень и очень положительная вещь, у нее есть и свои недостатки.
Например, невозможно написать приложение, которое делает скриншоты чего-то кроме себя, потому что.
это считается небезопасным [4] И хотя в этом нет вины Android, телефоны не такие уж и «открытые» — операторы привязывали и будут привязывать телефоны к себе, потому что они их субсидируют. Например, у пользователя нет доступа к корневая учетная запись .
Это не позволяет настраивать/изменять стандартные приложения, установленные на Android. Но если вы получите root-доступ, вы действительно ты можешь меняйте стандартные приложения, ведь они есть в исходниках.
С другой стороны, Windows Mobile ничего не скрывает. Разработчик может получить низкоуровневый доступ абсолютно ко всему.
Например, если бы в Android не было Sensor API, у разработчика не было бы шансов (кроме установки двоичных файлов вручную через ADB).
Другой пример: Android пока не поддерживает потоковое видео через Media Player, и насколько я знаю, с этим ничего нельзя поделать, если не пропатчить бинарники системы через OTA-обновление.
О да, Android Market! Ничего не скажу, все понятно из названия.
Примечание пер.
: Да, Marketplace появится только осенью 2009 года.
Заключение
В 4 утра невозможно написать какое-то фантастическое заключение.Позвольте мне просто сказать, что мне очень нравится разрабатывать приложения для Windows Mobile. Язык и инструменты разработки просто великолепны.
Однако платформа и приложения не очень удобны для пользователя.
С другой стороны, хотя я и не очень доволен разработкой для Android, платформа, приложения и удобство использования просто фантастические! Наконец, мне не нужно бороться с телефоном, чтобы выйти в Интернет. Вот и угадайте, какой телефон всегда со мной.
И подумайте, для какого телефона мне больше интересно разрабатывать.
Я очень надеюсь, что Microsoft сможет создать удобный платформа, которая сделает меня счастливым пользователем и разработчиком.
Не верю, что говорю это, но все равно скажу, что им нужно вырвать страницу из книги Apple и сказать: «мы забудем об обратной совместимости, мы забудем о существующих приложениях, мы забудем об обратной совместимости, мы забудем о существующих приложениях, мы забудем об обратной совместимости, мы забудем о существующих приложениях, мы просто создайте совершенно новую платформу, которая будет работать».
.
Они слишком долго использовали мантру «обратной совместимости», которая просто мешает им двигаться вперед. Между тем они все дальше и дальше отходят от рынка, часть которого так боятся потерять.
Сноски
[0] Я разработал два приложения для Android Market: Telnet и Klaxon, поэтому считаю, что у меня есть понимание разработки для платформы Android. Klaxon очень помог подчеркнуть огромные различия между двумя платформами.[1] Да, я понимаю, что IL не интерпретируется в Windows Mobile. он проходит JIT-компиляцию.
[2] Какой бы «злой» ни была Microsoft, в новостях о ней не упоминалось из-за попыток защитить свои патенты.
В отличие от Солнца [3] Я хочу посмотреть на Руби [4] Возможно, Google сделает это в будущем.
Теги: #windows mobile #Android #android market #c-sharp #java #dalvik #Разработка мобильных приложений
-
2G И 3G: Старикам Не Место?
19 Oct, 24 -
Два Трехбуквенных Слова: Tms И Vcs.
19 Oct, 24 -
Легкий Экспорт В Excel Xml
19 Oct, 24