Перевод: Разработка Для Android Против Windows Mobile

Введение переводчика Занимаясь разработкой для платформы 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 — отстой? Давайте посчитаем.

  1. Ужасные ограничения на имена пакетов/файлов/каталогов/классов.

  2. Никаких анонимных методов
  3. Отсутствие закрытия (закрытие)
  4. Нет лямбда-выражений
  5. Нет событий/делегатов
  6. Нет частичных классов
  7. Забавная реализация перечислений
  8. Ужасная реализация дженериков
  9. Отсутствие структур и как следствие невозможность хранения составных объектов целиком в стеке.

    Это оказывает существенное влияние на производительность там, где это важно.

  10. Строки неизменяемы, но не интернированы (см.

    стажер )

  11. Нет доступа к небезопасному коду
  12. Нет методов получения/установки свойств.

  13. Никакой перегрузки оператора
  14. Нет методов расширения
  15. Наконец глупое и неинтуитивное расстановка скобок
Сколько причин? 15? Ха-ха-ха! Я не придираюсь: все, что перечислено выше, я использую регулярно.

Однако отмечу, что анонимные классы мне в какой-то степени нравятся, но без событий/делегатов они практически бесполезны.

Я понимаю, что все, что я перечислил, по большому счету синтаксический сахар, и ни 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.

  • Для того, чтобы это работало, мне пришлось придумать, как правильно заполнить структуру.

    Пользовательское уведомление триггер .

  • Потом оказалось, что если устройство спит, то Клаксон не всегда работает корректно .

  • Еще раз порывшись в документации, я решил эту проблему — оказывается, мне нужно было явно послать устройству команду на включение, иначе оно снова засыпало.

  • Клаксон работал некоторое время, пока не наступило летнее время.

    На некоторых телефонах уведомления срабатывают через час.

    Понятия не имею, почему.

    Я сдался.

Теперь сравним с Android:
  • Говорить с Менеджер тревог
  • Настройте событие, которое будет запускаться (намерение) в определенное время
  • Обработать событие
Все просто работает, никаких проблем.

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

Таким образом, одна из двух сложных частей разработки для 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 #Разработка мобильных приложений

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.