Войти
Мобильные платформыТермины

Android NDK

Android NDK - (расшифровывается как Android Native Development Kit) - набор инструментов для создания приложений для ОС Android с использованием C/C++.

это и позволяет писать нативные приложения, работающие быстрее чем Java. Android использует альтернативный libc - Bionic, а также имеет встроенные библиотеки zlib, OpenGL ES, Vulkan и различные API.

Ссылки:
Официальная страница об Android NDK
Репозиторий ОС Android

Что такое Android NDK?

#Инструменты разработки

22 февраля 2021 (Обновление: 5 мар. 2021)

Комментарии [16]

Страницы: 1 2 Следующая »
#1
(Правка: 19:51) 18:41, 24 фев. 2021

«Хотя это и позволяет писать нативные приложения, работающие быстрее чем Java, писать только на C/C++ нельзя, точка входа обязательно должна быть написана на Java», — это не правда. Полностью нативные андроид-приложения можно делать чуть ли не со времён 9-й версии API (android 2.3). Proof: https://developer.android.com/ndk/samples/sample_na

https://github.com/android/ndk-samples/tree/main/native-activity — исходники минимального примера.

#2
19:07, 24 фев. 2021

General GDA
Пофиксил

#3
19:50, 24 фев. 2021

Я бы ещё текст прогнал через спелл чекер (пунктуация, опечатки) и согласовал предложение. А то «это ...» и начинается с маленькой буквы, и читается как-то не очень. Но это мелочи.

Главное, что «работающие быстрее, чем Java», — это субъективное оценочное суждение. Мало того, что на android нету Java (да, программу на этом языке можно скомпилировать для работы на Android; но на устройствах нет Java VM, модель памяти отличается от Java и т.п.). Так ещё на C/C++ надо постараться написать быстрее. К примеру, в современных андроидах очень сложная среда исполнения, где есть пред-компиляция в нативный код ещё на момент инсталляции приложения. При обновлении ОС может (и делает) перекомпиляция такого кода. Ещё пример: лично я при должном старании определённый класс задач под андроид вполне могу написать на Java/Kotlin так, что будет быстрее, чем на C++. Как в плане скорости выполнения кода, так и в плане скорости его написания.

Раз форум у нас тут гемдеву посвящён. То я могу набросить пример: на Unity так вообще всё на C# пишется. И ничего. Тонны успешных проектов (гемдев проектов!) под мобильные телефоны.

Если и писать про «быстрее», то со ссылками на конкретные исследования или case studies.

#4
13:12, 25 фев. 2021

General GDA, хотелось бы поподробнее, как вы напишите приложение, которое написано на Java так, чтобы оно работало быстрее внутреннего цикла нативной программы? В плане скорости работы кода.

Про скорость написания - это зависит от того, что уже для этого сделано.

#5
15:50, 25 фев. 2021

Mirrel
ну, как пример из головы - если работа приложения состоит в обработке строк или структур, которые оно получает с помощью одних вызовов API и отображает с помощью других, то большую часть времени нативное приложение может заниматься перепаковыванием их в свое представление, а java - будет работать с данными "как есть".
Другой пример - оптимизатор java вполне может быть круче оптимизатора fpc и соответственно одни и те же вычисления будут преобразованы в более эффективный машинный код.

#6
(Правка: 11 мая 2021, 7:06) 18:23, 25 фев. 2021

kipar, я не об этом спрашивал!

Есть (у абсолютно нативного приложения) свой внутренний цикл (как и в других системах). Из этого цикла и происходят всё вызовы этого самого приложения (Start, Stop, Pause, Resume ...).

Как, человек сможет, используя java-код, обойти скорость работы внутреннего цикла?

И, всеми данными, можно пользоваться из нативного кода. В дополнению к этому, многие данные на Android находятся именно в нативном виде, а внутренние библиотеки соединяют этот код для удобства работы с Java-кодом.

но это больше для информации.

#7
18:43, 25 фев. 2021

Mirrel
> Start, Stop, Pause, Resume
эти операции делаются достаточно редко, чтобы игнорировать JNI-оверхед при их вызове. Да даже если Update - один JNI-вызов каждый кадр - это копейки.

#8
18:45, 25 фев. 2021

Что если, я скажу, что можно полностью игнорировать JNI-вызовы?

#9
18:51, 25 фев. 2021

Mirrel
> Что если, я скажу, что можно полностью игнорировать JNI-вызовы?
и писать при этом на яве?

#10
19:41, 25 фев. 2021

Зачем? Лично я буду писать на Паскале. Другой народ на C/C++. Кто умеет, тот на каком ещё языке, кроме всех вышеперечисленных.

#11
(Правка: 22:47) 22:46, 25 фев. 2021

General GDA
То есть dalvik и art не выполняют (свой) java байт-код? Про скорость C/C++ согласен.

оффтоп: как цитаты писать?
#12
(Правка: 23:32) 23:31, 25 фев. 2021

egoros7
Dalvik, вроде как - вполне себе jvm и исполняет байткод. Хотя и не совсем compliant. А art - он AOT.

#13
23:38, 25 фев. 2021

kkolyan
>а art - он AOT
Ну при включении машинный код всё же компилируется из байт-кода. Или я не прав?

#14
23:41, 25 фев. 2021

egoros7
Скорее всего да, т.к. это проще чем компилить из сорцов. Но я наверняка не знаю.

Страницы: 1 2 Следующая »
Мобильные платформыТермины