Android NDK - (расшифровывается как Android Native Development Kit) - набор инструментов для создания приложений для ОС Android с использованием C/C++.
это и позволяет писать нативные приложения, работающие быстрее чем Java. Android использует альтернативный libc - Bionic, а также имеет встроенные библиотеки zlib, OpenGL ES, Vulkan и различные API.
«Хотя это и позволяет писать нативные приложения, работающие быстрее чем Java, писать только на C/C++ нельзя, точка входа обязательно должна быть написана на Java», — это не правда. Полностью нативные андроид-приложения можно делать чуть ли не со времён 9-й версии API (android 2.3). Proof: https://developer.android.com/ndk/samples/sample_na
Я бы ещё текст прогнал через спелл чекер (пунктуация, опечатки) и согласовал предложение. А то «это ...» и начинается с маленькой буквы, и читается как-то не очень. Но это мелочи.
Главное, что «работающие быстрее, чем Java», — это субъективное оценочное суждение. Мало того, что на android нету Java (да, программу на этом языке можно скомпилировать для работы на Android; но на устройствах нет Java VM, модель памяти отличается от Java и т.п.). Так ещё на C/C++ надо постараться написать быстрее. К примеру, в современных андроидах очень сложная среда исполнения, где есть пред-компиляция в нативный код ещё на момент инсталляции приложения. При обновлении ОС может (и делает) перекомпиляция такого кода. Ещё пример: лично я при должном старании определённый класс задач под андроид вполне могу написать на Java/Kotlin так, что будет быстрее, чем на C++. Как в плане скорости выполнения кода, так и в плане скорости его написания.
Раз форум у нас тут гемдеву посвящён. То я могу набросить пример: на Unity так вообще всё на C# пишется. И ничего. Тонны успешных проектов (гемдев проектов!) под мобильные телефоны.
Если и писать про «быстрее», то со ссылками на конкретные исследования или case studies.
General GDA, хотелось бы поподробнее, как вы напишите приложение, которое написано на Java так, чтобы оно работало быстрее внутреннего цикла нативной программы? В плане скорости работы кода.
Про скорость написания - это зависит от того, что уже для этого сделано.
Mirrel
ну, как пример из головы - если работа приложения состоит в обработке строк или структур, которые оно получает с помощью одних вызовов API и отображает с помощью других, то большую часть времени нативное приложение может заниматься перепаковыванием их в свое представление, а java - будет работать с данными "как есть".
Другой пример - оптимизатор java вполне может быть круче оптимизатора fpc и соответственно одни и те же вычисления будут преобразованы в более эффективный машинный код.
Есть (у абсолютно нативного приложения) свой внутренний цикл (как и в других системах). Из этого цикла и происходят всё вызовы этого самого приложения (Start, Stop, Pause, Resume ...).
Как, человек сможет, используя java-код, обойти скорость работы внутреннего цикла?
И, всеми данными, можно пользоваться из нативного кода. В дополнению к этому, многие данные на Android находятся именно в нативном виде, а внутренние библиотеки соединяют этот код для удобства работы с Java-кодом.
Mirrel > Start, Stop, Pause, Resume
эти операции делаются достаточно редко, чтобы игнорировать JNI-оверхед при их вызове. Да даже если Update - один JNI-вызов каждый кадр - это копейки.