Android NDK. Хорошо или плохо?

Android DevelopersПолагаю, что интересующиеся темой Google Android уже в курсе, что недавно вышел Android NDK (Native Development Kit). Этот пакет позволяет разрабатывать "нативные" приложения для платформы Android, в обход стандартного SDK, основанного на специальной редакции Java (Dalvik). Новость на самом деле весьма неоднозначная. Вчера в комментариях в одном блоге я отчасти высказал свое мнение по этому вопросу, но напишу еще здесь подробней.

Операционная система для мобильных устройств должна быть изначально спроектирована с расчетом именно на мобильное использование. Здесь должен быть специальный подход к интерфейсу, хранению данных, интеграции приложений, уведомлениям, использованию памяти и т.д. И именно эту задачу решает Dalvik, который с этой точки зрения разработан очень грамотно. Использование Java как основы видится мне также безусловным плюсом из-за достаточно низкого порога вхождения и наличия огромного количества "готовых" программистов. Очень важно разрабатывать программы, сохраняя этот единый подход, предлагаемый API системы. Мне кажется, это очевидно.

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

  • Простые пользователи, которые и так относятся к Linux настороженно из-за мифа "Linux - это сложно", будут пугаться наличия разномастных десктопных Linux-приложений. Особенно когда эти приложения не адаптированы к маленьким экранам, да и просто не обладают единым подходом к юзабилити.
  • Потенциальные проблемы с совместимостью на разных устройствах.
  • Распыление усилий разработчиков. Указывать энтузиастам, что им следует делать, а что нет, несколько неуместно. Но наличие, к примеру, KDE и OpenOffice на коммуникаторе по настоящему интересно только этим самым энтузиастам.

Собственно, эти проблемы уже давно известны на примере уже умерших Linux-платформ, таких как Sharp Zaurus, OpenMoko, Greenphone. Особенно показателен пример Zaurus. Вместо того, чтобы разрабатывать приложения для оболочки Qtopia (установленной по умолчанию), масса разработчиков кинулась портировать Linux-софт и создавать прошивки на базе X-сервера. Это все очень круто, но интересно только кучке гиков. О практичности такого подхода для простых пользователей и говорить не приходится. Как результат - коммерческий провал платформы и ее медленное отмирание.

Радует то, что, судя по всему, в Google прекрасно понимают эту проблему. И именно поэтому NDK выпустили только сейчас, когда прошло больше года после выпуска "базового" SDK, и после запуска Android Market.

Сам же Android NDK, безусловно, нужен. Но его использование должно быть очень и очень аккуратным. Его стоит использовать при создании особо критичных к быстродействию вещей. Например, движков игр или других операций, требующих серьезных процессорных мощностей. Здесь нативный код вполне будет к месту. Собственно, об этом написали даже в Android Developers Blog. Очень хочется надеяться, что разработчики будут соблюдать эти вполне простые "правила".

Комментарии

Re: Android NDK. Хорошо или плохо?

diamon аватар

имхо заурус убило не это. а просто неправильный маркетинг )
для палмов вон только на сях и писали. и умерли они не из-за этого вовсе. для покетов до сих пор только на сях и пишут. не умирают. и если и умрут, то не из-за sdk.
писать будут на том, что проще. вот и всё. сейчас для покетов развелось куча прог на c#. потому, что проще писать на .net, чем использовать winapi. от этого огромное количество тормозящих кривых поделок. я лично за то, чтобы писали именно нативные приложения. ибо как показывает практика не нативные томозить будут. может на 400мгц проце и не будет, но сделают дешёвый коммуник с процем 100мгц - и будет тормозить. я сильно прочуствовал разницу при переходе с 400мгц на 200мгц. пришлось выкинуть весь софт, который был написан на .нет.

b.r.,diamon.

Re: Android NDK. Хорошо или плохо?

SolarWind аватар

Дело не в языке разработки, не в сях. Дело в использовании или не использовании API системы. В палмах и покетах альтернативы просто нет, там по любому приходится использовать базовое API, вопрос лишь в уровне абстракции, предлагаемых разными средствами разработки. В андроиде можно писать либо используя Dalvik API, либо не используя (NDK). Теперь с NDK можно нагородить зоопарк из X, GTK, Qt, что угодно из "настольного" Linux. И сама эта возможность спровоцирует фанатов напортировать кучу ненужного барахла. Заурус убило именно это. Под Qtopia софта было - раз-два и обчелся. А кривых поделок типа pdaXrom, GPE/Opie, Angstrom - немерено. Т.е. нормального софта для простых пользователей не было, а гиковских игрушек полно.

Re: Android NDK. Хорошо или плохо?

igorekk аватар

Саш, я всё-таки немного позащищаю pdaXrom :) Эта прошивка помогала иметь нормальный свежий софт и свежие библиотеки. И встречный вопрос. А на какой Qt версии была основана Qtopia у Zaurus'ов в те времена? Вроде бы на 2-й, хотя давно уже была 3-я. Программисты (и я в том числе) не хотели писать под старую версию API.

Re: Android NDK. Хорошо или плохо?

SolarWind аватар

Ну софт то был свежий, но десктопный. Для мобильного устройства это не есть хорошо. Гикам да, интересно и даже можно было настроить это все достаточно удобно.

Насчет кутопии полностью согласен. Я ниже писал, что шарп тоже не развивала систему. Именно это и имел в виду...

Re: Android NDK. Хорошо или плохо?

