diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index da927ac..88b735c 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -9,10 +9,10 @@ jobs: - uses: actions/checkout@v2 with: submodules: 'recursive' - - name: Install rename tool + - name: Install GNU C++ compiler run: | sudo apt-get update - sudo apt-get install -y g++ rename + sudo apt-get install -y g++ - name: Setup JDK 1.11 uses: actions/setup-java@v1 with: @@ -31,7 +31,6 @@ jobs: export ANDROID_SDK_ROOT=$ANDROID_HOME export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/21.4.7075529 pushd app/jni - sed -i -e 's/d+2/d+0/' boost/build-android.sh ./build_boost.sh ./build_openssl.sh ./build_miniupnpc.sh @@ -50,10 +49,10 @@ jobs: - uses: actions/checkout@v2 with: submodules: 'recursive' - - name: Install rename tool + - name: Install GNU C++ compiler run: | sudo apt-get update - sudo apt-get install -y g++ rename + sudo apt-get install -y g++ - name: Setup JDK 1.11 uses: actions/setup-java@v1 with: @@ -70,7 +69,6 @@ jobs: export ANDROID_SDK_ROOT=$ANDROID_HOME export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/21.4.7075529 pushd binary/jni - sed -i -e 's/d+2/d+0/' boost/build-android.sh ./build_boost.sh ./build_openssl.sh ./build_miniupnpc.sh diff --git a/README.md b/README.md index 49d418c..edab604 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,9 @@ This repository contains Android application sources of i2pd ## How to build -### Install OpenJDK 11+, g++, rename (used for building modules), gradle 5.1+ +### Install g++, OpenJDK 11+, gradle 5.1+ ```bash -sudo apt-get install g++ rename openjdk-11-jdk gradle +sudo apt-get install g++ openjdk-11-jdk gradle ``` If your system provides gradle with version < 5.1, download it from gradle homepage: diff --git a/app/jni/Android.mk b/app/jni/Android.mk index d0dbff3..deead68 100644 --- a/app/jni/Android.mk +++ b/app/jni/Android.mk @@ -31,49 +31,49 @@ include $(BUILD_SHARED_LIBRARY) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := boost_system -LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_system.a -LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include +LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/lib/libboost_system.a +LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/include include $(PREBUILT_STATIC_LIBRARY) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := boost_date_time -LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_date_time.a -LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include +LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/lib/libboost_date_time.a +LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/include include $(PREBUILT_STATIC_LIBRARY) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := boost_filesystem -LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_filesystem.a -LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include +LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/lib/libboost_filesystem.a +LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/include include $(PREBUILT_STATIC_LIBRARY) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := boost_program_options -LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_program_options.a -LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include +LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/lib/libboost_program_options.a +LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/include include $(PREBUILT_STATIC_LIBRARY) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := crypto -LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/libcrypto.a -LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/include +LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/lib/libcrypto.a +LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/include include $(PREBUILT_STATIC_LIBRARY) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := ssl -LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/libssl.a -LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/include +LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/lib/libssl.a +LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/include LOCAL_STATIC_LIBRARIES := crypto include $(PREBUILT_STATIC_LIBRARY) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := miniupnpc -LOCAL_SRC_FILES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/libminiupnpc.a -LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc/out/include +LOCAL_SRC_FILES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/lib/libminiupnpc.a +LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/include include $(PREBUILT_STATIC_LIBRARY) diff --git a/app/jni/build_boost.sh b/app/jni/build_boost.sh index bdd43af..2ce51f3 100755 --- a/app/jni/build_boost.sh +++ b/app/jni/build_boost.sh @@ -3,69 +3,22 @@ set -e BOOST_VERSION=1.74.0 -BOOST_VERSION_SUFFIX=1_74 BOOST_LIBS=date_time,filesystem,program_options,system -REMOVE_BOOST_LIBS_SUFFIX_x86_64=-clang-mt-x64-${BOOST_VERSION_SUFFIX} -REMOVE_BOOST_LIBS_SUFFIX_ARM64=-clang-mt-a64-${BOOST_VERSION_SUFFIX} -REMOVE_BOOST_LIBS_SUFFIX_x86=-clang-mt-x32-${BOOST_VERSION_SUFFIX} -REMOVE_BOOST_LIBS_SUFFIX_ARM=-clang-mt-a32-${BOOST_VERSION_SUFFIX} - function build_one { + mkdir out + echo "Configuring and building..." CXXFLAGS="-std=c++14" \ NCPU=$(nproc) \ ./build-android.sh \ - --boost=${BOOST_VERSION} \ - --arch=${CPU} \ - --target-version=${API} \ - --with-libraries=${BOOST_LIBS} \ - ${ANDROID_NDK_HOME} - - case "${CPU}" in - x86_64) - mkdir -p out/{x86_64,include} - cp build/out/x86_64/lib/*.a out/${CPU} - rename 's/'${REMOVE_BOOST_LIBS_SUFFIX_x86_64}'//' out/x86_64/*.a - cp -r build/out/x86_64/include/boost-${BOOST_VERSION_SUFFIX}/boost out/include - - ;; - arm64-v8a) - mkdir -p out/{arm64-v8a,include} - cp build/out/arm64-v8a/lib/*.a out/${CPU} - rename 's/'${REMOVE_BOOST_LIBS_SUFFIX_ARM64}'//' out/arm64-v8a/*.a - cp -r build/out/arm64-v8a/include/boost-${BOOST_VERSION_SUFFIX}/boost out/include - ;; - x86) - mkdir -p out/{x86,include} - cp build/out/x86/lib/*.a out/${CPU} - rename 's/'${REMOVE_BOOST_LIBS_SUFFIX_x86}'//' out/x86/*.a - cp -r build/out/x86/include/boost-${BOOST_VERSION_SUFFIX}/boost out/include - ;; - armeabi-v7a) - mkdir -p out/{armeabi-v7a,include} - cp build/out/armeabi-v7a/lib/*.a out/${CPU} - rename 's/'${REMOVE_BOOST_LIBS_SUFFIX_ARM}'//' out/armeabi-v7a/*.a - cp -r build/out/armeabi-v7a/include/boost-${BOOST_VERSION_SUFFIX}/boost out/include - ;; - *) - mkdir -p out/{x86_64,arm64-v8a,x86,armeabi-v7a,include} - - cp build/out/x86_64/lib/*.a out/x86_64 - rename 's/'${REMOVE_BOOST_LIBS_SUFFIX_x86_64}'//' out/x86_64/*.a - - cp build/out/arm64-v8a/lib/*.a out/arm64-v8a - rename 's/'${REMOVE_BOOST_LIBS_SUFFIX_ARM64}'//' out/arm64-v8a/*.a - - cp build/out/x86/lib/*.a out/x86 - rename 's/'${REMOVE_BOOST_LIBS_SUFFIX_x86}'//' out/x86/*.a - - cp build/out/armeabi-v7a/lib/*.a out/armeabi-v7a - rename 's/'${REMOVE_BOOST_LIBS_SUFFIX_ARM}'//' out/armeabi-v7a/*.a - - cp -r build/out/arm64-v8a/include/boost-${BOOST_VERSION_SUFFIX}/boost out/include - ;; - esac + --boost=$BOOST_VERSION \ + --arch=$CPU \ + --target-version=$API \ + --with-libraries=$BOOST_LIBS \ + --layout=system \ + --prefix=out \ + $ANDROID_NDK_HOME } function checkPreRequisites { @@ -82,14 +35,9 @@ function checkPreRequisites { fi } -checkPreRequisites - -cd boost -rm -rf out - function build { for arg in "$@"; do - case "${arg}" in + case "$arg" in x86_64) API=21 TARGET=x86_64 @@ -112,7 +60,6 @@ function build { ;; all) API=16 - CPU=x86_64,arm64-v8a,x86,armeabi-v7a build_one ;; *) @@ -121,6 +68,14 @@ function build { done } +checkPreRequisites + +cd boost +rm -rf out + +# disable verbose output +sed -i -e 's/d+2/d+0/' build-android.sh + if (( $# == 0 )); then build all else diff --git a/app/jni/build_miniupnpc.sh b/app/jni/build_miniupnpc.sh index c9f9da6..41bc422 100755 --- a/app/jni/build_miniupnpc.sh +++ b/app/jni/build_miniupnpc.sh @@ -5,29 +5,27 @@ set -e CMAKE_VERSION=3.18.1 function build_one { - mkdir -p out/${CPU} - cd out/${CPU} + mkdir -p build out/$CPU + cd build cmake \ -DUPNPC_BUILD_SHARED=False \ -DUPNPC_BUILD_TESTS=False \ -DUPNPC_BUILD_SAMPLE=False \ - -DANDROID_NATIVE_API_LEVEL=${API} \ - -DANDROID_ABI=${CPU} \ + -DANDROID_NATIVE_API_LEVEL=$API \ + -DANDROID_ABI=$CPU \ -DCMAKE_BUILD_TYPE=Release \ - -DANDROID_NDK=${ANDROID_NDK_HOME} \ - -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake \ - ../.. + -DANDROID_NDK=$ANDROID_NDK_HOME \ + -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \ + -DCMAKE_INSTALL_PREFIX=../out/$CPU \ + .. echo "Building..." cmake --build . -- libminiupnpc-static + make install - cd ../.. - - if [[ -n 'out/include' ]]; then - mkdir -p out/include/miniupnpc - cp include/* out/include/miniupnpc - fi + cd .. + rm -rf build } function checkPreRequisites { @@ -49,17 +47,9 @@ function checkPreRequisites { fi } -checkPreRequisites - -cd miniupnp/miniupnpc -rm -rf out - -# add cmake from Android SDK to PATH -PATH=$ANDROID_SDK_ROOT/cmake/${CMAKE_VERSION}/bin:$PATH - function build { for arg in "$@"; do - case "${arg}" in + case "$arg" in x86_64) API=21 CPU=x86_64 @@ -86,6 +76,14 @@ function build { done } +checkPreRequisites + +cd miniupnp/miniupnpc +rm -rf build out + +# add cmake from Android SDK to PATH +PATH=$ANDROID_SDK_ROOT/cmake/$CMAKE_VERSION/bin:$PATH + if (( $# == 0 )); then build x86_64 arm64 arm x86 else diff --git a/app/jni/build_openssl.sh b/app/jni/build_openssl.sh index 4f1c5b0..e5d8bfe 100755 --- a/app/jni/build_openssl.sh +++ b/app/jni/build_openssl.sh @@ -3,32 +3,22 @@ set -e function build_one { - mkdir -p out/${CPU} - mkdir output + mkdir -p out/$CPU - echo "Configuring OpenSSL for ${CPU}..." + echo "Configuring OpenSSL for $CPU..." ./Configure \ - --prefix="$PWD/output" \ - ${TARGET} \ + --prefix="$PWD/out/$CPU" \ + $TARGET \ no-shared \ no-tests \ - -D__ANDROID_API__=${API} \ + -D__ANDROID_API__=$API \ -Wno-macro-redefined - echo "Building OpenSSL for ${CPU}..." - make -j $(nproc) > output/build.log + echo "Building OpenSSL for $CPU..." + make -j $(nproc) > out/build.log - echo "Installing to temporary directory..." - make install_sw >> output/build.log + make install_sw >> out/build.log - cp output/lib/*.a out/${CPU} - - if [[ -n 'out/include' ]]; then - mkdir -p out/include - cp -r output/include/openssl out/include - fi - - rm -rf output make clean } @@ -46,21 +36,9 @@ function checkPreRequisites { fi } -checkPreRequisites - -cd openssl -rm -rf out output - -if [[ -f 'Makefile' ]]; then - make clean -fi - - -PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH - function build { for arg in "$@"; do - case "${arg}" in + case "$arg" in x86_64) API=21 CPU=x86_64 @@ -91,6 +69,17 @@ function build { done } +checkPreRequisites + +cd openssl +rm -rf out + +PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH + +if [[ -f 'Makefile' ]]; then + make clean +fi + if (( $# == 0 )); then build x86_64 arm64 arm x86 else diff --git a/binary/jni/Android.mk b/binary/jni/Android.mk index ebeeb57..a17da8e 100644 --- a/binary/jni/Android.mk +++ b/binary/jni/Android.mk @@ -31,49 +31,49 @@ include $(BUILD_EXECUTABLE) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := boost_system -LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_system.a -LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include +LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/lib/libboost_system.a +LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/include include $(PREBUILT_STATIC_LIBRARY) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := boost_date_time -LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_date_time.a -LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include +LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/lib/libboost_date_time.a +LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/include include $(PREBUILT_STATIC_LIBRARY) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := boost_filesystem -LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_filesystem.a -LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include +LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/lib/libboost_filesystem.a +LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/include include $(PREBUILT_STATIC_LIBRARY) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := boost_program_options -LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_program_options.a -LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include +LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/lib/libboost_program_options.a +LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/include include $(PREBUILT_STATIC_LIBRARY) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := crypto -LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/libcrypto.a -LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/include +LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/lib/libcrypto.a +LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/include include $(PREBUILT_STATIC_LIBRARY) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := ssl -LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/libssl.a -LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/include +LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/lib/libssl.a +LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/include LOCAL_STATIC_LIBRARIES := crypto include $(PREBUILT_STATIC_LIBRARY) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := miniupnpc -LOCAL_SRC_FILES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/libminiupnpc.a -LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc/out/include +LOCAL_SRC_FILES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/lib/libminiupnpc.a +LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/include include $(PREBUILT_STATIC_LIBRARY)