NDK сам по себе не является родным.Это в значительной степени оболочка JNI вокруг Android SDK.Использование NativeActivity предоставляет удобный способ работы с определенными событиями жизненного цикла приложения и позволяет добавлять собственный нативный код поверх.ALooper, AInputQueue и т. Д. - это JNI-оболочки Java SDK, некоторые с дополнительным кодом, который является закрытым и недоступным для реальных приложений.
Когда дело доходит до разработки под Android, нет такой вещи, как написание приложения полностью на нативном C ++ - вам (во всех реальных случаях приложений, о которых я могу подумать) всегда нужно использовать API Android: s,которые в огромной степени являются чистой Java.Независимо от того, используете ли вы их через оболочки, предоставляемые NDK, или оболочки, которые вы создаете сами, это на самом деле не меняет этого.
Итак, чтобы ответить на ваш вопрос: нет, это не будет стоить, потому что вы в конечном итогенаписание оболочек JNI для вызовов SDK вместо написания оболочек JNI для ваших собственных методов Java, которые делают то же самое, с меньшим количеством кода, более простым кодом и более быстрым кодом.Например, показ диалога с использованием «чистого c ++» включает в себя довольно много вызовов JNI.Просто вызов метода Java через JNI, который делает то же самое, даст вам более быстрый код (один вызов JNI) и, возможно, код, который легче поддерживать.
Чтобы полностью понять, что вы можете сделать, вы действительнонеобходимо изучить исходный код Android.Начните с native_app_glue.c, который доступен в NDK, затем продолжите реализацию ОС AActivity, ALooper, AInputQueue и т. Д. Google Code Search очень помогает в этом.: -)
Если это легко сделать в Java и включает в себя много вызовов, вызовите метод через JNI, который делает все это, вместо того, чтобы писать весь дополнительный код, чтобы сделать это с несколькими вызовами JNI.Сохраните столько существующего кода C ++, сколько разумно .