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