Android NDK - пишите только на C/С++ - программирование
Подтвердить что ты не робот

Android NDK - пишите только на C/С++

Можно ли написать целое приложение NDK с C/С++ без Java-класса "стартер", например, в проекте hello-jni sample (HelloJni.java) - каким-то образом создайте HelloJni.c, который будет делать то же самое?

4b9b3361

Ответ 1

Начиная с Android 2.3 (API уровня 9) есть NativeActivity, который позволяет закодировать Android-приложение только на С++. Это также пример для пакета NDK.

Цитата из Обзор NDK:

Когда разрабатывать собственный код

NDK не будет полезен большинству приложений. Как разработчик, вам нужно сбалансировать свои выгоды от его недостатков; в частности, используя код не приводит к автоматическому увеличению производительности, но всегда увеличивает сложность приложения. В общем, вы должны использовать если он необходим для вашего приложения, а не только потому, что вы предпочитаете программировать на C/С++.

Типичные хорошие кандидаты для NDK - автономные, интенсивные для ЦП операции, которые не выделяют много памяти, такие как обработка сигналов, физическое моделирование и т.д. Просто повторное кодирование метода для запуска в C обычно не приводит к увеличению производительности. когда анализируя, следует ли вам развивать собственный код, подумайте о ваших требованиях и посмотрите, предоставляют ли API фреймворка Android функциональность, которая вам нужна. NDK может, однако, быть эффективный способ повторного использования большого корпуса существующего кода C/С++.

В платформе Android предусмотрены два способа использования собственного кода:

  • Напишите свое приложение с помощью платформы Android и используйте JNI для доступа к API, предоставляемым Android NDK. Этот метод позволяет вам чтобы воспользоваться преимуществами платформы Android, но по-прежнему позволяет вам писать собственный код, когда это необходимо. Вы можете установить приложения, которые используют собственный код через JNI на устройствах, которые запускаются Android 1.5 или новее.

  • Запишите собственное действие, которое позволяет реализовать обратные вызовы жизненного цикла в собственном коде. Android SDK обеспечивает NativeActivityкласс, который является классом удобства, который уведомляет ваш собственный код любые обратные вызовы жизненного цикла активности (onCreate(), onPause(), onResume(), и т.д). Вы можете реализовать обратные вызовы в своем собственном коде для обработки эти события, когда они происходят. Приложения, которые используют собственные действия должен быть запущен на Android 2.3 (уровень API 9) или более поздней версии.

Вы не можете получить доступ к таким функциям, как Сервисы и контент-провайдеры изначально, поэтому, если вы хотите использовать их или любой другой API фреймворка, вы все еще может написать код JNI для этого.

Я бы взял C/С++ при портировании кода и, возможно, при разработке кросс-платформенных игр.

Ответ 2

Поскольку все пользовательские интерфейсы, графики и другие интересные классы находятся на Java, вам придется использовать Java так или иначе.

Другим я подразумеваю взаимодействие со всеми классами Java через JNI. Для этого есть библиотека: https://github.com/DmitrySkiba/itoa-jnipp. Проверьте HelloJNIpp sample - это показывает, что действительно можно полностью писать приложения Android на С++, единственный улов, который вам нужно будет реализовать все необходимые обертки (некоторые из них находятся в папке samples/common).

Однако я рекомендую использовать Java. Его простой и элегантный, имеет отличные библиотеки и инструменты.