From 72889fcddedd0b2ecf38b3e65a8d10db77814dcc Mon Sep 17 00:00:00 2001 From: m2049r <30435443+m2049r@users.noreply.github.com> Date: Mon, 14 Aug 2017 10:05:28 +0200 Subject: [PATCH] Create BUILDING-external-libs.md Update README.md --- README.md | 34 +++++------ doc/BUILDING-external-libs.md | 109 ++++++++++++++++++++++++++++++++++ 2 files changed, 126 insertions(+), 17 deletions(-) create mode 100644 doc/BUILDING-external-libs.md diff --git a/README.md b/README.md index bd0557e..c089a20 100644 --- a/README.md +++ b/README.md @@ -10,40 +10,40 @@ Another Android Monero Wallet ### Disclaimer This is my first serious Android App. -### Notes -- Monerujo means "Monero Wallet" according to https://www.reddit.com/r/Monero/comments/3exy7t/esperanto_corner/ -- Special thanks to /u/gkruja for inspiration to pick this project up again -- Based off monero v0.10.3.1 with pull requests #2238 & #2239 applied => so can be used in mainnet! +### Random Notes +- Based off monero v0.10.3.1 with pull requests #2238, #2239 and #2289 applied => so can be used in mainnet! - currently only android32 -- sorry for my messups in github -- currently only use is checking incoming/outgoing transactions +- currently only use is checking incoming/outgoing transactions - works in testnet & mainnet (please use your own daemons) -- takes forever to sync on mainnet (even with own daemon) +- takes forever to sync on mainnet (even with own daemon) - due to 32-bit architecture - use your own daemon - it's easy - screen stays on until first sync is complete +- saves wallet only on first sync +- Monerujo means "Monero Wallet" according to https://www.reddit.com/r/Monero/comments/3exy7t/esperanto_corner/ ### TODO - make it pretty -- adjust layout so we can use bigger font sizes -- provide detailed build instructions for third party binaries -- visibility of methods/classes +- adjust layout so we can use bigger font sizes (maybe show only 5 decimal places instead of 12 in main view) +- review visibility of methods/classes - sensible error dialogs (e.g. when no write permissions granted) instead of just crashing on purpose -- ~~sensible loading/saving progress bars instead of just freezing up~~ - spend monero - not so difficult with wallet api +- check licenses of included libraries; License Dialog +- ~~provide detailed build instructions for third party binaries~~ +- ~~sensible loading/saving progress bars instead of just freezing up~~ - ~~figure out how to make it all flow better (loading/saving takes forever and does not run in background)~~ - ~~currently loading in background thread produces segfaults in JNI~~ -- check licenses of included libraries -- License Dialog ### Issues -- screen rotation crashes the app -- turning the display off/on during sync stops sync +- ~~screen rotation crashes the app~~ +- ~~turning the display off/on during sync stops sync~~ ### HOW TO BUILD No need to build. Binaries are included: - openssl-1.0.2l -- monero-v0.10.3.1 + pull requests #2238 & #2239 +- monero-v0.10.3.1 + pull requests #2238, #2239 and #2289 - boost_1_64_0 -If you want to build - fire up Android Studio and build. Also you can rebuild all of the above. +If you want to build them yourself (recommended) check out [the instructions](doc/BUILDING-external-libs.md) + +Then, fire up Android Studio and build the APK. diff --git a/doc/BUILDING-external-libs.md b/doc/BUILDING-external-libs.md new file mode 100644 index 0000000..87058dc --- /dev/null +++ b/doc/BUILDING-external-libs.md @@ -0,0 +1,109 @@ +# BUILDING external libs + +Based on https://forum.getmonero.org/5/support/87643/building-monero-v0-10-3-1-for-android and the internet. + +Do not follow this blindly. These instructions are for 32-bit only. 64-bit building mostly involves +replacing "32" with "64". + +## Prepare Ubuntu environment + +``` +sudo apt-install build-essential cmake tofrodos +sudo mkdir /opt/android +sudo chown $LOGNAME /opt/android +``` + +## Install Android NDK +``` +cd /opt/android +wget https://dl.google.com/android/repository/android-ndk-r15c-linux-x86_64.zip +unzip android-ndk-r15c-linux-x86_64.zip +android-ndk-r15c/build/tools/make_standalone_toolchain.py --api 21 --stl=libc++ --arch arm --install-dir /opt/android/tool32 +``` + +## Build OpenSSL +Best is to compile openssl from sources. Copying from your phone or elsewhere (don't!) ends up in misery. + +### Setup environment +``` +cd /opt/android +wget https://wiki.openssl.org/images/7/70/Setenv-android.sh +fromdos Setenv-android.sh +``` + +Edit Setenv-android.sh: +``` +_ANDROID_EABI="arm-linux-androideabi-4.9" +_ANDROID_API="android-21" +``` +Then: +``` +export ANDROID_NDK_ROOT=/opt/android/android-ndk-r15c +. ./Setenv-android.sh +``` +and ignore error about FIPS_SIG. + +### Download and build OpenSSL +``` +wget https://github.com/openssl/openssl/archive/OpenSSL_1_0_2l.tar.gz +tar xfz OpenSSL_1_0_2l.tar.gz +cd openssl-OpenSSL_1_0_2l/ +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=/opt/android/openssl/android-21/ +make depend +# Make sure we don't get versioned .so which Android can't deal with +make CALC_VERSIONS="SHLIB_COMPAT=; SHLIB_SOVER=" MAKE="make -e" all +mkdir -p /opt/android/openssl/android-21/lib +echo "place-holder make target for avoiding symlinks" >> /opt/android/openssl/android-21/lib/link-shared +make SHLIB_EXT=.so install_sw +``` + +### Make symlinks +``` +cd /opt/android/tool32/sysroot/usr/include +ln -s ../../../../openssl/android-21/include/openssl +cd /opt/android/tool32/sysroot/usr/lib +ln -s ../../../../openssl/android-21/lib/libssl.so +ln -s ../../../../openssl/android-21/lib/libcrypto.so +``` + +## Build Boost +``` +cd /opt/android +https://sourceforge.net/projects/boost/files/boost/1.64.0/boost_1_64_0.tar.gz/download -O boost_1_64_0.tar.gz +tar xfz boost_1_64_0.tar.gz +(cd boost_1_64_0; ./bootstrap.sh) +``` +The NDK r15c above gives errors about fsetpos and fgetpos not found(!?!), so we "just" comment them out in the include file: +`nano /opt/android/tool32/include/c++/4.9.x/cstdio` (`//using ::fgetpos`, `//using ::fsetpos`) + +Then: +``` +export PATH=/opt/android/tool32/arm-linux-androideabi/bin:/opt/android/tool32/bin:$PATH +./b2 --build-type=minimal link=static runtime-link=static --with-chrono --with-date_time --with-filesystem --with-program_options --with-regex --with-serialization --with-system --with-thread --build-dir=android32 --stagedir=android32 toolset=clang threading=multi threadapi=pthread target-os=android stage +``` + +## And finally: Build Monero +``` +cd /opt/android +git clone https://github.com/monero-project/monero +cd monero + +# + +mkdir -p build/release.android32 +cd build/release.android32 + +# only if not set already set +export PATH=/opt/android/tool32/arm-linux-androideabi/bin:/opt/android/tool32/bin:$PATH + +CC=clang CXX=clang++ cmake -D BUILD_TESTS=OFF -D ARCH="armv7-a" -D STATIC=ON -D BUILD_64=OFF -D CMAKE_BUILD_TYPE=release -D ANDROID=true -D BUILD_TAG="android" -D BOOST_ROOT=/opt/android/boost_1_64_0 -D BOOST_LIBRARYDIR=/opt/android/boost_1_64_0/android32/lib -D OPENSSL_ROOT_DIR=/opt/android/openssl/android-21 -D CMAKE_POSITION_INDEPENDENT_CODE:BOOL=true ../.. +make + +find . -name '*.a' -exec cp '{}' lib \; +``` +Ignore the warning from the last command - all static libraries are now in `lib`. + +# Bringing it all together +- Copy all .a libraries into the appropriate `external-libs` folders. +- Copy `/opt/android/monero/src/wallet/wallet2_api.h` into `external-libs/monero/include`