Начнем с малого, как прикрутить Android NDK к C::B

Есть два пути:

Возможности решения с помощью ndk-build:

Интеграция Android NDK



Идеология и манера сборки приложения с использованием тулчейна Android NDK максимально приближена к типовому поведению C::B, логика процессов:

Файлы шаблона:

Сам проект C::B, важные секции:

В секции <Extensions><debugger><remote_debugging> находятся настройки дистанционной отладки, реализованной с помощью GDB:

AndroidNdkTemplate.cbp - файл проекта C::B.

Если в процессе запуска собранного приложения на устройстве у вас возникают следующие ошибки:

WARNING: linker: /data/local/tmp/youprog: unused DT entry: type 0x6ffffef5 arg 0x4040
WARNING: linker: /data/local/tmp/youprog: unused DT entry: type 0x6ffffffe arg 0x5a34
WARNING: linker: /data/local/tmp/youprog: unused DT entry: type 0x6fffffff arg 0x2

Используйте android-elf-cleaner
Эти ошибки характерны для бинарного файла платформы armeabi-v7a, позднее они были исправлены на последних версиях библиотек.

Скачать android-elf-cleaner v.0.0.14.79/win32 (03.07.2019)

Исходные файлы управления сборкой в директории NDK проекта:


Application.mk - установки параметров сборки.
Android.mk - собственно и является мейк-файлом уникальным для каждого NDK проекта (приложения).
Makefile - непосредственно запускается C::B:

Файлы Application.mk и Makefile являются универсальными для всех проектов собираемых с помощью NDK и не требуют правок.

Для понимания структуры где чего лежит в проекте NDK приложения, приведу дерево:

│   Android.mk
│   AndroidNdkTemplate.cbp
│   Application.mk
│   main.c
│   Makefile
│   
├───libs
│   ├───arm64-v8a
│   │       gdb.setup
│   │       gdbserver
│   │       hello_world
│   ├───armeabi-v7a
│   │       gdb.setup
│   │       gdbserver
│   │       hello_world
│   ├───x86
│   │       gdb.setup
│   │       gdbserver
│   │       hello_world
│   └───x86_64
│           gdb.setup
│           gdbserver
│           hello_world
│           
└───obj
    └───local
        ├───arm64-v8a
        │   │   hello_world
        │   ├───objs
        │   │   └───hello_world
        │   └───objs-debug
        │       └───hello_world
        │               main.o
        │               main.o.d
        ├───armeabi-v7a
        │   │   hello_world
        │   │   
        │   ├───objs
        │   │   └───hello_world
        │   └───objs-debug
        │       └───hello_world
        │               main.o
        │               main.o.d
        ├───x86
        │   │   hello_world
        │   │   
        │   ├───objs
        │   │   └───hello_world
        │   └───objs-debug
        │       └───hello_world
        │               main.o
        │               main.o.d
        └───x86_64
            │   hello_world
            │   
            ├───objs
            │   └───hello_world
            └───objs-debug
                └───hello_world
                        main.o
                        main.o.d

Вид настроек проекта из GUI C::B:


Image1

Image2

Image3

Image4

Обязательно указать возможные пути где расположены объектные файлы с отладочными символами:

Image5

Необходимо добавить команды GDB передающие информацию о нахождении отладочных символов для платформы подключенного устройства:

Вид настроек компилятора в C::B:


Image6

Image7

Image8

Дополнительное меню отладки NDK приложения:


Оба используемых в меню скрипта имеют фиксированное имя и генерируются автоматически, во время исполнения Makefile, для удобства разумно добавить их в меню:

Image11

Image12

Метод отладки приложения состоит из типовых действий, например через F8 или меню Отладка -> Старт. Как только запустился дебагер, вам надо вызвать из созданного меню пункт ADB Debug Remote server, этой командой вы запустите GDB сервер на устройстве, который запустит ваше приложение. Вы подключаетесь к GDB серверу дистанционно и можете проводить сеанс отладки.
В режиме Debug запуск дистанционного сервера происходит автоматически и не требует вызова данного пункта меню.
Смотрите скриншот настроек дебагера в проекте выше.

Данная схема запуска отладки поддерживает и не рутированные устройства.

Глобальные настройки дебагера для NDK выглядят так:


Image13

Отладка на устройстве:


Image14

Результат сборки приложения толчейном NDK:


Image10

Преимущества использования NDK в отличии от статической сборки под определенную платформу:

Скачать:


Полный код NDK C::B template находиться в директории C::B шаблон
Страница инсталлятора NDK C::B template

Обсуждение на ru.stackoverflow.com

License

MIT