diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 21876524f..0a1daa8cd 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -1,24 +1,37 @@ name: android -on: [push] +on: + workflow_call: + outputs: + name: + description: "The artifact name" + value: ${{ jobs.build_android.outputs.name }} jobs: build_android: + strategy: matrix: BUILD_TYPE: [Release] - ANDROID_ABI: [armeabi-v7a, x86] - ANDROID_PLATFORM: [android-28] - os: [Ubuntu-20.04] - qt_version: [6.2.4] + qt_arch: [android_arm64_v8a, android_armv7, android_x86_64] + qt_version: [6.5.1] include: - - VCPKG_TARGET_TRIPLET: arm-android - qt_version: 6.2.4 + - BUILD_TYPE: Release + qt_arch: android_arm64_v8a + qt_version: 6.5.1 + VCPKG_TARGET_TRIPLET: arm-android + + - BUILD_TYPE: Release qt_arch: android_armv7 - ANDROID_ABI: armeabi-v7a - qt_modules: 'qtscxml qtwebengine qtmultimedia qtimageformats qtserialport' + qt_version: 6.5.1 + VCPKG_TARGET_TRIPLET: arm-android - runs-on: ${{ matrix.os }} + - BUILD_TYPE: Release + qt_version: 6.5.1 + qt_arch: android_x86_64 + VCPKG_TARGET_TRIPLET: x64-android + + runs-on: ubuntu-latest env: SOURCE_DIR: ${{github.workspace}}/.cache/source @@ -26,20 +39,26 @@ jobs: INSTALL_DIR: ${{github.workspace}}/.cache/install_anrdoi_qt${{matrix.qt_version}}_${{matrix.qt_arch}}_${{matrix.BUILD_TYPE}} RabbitRemoteControl_VERSION: v0.0.25 VCPKGGITCOMMITID: 6adca01a3fadca0cc0b80f03ec57c7c3a0be5c02 - qt_modules: '${{matrix.qt_modules}}' + artifact_name: build_android + ANDROID_PLATFORM: android-23 + ANDROID_NATIVE_API_LEVEL: 23 + qt_modules: 'qtimageformats qtmultimedia qtscxml' - steps: - - uses: actions/checkout@v3 - with: - submodules: true + # Map the job outputs to step outputs + outputs: + name: ${{ env.artifact_name }} - - uses: snickerbockers/submodules-init@v4 + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive - name: make directory run: | cmake -E make_directory ${{env.SOURCE_DIR}} cmake -E make_directory ${{env.TOOSL_DIR}} cmake -E make_directory ${{env.INSTALL_DIR}} + cmake -E make_directory ${{github.workspace}}/build - name: Cache Qt id: cache-qt @@ -49,40 +68,32 @@ jobs: key: qt_${{matrix.qt_version}}_${{matrix.qt_arch}} - name: Install Qt - # You may pin to the exact commit or the version. - # uses: jurplel/install-qt-action@a962fb91949c8e846a3e4a944d50e7ef5cc3a28a + - name: Install Qt of gcc_64 + uses: jurplel/install-qt-action@v3 + with: + dir: '${{env.TOOSL_DIR}}/qt' # optional + version: '${{matrix.qt_version}}' + #host: 'linux' + target: 'desktop' + arch: 'gcc_64' + set-env: false +# cached: '${{ steps.cache-qt.outputs.cache-hit }}' # optional, default is false + + - name: Install Qt of android uses: jurplel/install-qt-action@v3 with: # Directory to install Qt dir: '${{env.TOOSL_DIR}}/qt' # optional # Version of Qt to install - version: '${{matrix.qt_version}}' # optional, default is 5.15.2 + version: '${{matrix.qt_version}}' # Host platform #host: linux # optional # Target platform for build target: 'android' # optional, default is desktop # Architecture for Windows/Android arch: '${{matrix.qt_arch}}' # optional - # Whether or not to install Qt dependencies on Linux - #install-deps: true # optional, default is true - # Additional Qt modules to install - modules: '${{env.qt_modules}}' # optional - # Force a Qt mirror in case the default is not working - #mirror: # optional - # Whether or not to actually download Qt - cached: '${{ steps.cache-qt.outputs.cache-hit }}' # optional, default is false - # Whether or not to automatically run setup-python to find a valid python version. - #setup-python: false # optional, default is true - # Qt tools to download--specify comma-separated argument lists which are themselves separated by spaces: ,, - #tools: # optional - # Whether or not to actually install Qt or just the tools from the tools argument - #tools-only: false # optional, default is false - # Version of aqtinstall to use in case of issues - #aqtversion: # optional, default is ==0.10.0 - # Version of py7zr to use in case of issues - #py7zrversion: # optional, default is ==0.11.0 - # Any extra arguments to append to the back - #extra: # optional + # Additional Qt modules to install + modules: '${{env.qt_modules}}' # optional. See: https://ddalcino.github.io/aqt-list-server/ - name: run-vcpkg uses: lukka/run-vcpkg@v7.4 @@ -105,7 +116,7 @@ jobs: with: path: | ${{env.INSTALL_DIR}} - key: cache-installed-android + key: cache-installed-android-qt${{matrix.qt_version}}-${{matrix.VCPKG_TARGET_TRIPLET}}-${{matrix.BUILD_TYPE}} - name: Build libvncserver working-directory: ${{env.SOURCE_DIR}} @@ -170,33 +181,33 @@ jobs: # cmake --build . --config ${{ matrix.BUILD_TYPE }} --target install/strip # fi - - name: build log4qt - working-directory: ${{env.SOURCE_DIR}} - env: - QT_ROOT: ${{env.Qt5_Dir}} - run: | - if [ ! -d ${{env.INSTALL_DIR}}/lib/cmake/Log4Qt ]; then - git clone -b v1.5.1 "https://github.com/MEONMedical/Log4Qt.git" - cd Log4Qt - cmake -E make_directory build - cd build - cmake .. -DCMAKE_BUILD_TYPE=${{matrix.BUILD_TYPE}} \ - -DLOG4QT_ENABLE_EXAMPLES=OFF \ - -DLOG4QT_ENABLE_TESTS=OFF \ - -DQt5_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5 \ - -DQt5Core_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Core \ - -DQt5Network_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Network \ - -DQt5Concurrent_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Concurrent \ - -DQt5Test_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Test \ - -DCMAKE_INSTALL_PREFIX=${{env.INSTALL_DIR}} \ - -DCMAKE_PREFIX_PATH=${{env.QT_ROOT}} \ - -DCMAKE_TOOLCHAIN_FILE=${{env.VCPKG_ROOT}}/scripts/buildsystems/vcpkg.cmake \ - -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \ - -DANDROID_ABI=${{matrix.ANDROID_ABI}} \ - -DANDROID_PLATFORM=${{matrix.ANDROID_PLATFORM}} - cmake --build . --config ${{matrix.BUILD_TYPE}} - cmake --build . --config ${{matrix.BUILD_TYPE}} --target install/strip - fi +# - name: build log4qt +# working-directory: ${{env.SOURCE_DIR}} +# env: +# QT_ROOT: ${{env.Qt5_Dir}} +# run: | +# if [ ! -d ${{env.INSTALL_DIR}}/lib/cmake/Log4Qt ]; then +# git clone -b v1.5.1 "https://github.com/MEONMedical/Log4Qt.git" +# cd Log4Qt +# cmake -E make_directory build +# cd build +# cmake .. -DCMAKE_BUILD_TYPE=${{matrix.BUILD_TYPE}} \ +# -DLOG4QT_ENABLE_EXAMPLES=OFF \ +# -DLOG4QT_ENABLE_TESTS=OFF \ +# -DQt5_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5 \ +# -DQt5Core_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Core \ +# -DQt5Network_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Network \ +# -DQt5Concurrent_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Concurrent \ +# -DQt5Test_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Test \ +# -DCMAKE_INSTALL_PREFIX=${{env.INSTALL_DIR}} \ +# -DCMAKE_PREFIX_PATH=${{env.QT_ROOT}} \ +# -DCMAKE_TOOLCHAIN_FILE=${{env.VCPKG_ROOT}}/scripts/buildsystems/vcpkg.cmake \ +# -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \ +# -DANDROID_ABI=${{matrix.ANDROID_ABI}} \ +# -DANDROID_PLATFORM=${{matrix.ANDROID_PLATFORM}} +# cmake --build . --config ${{matrix.BUILD_TYPE}} +# cmake --build . --config ${{matrix.BUILD_TYPE}} --target install/strip +# fi - name: build qxmpp working-directory: ${{env.SOURCE_DIR}} @@ -231,14 +242,14 @@ jobs: run: git clone https://github.com/KangLin/RabbitCommon.git - name: build RabbitRemoteControl + working-directory: ${{github.workspace}}/build env: RabbitCommon_DIR: ${{env.SOURCE_DIR}}/RabbitCommon QT_ROOT: ${{env.Qt5_Dir}} STOREPASS: ${{secrets.STOREPASS}} run: | - cmake -E make_directory ${{github.workspace}}/build - cd ${{github.workspace}}/build - cmake ${{github.workspace}} \ + sudo chmod 777 ${Qt6_DIR}/bin/qt-cmake + ${Qt6_DIR}/bin/qt-cmake ${{github.workspace}} \ -DCMARK_SHARED=OFF \ -DCMARK_TESTS=OFF \ -DCMARK_STATIC=ON \ @@ -248,77 +259,18 @@ jobs: -Dtigervnc_DIR=${{env.INSTALL_DIR}}/lib/cmake \ -DQXmpp_DIR=${{env.INSTALL_DIR}}/lib/cmake/qxmpp \ -DCMAKE_BUILD_TYPE=${{matrix.BUILD_TYPE}} \ - -DQT_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5 \ - -DQt5_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5 \ - -DQt5Core_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Core \ - -DQt5Gui_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Gui \ - -DQt5Widgets_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Widgets \ - -DQt5Xml_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Xml \ - -DQt5Sql_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Sql \ - -DQt5Positioning_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Positioning \ - -DQt5Network_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Network \ - -DQt5Multimedia_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Multimedia \ - -DQt5LinguistTools_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5LinguistTools \ - -DQt5Qml_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Qml \ - -DQt5Quick_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Quick \ - -DQt5QuickWidgets_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5QuickWidgets \ - -DQt5AndroidExtras_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5AndroidExtras \ - -DQt5Concurrent_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Concurrent \ - -DQt5Test_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Test \ - -DQt5WebEngineWidgets_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5WebEngineWidgets \ -DCMAKE_INSTALL_PREFIX=${{env.INSTALL_DIR}} \ - -DCMAKE_PREFIX_PATH="${{env.QT_ROOT}}:${{env.INSTALL_DIR}}" \ - -DCMAKE_TOOLCHAIN_FILE=${{env.VCPKG_ROOT}}/scripts/buildsystems/vcpkg.cmake \ - -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \ -DANDROID_ABI=${{matrix.ANDROID_ABI}} \ - -DANDROID_PLATFORM=${{matrix.ANDROID_PLATFORM}} - cmake --build . --config ${{ matrix.BUILD_TYPE }} - cmake --build . --config ${{ matrix.BUILD_TYPE }} --target install-runtime - cmake --build . --config ${{ matrix.BUILD_TYPE }} --target APK + -DANDROID_PLATFORM=${{matrix.ANDROID_PLATFORM}} \ + -DQt6LinguistTools_DIR=${Qt6_DIR}/../gcc_64/lib/cmake/Qt6LinguistTools + cmake --build . --config ${{matrix.BUILD_TYPE}} --target all + APK_FILE=`find . -name "android-*.apk"` + cp $APK_FILE RabbitRemoteControl_${{env.Calendar_VERSION}}_${{matrix.qt_arch}}_qt${{matrix.qt_version}}_${{matrix.BUILD_TYPE}}.apk - - name: Package - if: ${{matrix.BUILD_TYPE == 'Release'}} - working-directory: ${{env.INSTALL_DIR}} - env: - QT_ROOT: ${{env.Qt5_Dir}} - RabbitCommon_DIR: ${{env.SOURCE_DIR}}/RabbitCommon - run: | - APK_FILE=`find . -name "install-release-signed.apk"` - APK_NAME=RabbitRemoteControl_${{matrix.ANDROID_ABI}}_${RabbitRemoteControl_VERSION}.apk - mv -f ${APK_FILE} ${APK_NAME} - APK_FILE=${APK_NAME} - cp ${{github.workspace}}/Update/update_android.xml . - md5sum ${APK_FILE} > ${APK_FILE}.md5 - MD5=`cat ${APK_FILE}.md5 | awk '{print $1}'` - echo "MD5:${MD5}" - sed -i "s/.*${RabbitRemoteControl_VERSION}.*Release rabbit remote control ${RabbitRemoteControl_VERSION}.*`date`.*${BUILD_ARCH}.*${MD5}.*${APK_NAME}.*<:https\://github.com/KangLin/RabbitRemoteControl/releases/download/${RabbitRemoteControl_VERSION}/${APK_NAME}<:g" update_android.xml - sed -i "s/.*${RabbitRemoteControl_VERSION} NoteFile - echo "" >> NoteFile - echo "File checksum:" >> NoteFile cd ${{ env.artifact_path }} + echo "[:cn: 修改日志](https://github.com/KangLin/RabbitRemoteControl/blob/${{env.RabbitRemoteControl_VERSION}}/ChangeLog_zh_CN.md)" > Release.md + echo "[:en: Change log](https://github.com/KangLin/RabbitRemoteControl/blob/${{env.RabbitRemoteControl_VERSION}}/ChangeLog.md)" >> Release.md + echo "" >> Release.md + echo "文件签名:" >> Release.md for file in * do - md5sum $file >> ../NoteFile + echo $file + if [ -f $file ]; then + md5sum $file > $file.md5sum + cat $file.md5sum >> Release.md + fi done - name: Upload To Github Release diff --git a/App/Client/CMakeLists.txt b/App/Client/CMakeLists.txt index ca03298fe..b3f1d8f6e 100644 --- a/App/Client/CMakeLists.txt +++ b/App/Client/CMakeLists.txt @@ -106,4 +106,4 @@ if(UNIX AND NOT ANDROID) endif() # Install QIcon theme -INSTALL_ICON_THEME() +INSTALL_ICON_THEME(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Resource/icons) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9da3c96ce..5957ca547 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,7 @@ # Author: Kang Lin -cmake_minimum_required(VERSION 3.19) +cmake_minimum_required(VERSION 3.21) +MESSAGE(STATUS "Found CMake ${CMAKE_VERSION}") project(RabbitRemoteControl DESCRIPTION "Rabbit Remote Control"