From 3395ad85b0adea4616ede6408fa50a79d09bb2ba Mon Sep 17 00:00:00 2001 From: R4SAS Date: Tue, 9 Oct 2018 03:41:33 +0300 Subject: [PATCH] update android build project --- android/AndroidManifest.xml | 9 +- android/gostcoin-qt-android.pro | 286 +++++++++-------------------- android/res/drawable-hdpi/icon.png | Bin 0 -> 18812 bytes android/res/drawable-ldpi/icon.png | Bin 0 -> 2427 bytes android/res/drawable-mdpi/icon.png | Bin 0 -> 6958 bytes docs/gost_android_take3.txt | 27 +-- 6 files changed, 106 insertions(+), 216 deletions(-) create mode 100644 android/res/drawable-hdpi/icon.png create mode 100644 android/res/drawable-ldpi/icon.png create mode 100644 android/res/drawable-mdpi/icon.png diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index b75f833..071de4d 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -1,9 +1,9 @@ - + - + - + @@ -61,7 +61,7 @@ https://bugreports.qt.io/browse/QTBUG-50759 если ставишь таргет апи 25 то сегфолт на create_directory(/sdcard/gostcoin) --> - + - diff --git a/android/gostcoin-qt-android.pro b/android/gostcoin-qt-android.pro index 36e35e4..9874294 100644 --- a/android/gostcoin-qt-android.pro +++ b/android/gostcoin-qt-android.pro @@ -2,22 +2,11 @@ TEMPLATE = app TARGET = gostcoin-qt VERSION = 0.8.5.12 INCLUDEPATH += ../src ../src/json ../src/qt ../src/i2psam -QT += core gui network androidextras -greaterThan(QT_MAJOR_VERSION, 4): QT += widgets -DEFINES += QT_GUI BOOST_THREAD_USE_LIB BOOST_SPIRIT_THREADSAFE BOOST_NO_CXX11_SCOPED_ENUMS +QT += core gui network widgets androidextras +DEFINES += QT_GUI BOOST_THREAD_USE_LIB BOOST_SPIRIT_THREADSAFE BOOST_NO_CXX11_SCOPED_ENUMS _FILE_OFFSET_BITS=64 ANDROID=1 __ANDROID__ CONFIG += no_include_pwd CONFIG += thread -QMAKE_CXXFLAGS=-fstack-protector-strong -DANDROID -fno-builtin-memmove --sysroot=/home/user/SDKS/ANDROID/NDK/android-ndk-r13b/platforms/android-9/arch-arm/ -std=c++11 - -# for boost 1.37, add -mt to the boost libraries -# use: qmake BOOST_LIB_SUFFIX=-mt -# for boost thread win32 with _win32 sufix -# use: BOOST_THREAD_LIB_SUFFIX=_win32-... -# or when linking against a specific BerkelyDB version: BDB_LIB_SUFFIX=-4.8 - -# Dependency library locations can be customized with: -# BOOST_INCLUDE_PATH, BOOST_LIB_PATH, BDB_INCLUDE_PATH, -# BDB_LIB_PATH, OPENSSL_INCLUDE_PATH and OPENSSL_LIB_PATH respectively +QMAKE_CXXFLAGS = -std=c++11 -fstack-protector-strong -fno-builtin-memmove OBJECTS_DIR = build MOC_DIR = build @@ -27,116 +16,64 @@ USE_IPV6=0 USE_LEVELDB=1 USE_ASM=1 -android { - message("Using Android settings") - - # change to your own path, where you will store all needed libraries with 'git clone' commands below. - MAIN_PATH = /path/to/libraries - # change to your own Android NDK path - NDK_PATH = /home/user/SDKS/ANDROID/NDK/android-ndk-r13b - - # git clone https://github.com/PurpleI2P/MiniUPnP-for-Android-Prebuilt.git - # git clone git@github.com:hypnosis-i2p/android-ifaddrs-from-android-source.git - #boost 53, 62 are not ok - BOOST_PATH = $$MAIN_PATH/take3/boost_1_57_0 -#/stage/lib - OPENSSL_PATH = $$MAIN_PATH/take3/openssl-1.0.2l - #MINIUPNP_PATH = $$MAIN_PATH/MiniUPnP-for-Android-Prebuilt - IFADDRS_PATH = $$MAIN_PATH/android-ifaddrs-from-android-source - BDB_PATH = $$MAIN_PATH/take3/db-6.0.20/build_unix - - DEFINES += ANDROID=1 - DEFINES += __ANDROID__ - - CONFIG += mobility - - MOBILITY = - - INCLUDEPATH += \ - $$NDK_PATH/sources/cxx-stl/gnu-libstdc++/4.9/include \ - $$NDK_PATH/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include \ - $$BOOST_PATH \ - $$OPENSSL_PATH/include \ - $$IFADDRS_PATH \ - $$BDB_PATH \ - build -# $$NDK_PATH/platforms/android-9/arch-arm/usr/include/ \ -# $$NDK_PATH/sources/cxx-stl/stlport/stlport/ -I $NDK_PATH/sources/cxx-stl/system/include/ - -#\ -# $$MINIUPNP_PATH/miniupnp-2.0/include \ - DISTFILES += AndroidManifest.xml - - ANDROID_PACKAGE_SOURCE_DIR = $$PWD/ - - SOURCES += $$IFADDRS_PATH/ifaddrs.cpp $$IFADDRS_PATH/bionic_netlink.cpp - HEADERS += $$IFADDRS_PATH/ifaddrs.h $$IFADDRS_PATH/ErrnoRestorer.h $$IFADDRS_PATH/bionic_netlink.h $$IFADDRS_PATH/bionic_macros.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_atomic-gcc-mt-1_53 \ -# -lboost_filesystem-gcc-mt-1_53 -lboost_chrono-gcc-mt-1_53 -lboost_thread-gcc-mt-1_53 -lboost_program_options-gcc-mt-1_53 \ -# -L$$OPENSSL_PATH/armeabi-v7a/lib/ -lcrypto -lssl -#\ -# -L$$MINIUPNP_PATH/miniupnp-2.0/armeabi-v7a/lib/ -lminiupnpc - BOOST_POSTFIX=-gcc-mt-1_57 - LIBS += -L$$BOOST_PATH/stage/lib \ - -lboost_atomic$$BOOST_POSTFIX \ - -lboost_chrono$$BOOST_POSTFIX \ - -lboost_filesystem$$BOOST_POSTFIX \ - -lboost_program_options$$BOOST_POSTFIX \ - -lboost_system$$BOOST_POSTFIX \ - -lboost_thread$$BOOST_POSTFIX \ - -L$$OPENSSL_PATH -lcrypto -lssl -#\ -# -L$$MINIUPNP_PATH/miniupnp-2.0/armeabi-v7a/lib/ -lminiupnpc - - PRE_TARGETDEPS += $$OPENSSL_PATH/libcrypto.a \ - $$OPENSSL_PATH/libssl.a - DEPENDPATH += $$OPENSSL_PATH/include - -# ANDROID_EXTRA_LIBS += $$OPENSSL_PATH/armeabi-v7a/lib/libcrypto_1_0_0.so \ -# $$OPENSSL_PATH/armeabi-v7a/lib/libssl_1_0_0.so -#\ -# $$MINIUPNP_PATH/miniupnp-2.0/armeabi-v7a/lib/libminiupnpc.so - } - - equals(ANDROID_TARGET_ARCH, x86){ - error("Android BDB: don't know how to build BDB for Android x86") - - # http://stackoverflow.com/a/30235934/529442 - LIBS += -L$$BOOST_PATH/boost_1_62_0/x86/lib \ - -lboost_system-gcc-mt-1_62 -lboost_date_time-gcc-mt-1_62 \ - -lboost_filesystem-gcc-mt-1_62 -lboost_program_options-gcc-mt-1_62 \ - -L$$OPENSSL_PATH/openssl-1.1.0/x86/lib/ -lcrypto -lssl -#\ -# -L$$MINIUPNP_PATH/miniupnp-2.0/x86/lib/ -lminiupnpc - - PRE_TARGETDEPS += $$OPENSSL_PATH/openssl-1.1.0/x86/lib/libcrypto.a \ - $$OPENSSL_PATH/openssl-1.1.0/x86/lib/libssl.a - - DEPENDPATH += $$OPENSSL_PATH/openssl-1.1.0/include - - ANDROID_EXTRA_LIBS += $$OPENSSL_PATH/openssl-1.1.0/x86/lib/libcrypto_1_0_0.so \ - $$OPENSSL_PATH/openssl-1.1.0/x86/lib/libssl_1_0_0.so -#\ -# $$MINIUPNP_PATH/miniupnp-2.0/x86/lib/libminiupnpc.so - } +# 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/GOSTSec/android-ifaddrs-from-android-source.git +MAIN_PATH = /path/to/libraries +ANDROID_NDK_PLATFORM = /path/to/android-ndk +ANDROID_PLATFORM = android-14 + +QMAKE_CXXFLAGS += -DANDROID --sysroot=$$ANDROID_NDK_ROOT/platforms/$$ANDROID_PLATFORM/arch-arm/ -std=c++11 + +BOOST_PATH = $$MAIN_PATH/Boost-for-Android-Prebuilt/boost_1_64_0 +OPENSSL_PATH = $$MAIN_PATH/OpenSSL-for-Android-Prebuilt/openssl-1.1.1 +IFADDRS_PATH = $$MAIN_PATH/android-ifaddrs-from-android-source +BDB_PATH = $$MAIN_PATH/db-6.0.20/build_unix + +BOOST_LIB_PATH = $$BOOST_PATH/$$ANDROID_TARGET_ARCH/lib +OPENSSL_LIB_PATH = $$OPENSSL_PATH/$$ANDROID_TARGET_ARCH/lib + +CONFIG += mobility + +MOBILITY = + +INCLUDEPATH += \ + $$ANDROID_NDK_ROOT/sources/cxx-stl/gnu-libstdc++/4.9/include \ + $$ANDROID_NDK_ROOT/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include \ + $$BOOST_PATH/include \ + $$OPENSSL_PATH/include \ + $$IFADDRS_PATH \ + $$BDB_PATH \ + build + +DISTFILES += AndroidManifest.xml + +ANDROID_PACKAGE_SOURCE_DIR = $$PWD/ + +SOURCES += $$IFADDRS_PATH/ifaddrs.cpp $$IFADDRS_PATH/bionic_netlink.cpp +HEADERS += $$IFADDRS_PATH/ifaddrs.h $$IFADDRS_PATH/ErrnoRestorer.h $$IFADDRS_PATH/bionic_netlink.h $$IFADDRS_PATH/bionic_macros.h + +#LIBS += -Wl,-Bstatic + +equals(ANDROID_TARGET_ARCH, armeabi-v7a){ + DEFINES += ANDROID_ARM7A + LIBS += $${BOOST_LIB_PATH}/libboost_atomic.a \ + $${BOOST_LIB_PATH}/libboost_chrono.a \ + $${BOOST_LIB_PATH}/libboost_filesystem.a \ + $${BOOST_LIB_PATH}/libboost_program_options.a \ + $${BOOST_LIB_PATH}/libboost_system.a \ + $${BOOST_LIB_PATH}/libboost_thread.a \ + $${OPENSSL_LIB_PATH}/libssl.a \ + $${OPENSSL_LIB_PATH}/libcrypto.a } -!win32 { - # for extra security against potential buffer overflows: enable GCCs Stack Smashing Protection -# QMAKE_CXXFLAGS *= -fstack-protector-all -# QMAKE_CFLAGS *= -fstack-protector-all -# QMAKE_LFLAGS *= -fstack-protector-all - # Exclude on Windows cross compile with MinGW 4.2.x, as it will result in a non-working executable! - # This can be enabled for Windows, when we switch to MinGW >= 4.4.x. +equals(ANDROID_TARGET_ARCH, x86){ + error("Android BDB: don't know how to build BDB for Android x86") } -# for extra security (see: https://wiki.debian.org/Hardening): this flag is GCC compiler-specific -#-D_FORTIFY_SOURCE=2 -QMAKE_CXXFLAGS *= -std=c++11 + +# linking with libdb-c++ +LIBS += $$BDB_PATH/libdb_cxx.a # use: qmake "USE_QRCODE=1" # libqrencode (http://fukuchi.org/works/qrencode/index.en.html) must be installed for support @@ -146,13 +83,6 @@ contains(USE_QRCODE, 1) { LIBS += -lqrencode } -# use: qmake "USE_DBUS=1" -contains(USE_DBUS, 1) { - message(Building with DBUS (Freedesktop notifications) support) - DEFINES += USE_DBUS - QT += dbus -} - # use: qmake "USE_IPV6=1" ( enabled by default; default) # or: qmake "USE_IPV6=0" (disabled by default) # or: qmake "USE_IPV6=-" (not supported) @@ -172,22 +102,23 @@ contains(BITCOIN_NEED_QT_PLUGINS, 1) { INCLUDEPATH += ../src/leveldb/include ../src/leveldb/helpers LIBS += $$PWD/../src/leveldb/libleveldb.a $$PWD/../src/leveldb/libmemenv.a -!win32 { - # we use QMAKE_CXXFLAGS_RELEASE even without RELEASE=1 because we use RELEASE to indicate linking preferences not -O preferences - !android { - genleveldb.commands = echo "QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS" && cd $$PWD/../src/leveldb && TARGET_OS=OS_ANDROID_CROSSCOMPILE CC=$$QMAKE_CC CXX=$$QMAKE_CXX AR=$$NDK_PATH/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar $(MAKE) OPT=\"-I $$NDK_PATH/platforms/android-9/arch-arm/usr/include/ -I $$NDK_PATH/sources/cxx-stl/gnu-libstdc++/4.9/include -I $$NDK_PATH/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/ $$QMAKE_CXXFLAGS \" libleveldb.a libmemenv.a - } -} -genleveldb.target = $$PWD/../src/leveldb/libleveldb.a -genleveldb.depends = FORCE -PRE_TARGETDEPS += $$PWD/../src/leveldb/libleveldb.a -QMAKE_EXTRA_TARGETS += genleveldb + +# TODO: rewrite! +#!android { +# genleveldb.commands = echo "QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS" && cd $$PWD/../src/leveldb && TARGET_OS=OS_ANDROID_CROSSCOMPILE CC=$$QMAKE_CC CXX=$$QMAKE_CXX AR=$$ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar $(MAKE) OPT=\"-I $$ANDROID_NDK_ROOT/platforms/$$ANDROID_PLATFORM/arch-arm/usr/include/ -I $$ANDROID_NDK_ROOT/sources/cxx-stl/gnu-libstdc++/4.9/include -I $$ANDROID_NDK_ROOT/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/ $$QMAKE_CXXFLAGS \" libleveldb.a libmemenv.a +#} +#genleveldb.target = $$PWD/../src/leveldb/libleveldb.a +#genleveldb.depends = FORCE + +#PRE_TARGETDEPS += $$PWD/../src/leveldb/libleveldb.a +#QMAKE_EXTRA_TARGETS += genleveldb # Gross ugly hack that depends on qmake internals, unfortunately there is no other way to do it. -QMAKE_CLEAN += $$PWD/../src/leveldb/libleveldb.a; cd $$PWD/../src/leveldb ; $(MAKE) clean +#QMAKE_CLEAN += $$PWD/../src/leveldb/libleveldb.a; cd $$PWD/../src/leveldb ; $(MAKE) clean # regenerate ../src/build.h -#!win32|contains(USE_BUILD_INFO, 1) { +#contains(USE_BUILD_INFO, 1) { # genbuild.depends = FORCE +# # TODO: make it compatible with android # genbuild.commands = cd $$PWD; /bin/sh ../share/genbuild.sh $$OUT_PWD/build/build.h # genbuild.target = $$OUT_PWD/build/build.h # PRE_TARGETDEPS += $$OUT_PWD/build/build.h @@ -195,7 +126,8 @@ QMAKE_CLEAN += $$PWD/../src/leveldb/libleveldb.a; cd $$PWD/../src/leveldb ; $(MA # DEFINES += HAVE_BUILD_INFO #} -QMAKE_CXXFLAGS_WARN_ON = -fdiagnostics-show-option -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wstack-protector +#QMAKE_CXXFLAGS_WARN_ON = -fdiagnostics-show-option -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wstack-protector +QMAKE_CXXFLAGS_WARN_ON = -Wno-unused-parameter # Input DEPENDPATH += ../src ../src/json ../src/qt @@ -381,25 +313,20 @@ FORMS += ../src/qt/forms/sendcoinsdialog.ui \ ../src/qt/forms/showi2paddresses.ui contains(USE_QRCODE, 1) { -HEADERS += ../src/qt/qrcodedialog.h -SOURCES += ../src/qt/qrcodedialog.cpp -FORMS += ../src/qt/forms/qrcodedialog.ui + HEADERS += ../src/qt/qrcodedialog.h + SOURCES += ../src/qt/qrcodedialog.cpp + FORMS += ../src/qt/forms/qrcodedialog.ui } contains(BITCOIN_QT_TEST, 1) { -SOURCES += ../src/qt/test/test_main.cpp \ - ../src/qt/test/uritests.cpp -HEADERS += ../src/qt/test/uritests.h -DEPENDPATH += ../src/qt/test -QT += testlib -TARGET = anoncoin-qt_test -DEFINES += BITCOIN_QT_TEST - macx: CONFIG -= app_bundle -} - -greaterThan(QT_MAJOR_VERSION, 4): { -} else { - CODECFORTR = UTF-8 + SOURCES += ../src/qt/test/test_main.cpp \ + ../src/qt/test/uritests.cpp + HEADERS += ../src/qt/test/uritests.h + DEPENDPATH += ../src/qt/test + QT += testlib + TARGET = anoncoin-qt_test + DEFINES += BITCOIN_QT_TEST + macx: CONFIG -= app_bundle } # for lrelease/lupdate @@ -429,51 +356,12 @@ OTHER_FILES += README.md \ ../src/qt/test/*.cpp \ ../src/qt/test/*.h -# platform specific defaults, if not overridden on command line - -isEmpty(BOOST_THREAD_LIB_SUFFIX) { - BOOST_THREAD_LIB_SUFFIX = $$BOOST_LIB_SUFFIX -} - -isEmpty(BDB_LIB_SUFFIX) { - android:BDB_LIB_SUFFIX = -6.0 -} - -!win32:!macx { - android { - #LIBS += $$BDB_PATH/libdb.a $$BDB_PATH/libdb_cxx.a - LIBS += -L$$BDB_PATH - } - # _FILE_OFFSET_BITS=64 lets 32-bit fopen transparently support large files. - DEFINES += _FILE_OFFSET_BITS=64 -} - -# Set libraries and includes at end, to use platform-defined defaults if not overridden -INCLUDEPATH += $$BOOST_INCLUDE_PATH $$BDB_INCLUDE_PATH $$OPENSSL_INCLUDE_PATH $$QRENCODE_INCLUDE_PATH -LIBS += $$join(BOOST_LIB_PATH,,-L,) $$join(BDB_LIB_PATH,,-L,) $$join(OPENSSL_LIB_PATH,,-L,) $$join(QRENCODE_LIB_PATH,,-L,) -LIBS += -lssl -lcrypto -LIBS += -lz -!win32:LIBS += -ldl - -android { - CXXFLAGS += -O0 -g -# LIBS += $$NDK_PATH/sources/cxx-stl/stlport/libs/armeabi-v7a/libstlport_static.a - LIBS +=$$BDB_PATH/libdb_cxx.a $$BDB_PATH/libdb.a -} - system($$QMAKE_LRELEASE -silent $$TRANSLATIONS) -android { - DISTFILES += \ - AndroidManifest.xml \ - res/values/libs.xml -} - DISTFILES += \ ../../../S2_ATHOME/git_gostcoin/gostcoin/android/AndroidManifest.xml \ ../../../S2_ATHOME/git_gostcoin/gostcoin/android/res/values/libs.xml \ ../../../S2_ATHOME/git_gostcoin/gostcoin/android/build.gradle \ - ../docs/gost_android_take3.txt - - - + ../docs/gost_android_take3.txt \ + AndroidManifest.xml \ + res/values/libs.xml diff --git a/android/res/drawable-hdpi/icon.png b/android/res/drawable-hdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d29baf6a157376fea914956994b6a6cecf3a1fe0 GIT binary patch literal 18812 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