R4SAS
4 months ago
27 changed files with 282 additions and 821 deletions
@ -1,16 +1,16 @@ |
|||||||
[submodule "android-ifaddrs"] |
[submodule "android-ifaddrs"] |
||||||
path = app/jni/android-ifaddrs |
path = binary/jni/android-ifaddrs |
||||||
url = https://github.com/PurpleI2P/android-ifaddrs.git |
url = https://github.com/PurpleI2P/android-ifaddrs.git |
||||||
[submodule "i2pd"] |
[submodule "i2pd"] |
||||||
path = app/jni/i2pd |
path = binary/jni/i2pd |
||||||
url = https://github.com/PurpleI2P/i2pd.git |
url = https://github.com/PurpleI2P/i2pd.git |
||||||
branch = openssl |
branch = openssl |
||||||
[submodule "miniupnp"] |
[submodule "miniupnp"] |
||||||
path = app/jni/miniupnp |
path = binary/jni/miniupnp |
||||||
url = https://github.com/miniupnp/miniupnp.git |
url = https://github.com/miniupnp/miniupnp.git |
||||||
[submodule "openssl"] |
[submodule "openssl"] |
||||||
path = app/jni/openssl |
path = binary/jni/openssl |
||||||
url = https://github.com/openssl/openssl.git |
url = https://github.com/openssl/openssl.git |
||||||
[submodule "boost"] |
[submodule "boost"] |
||||||
path = app/jni/boost |
path = binary/jni/boost |
||||||
url = https://github.com/moritz-wundke/Boost-for-Android.git |
url = https://github.com/moritz-wundke/Boost-for-Android.git |
||||||
|
@ -1,80 +0,0 @@ |
|||||||
LOCAL_PATH := $(call my-dir) |
|
||||||
include $(CLEAR_VARS) |
|
||||||
LOCAL_MODULE := i2pd |
|
||||||
LOCAL_CPP_FEATURES := rtti exceptions |
|
||||||
LOCAL_C_INCLUDES += $(IFADDRS_PATH) $(LIB_SRC_PATH) $(LIB_CLIENT_SRC_PATH) $(LANG_SRC_PATH) $(DAEMON_SRC_PATH) |
|
||||||
LOCAL_STATIC_LIBRARIES := \
|
|
||||||
boost_system \
|
|
||||||
boost_date_time \
|
|
||||||
boost_filesystem \
|
|
||||||
boost_program_options \
|
|
||||||
crypto \
|
|
||||||
ssl \
|
|
||||||
miniupnpc |
|
||||||
LOCAL_LDLIBS := -lz |
|
||||||
|
|
||||||
LOCAL_SRC_FILES := \
|
|
||||||
DaemonAndroid.cpp \
|
|
||||||
i2pd_android.cpp \
|
|
||||||
$(IFADDRS_PATH)/ifaddrs.cpp \
|
|
||||||
$(IFADDRS_PATH)/bionic_netlink.cpp \
|
|
||||||
$(wildcard $(LIB_SRC_PATH)/*.cpp) \
|
|
||||||
$(wildcard $(LIB_CLIENT_SRC_PATH)/*.cpp) \
|
|
||||||
$(wildcard $(LANG_SRC_PATH)/*.cpp) \
|
|
||||||
$(DAEMON_SRC_PATH)/Daemon.cpp \
|
|
||||||
$(DAEMON_SRC_PATH)/UPnP.cpp \
|
|
||||||
$(DAEMON_SRC_PATH)/HTTPServer.cpp \
|
|
||||||
$(DAEMON_SRC_PATH)/I2PControl.cpp \
|
|
||||||
$(DAEMON_SRC_PATH)/I2PControlHandlers.cpp |
|
||||||
|
|
||||||
include $(BUILD_SHARED_LIBRARY) |
|
||||||
|
|
||||||
LOCAL_PATH := $(call my-dir) |
|
||||||
include $(CLEAR_VARS) |
|
||||||
LOCAL_MODULE := boost_system |
|
||||||
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_system.a |
|
||||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/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)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_date_time.a |
|
||||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/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)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_filesystem.a |
|
||||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/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)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_program_options.a |
|
||||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/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)/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)/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)/lib/libminiupnpc.a |
|
||||||
LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/include |
|
||||||
include $(PREBUILT_STATIC_LIBRARY) |
|
@ -1,23 +0,0 @@ |
|||||||
NDK_TOOLCHAIN_VERSION := clang |
|
||||||
APP_STL := c++_static |
|
||||||
|
|
||||||
# Enable c++17 extensions in source code
|
|
||||||
APP_CPPFLAGS += -std=c++17 -fexceptions -frtti |
|
||||||
|
|
||||||
APP_CPPFLAGS += -DANDROID -D__ANDROID__ -DUSE_UPNP -Wno-deprecated-declarations |
|
||||||
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) |
|
||||||
APP_CPPFLAGS += -DANDROID_ARM7A |
|
||||||
endif |
|
||||||
|
|
||||||
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 |
|
||||||
|
|
||||||
LIB_SRC_PATH = $(I2PD_SRC_PATH)/libi2pd |
|
||||||
LIB_CLIENT_SRC_PATH = $(I2PD_SRC_PATH)/libi2pd_client |
|
||||||
LANG_SRC_PATH = $(I2PD_SRC_PATH)/i18n |
|
||||||
DAEMON_SRC_PATH = $(I2PD_SRC_PATH)/daemon |
|
@ -1,138 +0,0 @@ |
|||||||
/*
|
|
||||||
* Copyright (c) 2013-2022, The PurpleI2P Project |
|
||||||
* |
|
||||||
* This file is part of Purple i2pd project and licensed under BSD3 |
|
||||||
* |
|
||||||
* See full license text in LICENSE file at top of project tree |
|
||||||
*/ |
|
||||||
|
|
||||||
#include <iostream> |
|
||||||
#include <chrono> |
|
||||||
#include <thread> |
|
||||||
#include <exception> |
|
||||||
#include <boost/exception/diagnostic_information.hpp> |
|
||||||
#include <boost/exception_ptr.hpp> |
|
||||||
//#include "mainwindow.h"
|
|
||||||
#include "FS.h" |
|
||||||
#include "DaemonAndroid.h" |
|
||||||
#include "Daemon.h" |
|
||||||
#include "I18N.h" |
|
||||||
|
|
||||||
namespace i2p |
|
||||||
{ |
|
||||||
namespace android |
|
||||||
{ |
|
||||||
std::string dataDir = ""; |
|
||||||
std::string language = ""; |
|
||||||
|
|
||||||
DaemonAndroidImpl::DaemonAndroidImpl () |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
DaemonAndroidImpl::~DaemonAndroidImpl () |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
bool DaemonAndroidImpl::init(int argc, char* argv[]) |
|
||||||
{ |
|
||||||
return Daemon.init(argc, argv); |
|
||||||
} |
|
||||||
|
|
||||||
void DaemonAndroidImpl::start() |
|
||||||
{ |
|
||||||
Daemon.start(); |
|
||||||
} |
|
||||||
|
|
||||||
void DaemonAndroidImpl::stop() |
|
||||||
{ |
|
||||||
Daemon.stop(); |
|
||||||
} |
|
||||||
|
|
||||||
void DaemonAndroidImpl::restart() |
|
||||||
{ |
|
||||||
stop(); |
|
||||||
start(); |
|
||||||
} |
|
||||||
|
|
||||||
void DaemonAndroidImpl::setDataDir(std::string path) |
|
||||||
{ |
|
||||||
Daemon.setDataDir(path); |
|
||||||
} |
|
||||||
|
|
||||||
static DaemonAndroidImpl daemon; |
|
||||||
static char* argv[1]={strdup("tmp")}; |
|
||||||
/**
|
|
||||||
* returns error details if failed |
|
||||||
* returns "ok" if daemon initialized and started okay |
|
||||||
*/ |
|
||||||
std::string start(/*int argc, char* argv[]*/) |
|
||||||
{ |
|
||||||
try |
|
||||||
{ |
|
||||||
{ |
|
||||||
// make sure assets are ready before proceed
|
|
||||||
i2p::fs::DetectDataDir(dataDir, false); |
|
||||||
int numAttempts = 0; |
|
||||||
do |
|
||||||
{ |
|
||||||
if (i2p::fs::Exists (i2p::fs::DataDirPath("assets.ready"))) break; // assets ready
|
|
||||||
numAttempts++; |
|
||||||
std::this_thread::sleep_for (std::chrono::seconds(1)); // otherwise wait for 1 more second
|
|
||||||
} |
|
||||||
while (numAttempts <= 10); // 10 seconds max
|
|
||||||
|
|
||||||
// Set application directory
|
|
||||||
daemon.setDataDir(dataDir); |
|
||||||
|
|
||||||
bool daemonInitSuccess = daemon.init(1, argv); |
|
||||||
if(!daemonInitSuccess) |
|
||||||
{ |
|
||||||
return "Daemon init failed"; |
|
||||||
} |
|
||||||
|
|
||||||
// Set webconsole language from application
|
|
||||||
i2p::i18n::SetLanguage(language); |
|
||||||
|
|
||||||
daemon.start(); |
|
||||||
} |
|
||||||
} |
|
||||||
catch (boost::exception& ex) |
|
||||||
{ |
|
||||||
std::stringstream ss; |
|
||||||
ss << boost::diagnostic_information(ex); |
|
||||||
return ss.str(); |
|
||||||
} |
|
||||||
catch (std::exception& ex) |
|
||||||
{ |
|
||||||
std::stringstream ss; |
|
||||||
ss << ex.what(); |
|
||||||
return ss.str(); |
|
||||||
} |
|
||||||
catch(...) |
|
||||||
{ |
|
||||||
return "unknown exception"; |
|
||||||
} |
|
||||||
return "ok"; |
|
||||||
} |
|
||||||
|
|
||||||
void stop() |
|
||||||
{ |
|
||||||
daemon.stop(); |
|
||||||
} |
|
||||||
|
|
||||||
void SetDataDir(std::string jdataDir) |
|
||||||
{ |
|
||||||
dataDir = jdataDir; |
|
||||||
} |
|
||||||
|
|
||||||
std::string GetDataDir(void) |
|
||||||
{ |
|
||||||
return dataDir; |
|
||||||
} |
|
||||||
|
|
||||||
void SetLanguage(std::string jlanguage) |
|
||||||
{ |
|
||||||
language = jlanguage; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,53 +0,0 @@ |
|||||||
/*
|
|
||||||
* Copyright (c) 2013-2022, The PurpleI2P Project |
|
||||||
* |
|
||||||
* This file is part of Purple i2pd project and licensed under BSD3 |
|
||||||
* |
|
||||||
* See full license text in LICENSE file at top of project tree |
|
||||||
*/ |
|
||||||
|
|
||||||
#ifndef DAEMON_ANDROID_H |
|
||||||
#define DAEMON_ANDROID_H |
|
||||||
|
|
||||||
#include <string> |
|
||||||
|
|
||||||
namespace i2p |
|
||||||
{ |
|
||||||
namespace android |
|
||||||
{ |
|
||||||
class DaemonAndroidImpl |
|
||||||
{ |
|
||||||
public: |
|
||||||
|
|
||||||
DaemonAndroidImpl (); |
|
||||||
~DaemonAndroidImpl (); |
|
||||||
|
|
||||||
/**
|
|
||||||
* @return success |
|
||||||
*/ |
|
||||||
bool init (int argc, char* argv[]); |
|
||||||
void start (); |
|
||||||
void stop (); |
|
||||||
void restart (); |
|
||||||
|
|
||||||
void setDataDir (std::string path); |
|
||||||
}; |
|
||||||
|
|
||||||
/**
|
|
||||||
* returns "ok" if daemon init failed |
|
||||||
* returns errinfo if daemon initialized and started okay |
|
||||||
*/ |
|
||||||
std::string start (); |
|
||||||
|
|
||||||
void stop (); |
|
||||||
|
|
||||||
// set datadir received from jni
|
|
||||||
void SetDataDir (std::string jdataDir); |
|
||||||
// get datadir
|
|
||||||
std::string GetDataDir (void); |
|
||||||
// set webconsole language
|
|
||||||
void SetLanguage (std::string jlanguage); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
#endif // DAEMON_ANDROID_H
|
|
@ -1,80 +0,0 @@ |
|||||||
#!/bin/bash |
|
||||||
|
|
||||||
set -e |
|
||||||
|
|
||||||
BOOST_VERSION=1.78.0 |
|
||||||
BOOST_LIBS=date_time,filesystem,program_options,system |
|
||||||
|
|
||||||
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 \ |
|
||||||
--layout=system \ |
|
||||||
$ANDROID_NDK_HOME |
|
||||||
} |
|
||||||
|
|
||||||
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 |
|
||||||
} |
|
||||||
|
|
||||||
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 |
|
||||||
build_one |
|
||||||
;; |
|
||||||
*) |
|
||||||
;; |
|
||||||
esac |
|
||||||
done |
|
||||||
} |
|
||||||
|
|
||||||
checkPreRequisites |
|
||||||
|
|
||||||
cd boost |
|
||||||
|
|
||||||
# disable verbose output |
|
||||||
sed -i -E -e 's/d\+2/d\+0/' build-android.sh |
|
||||||
sed -i -E -e 's/\"23\.1\"\|\"25\.0\"/\"23\.1\"\|\"23\.2\"\|\"25\.0\"/' build-android.sh |
|
||||||
|
|
||||||
if (( $# == 0 )); then |
|
||||||
build all |
|
||||||
else |
|
||||||
build $@ |
|
||||||
fi |
|
@ -1,92 +0,0 @@ |
|||||||
#!/bin/bash |
|
||||||
|
|
||||||
set -e |
|
||||||
|
|
||||||
CMAKE_VERSION=3.22.1 |
|
||||||
|
|
||||||
function build_one { |
|
||||||
mkdir -p build out/$CPU |
|
||||||
cd build |
|
||||||
|
|
||||||
cmake \ |
|
||||||
-G "Unix Makefiles" \ |
|
||||||
-DUPNPC_BUILD_SHARED=False \ |
|
||||||
-DUPNPC_BUILD_TESTS=False \ |
|
||||||
-DUPNPC_BUILD_SAMPLE=False \ |
|
||||||
-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 \ |
|
||||||
-DCMAKE_INSTALL_PREFIX=../out/$CPU \ |
|
||||||
.. |
|
||||||
|
|
||||||
echo "Building..." |
|
||||||
cmake --build . -- libminiupnpc-static |
|
||||||
make install |
|
||||||
|
|
||||||
cd .. |
|
||||||
rm -rf build |
|
||||||
} |
|
||||||
|
|
||||||
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_HOME" -a "$ANDROID_HOME" == "" ]; then |
|
||||||
echo -e "\033[31mFailed! ANDROID_HOME is empty. Run 'export ANDROID_HOME=[PATH_TO_SDK]'\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 |
|
||||||
} |
|
||||||
|
|
||||||
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 |
|
||||||
} |
|
||||||
|
|
||||||
checkPreRequisites |
|
||||||
|
|
||||||
cd miniupnp/miniupnpc |
|
||||||
rm -rf build out |
|
||||||
|
|
||||||
# add cmake from Android SDK to PATH |
|
||||||
PATH=$ANDROID_HOME/cmake/$CMAKE_VERSION/bin:$PATH |
|
||||||
|
|
||||||
if (( $# == 0 )); then |
|
||||||
build x86_64 arm64 arm x86 |
|
||||||
else |
|
||||||
build $@ |
|
||||||
fi |
|
@ -1,93 +0,0 @@ |
|||||||
#!/bin/bash |
|
||||||
|
|
||||||
set -e |
|
||||||
|
|
||||||
HOST_OS=`uname -a` |
|
||||||
|
|
||||||
function build_one { |
|
||||||
mkdir -p out/$CPU |
|
||||||
|
|
||||||
echo "Configuring OpenSSL for $CPU..." |
|
||||||
./Configure \ |
|
||||||
--prefix="$PWD/out/$CPU" \ |
|
||||||
$TARGET \ |
|
||||||
no-shared \ |
|
||||||
no-tests \ |
|
||||||
-D__ANDROID_API__=$API \ |
|
||||||
-Wno-macro-redefined |
|
||||||
|
|
||||||
echo "Building OpenSSL for $CPU..." |
|
||||||
make -j $(nproc) > out/build.log |
|
||||||
|
|
||||||
make install_sw >> out/build.log |
|
||||||
|
|
||||||
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 |
|
||||||
} |
|
||||||
|
|
||||||
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 |
|
||||||
} |
|
||||||
|
|
||||||
checkPreRequisites |
|
||||||
|
|
||||||
cd openssl |
|
||||||
rm -rf out |
|
||||||
|
|
||||||
if [[ "$HOST_OS" == *"_NT-"* ]]; then |
|
||||||
PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/windows-x86_64/bin:$PATH |
|
||||||
else |
|
||||||
PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH |
|
||||||
fi |
|
||||||
|
|
||||||
if [[ -f 'Makefile' ]]; then |
|
||||||
make clean |
|
||||||
fi |
|
||||||
|
|
||||||
if (( $# == 0 )); then |
|
||||||
build x86_64 arm64 arm x86 |
|
||||||
else |
|
||||||
build $@ |
|
||||||
fi |
|
@ -1,141 +0,0 @@ |
|||||||
/*
|
|
||||||
* Copyright (c) 2013-2022, The PurpleI2P Project |
|
||||||
* |
|
||||||
* This file is part of Purple i2pd project and licensed under BSD3 |
|
||||||
* |
|
||||||
* See full license text in LICENSE file at top of project tree |
|
||||||
*/ |
|
||||||
|
|
||||||
#include <jni.h> |
|
||||||
#include "org_purplei2p_i2pd_I2PD_JNI.h" |
|
||||||
#include "DaemonAndroid.h" |
|
||||||
#include "Config.h" |
|
||||||
#include "RouterContext.h" |
|
||||||
#include "ClientContext.h" |
|
||||||
#include "Transports.h" |
|
||||||
#include "Tunnel.h" |
|
||||||
|
|
||||||
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getABICompiledWith |
|
||||||
(JNIEnv *env, jclass clazz) { |
|
||||||
#if defined(__arm__) |
|
||||||
#if defined(__ARM_ARCH_7A__) |
|
||||||
#if defined(__ARM_NEON__) |
|
||||||
#if defined(__ARM_PCS_VFP) |
|
||||||
#define ABI "armeabi-v7a/NEON (hard-float)" |
|
||||||
#else |
|
||||||
#define ABI "armeabi-v7a/NEON" |
|
||||||
#endif |
|
||||||
#else |
|
||||||
#if defined(__ARM_PCS_VFP) |
|
||||||
#define ABI "armeabi-v7a (hard-float)" |
|
||||||
#else |
|
||||||
#define ABI "armeabi-v7a" |
|
||||||
#endif |
|
||||||
#endif |
|
||||||
#else |
|
||||||
#define ABI "armeabi" |
|
||||||
#endif |
|
||||||
#elif defined(__i386__) |
|
||||||
#define ABI "x86" |
|
||||||
#elif defined(__x86_64__) |
|
||||||
#define ABI "x86_64" |
|
||||||
#elif defined(__mips64) /* mips64el-* toolchain defines __mips__ too */ |
|
||||||
#define ABI "mips64" |
|
||||||
#elif defined(__mips__) |
|
||||||
#define ABI "mips" |
|
||||||
#elif defined(__aarch64__) |
|
||||||
#define ABI "arm64-v8a" |
|
||||||
#else |
|
||||||
#define ABI "unknown" |
|
||||||
#endif |
|
||||||
|
|
||||||
return env->NewStringUTF(ABI); |
|
||||||
} |
|
||||||
|
|
||||||
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startDaemon |
|
||||||
(JNIEnv *env, jclass clazz) { |
|
||||||
return env->NewStringUTF(i2p::android::start().c_str()); |
|
||||||
} |
|
||||||
|
|
||||||
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getDataDir |
|
||||||
(JNIEnv *env, jclass clazz) { |
|
||||||
return env->NewStringUTF(i2p::android::GetDataDir().c_str()); |
|
||||||
} |
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopDaemon |
|
||||||
(JNIEnv *env, jclass clazz) { |
|
||||||
i2p::android::stop(); |
|
||||||
} |
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopAcceptingTunnels |
|
||||||
(JNIEnv *env, jclass clazz) { |
|
||||||
i2p::context.SetAcceptsTunnels (false); |
|
||||||
} |
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startAcceptingTunnels |
|
||||||
(JNIEnv *env, jclass clazz) { |
|
||||||
i2p::context.SetAcceptsTunnels (true); |
|
||||||
} |
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_reloadTunnelsConfigs |
|
||||||
(JNIEnv *env, jclass clazz) { |
|
||||||
i2p::client::context.ReloadConfig(); |
|
||||||
} |
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_onNetworkStateChanged |
|
||||||
(JNIEnv *env, jclass clazz, jboolean isConnected) { |
|
||||||
bool isConnectedBool = (bool) isConnected; |
|
||||||
i2p::transport::transports.SetOnline (isConnectedBool); |
|
||||||
} |
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_setDataDir |
|
||||||
(JNIEnv *env, jclass clazz, jstring jdataDir) { |
|
||||||
auto dataDir = env->GetStringUTFChars(jdataDir, NULL); |
|
||||||
i2p::android::SetDataDir(dataDir); |
|
||||||
env->ReleaseStringUTFChars(jdataDir, dataDir); |
|
||||||
} |
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getTransitTunnelsCount |
|
||||||
(JNIEnv *env, jclass clazz) { |
|
||||||
return i2p::tunnel::tunnels.CountTransitTunnels(); |
|
||||||
} |
|
||||||
|
|
||||||
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getWebConsAddr |
|
||||||
(JNIEnv *env, jclass clazz) { |
|
||||||
std::string httpAddr; i2p::config::GetOption("http.address", httpAddr); |
|
||||||
uint16_t httpPort; i2p::config::GetOption("http.port", httpPort); |
|
||||||
std::string result = "http://" + httpAddr + ":" + std::to_string(httpPort) + "/"; |
|
||||||
return env->NewStringUTF(result.c_str()); |
|
||||||
} |
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_setLanguage |
|
||||||
(JNIEnv *env, jclass clazz, jstring jlanguage) { |
|
||||||
auto language = env->GetStringUTFChars(jlanguage, NULL); |
|
||||||
i2p::android::SetLanguage(language); |
|
||||||
env->ReleaseStringUTFChars(jlanguage, language); |
|
||||||
} |
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getHTTPProxyState |
|
||||||
(JNIEnv *, jclass) { |
|
||||||
return i2p::client::context.GetHttpProxy () ? true : false; |
|
||||||
} |
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getSOCKSProxyState |
|
||||||
(JNIEnv *, jclass) { |
|
||||||
return i2p::client::context.GetSocksProxy() ? true : false; |
|
||||||
} |
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getBOBState |
|
||||||
(JNIEnv *, jclass) { |
|
||||||
return i2p::client::context.GetBOBCommandChannel() ? true : false; |
|
||||||
} |
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getSAMState |
|
||||||
(JNIEnv *, jclass) { |
|
||||||
return i2p::client::context.GetSAMBridge() ? true : false; |
|
||||||
} |
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getI2CPState |
|
||||||
(JNIEnv *, jclass) { |
|
||||||
return i2p::client::context.GetI2CPServer() ? true : false; |
|
||||||
} |
|
@ -1,73 +0,0 @@ |
|||||||
/*
|
|
||||||
* Copyright (c) 2013-2022, The PurpleI2P Project |
|
||||||
* |
|
||||||
* This file is part of Purple i2pd project and licensed under BSD3 |
|
||||||
* |
|
||||||
* See full license text in LICENSE file at top of project tree |
|
||||||
*/ |
|
||||||
|
|
||||||
/* DO NOT EDIT THIS FILE - it is machine generated */ |
|
||||||
#include <jni.h> |
|
||||||
/* Header for class org_purplei2p_i2pd_I2PD_JNI */ |
|
||||||
|
|
||||||
#ifndef _Included_org_purplei2p_i2pd_I2PD_JNI |
|
||||||
#define _Included_org_purplei2p_i2pd_I2PD_JNI |
|
||||||
#ifdef __cplusplus |
|
||||||
extern "C" { |
|
||||||
#endif |
|
||||||
|
|
||||||
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getABICompiledWith |
|
||||||
(JNIEnv *, jclass); |
|
||||||
|
|
||||||
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startDaemon |
|
||||||
(JNIEnv *, jclass); |
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopDaemon |
|
||||||
(JNIEnv *, jclass); |
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startAcceptingTunnels |
|
||||||
(JNIEnv *, jclass); |
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopAcceptingTunnels |
|
||||||
(JNIEnv *, jclass); |
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_reloadTunnelsConfigs |
|
||||||
(JNIEnv *, jclass); |
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_setDataDir |
|
||||||
(JNIEnv *env, jclass clazz, jstring jdataDir); |
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_setLanguage |
|
||||||
(JNIEnv *env, jclass clazz, jstring jlanguage); |
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getTransitTunnelsCount |
|
||||||
(JNIEnv *, jclass); |
|
||||||
|
|
||||||
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getWebConsAddr |
|
||||||
(JNIEnv *, jclass); |
|
||||||
|
|
||||||
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getDataDir |
|
||||||
(JNIEnv *, jclass); |
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getHTTPProxyState |
|
||||||
(JNIEnv *, jclass); |
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getSOCKSProxyState |
|
||||||
(JNIEnv *, jclass); |
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getBOBState |
|
||||||
(JNIEnv *, jclass); |
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getSAMState |
|
||||||
(JNIEnv *, jclass) ; |
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getI2CPState |
|
||||||
(JNIEnv *, jclass); |
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_onNetworkStateChanged |
|
||||||
(JNIEnv * env, jclass clazz, jboolean isConnected); |
|
||||||
|
|
||||||
#ifdef __cplusplus |
|
||||||
} |
|
||||||
#endif |
|
||||||
#endif |
|
@ -1 +1 @@ |
|||||||
../../../jni/i2pd/contrib/certificates |
../../../../binary/jni/i2pd/contrib/certificates |
@ -0,0 +1 @@ |
|||||||
|
Subproject commit f302cc7ead971d4068661d34c2f3ba06063d8ea2 |
@ -0,0 +1,80 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
set -e |
||||||
|
|
||||||
|
BOOST_VERSION=1.78.0 |
||||||
|
BOOST_LIBS=date_time,filesystem,program_options,system |
||||||
|
|
||||||
|
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 \ |
||||||
|
--layout=system \ |
||||||
|
$ANDROID_NDK_HOME |
||||||
|
} |
||||||
|
|
||||||
|
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 |
||||||
|
} |
||||||
|
|
||||||
|
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 |
||||||
|
build_one |
||||||
|
;; |
||||||
|
*) |
||||||
|
;; |
||||||
|
esac |
||||||
|
done |
||||||
|
} |
||||||
|
|
||||||
|
checkPreRequisites |
||||||
|
|
||||||
|
cd boost |
||||||
|
|
||||||
|
# disable verbose output |
||||||
|
sed -i -E -e 's/d\+2/d\+0/' build-android.sh |
||||||
|
sed -i -E -e 's/\"23\.1\"\|\"25\.0\"/\"23\.1\"\|\"23\.2\"\|\"25\.0\"/' build-android.sh |
||||||
|
|
||||||
|
if (( $# == 0 )); then |
||||||
|
build all |
||||||
|
else |
||||||
|
build $@ |
||||||
|
fi |
@ -0,0 +1,92 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
set -e |
||||||
|
|
||||||
|
CMAKE_VERSION=3.22.1 |
||||||
|
|
||||||
|
function build_one { |
||||||
|
mkdir -p build out/$CPU |
||||||
|
cd build |
||||||
|
|
||||||
|
cmake \ |
||||||
|
-G "Unix Makefiles" \ |
||||||
|
-DUPNPC_BUILD_SHARED=False \ |
||||||
|
-DUPNPC_BUILD_TESTS=False \ |
||||||
|
-DUPNPC_BUILD_SAMPLE=False \ |
||||||
|
-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 \ |
||||||
|
-DCMAKE_INSTALL_PREFIX=../out/$CPU \ |
||||||
|
.. |
||||||
|
|
||||||
|
echo "Building..." |
||||||
|
cmake --build . -- libminiupnpc-static |
||||||
|
make install |
||||||
|
|
||||||
|
cd .. |
||||||
|
rm -rf build |
||||||
|
} |
||||||
|
|
||||||
|
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_HOME" -a "$ANDROID_HOME" == "" ]; then |
||||||
|
echo -e "\033[31mFailed! ANDROID_HOME is empty. Run 'export ANDROID_HOME=[PATH_TO_SDK]'\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 |
||||||
|
} |
||||||
|
|
||||||
|
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 |
||||||
|
} |
||||||
|
|
||||||
|
checkPreRequisites |
||||||
|
|
||||||
|
cd miniupnp/miniupnpc |
||||||
|
rm -rf build out |
||||||
|
|
||||||
|
# add cmake from Android SDK to PATH |
||||||
|
PATH=$ANDROID_HOME/cmake/$CMAKE_VERSION/bin:$PATH |
||||||
|
|
||||||
|
if (( $# == 0 )); then |
||||||
|
build x86_64 arm64 arm x86 |
||||||
|
else |
||||||
|
build $@ |
||||||
|
fi |
@ -0,0 +1,93 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
set -e |
||||||
|
|
||||||
|
HOST_OS=`uname -a` |
||||||
|
|
||||||
|
function build_one { |
||||||
|
mkdir -p out/$CPU |
||||||
|
|
||||||
|
echo "Configuring OpenSSL for $CPU..." |
||||||
|
./Configure \ |
||||||
|
--prefix="$PWD/out/$CPU" \ |
||||||
|
$TARGET \ |
||||||
|
no-shared \ |
||||||
|
no-tests \ |
||||||
|
-D__ANDROID_API__=$API \ |
||||||
|
-Wno-macro-redefined |
||||||
|
|
||||||
|
echo "Building OpenSSL for $CPU..." |
||||||
|
make -j $(nproc) > out/build.log |
||||||
|
|
||||||
|
make install_sw >> out/build.log |
||||||
|
|
||||||
|
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 |
||||||
|
} |
||||||
|
|
||||||
|
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 |
||||||
|
} |
||||||
|
|
||||||
|
checkPreRequisites |
||||||
|
|
||||||
|
cd openssl |
||||||
|
rm -rf out |
||||||
|
|
||||||
|
if [[ "$HOST_OS" == *"_NT-"* ]]; then |
||||||
|
PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/windows-x86_64/bin:$PATH |
||||||
|
else |
||||||
|
PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH |
||||||
|
fi |
||||||
|
|
||||||
|
if [[ -f 'Makefile' ]]; then |
||||||
|
make clean |
||||||
|
fi |
||||||
|
|
||||||
|
if (( $# == 0 )); then |
||||||
|
build x86_64 arm64 arm x86 |
||||||
|
else |
||||||
|
build $@ |
||||||
|
fi |
Loading…
Reference in new issue