Browse Source

[jni] switch to build from sources (#32)

pull/35/head 2.40.0-srclib
R4SAS 2 years ago committed by GitHub
parent
commit
c85c4fb6c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 17
      .github/workflows/android.yml
  2. 21
      .gitmodules
  3. 4
      app/build.gradle
  4. 28
      app/jni/Android.mk
  5. 4
      app/jni/Application.mk
  6. 2
      app/jni/boost
  7. 128
      app/jni/build_boost.sh
  8. 89
      app/jni/build_miniupnpc.sh
  9. 95
      app/jni/build_openssl.sh
  10. 2
      app/jni/miniupnp
  11. 2
      app/jni/openssl

17
.github/workflows/android.yml

@ -9,6 +9,10 @@ jobs: @@ -9,6 +9,10 @@ jobs:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- name: Install rename tool
run: |
sudo apt-get update
sudo apt-get install rename
- name: Setup JDK 1.8
uses: actions/setup-java@v1
with:
@ -17,10 +21,19 @@ jobs: @@ -17,10 +21,19 @@ jobs:
uses: maxim-lobanov/setup-android-tools@v1
with:
packages: |
build-tools;28.0.3
build-tools;29.0.3
platforms;android-29
ndk;20.0.5594570
ndk;21.4.7075529
cache: true
- name: Build required modules
run: |
export ANDROID_SDK_ROOT=$ANDROID_HOME
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/21.4.7075529
pushd app/jni
./build_boost.sh
./build_openssl.sh
./build_miniupnpc.sh
popd
- name: Build with Gradle
run: ./gradlew --no-daemon assembleDebug
- name: Upload artifacts

21
.gitmodules vendored

@ -1,17 +1,16 @@ @@ -1,17 +1,16 @@
[submodule "android-ifaddrs"]
path = app/jni/android-ifaddrs
url = https://github.com/PurpleI2P/android-ifaddrs.git
[submodule "i2pd"]
path = app/jni/i2pd
url = https://github.com/PurpleI2P/i2pd.git
branch = openssl
[submodule "boost"]
path = app/jni/boost
url = https://github.com/PurpleI2P/Boost-for-Android-Prebuilt.git
branch = boost-1_72_0
[submodule "openssl"]
path = app/jni/openssl
url = https://github.com/PurpleI2P/OpenSSL-for-Android-Prebuilt.git
[submodule "miniupnp"]
path = app/jni/miniupnp
url = https://github.com/PurpleI2P/MiniUPnP-for-Android-Prebuilt.git
[submodule "android-ifaddrs"]
path = app/jni/android-ifaddrs
url = https://github.com/PurpleI2P/android-ifaddrs.git
url = https://github.com/miniupnp/miniupnp.git
[submodule "openssl"]
path = app/jni/openssl
url = https://github.com/openssl/openssl.git
[submodule "boost"]
path = app/jni/boost
url = https://github.com/moritz-wundke/Boost-for-Android.git

4
app/build.gradle

@ -13,7 +13,7 @@ android { @@ -13,7 +13,7 @@ android {
defaultConfig {
applicationId "org.purplei2p.i2pd"
targetSdkVersion 29
minSdkVersion 14
minSdkVersion 16
versionCode 24000
versionName "2.40.0"
setProperty("archivesBaseName", archivesBaseName + "-" + versionName)
@ -28,7 +28,7 @@ android { @@ -28,7 +28,7 @@ android {
externalNativeBuild {
ndkBuild {
arguments "NDK_MODULE_PATH:=${rootProject.projectDir}/app/jni"
arguments "-j3"
arguments "-j${Runtime.getRuntime().availableProcessors()}"
}
}
}

28
app/jni/Android.mk

@ -30,49 +30,49 @@ include $(BUILD_SHARED_LIBRARY) @@ -30,49 +30,49 @@ include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_system
LOCAL_SRC_FILES := $(BOOST_PATH)/boost-1_72_0/$(TARGET_ARCH_ABI)/lib/libboost_system.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost-1_72_0/include
LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_system.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_date_time
LOCAL_SRC_FILES := $(BOOST_PATH)/boost-1_72_0/$(TARGET_ARCH_ABI)/lib/libboost_date_time.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost-1_72_0/include
LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_date_time.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_filesystem
LOCAL_SRC_FILES := $(BOOST_PATH)/boost-1_72_0/$(TARGET_ARCH_ABI)/lib/libboost_filesystem.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost-1_72_0/include
LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_filesystem.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_program_options
LOCAL_SRC_FILES := $(BOOST_PATH)/boost-1_72_0/$(TARGET_ARCH_ABI)/lib/libboost_program_options.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost-1_72_0/include
LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_program_options.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := crypto
LOCAL_SRC_FILES := $(OPENSSL_PATH)/openssl-1.1.1k-clang/$(TARGET_ARCH_ABI)/lib/libcrypto.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/openssl-1.1.1k-clang/include
LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/libcrypto.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ssl
LOCAL_SRC_FILES := $(OPENSSL_PATH)/openssl-1.1.1k-clang/$(TARGET_ARCH_ABI)/lib/libssl.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/openssl-1.1.1k-clang/include
LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/libssl.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/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-2.1/$(TARGET_ARCH_ABI)/lib/libminiupnpc.a
LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc-2.1/include
LOCAL_SRC_FILES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/libminiupnpc.a
LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc/out/include
include $(PREBUILT_STATIC_LIBRARY)

4
app/jni/Application.mk

@ -9,10 +9,10 @@ ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) @@ -9,10 +9,10 @@ ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
APP_CPPFLAGS += -DANDROID_ARM7A
endif
IFADDRS_PATH = $(NDK_MODULE_PATH)/android-ifaddrs
BOOST_PATH = $(NDK_MODULE_PATH)/boost
OPENSSL_PATH = $(NDK_MODULE_PATH)/openssl
MINIUPNP_PATH = $(NDK_MODULE_PATH)/miniupnp
IFADDRS_PATH = $(NDK_MODULE_PATH)/android-ifaddrs
OPENSSL_PATH = $(NDK_MODULE_PATH)/openssl
# don't change me
I2PD_SRC_PATH = $(NDK_MODULE_PATH)/i2pd

2
app/jni/boost

@ -1 +1 @@ @@ -1 +1 @@
Subproject commit 93de5720b8841569f25abe9fe498348582e002c4
Subproject commit ccfc74f1c9ceb35d304294d4f1ed3abff43d2e01

128
app/jni/build_boost.sh

@ -0,0 +1,128 @@ @@ -0,0 +1,128 @@
#!/bin/bash
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 {
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
}
function checkPreRequisites {
if ! [ -d "boost" ] || ! [ "$(ls -A boost)" ]; then
echo -e "\033[31mFailed! Submodule 'boost' not found!\033[0m"
echo -e "\033[31mTry to run: 'git submodule update --init'\033[0m"
exit
fi
if [ -z "$ANDROID_NDK_HOME" -a "$ANDROID_NDK_HOME" == "" ]; then
echo -e "\033[31mFailed! ANDROID_NDK_HOME is empty. Run 'export ANDROID_NDK_HOME=[PATH_TO_NDK]'\033[0m"
exit
fi
}
checkPreRequisites
cd boost
rm -rf out
function build {
for arg in "$@"; do
case "${arg}" in
x86_64)
API=21
TARGET=x86_64
build_one
;;
arm64)
API=21
CPU=arm64-v8a
build_one
;;
x86)
API=16
CPU=x86
build_one
;;
arm)
API=16
CPU=armeabi-v7a
build_one
;;
all)
API=16
CPU=x86_64,arm64-v8a,x86,armeabi-v7a
build_one
;;
*)
;;
esac
done
}
if (( $# == 0 )); then
build all
else
build $@
fi

89
app/jni/build_miniupnpc.sh

@ -0,0 +1,89 @@ @@ -0,0 +1,89 @@
#!/bin/bash
set -e
function build_one {
mkdir -p out/${CPU}
cd out/${CPU}
cmake \
-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 \
../..
echo "Building..."
cmake --build . -- libminiupnpc-static
cd ../..
if [[ -n 'out/include' ]]; then
mkdir -p out/include/miniupnpc
cp include/* out/include/miniupnpc
fi
}
function checkPreRequisites {
if ! [ -d "miniupnp" ] || ! [ "$(ls -A miniupnp)" ]; then
echo -e "\033[31mFailed! Submodule 'miniupnp' not found!\033[0m"
echo -e "\033[31mTry to run: 'git submodule update --init'\033[0m"
exit
fi
if [ -z "$ANDROID_SDK_ROOT" -a "$ANDROID_SDK_ROOT" == "" ]; then
echo -e "\033[31mFailed! ANDROID_SDK_ROOT is empty. Run 'export ANDROID_SDK_ROOT=[PATH_TO_NDK]'\033[0m"
exit
fi
if [ -z "$ANDROID_NDK_HOME" -a "$ANDROID_NDK_HOME" == "" ]; then
echo -e "\033[31mFailed! ANDROID_NDK_HOME is empty. Run 'export ANDROID_NDK_HOME=[PATH_TO_NDK]'\033[0m"
exit
fi
}
checkPreRequisites
cd miniupnp/miniupnpc
rm -rf out
# add cmake from Android SDK to PATH
PATH=$ANDROID_SDK_ROOT/cmake/3.10.2.4988404/bin:$PATH
function build {
for arg in "$@"; do
case "${arg}" in
x86_64)
API=21
CPU=x86_64
build_one
;;
arm64)
API=21
CPU=arm64-v8a
build_one
;;
arm)
API=16
CPU=armeabi-v7a
build_one
;;
x86)
API=16
CPU=x86
build_one
;;
*)
;;
esac
done
}
if (( $# == 0 )); then
build x86_64 arm64 arm x86
else
build $@
fi

95
app/jni/build_openssl.sh

@ -0,0 +1,95 @@ @@ -0,0 +1,95 @@
#!/bin/bash
set -e
function build_one {
mkdir -p out/${CPU}
echo "Configuring..."
./Configure \
${TARGET} \
no-shared \
no-ssl3 \
no-comp \
no-hw \
no-engine \
no-tests \
--prefix="$PWD/output" \
-D__ANDROID_API__=${API}
echo "Building..."
make -j $(nproc)
make install_sw
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
}
function checkPreRequisites {
if ! [ -d "openssl" ] || ! [ "$(ls -A openssl)" ]; then
echo -e "\033[31mFailed! Submodule 'openssl' not found!\033[0m"
echo -e "\033[31mTry to run: 'git submodule update --init'\033[0m"
exit
fi
if [ -z "$ANDROID_NDK_HOME" -a "$ANDROID_NDK_HOME" == "" ]; then
echo -e "\033[31mFailed! ANDROID_NDK_HOME is empty. Run 'export ANDROID_NDK_HOME=[PATH_TO_NDK]'\033[0m"
exit
fi
}
checkPreRequisites
cd openssl
rm -rf out
PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
function build {
for arg in "$@"; do
case "${arg}" in
x86_64)
API=21
CPU=x86_64
TARGET=android-x86_64
build_one
;;
arm64)
API=21
CPU=arm64-v8a
TARGET=android-arm64
build_one
;;
arm)
API=16
CPU=armeabi-v7a
TARGET=android-arm
build_one
;;
x86)
API=16
CPU=x86
TARGET=android-x86
build_one
;;
*)
;;
esac
done
}
if (( $# == 0 )); then
build x86_64 arm64 arm x86
else
build $@
fi

2
app/jni/miniupnp

@ -1 +1 @@ @@ -1 +1 @@
Subproject commit dd9bad896ba8ff49c3399e5c1624643a0b667e50
Subproject commit 6576eb611b670c4841cc65095914275d6be008b2

2
app/jni/openssl

@ -1 +1 @@ @@ -1 +1 @@
Subproject commit 794e05ffb80651e7f60ee179792c93470edf8934
Subproject commit ac3cef223a4c61d6bee34527b6d4c8c6432494a7
Loading…
Cancel
Save