Компания Google представила (http://android-developers.blogspot.com/2009/06/introducing-a...) пакет Android NDK (http://developer.android.com/sdk/ndk/1.5_r1/index.html) (Native Development Kit), позволяющий организовать сборку и выполнение программ, написанных с включением блоков кода на таких языках программирования, как Си и Си++. NDK не поддерживает выполнение целиком нативных приложений, программы по прежнему выполняются под управлением виртуальной машины Dalvik.
Пакет NDK включает в себя:
- Набор утилит и сборочных файлов для генерации специальных нативных библиотек на основе исходных текстов на языках Си и Си++. Поддерживается набор инструкций ARMv5TE;
- Инструменты для встраивания сгенерированных нативных библиотек в APK пакеты с приложениями, пригодные для установки на мобильных устройствах на базе платформы Android;
- Коллекцию системных заголовочных файлов и библиотек, поддерживаемых платформой Android. Например:
- libc - стандартная...URL: http://android-developers.blogspot.com/2009/06/introducing-a...
Новость: https://www.opennet.ru/opennews/art.shtml?num=22340
Совесть проснулась у большого брата
Она так, как-то сильно местами проснулась :).В лучших традициях гугеля - как всегда, предлагается вырезать гланды, через жопу, автогеном.Ну посмотрим как гугель запоет когда интель с нокией ему хвост прищемят.При том у этих интерфейсы будут нормальными.Ну там Qt например :)
>Она так, как-то сильно местами проснулась :).В лучших традициях гугеля - как
>всегда, предлагается вырезать гланды, через жопу, автогеном.Ну посмотрим как гугель запоет
>когда интель с нокией ему хвост прищемят.При том у этих интерфейсы
>будут нормальными.Ну там Qt например :)А чем Qt "нормальнее" Android'a?
Используя Qt можно сразу писать высокопроизводительное приложение на C++, которое будет работать на Symbian S60 и Windows Mobile, т.е. сразу быстрый код + две платформы. Benefit-ы очевидны.
> А чем Qt "нормальнее" Android'a?Например тем что программа писанная на Qt без всяких левых выгибонов и сраных эмуляторов запускается на Windows, MacOS, Linux и почти любой иной полноценной платформе с UI под которую портанули Qt, а таковых все больше и больше.
А андроид... он ни с чем не совместим и как максимум юзабелен через тормознутый эмулятор.Который есть далеко не везде.
В итоге по части кроссплатформенности: тот же QutIM или Psi я могу поставить и в Windows, и в Linux (и в макоси наверное...).Кстати Linux проверял как i386, так и AMD64 (который актуальнее в свете цен на оперативку) и даже специфичный вариант пингвина на N800 с ее ARM процессором.И все это без особого секаса.Вот это - да, переносимость.Благо у винды на i386 крайне мало общего с пингвином работающем на ARMовском процессоре.
А вот с программами для андроида так не катит.Запустить их без особого секаса на перечисленных платформах?Ха-ха, ну да, мечтать не вредно.А чтобы системными средствами поставить программу и просто работать с ней, не грея мозг?Ну да, сие не про андроид и его приложения :)
Толку от этого мало, JNI-тормоз все испортит. Не много задач требующих активных фоновых вычислений на смарте...
Did you use Android, is it slow? For me for sure not slower than IPhone application written on Objective C
Родной язык забыли, уважаемый?
Для ифона серьезные геймдевы уже объявили планы насчет гамез.Для андроида - гы-гы, ага, как же.Ну понятно что нормальные геймдевы думают о таких "интерфейсах" :)
Нормальные геймдевы думают о том с какого стада они больше бабла начешут.Человек, купивший iPhone по определению гойтов тратить деньги.
Человек, купивший Android - вероятно либо ищет доступных альтернатив либо просто строит из себя гика.
По большей степени человек купивший ифон ничего другого не купит - ему не надо, для него ифон это просто понтовый телефон. А вот как раз те кто покупает андройды они знают что покупают и продать им качественную прогу проще
Не, ну конечно C с расширениями гораздо медленнее, чем эмуляция C++ через Java.
Забыли тогда уж добавить asm
main() {
asm(...);
}
А как же защищенность данных? Вдруг такой библиотекой украдут все мои пароли от порносайтов?Интересно, на JIT для далвика забили или нет? Далвик ведь медленный не потому что джава плохая.
В Андроиде у каждого приложения свой id. А файлы создаються с правами на чтение только для владельца. Соответственно, натив вам не поможет.
Можно память сканировать. А код прямого доступа к файловой системе можно и с собой притащить.Короче, без аппаратного разграничения доступа веселых делов можно натворить песец как много.
>Можно память сканировать.Паазвольте?А какие-это современные операционки+процы позволяют программам вот так запросто в чужой памяти шариться?Как минимум без рутовых прав?Ничего что программы в режиме юзера работают а не в ядре (у современных ARM деление на кернел и юзер - есть) и потому могут только в своей памяти копаться.А чуть шаг в сторону как то обращение за пределы адресов которые выделены проге - бумс.Прога характерно так падает.Со всем известным сообщением по этому поводу прога расстреливается на месте за левые поползновения ;).Грубо говоря - хоть это и телефон, но ядро там от все той же многопользовательской и многозадачной системы.И права оно энфорсит как и раньше.И по чужой памяти шариться из user-mode там наверняка нельзя, как и в обычном линухе(как минимум, покуда вы не рут и не в ядре - вам положена жирная фига на этот счет).
>А код прямого доступа к файловой системе можно и с собой притащить.
Как бы удачи вам из юзер мода и без прав рута поиметь прямой доступ к девайсам, ага.А ничего что при этом права доступа проверяются ядром и можно от ядра вместо доступа на раз получить волшебный кукиш если вы не рут и правов у вас - нема?
> Короче, без аппаратного разграничения доступа веселых делов можно
> натворить песец как много.А что, деление на кернель и юзерь режимы у ARM уже отменили?Или линуксное ядро у гугля перестало права доступа энфорсить и разделять программы друг от друга?Вообще-то пингвин на армах, как минимум, тех которые с MMU (а в современных мобилах все ARM именно такие) - точно такой же как и везде в этом плане.И дележка прав там есть.Чем гугл и воспользовался для создания их извращенной системы прав :).
При чем тут *nix? В Android он типа хост системы для Xen. Все выполняется на Java VM. А как там обеспечивается защита памяти не для Java скриптов, а для функций скомпилированных в _любые_ машинные команды, мне не ведомо.
>При чем тут *nix? В Android он типа хост системы для Xen.
>Все выполняется на Java VM. А как там обеспечивается защита памяти
>не для Java скриптов, а для функций скомпилированных в _любые_ машинные
>команды, мне не ведомо.Версия специально для таких как вы: "Этим занимаються маленькие гномики."
Соответственно, некий "*nix" тут совершенно ни при чем. :)
>Все выполняется на Java VM.Нативный код по определению выполняется на железячном процессоре.Иначе фигли с нативного кода толку? :)
>А как там обеспечивается защита памяти не для Java скриптов, а для функций
>скомпилированных в _любые_ машинные команды, мне не ведомо.Процессор заэнфорсит это как обычно.Как минимум - половины ужасов скорее всего невозможно(всякие там прямые доступы к ФС и прочая).Как максимум гугл мог ступить и устроить общую помойку в адресспейсе явы куда догружаются такие модули(как оно сделано - не разбирался, пусть на этот счет у гугля башка болит в плане выбора между эффективностью по жрачу RAM vs защищенность :P).Это с их стороны было бы покладание большого болта на имеющиеся аппаратные средства защиты памяти процессов друг от друга.Положили ли (ради оптимищации пожирания памяти многочисленными жава-тормозилками например) - а вот хз.Ну их там нахрен, пусть в своих горбылях сами копаются.А мне влом - на свете полно более нормальных платформ, где не требуется вырезать гланды через то самое место и к тому же автогеном.
Ничего не пойму. Если "под управлением виртуальной машины Dalvik" - это байт-код. Си/плюсы должны компилироваться в натив, если хотим их использовать для повышения производительности.
Чего непонятного? Писать можно только либы. А вызывать функции из этих либ программой на яве или т.п.
Маразм, конечно...А OpenGL - это то, с чего нужно было начинать. Кому нужен дорогой гаджет без игрушек?
>А OpenGL - это то, с чего нужно было начинать. Кому нужен
>дорогой гаджет без игрушек?Ну, до гугля понемногу начнет доходить.Особенно когда нокия и интель ему дадут понять что они могут и получше штукенции за сравнимые бабки изобразить.С 3D ускорением и всеми делами.А гугля будет пыжиться с своей "не тормозной" ява-виртуалкой, которая ни с чем не совместима и к которой где-то сбоку как-то можно прикрутить немного нативного кода.
> Чего непонятного? Писать можно только либы. А вызывать функции из этих либ программой на яве или т.п.
> Маразм, конечно...писать можно только либы, конечно.. вот только чем либа отличается от не либы [от обычных исполняемых файлов] (?)
ответ: тем то у либы нет ГЛАВНОЙ точки входа. вот и всё основное отличие.
другими словами -- всё что нада сделать -- это лишь только миниатюрный java-код, который запускает либу. вот и нет никаких проблем :-)
использовать модель когда основной цикл-программы написан на java, а на native только маленькие фрагменты -- вовсе не обезательно. никто не заставляет.
Java-API (тоесть и Android-API) из native-C++-библиотек -- ДОСТУПЕН(!).. причём штатно..
такчто написать всю программу в C++ (и двухстрочный фрагмент на java, для запуска) -- всегда можно... :-)
Первый нормальный коммент
>такчто написать всю программу в C++ (и двухстрочный фрагмент на java, для
>запуска) -- всегда можно... :-)Да.А можно вырезать гланды через жопу автогеном.Подумаешь, никто кроме гугла так не делает а потому - будет несовместимо ни с кем и наработки остальных не подойдут для андроида без модификации, равно как и наоборот - код для андроида не подойдет для других окружений без модификации.Изобретатели велосипедов, в хучшем виде (синдром "not invented here" в исполнении Гугла?).
>А OpenGL - это то, с чего нужно было начинать.он там всегда был
> Ничего не пойму. Если "под управлением виртуальной машины Dalvik" - это байт-код. Си/плюсы должны компилироваться в натив, если хотим их использовать для повышения производительности.никакой это не байт код..
просто java-приложение запустит бинарный-C++-файл (библиотеку)..[а не так что библиотека запуститься сама собой].. вот и всё отличие..
в этомже нативном-C++-приложениие -- также как и в java-приложениие -- можно будет вызывать Java-API
(в ОТЛИЧИИ от того что сказано автором новости: "недоступность функций Java API платформы Android из нативных блоков кода." -- бред собачий)....всё это доступно прямо из нативного-C++-кода, посредством java-native-interface...
(тоесть -- единственынй минус нативного-C++-кода только в том -- что он кросплатформен только на уровне своих исходных кодов)
другими словами сказать фразу
"под управлением виртуальной машины Dalvik"
-- тоже самое что если например есть файл run-mc.sh (в котором код bash-а), который запускает миднайт-командер -- то сказать фразу что
"миднайт-командер работает под управлением bash"
>Си/плюсы должны...Когда же вы наконец поймёте, никто никому ничего не должен...
Забудьте это слово вообще. Мышление с его учётом малоэффективно, если Вы не держите в руке пистолет и не готовы из него выстрелить.
а просвятите пожалуста, до этого приложения для андроида на чем писали-то, а то как то оказался не в курсе, думал там линукс без извращений стоит
java
Линух там лишь запускач для самопальной жаба-виртуалки от гугля.Библиотек - минимум.Ну а потому писать на чем-то кроме жабы вы запаритесь.Такая вот платформа.Чем это принципиально лучше чем проприетарная система с j2me виртуалкой - а гугль его знает :)