Яндекс.Метрика

    Песочница

    Быстрая сборка С++ библиотек под Андроид

    Привет хабрасообщество!

    Многие задают вопрос: «У нас есть куча библиотек на С++, которые мы хотим собрать под Андроид. Как это сделать?». Ниже по шагам описан возможно самый простой способ это сделать.


    Основным требованием к сырцам является только то, чтобы они были совместимы с gcc и POSIX (хотя иногда всяческие урезания и хаки могут быть неизбежны).

    1. Для сборки чего-либо на С++ под Андроид из под винды нужно установить как минимум следующее:
    • Android SDK
    • Android NDK
    • Cygwin

    Вся нативная билд-система основана на make. Есть свой скрипт ndk-build, который собирает С++. Чтобы он работал для вашей любимой библиотеки нужно сделать следующее:

    2. В папку библиотеки положить файл default.properties со строкой target=android-8.

    3. Здесь же создать папку jni и положить в неё 2 файла:

    Application.mk с таким содержимым
    APP_OPTIM := release
    APP_PLATFORM := android-8
    APP_STL := gnustl_static
    APP_CPPFLAGS += -frtti
    APP_CPPFLAGS += -fexceptions
    APP_CPPFLAGS += -DANDROID
    APP_ABI := armeabi armeabi-v7a
    APP_MODULES := MySuperProject
    

    и Android.mk вот такой:
    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    
    GLOBAL_C_INCLUDES := \
      $(LOCAL_PATH)/../Source \               <-- здесь нужно перечислить все нужные папки
    
    LOCAL_SRC_FILES = а здесь перечислить все .с и .cpp файлы через пробел с путём относительно папки jni
    
    LOCAL_MODULE := MySuperProject
    
    GLOBAL_CFLAGS  := -Werror -O3 -isystem $(SYSROOT)/usr/include/
    
    LOCAL_CFLAGS := $(GLOBAL_CFLAGS)
    LOCAL_C_INCLUDES := $(GLOBAL_C_INCLUDES)
    
    include $(BUILD_STATIC_LIBRARY)
    

    4. После чего надо запустить Cygwin Bash Shell, перейти в папку, где находится папка jni, и из шелла выполнить команду
    ndk-build
    

    Если всё сделано правильно и ошибок компиляции нет, то соберётся ститическая либа libMySuperProject.a (на самом деле даже 2 — под оба таргета: armeabi и armeabi-v7a), которые можно линковать спроектом. На все телодвижения уходит не более 15 минут.