Android NDK - пишите только на C / C ++ - PullRequest
16 голосов
/ 19 января 2012

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

Ответы [ 2 ]

16 голосов
/ 19 января 2012

Начиная с Android 2.3 (API Level 9), существует NativeActivity, позволяющая кодировать приложение Android только на C ++. Для этого также есть пример в пакете NDK.

Цитата из NDK Overview :

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

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

Типичными хорошими кандидатами для NDK являются автономные, ресурсоемкие операции, которые не выделяют много памяти, такие как обработка сигналов, симуляция физики и тд. Просто перекодировать метод для запуска в C обычно не приводит к значительному увеличению производительности . когда изучая, стоит ли разрабатывать в нативном коде, подумайте о ваших требованиях и посмотрите, предоставляют ли API-интерфейсы платформы Android функциональность, которая вам нужна. НДК, однако, может быть эффективный способ повторно использовать большой корпус существующего кода C / 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 / C ++ при портировании кода и, возможно, при разработке кроссплатформенных игр.

0 голосов
/ 20 января 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...