Вам не нужно изменять ЛЮБОЙ из существующих методов, чтобы использовать формат JNI с «автоматической привязкой». В примерах Google NDK нет хороших примеров, но Google SDK использует другой внутренний метод привязки JNI: Поиск RegisterNatives () в документах JNI. Но даже тогда вам действительно нужно создать оболочку только для тех немногих мест, в которых Android SDK должен общаться с вашей библиотекой: пользовательский ввод / датчики в целом, обратный вызов отрисовки и, возможно, обратный вызов «обновления». Кроме того, остальная часть вашего приложения должна оставаться нетронутой, кроме как для его сборки.
Чтобы упростить вещи, я бы порекомендовал вам не использовать нативные виджеты; если вы сохраняете свою игру полностью в OpenGL, вы можете избежать прохождения через Java, например, рисования текстур на экране, по крайней мере, если вы нацелены на устройства 1.6 и новее, где NDK имеет собственные привязки для OpenGL.
Вопреки некоторым мнениям (включая мнения Google), NDK может и используется для переноса игр на Android. Я использую это таким образом прямо сейчас, на самом деле. Вам нужно передать пользовательские события из Java в C ++, и вам нужно, чтобы Java настроил базовый контекст GL (в NDK нет привязок EGL), но вы можете делать почти все остальное в C ++ с OpenGL и, как только вы основные сообщения Java передаются в C ++, вы можете (в основном) игнорировать Java. Слава Богу. :)
Вам все равно нужно будет поговорить с Java на предмет звука и получить доступ к вашим файлам: обоим по-прежнему нужно пройти через Java, и поэтому вам, вероятно, захочется использовать «обратный JNI», когда вы вызываете Java функция из C ++. Также не сложно, и есть примеры повсюду.
Я подробнее расскажу о том, как получить доступ к вашим ресурсам, здесь: Файловые операции в Android NDK
Удачи.