SolarWind аватар

По поводу плохого маркетинга у зауруса - да, своя правда в этом тоже есть. Уж очень ненавязчиво шарп продвигал кутопию, и принципиально не развивал ее. Свою роль это тоже сыграло.

Re: Android NDK. Хорошо или плохо?

dr.akulavich аватар

Весьма дальновидный шаг - выпустить NDK именно сейчас. В числе прочего это создаст конкуренцию и выбор между приложениями.

Re: Android NDK. Хорошо или плохо?

SolarWind аватар

Угу. С одной стороны сейчас это уже не создает проблему с чужеродными программами с "большого" линукса (база dalvik-программ уже достаточно большая), а с другой - позволяет писать программы, которые требуют очень серьезных мощностей.

Re: Android NDK. Хорошо или плохо?

kmmbvnr аватар

Проблема высосана из пальца.

Windows Mobile платформа как-то особо не пострадала от возможности программировать на C++ и C#

И опять же наличие портированного emacs'a не привело к массовому отказу пользователей от WimMobile.

Re: Android NDK. Хорошо или плохо?

SolarWind аватар

Каментом выше я ответил, что проблема не в языке разработки как таковом. И да, когда уже есть минимальная база приложений для Dalvik, то появление даже портов уже не будет большой проблемой. Очень хорошо, что NDK был выпущен не сразу, а только сейчас.

Re: Android NDK. Хорошо или плохо?

Goshil аватар

Прочитал всё обсуждение - порадовался, что оно состоялось. Узнал много интересного, пересмотрел свои позиции в отношении мобильных линуксов. Увидел огрехи разработчиков, понял некоторые провалы и успехи. Спасибо всем, что не остались в стороне от обсуждения, очень познавательно :)

Re: Android NDK. Хорошо или плохо?

Malcolm аватар

Спасибо. Пойду много думать и читать про Java :)

Re: Android NDK. Хорошо или плохо?

SolarWind аватар

Можно даже не столько про "классическую" java, сколько уже сразу про Android API. :-) Заодно можно проникнуться красотой реализации архитектуры. :-) Могу подкинуть хорошую книгу. Если интересно, то обратись мне в электропочту или гуглтолк.

Re: Android NDK. Хорошо или плохо?

Гость аватар

а название книги ?

Re: Android NDK. Хорошо или плохо?

SolarWind аватар

Professional Android 2 Application Development.

Re: Android NDK. Хорошо или плохо?

Гость аватар

thanks

PS: а вот то, что у анонимов показывается gravatar - security eak :-)

Re: Android NDK. Хорошо или плохо?

SolarWind аватар

Ну вообще, так и задумано. Граватар же привязан к емылу. Если он введен, граватар показывается.

Re: Android NDK. Хорошо или плохо?

Гость аватар

В данном случае, мыло введено только для сервера, чтобы он посылал ответы :-)
Для Гостя показывать мыло, пусть и косвенно, как-то нехорошо.

Re: Android NDK. Хорошо или плохо?

tamerlan311 аватар

Ну полностью портировать линуксовый софт не удастся. Графическую оболочку придется переписывать как минимум.
Да и архитектура приложений у андройд иная.
А вот писать и портировать нативные библиотеки это очень удобно во многих случаях, чем народ активно занимался задолго до оффициального выпуска NDK.

Re: Android NDK. Хорошо или плохо?

SolarWind аватар

Ну я чуток утрировал, конечно. Хотя не вижу принципиальных проблем портировать тот же xorg со всеми вытекающими. Как это было сделано с тем же заурусом. Здесь даже проще, исходники все есть.

Re: Android NDK. Хорошо или плохо?

tamerlan311 аватар

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

Re: Android NDK. Хорошо или плохо?

SolarWind аватар

Ага, точно. О чем я и говорил. ;-)

На самом деле это уже делают. Вот здесь можно почитать. Пока совсем криво, отображают X-сессию через VNC. Но, блин, начало положено...

Я именно и хочу сказать, что это нафиг не нужно, но возможно. И опасно с точки зрения отпугивания от платформы обычных пользователей. Хотя, конечно, сейчас это уже не так страшно, потому что платформа уже зарекомендовала себя готовой для конечного пользователя. И база программ уже есть.

А насчет тормозов... Я лично когда-то видел Debian на заурусе. С установленным KDE (!). Тормозило аццки, да. Целесообразность этого дела нулевая. Но для фанатов, которые портировали, типа круто.

Re: Android NDK. Хорошо или плохо?

flycat.info аватар

То-то я думаю, что же "убило" Palm? А это, оказывается, то, что на него портировали Linux с Qtopia! И народ ломанулся! ;-)

Re: Android NDK. Хорошо или плохо?

Alex Savochkin аватар

По-моему, использовать мощные средства не по назначению вообще характерно для гиков. :)

Re: Android NDK. Хорошо или плохо?

Виктор аватар

По мне так NDK - не есть хорошо и ни есть плохо.
Намного приятней вести разработк с использованием SDK, но иногда NDK просто необходим. Например у меня сейчас задача достучаться до USB порта девайса, чтобы использовать Android девайс для небольшой автоматизации, так вот я не нашёл как это средствами SDK, а с NDK - есть надежда!
Кстате, друзья, если кто то кодил USB на андроиде, стукните мне в мыло!
Спасибо!

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу. Если у вас есть аккаунт в Gravatar, он будет использован для показа вашей аватарки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.