Песочница →
Быстрая сборка С++ библиотек под Андроид
Привет хабрасообщество!
Многие задают вопрос: «У нас есть куча библиотек на С++, которые мы хотим собрать под Андроид. Как это сделать?». Ниже по шагам описан возможно самый простой способ это сделать.
Основным требованием к сырцам является только то, чтобы они были совместимы с gcc и POSIX (хотя иногда всяческие урезания и хаки могут быть неизбежны).
1. Для сборки чего-либо на С++ под Андроид из под винды нужно установить как минимум следующее:
Вся нативная билд-система основана на make. Есть свой скрипт ndk-build, который собирает С++. Чтобы он работал для вашей любимой библиотеки нужно сделать следующее:
2. В папку библиотеки положить файл default.properties со строкой target=android-8.
3. Здесь же создать папку jni и положить в неё 2 файла:
Application.mk с таким содержимым
и Android.mk вот такой:
4. После чего надо запустить Cygwin Bash Shell, перейти в папку, где находится папка jni, и из шелла выполнить команду
Если всё сделано правильно и ошибок компиляции нет, то соберётся ститическая либа libMySuperProject.a (на самом деле даже 2 — под оба таргета: armeabi и armeabi-v7a), которые можно линковать спроектом. На все телодвижения уходит не более 15 минут.
Многие задают вопрос: «У нас есть куча библиотек на С++, которые мы хотим собрать под Андроид. Как это сделать?». Ниже по шагам описан возможно самый простой способ это сделать.
Основным требованием к сырцам является только то, чтобы они были совместимы с 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 минут.
29.06.2011 12:43+0400