Мини-руководство по тому, как быстро скомпилировать OpenSSL для Android и связать его с проектом Qt.
-Для Linux.
-Вначале действия полностью идентичны
"расово-верному" руководству по компилянию OpenSSL для Android:
-Качаем исходники openssl нужной версии с их сайта, качаем setenv-android.sh(все ссылки на закачку выше по ссылке).
-Ложим их в одну папку. Запускаем консоль, переходим в ней в эту самую папку.
-Далее:
BashВыделить код |
1
-2
-3
- | $ rm -rf openssl-1.0.1g/ # удаляем исходники(вместо версии 1.0.1g - подставляем свою), если они уже были распакованы
-$ tar xzf openssl-1.0.1g.tar.gz # распаковываем исходники в подпапку
-$ chmod a+x setenv-android.sh # разрешаем setenv-android.sh исполняться |
|
Редактируем setenv-android.sh, настраивая там _ANDROID_EABI, _ANDROID_ARCH, _ANDROID_API на нужные значения.
-Дальше возвращаемся в консоль:
BashВыделить код |
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
- | $ export ANDROID_NDK_ROOT=путь_до_ANDROID_NDK # указываем путь до Android NDK для setenv-android.sh
-$ . ./setenv-android.sh # запускаем скрипт, чтобы он нам в окружение проставил необходимые далее переменные
-$ cd openssl-1.0.1g/
-$ perl -pi -e 's/install: all install_docs install_sw/install: install_docs install_sw/g' Makefile.org
-# конфигурируем
-$ ./config shared no-ssl2 no-ssl3 no-comp no-hw no-engine --openssldir=/usr/local/ssl/$ANDROID_API
-# собираем
-$ make depend
-$ make all
-# устанавливаем
-$ sudo -E make install CC=$ANDROID_TOOLCHAIN/arm-linux-androideabi-gcc RANLIB=$ANDROID_TOOLCHAIN/arm-linux-androideabi-ranlib |
|
И тут начинается интересное. Андроид не принимает versioned shared object (это *.so.x и подобные). Казалось бы 2016 год, космические корабли уже давно бороздят просторы Большого театра, но вот те на.
-Однако, есть обходной приём - нужно заменить *.so.x.x.x на *_x_x_x.so. Простым переименованием файлов данную проблему здесь, разумеется, не решить. Нужно лезть внутрь и переименовывать soname и внутренние ссылки на другие versioned shared object. В интернете есть много способов по подобному переименованию. Большинство из них обещают райскую жизнь с rpl, забывая упомянуть, что утилита уже давно отпета и закопана на большинстве дистрибутивов. Или хитро-хитро редактируют makefile, что в итоге на место левой руки собирается правая нога. В целом множество путей из разряда "как потратить много времени на полную фигню".
-В итоге предлагаю решить данную проблему методом топора:
-Качаем hex-редактор, если ещё нет(в моём случае таковым оказался Okteta). Запускаем его из под рута(kdesu okteta), открываем в нём файлы openssldir/lib/libcrypto.so.1.0.0. Заменяем(ctrl+r) в нём символы ".so.1.0.0" на char "_1_0_0.so". Проделываем тоже самое с libssl.so.1.0.0. Всё, теперь осталось только переименовать сами файлы(в libcrypto_1_0_0.so и libssl_1_0_0.so) и поправить ссылки libssl.so и libcrypto.so, чтобы они вели на них.
-Чтобы подключить и использовать данную библиотеку в проекте нужно добавить в .pro:
BashВыделить код |
1
-2
-3
-4
-5
- | android: {
- INCLUDEPATH += /usr/local/ssl/android-21/include
- LIBS += -L/usr/local/ssl/android-21/lib
-}
-LIBS += -lcrypto |
|
А затем в настройках проекта, в Buld/Build Steps/Bulild Android Apk добавить libcrypto_1_0_0.so и libssl_1_0_0.so в список Additional Libraries.
-На этом всё.
-
-
-
Original: http://www.cyberforum.ru/blogs/748276/blog4086.html
-
-
diff --git a/qt/i2pd_qt/i2pd_qt.pro b/qt/i2pd_qt/i2pd_qt.pro
index 879efc95..e24a3963 100644
--- a/qt/i2pd_qt/i2pd_qt.pro
+++ b/qt/i2pd_qt/i2pd_qt.pro
@@ -7,23 +7,6 @@ TEMPLATE = app
QMAKE_CXXFLAGS *= -std=c++11 -ggdb
DEFINES += USE_UPNP
-# change to your own path, where you will store all needed libraries with 'git clone' commands below.
-MAIN_PATH = /path/to/libraries
-
-# git clone https://github.com/PurpleI2P/Boost-for-Android-Prebuilt.git
-# git clone https://github.com/PurpleI2P/OpenSSL-for-Android-Prebuilt.git
-# git clone https://github.com/PurpleI2P/MiniUPnP-for-Android-Prebuilt.git
-# git clone https://github.com/PurpleI2P/android-ifaddrs.git
-BOOST_PATH = $$MAIN_PATH/Boost-for-Android-Prebuilt
-OPENSSL_PATH = $$MAIN_PATH/OpenSSL-for-Android-Prebuilt
-MINIUPNP_PATH = $$MAIN_PATH/MiniUPnP-for-Android-Prebuilt
-IFADDRS_PATH = $$MAIN_PATH/android-ifaddrs
-
-# Steps in Android SDK manager:
-# 1) Check Extras/Google Support Library https://developer.android.com/topic/libraries/support-library/setup.html
-# 2) Check API 11
-# Finally, click Install.
-
SOURCES += DaemonQT.cpp mainwindow.cpp \
../../libi2pd/api.cpp \
../../libi2pd/Base.cpp \
@@ -218,63 +201,6 @@ macx {
LIBS += $$UPNPROOT/lib/libminiupnpc.a
}
-android {
- message("Using Android settings")
- DEFINES += ANDROID=1
- DEFINES += __ANDROID__
-
- CONFIG += mobility
-
- MOBILITY =
-
- INCLUDEPATH += $$BOOST_PATH/boost_1_53_0/include \
- $$OPENSSL_PATH/openssl-1.0.2/include \
- $$MINIUPNP_PATH/miniupnp-2.0/include \
- $$IFADDRS_PATH
- DISTFILES += android/AndroidManifest.xml
-
- ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
-
- SOURCES += $$IFADDRS_PATH/ifaddrs.c
- HEADERS += $$IFADDRS_PATH/ifaddrs.h
-
- equals(ANDROID_TARGET_ARCH, armeabi-v7a){
- DEFINES += ANDROID_ARM7A
- # http://stackoverflow.com/a/30235934/529442
- LIBS += -L$$BOOST_PATH/boost_1_53_0/armeabi-v7a/lib \
- -lboost_system-gcc-mt-1_53 -lboost_date_time-gcc-mt-1_53 \
- -lboost_filesystem-gcc-mt-1_53 -lboost_program_options-gcc-mt-1_53 \
- -L$$OPENSSL_PATH/openssl-1.0.2/armeabi-v7a/lib/ -lcrypto -lssl \
- -L$$MINIUPNP_PATH/miniupnp-2.0/armeabi-v7a/lib/ -lminiupnpc
-
- PRE_TARGETDEPS += $$OPENSSL_PATH/openssl-1.0.2/armeabi-v7a/lib/libcrypto.a \
- $$OPENSSL_PATH/openssl-1.0.2/armeabi-v7a/lib/libssl.a
- DEPENDPATH += $$OPENSSL_PATH/openssl-1.0.2/include
-
- ANDROID_EXTRA_LIBS += $$OPENSSL_PATH/openssl-1.0.2/armeabi-v7a/lib/libcrypto_1_0_0.so \
- $$OPENSSL_PATH/openssl-1.0.2/armeabi-v7a/lib/libssl_1_0_0.so \
- $$MINIUPNP_PATH/miniupnp-2.0/armeabi-v7a/lib/libminiupnpc.so
- }
-
- equals(ANDROID_TARGET_ARCH, x86){
- # http://stackoverflow.com/a/30235934/529442
- LIBS += -L$$BOOST_PATH/boost_1_53_0/x86/lib \
- -lboost_system-gcc-mt-1_53 -lboost_date_time-gcc-mt-1_53 \
- -lboost_filesystem-gcc-mt-1_53 -lboost_program_options-gcc-mt-1_53 \
- -L$$OPENSSL_PATH/openssl-1.0.2/x86/lib/ -lcrypto -lssl \
- -L$$MINIUPNP_PATH/miniupnp-2.0/x86/lib/ -lminiupnpc
-
- PRE_TARGETDEPS += $$OPENSSL_PATH/openssl-1.0.2/x86/lib/libcrypto.a \
- $$OPENSSL_PATH/openssl-1.0.2/x86/lib/libssl.a
-
- DEPENDPATH += $$OPENSSL_PATH/openssl-1.0.2/include
-
- ANDROID_EXTRA_LIBS += $$OPENSSL_PATH/openssl-1.0.2/x86/lib/libcrypto_1_0_0.so \
- $$OPENSSL_PATH/openssl-1.0.2/x86/lib/libssl_1_0_0.so \
- $$MINIUPNP_PATH/miniupnp-2.0/x86/lib/libminiupnpc.so
- }
-}
-
linux:!android {
message("Using Linux settings")
LIBS += -lcrypto -lssl -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthread -lminiupnpc