Pull to refresh

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

Reading time2 min
Views9.5K
Привет хабрасообщество!

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


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

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

Вся нативная билд-система основана на 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_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 минут.
Tags:
Hubs:
+26
Comments8

Articles

Change theme settings