From 7cbe05a9d120b6193fdab16dce945c85dd7ba50c Mon Sep 17 00:00:00 2001 From: QxQ <59914293+U-v-U@users.noreply.github.com> Date: Sun, 30 Aug 2020 20:54:29 +0800 Subject: [PATCH] add: added more Android build scripts --- .gitignore | 1 + 3rdparty/libuv | 2 +- CMakeLists.txt | 55 ++++++++++++------------- assets/AndroidManifest.xml.in | 4 +- cmake/android | 1 - cmake/libcurl.cmake | 5 +-- cmake/platforms/android.cmake | 36 ++++++++++------ libs/setup-android-libs.sh | 24 +++++++++++ libs/setup-android-tools.sh | 17 ++++++++ libs/x64-windows/README.x64-windows.txt | 32 -------------- libs/x86-windows/README.x86-windows.txt | 32 -------------- 11 files changed, 96 insertions(+), 113 deletions(-) delete mode 160000 cmake/android create mode 100755 libs/setup-android-libs.sh create mode 100755 libs/setup-android-tools.sh delete mode 100644 libs/x64-windows/README.x64-windows.txt delete mode 100644 libs/x86-windows/README.x86-windows.txt diff --git a/.gitignore b/.gitignore index 6e274e9f..9c7e6c56 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ CMakeSettings.json SourceTrail/ libs/gen/ +libs/deps libs/x64-windows/ libs/x86-windows/ libs/x86-android/ diff --git a/3rdparty/libuv b/3rdparty/libuv index 1ab9ea37..e8b989ea 160000 --- a/3rdparty/libuv +++ b/3rdparty/libuv @@ -1 +1 @@ -Subproject commit 1ab9ea3790378f9f25c4e78e9e2b511c75f9c9ed +Subproject commit e8b989ea1f7f9d4083511a2caec7791e9abd1871 diff --git a/CMakeLists.txt b/CMakeLists.txt index aa0e33de..9833e809 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,36 +37,18 @@ endif() set(QV2RAY_USE_QWIDGET ON CACHE BOOL "Use QWidget as Qv2ray GUI") set(QV2RAY_USE_QML OFF CACHE BOOL "Use QML as Qv2ray GUI") +set(ANDROID_PACKAGE_SOURCE ${CMAKE_SOURCE_DIR}/assets/android) +set(QT_ANDROID_PACKAGE_SOURCE_DIR "\"android-package-source-directory\":\"${ANDROID_PACKAGE_SOURCE}\",") + if(ANDROID) message("Configuring for Android, ABI: ${ANDROID_ABI}") include(cmake/platforms/android.cmake) endif() -find_package(Qt5 5.11 COMPONENTS Core Network REQUIRED) -set(QV2RAY_QT_LIBS Qt5::Core Qt5::Network) -if(QV2RAY_USE_QML) - message("QML Enabled.") - find_package(Qt5 5.11 COMPONENTS Qml Quick Widgets Svg QuickControls2 Gui REQUIRED) - list(APPEND QV2RAY_QT_LIBS Qt5::Quick Qt5::Qml Qt5::Widgets Qt5::Svg Qt5::QuickControls2 Qt5::Gui) - set(QV2RAY_HAS_GUI ON) -elseif(QV2RAY_USE_QWIDGET) - message("QWidgets Enabled.") - set(QV2RAY_QNODEEDITOR_PROVIDER "module" CACHE STRING "QNodeEditor Provider") - set(QV2RAY_HAS_BUILT_IN_THEMES ON CACHE BOOL "Build with built-in themes") - find_package(Qt5 5.11 COMPONENTS Widgets Svg Gui REQUIRED) - list(APPEND QV2RAY_QT_LIBS Qt5::Widgets Qt5::Svg Qt5::Gui) - set(QV2RAY_HAS_GUI ON) -else() - message("Experimental CLI Support enabled.") -endif() find_package(Threads REQUIRED) -set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) - cmake_policy(SET CMP0071 NEW) if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.17.0") @@ -186,6 +168,29 @@ include(cmake/backend.cmake) # ================================================================================== # Qv2ray Baselib # ================================================================================== + +find_package(Qt5 5.11 COMPONENTS Core Network REQUIRED) +set(QV2RAY_QT_LIBS Qt5::Core Qt5::Network) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_AUTOUIC ON) +if(QV2RAY_USE_QML) + message("QML Enabled.") + find_package(Qt5 5.11 COMPONENTS Qml Quick Widgets Svg QuickControls2 Gui REQUIRED) + list(APPEND QV2RAY_QT_LIBS Qt5::Quick Qt5::Qml Qt5::Widgets Qt5::Svg Qt5::QuickControls2 Qt5::Gui) + set(QV2RAY_HAS_GUI ON) +elseif(QV2RAY_USE_QWIDGET) + message("QWidgets Enabled.") + set(QV2RAY_QNODEEDITOR_PROVIDER "module" CACHE STRING "QNodeEditor Provider") + set(QV2RAY_HAS_BUILT_IN_THEMES ON CACHE BOOL "Build with built-in themes") + find_package(Qt5 5.11 COMPONENTS Widgets Svg Gui REQUIRED) + list(APPEND QV2RAY_QT_LIBS Qt5::Widgets Qt5::Svg Qt5::Gui) + set(QV2RAY_HAS_GUI ON) +else() + message("Experimental CLI Support enabled.") +endif() + set(QVPLUGIN_INTERFACE_INCLUDE_DIR "src/plugin-interface") include(src/plugin-interface/QvPluginInterface.cmake) @@ -280,13 +285,6 @@ set(QV2RAY_FULL_SOURCES if(ANDROID) add_library(qv2ray SHARED ${QV2RAY_FULL_SOURCES}) target_link_libraries(qv2ray -llog -landroid) - include(cmake/android/AddQtAndroidApk.cmake) - list(APPEND ANDROID_EXTRA_LIBS "${CMAKE_SOURCE_DIR}/libs/x86-android/debug/lib/libprotobufd.so") - list(APPEND ANDROID_EXTRA_LIBS "${CMAKE_SOURCE_DIR}/libs/x86-android/debug/lib/libre2.so") - add_qt_android_apk(Qv2rayAPK ${PROJECT_NAME} - PACKAGE_SOURCES ${CMAKE_SOURCE_DIR}/assets/android - DEPENDS ${ANDROID_EXTRA_LIBS} - ) else() include(cmake/backward-cpp.cmake) add_definitions(-DQV2RAY_HAS_BACKWARD) @@ -422,7 +420,6 @@ if(QV2RAY_AUTO_DEPLOY AND APPLE) endif() if(ANDROID) - set(ANDROID_) if(QV2RAY_AUTO_DEPLOY AND ANDROID) message("Qv2ray Android auto deploy todo.") endif() diff --git a/assets/AndroidManifest.xml.in b/assets/AndroidManifest.xml.in index 4a4187df..ff10b048 100644 --- a/assets/AndroidManifest.xml.in +++ b/assets/AndroidManifest.xml.in @@ -1,7 +1,7 @@ - + @@ -60,7 +60,7 @@ * minimal - useful for Quick Controls 2 apps, it is much faster than "full" * none - useful for apps that don't use any of the above Qt modules --> - + diff --git a/cmake/android b/cmake/android deleted file mode 160000 index 5a62962d..00000000 --- a/cmake/android +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5a62962dbe35e955374688461784ddb7f757a377 diff --git a/cmake/libcurl.cmake b/cmake/libcurl.cmake index 1c08b4f2..5d80bce9 100644 --- a/cmake/libcurl.cmake +++ b/cmake/libcurl.cmake @@ -1,8 +1,7 @@ if(ANDROID) - set(CURL_LIBRARIES -lcurl) + set(CURL_LIBRARIES -lcurl -lssl -lcrypto -lz) endif() - -if(WIN32) +if(WIN32 OR ANDROID) find_package(CURL CONFIG REQUIRED) else() find_package(CURL REQUIRED) diff --git a/cmake/platforms/android.cmake b/cmake/platforms/android.cmake index a154315d..476138e4 100644 --- a/cmake/platforms/android.cmake +++ b/cmake/platforms/android.cmake @@ -1,23 +1,33 @@ -include(${ANDROID_SDK}/android_openssl/CMakeLists.txt) set(QV2RAY_USE_QML ON) -set(ANDROID_LIB_ARCH ${ANDROID_ABI}) -if(${ANDROID_ABI} STREQUAL "x86_64") +if(NOT ANDROID_SDK) + set(ANDROID_SDK $ENV{ANDROID_SDK_ROOT}) +endif() + +include(${ANDROID_SDK}/android_openssl/CMakeLists.txt) + +set(ANDROID_LIB_ARCH ${CMAKE_ANDROID_ARCH}) +if(${ANDROID_LIB_ARCH} STREQUAL "x86_64") set(ANDROID_LIB_ARCH "x64") endif() +message("Android SDK: ${ANDROID_SDK}, ${CMAKE_ANDROID_ARCH}") + list(APPEND CMAKE_PROGRAM_PATH ${CMAKE_SOURCE_DIR}/libs/tools/grpc ${CMAKE_SOURCE_DIR}/libs/tools/protobuf + ${CMAKE_SOURCE_DIR}/libs/tools/openssl ) set(QV2RAY_ANDROID_ROOT ${CMAKE_SOURCE_DIR}/libs/${ANDROID_LIB_ARCH}-android) -if(CMAKE_BUILD_TYPE MATCHES "^[Dd][Ee][Bb][Uu][Gg]$" OR NOT DEFINED CMAKE_BUILD_TYPE) #Debug build: Put Debug paths before Release paths. - # list(APPEND CMAKE_PREFIX_PATH - # ${QV2RAY_ANDROID_ROOT}/debug - # ${QV2RAY_ANDROID_ROOT} - # ) +message("ASS: ${QV2RAY_ANDROID_ROOT}") +if(CMAKE_BUILD_TYPE MATCHES "^[Dd][Ee][Bb][Uu][Gg]$" OR NOT DEFINED CMAKE_BUILD_TYPE) #Debug build: Put Debug paths before Release paths. + set(QV2RAY_ANDROID_DEBUG_LIB ON) + list(APPEND CMAKE_PREFIX_PATH + ${QV2RAY_ANDROID_ROOT}/debug + ${QV2RAY_ANDROID_ROOT} + ) link_directories( ${QV2RAY_ANDROID_ROOT}/debug/lib ${QV2RAY_ANDROID_ROOT}/lib @@ -27,11 +37,11 @@ if(CMAKE_BUILD_TYPE MATCHES "^[Dd][Ee][Bb][Uu][Gg]$" OR NOT DEFINED CMAKE_BUILD_ ${QV2RAY_ANDROID_ROOT} ) else() #Release build: Put Release paths before Debug paths. Debug Paths are required so that CMake generates correct info in autogenerated target files. - # list(APPEND CMAKE_PREFIX_PATH - # ${QV2RAY_ANDROID_ROOT} - # ${QV2RAY_ANDROID_ROOT}/debug - # ) - + set(QV2RAY_ANDROID_DEBUG_LIB OFF) + list(APPEND CMAKE_PREFIX_PATH + ${QV2RAY_ANDROID_ROOT} + ${QV2RAY_ANDROID_ROOT}/debug + ) link_directories( ${QV2RAY_ANDROID_ROOT}/lib ${QV2RAY_ANDROID_ROOT}/debug/lib diff --git a/libs/setup-android-libs.sh b/libs/setup-android-libs.sh new file mode 100755 index 00000000..5afb18e6 --- /dev/null +++ b/libs/setup-android-libs.sh @@ -0,0 +1,24 @@ +#!/bin/fish +mkdir -p deps; cd ./deps +mkdir -p downloaded; cd ./downloaded; + +set KEYWORD android +for data in (curl -s https://api.github.com/repos/Qv2ray/Qv2ray-deps/releases/latest | jq ".assets[] | {browser_download_url, name}" -c | grep $KEYWORD) + set NAME (echo $data | jq ".name" -r) + echo "Downloading: $NAME" + curl -sL (echo $data | jq ".browser_download_url" -r) -o $NAME; +end +cd .. + +for f in (ls) + 7z x -y ./$f +end + +mkdir final +for p in arm arm64 x64 x86 + cp -rv ./$KEYWORD-$p/installed/* ./final +end + +rm -rvf ./final/vcpkg +cd .. +cp -rvf ./deps/final/* ./ diff --git a/libs/setup-android-tools.sh b/libs/setup-android-tools.sh new file mode 100755 index 00000000..5a2ba11b --- /dev/null +++ b/libs/setup-android-tools.sh @@ -0,0 +1,17 @@ +#!/bin/fish +mkdir -p deps; cd ./deps +mkdir -p downloaded; cd ./downloaded; + +set KEYWORD tools +for data in (curl -s https://api.github.com/repos/Qv2ray/Qv2ray-deps/releases/latest | jq ".assets[] | {browser_download_url, name}" -c | grep $KEYWORD) + set NAME (echo $data | jq ".name" -r) + echo "Downloading: $NAME" + curl -sL (echo $data | jq ".browser_download_url" -r) -o $NAME; +end +cd .. + +for f in (ls ./downloaded | grep $KEYWORD) + 7z x -y ./downloaded/$f +end + +cp -rvf ./tools ../ diff --git a/libs/x64-windows/README.x64-windows.txt b/libs/x64-windows/README.x64-windows.txt deleted file mode 100644 index 61b90b1b..00000000 --- a/libs/x64-windows/README.x64-windows.txt +++ /dev/null @@ -1,32 +0,0 @@ -Qv2ray Dependencies Directory for Windows x64 - -THIS IS A PLACEHOLDER WHICH ALLOWS GIT TO INCLUDE THIS DIRECTORY - -If you want to build Qv2ray on Windows, please download the gRPC and -protobuf headers and libraries according to your CPU architecture: - -- Go to https://github.com/Qv2ray/Qv2ray-deps/releases -- Download "Qv2ray-deps-x64-windows.7z" - -Then extract the 7z zipball here. - -Make sure these file exists: -- Qv2raySourceRoot/libs/x64-windows/tools/grpc/grpc_cpp_plugin.exe -- Qv2raySourceRoot/libs/x64-windows/tools/protobuf/protoc.exe - -# ====================================================================== - -64 位 Windows 的 Qv2ray 依赖文件夹 -这个文件的存在使得 git 可以添加此文件夹 - -如果你想在 Windows 下编译 Qv2ray, 请遵循这些步骤下载 gRPC 和 protobuf 头文件 -和库文件: - -- 访问 https://github.com/Qv2ray/Qv2ray-deps/releases -- 下载 "Qv2ray-deps-x64-windows.7z" - -然后将这个 7z 压缩包解压到这里 - -请确保这些文件存在: -- Qv2ray源码根目录/libs/x64-windows/tools/grpc/grpc_cpp_plugin.exe -- Qv2ray源码根目录/libs/x64-windows/tools/protobuf/protoc.exe diff --git a/libs/x86-windows/README.x86-windows.txt b/libs/x86-windows/README.x86-windows.txt deleted file mode 100644 index 9d4179ec..00000000 --- a/libs/x86-windows/README.x86-windows.txt +++ /dev/null @@ -1,32 +0,0 @@ -Qv2ray Dependencies Directory for Windows x86 - -THIS IS A PLACEHOLDER WHICH ALLOWS GIT TO INCLUDE THIS DIRECTORY - -If you want to build Qv2ray on Windows, please download the gRPC and -protobuf headers and libraries according to your CPU architecture: - -- Go to https://github.com/Qv2ray/Qv2ray-deps/releases -- Download "Qv2ray-deps-x86-windows.7z" - -Then extract the 7z zipball here. - -Make sure these file exists: -- Qv2raySourceRoot/libs/x86-windows/tools/grpc/grpc_cpp_plugin.exe -- Qv2raySourceRoot/libs/x86-windows/tools/protobuf/protoc.exe - -# ====================================================================== - -32 位 Windows 的 Qv2ray 依赖文件夹 -这个文件的存在使得 git 可以添加此文件夹 - -如果你想在 Windows 下编译 Qv2ray, 请遵循这些步骤下载 gRPC 和 protobuf 头文件 -和库文件: - -- 访问 https://github.com/Qv2ray/Qv2ray-deps/releases -- 下载 "Qv2ray-deps-x86-windows.7z" - -然后将这个 7z 压缩包解压到这里 - -请确保这些文件存在: -- Qv2ray源码根目录/libs/x86-windows/tools/grpc/grpc_cpp_plugin.exe -- Qv2ray源码根目录/libs/x86-windows/tools/protobuf/protoc.exe