mirror of
https://github.com/PurpleI2P/i2pd-android.git
synced 2025-02-02 18:04:28 +00:00
[jni] switch to build from sources (#32)
This commit is contained in:
parent
d9bbe52238
commit
c85c4fb6c1
17
.github/workflows/android.yml
vendored
17
.github/workflows/android.yml
vendored
@ -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:
|
||||
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
21
.gitmodules
vendored
@ -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
|
||||
|
@ -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 {
|
||||
externalNativeBuild {
|
||||
ndkBuild {
|
||||
arguments "NDK_MODULE_PATH:=${rootProject.projectDir}/app/jni"
|
||||
arguments "-j3"
|
||||
arguments "-j${Runtime.getRuntime().availableProcessors()}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -9,10 +9,10 @@ ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
|
||||
APP_CPPFLAGS += -DANDROID_ARM7A
|
||||
endif
|
||||
|
||||
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
|
||||
BOOST_PATH = $(NDK_MODULE_PATH)/boost
|
||||
MINIUPNP_PATH = $(NDK_MODULE_PATH)/miniupnp
|
||||
OPENSSL_PATH = $(NDK_MODULE_PATH)/openssl
|
||||
|
||||
# don't change me
|
||||
I2PD_SRC_PATH = $(NDK_MODULE_PATH)/i2pd
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 93de5720b8841569f25abe9fe498348582e002c4
|
||||
Subproject commit ccfc74f1c9ceb35d304294d4f1ed3abff43d2e01
|
128
app/jni/build_boost.sh
Executable file
128
app/jni/build_boost.sh
Executable file
@ -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
Executable file
89
app/jni/build_miniupnpc.sh
Executable file
@ -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
Executable file
95
app/jni/build_openssl.sh
Executable file
@ -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
|
@ -1 +1 @@
|
||||
Subproject commit dd9bad896ba8ff49c3399e5c1624643a0b667e50
|
||||
Subproject commit 6576eb611b670c4841cc65095914275d6be008b2
|
@ -1 +1 @@
|
||||
Subproject commit 794e05ffb80651e7f60ee179792c93470edf8934
|
||||
Subproject commit ac3cef223a4c61d6bee34527b6d4c8c6432494a7
|
Loading…
x
Reference in New Issue
Block a user