Code @ C Як написати програму на C для 4 Без Java
Не лише на C++. Нові технології, процеси та Agile.
Як написати програму на C++ для Android. Частина 4: Без Java.
У цій частині ми не писатимемо на Java. Напишемо програму під Android використовуючи лише C++. Це буде просто. Нам потрібна підтримка фіч NDK, які з'явилися лише у версії Android 2.3. Тому спочатку потрібно встановити SDK за допомогою Android 2.3:

Далі створюємо проект так, як це було описано в другій частині. Тільки Build Target у нас тепер Android 2.3 і прибираємо галку з пункту Create Activity, тому що ми домовилися цього разу обійтися без Java:

В кінці не забуваємо викликати Add Native Support (тикаємо правою кнопкою в проект, далі випадає меню, в якому вибираємо Android Tools Add Native Support). У результаті отримаємо майже порожній проект, але в ньому вже є AndroidManifest.xml, який потрібно виправити відповідно до наступного прикладу:
Замість діяльності, яку ми створювали в попередніх прикладах, вказуємо вбудовану в NDK NativeActivity. Її реалізація знаходиться в бібліотеці android_native_app_glue, яку потрібно додати. Для цього міняємо Android.mk, заразом додамо підвантаження бібліотек, які нам знадобляться. Після цього файл виглядатиме так:
У проекті вже є cpp файл test_native.cpp, який був створений автоматично під час конвертації проекту. До нього додамо функцію android_main, яка використовує android_native_app_glue. Вона запускається окремому потоці зі своїм циклом обробки повідомлень. Все дуже схоже на WndProc у Windows. Але для початку до test_native.cpp додаємо всього кілька рядків:
Щоб синтаксичний аналізатор Eclipse не лаявся, додаємо шлях до android_native_app_glue.h, як це було описано в другій частині. У мене вийшов такий шлях:/home/user/Android/android-ndk-r6b/sources/android/native_app_glue .
Отримуємо мінімальний приклад, який можна скомпілювати та запустити. Робити він нічого не буде і не відповідатиме на кнопки пристрою, тому що циклу обробки повідомлень тут поки що немає:

Тепер додамо примітивний цикл обробки повідомлень. Для цього потрібно в циклі викликати функцію ALooper_pollAll, яка вичитує всі повідомлення з черги. Для обробки цих повідомлень визначимо два майже порожні методи: engine_handle_input та engine_handle_cmd. Отримуємо наступний код:
При налагодженні можна бачити повідомлення про старт та вихід, які я додав у android_main:

На даному етапі ви можете самі подивитися в прикладах NDK як можна використовувати OpenGL, щоб побачити щось крім чорного екрану. Наприклад, зверніть увагу на samples/native-plasma.