Ранее я писал статью C/C++ из Python (ctypes), в ней описывается процесс запуска на Linux. На этот раз мне понадобилось повторить это уже на Android. В этой статье речь пойдет о сборке, необходимых инструментах, механизмах отладки и установки. Код на C/C++ ни каких изменений не претерпел. Подробнее ознакомиться с описанием кода можно по ссылке на статью приведенной в начале данного материала.  test.c: test.h: Процесс компиляции претерпел изменения, теперь нам понадобится arm-linux-gnueabi-gcc. Как компилировать : Флаг -march=armv8-a определяет архитектуру. Но особую важность представляют собой два флага -Wl, -hash-style=sysv, дело в том что компилятор по умолчанию компилирует с флагом -hash-style=gnu. Но такой формат hash таблицы не нравится android: Без Wl тоже ничего работать не будет, т.к. компоновщик соберет все с -hash-style=gnu. Пишут, что еще подойдет hash-style=both, но я не проверял. Для архитектуры armv7-a компилятор arm-linux-gnueabi-gcc.  При использовании aarch64-linux-gnu-gcc/arm-linux-gnueabi-gcc нельзя использовать printf, в разделе проблемы написано почему. $ANDROID_NDK использую от buildozer-а: На этом работа с библиотекой на C закончена.  test.cpp: test.hpp: Как компилировать : Для С++ понадобится libc++_shared.so, уже скомпилирована для нас. Взять нужную архитектуру из $ANDROID_NDK/sources/cxx-stl/llvm-libc++/libs/ и скопировать в папку к нашим тестовыми библиотеками. Вот и все, не забудем скопировать .so файлы в папку проекта kivy. libstdc++.so.6 не стал пытаться собирать после неудачи с libc.so.6 и т.к. на clang++ заработало. Как собрать glibc с помощью aarch64-linux-gnu-gcc/g++ под armv8-a. Мне это ни как не помогло, но опишу процесс на всякий случай т.к. потратил на него много времени. Наши библиотеки в: glibc/build/install/lib Здесь нам понадобится фреймворк Kivy и buildozer — утилита для создания apk пакетов. Установку и настройку проводил по статье: Kivy. Сборка пакетов под Android и никакой магии Установив kivy и buildozer приступим к созданию тестовой программы. Создадим папку под нее: Теперь создадим main.py, это точка запуска нашей программы. И заполним его: Здесь создается простая графическая программа с одной кнопкой при нажатии которой произойдет закрытие приложения. Основная задача статьи показать как запускать C библиотеки, результат работы увидим в консоли. Так же нам понадобится файл спецификации buildozer, описывающий правила сборки пакета apk. Создаем его: Заполняем: Здесь выделю следующие поля: Данный buildozer.spec собирает приложения под архитектуру arm64-v8a. Здесь у меня вопрос к знающим людям, с помощью android.add_libs_arm64_v8a = /home/djvu/workspace/c_from_python/ctypes/src/python/android/libs/libs_arm64_v8a/. я ни как не смог добавить в apk пакет библиотеку libstdc++.so.6. Добавляются только с расширениями so. Подскажите как это сделать? Теперь соберем apk пакет: Операция очень долгая и растянется на несколько десятков минут. Так же потребуется порядка 1.5 GB свободного места, т.к. buildozer подтянет все необходимые библиотеки для сборки.
После удачного завершения в папке bin соберется пакет kivy_test-0.0.1-arm64-v8a-debug.apk. На телефоне нужно включить режим отладки по USB и разрешить установку через USB.
Можно сбрасывать себе пакеты через telegram (так делал на телефоне со сломанным USB). Установим на телефон через провод: Убедимся что пакет установился и все наши библиотеки внутри:  Находим приложение на телефоне: Подключаемся к консоли телефона и мониторим работу приложения: Запускаем и получаем следующее — C/C++ отработал без проблем: На экране телефона видим следующую картинку: Все отработало как надо. Нажатие на кнопку закрывает приложение. Больше оно ни чего не умеет делать ;) Спасибо за внимание. Инженер программист