-
-
Notifications
You must be signed in to change notification settings - Fork 259
294 lines (272 loc) · 13.5 KB
/
android.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
name: android
on: [push]
jobs:
use_install_qt:
name: use install qt android_${{matrix.os}}-qt${{matrix.qt_version}}-${{matrix.VCPKG_TARGET_TRIPLET}}-${{matrix.BUILD_TYPE}}
strategy:
matrix:
BUILD_TYPE: [Release]
ANDROID_ABI: [armeabi-v7a, x86]
ANDROID_PLATFORM: [android-28]
os: [Ubuntu-18.04]
qt_version: [5.12.12]
include:
- VCPKG_TARGET_TRIPLET: arm-android
qt_arch: android_armv7
ANDROID_ABI: armeabi-v7a
- VCPKG_TARGET_TRIPLET: x86-android
qt_arch: android_x86
ANDROID_ABI: x86
runs-on: ${{ matrix.os }}
env:
SOURCE_DIR: ${{github.workspace}}/.cache/source
TOOSL_DIR: ${{github.workspace}}/.cache/tools
INSTALL_DIR: ${{github.workspace}}/.cache/install
RabbitIm_VERSION: v0.1.1
VCPKGGITCOMMITID: 973a7d517c09c8cfb7e6a548fcc260ca34ba7b60
qt_modules: qtwebengine
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: snickerbockers/submodules-init@v4
- 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}}
- name: Cache Qt
id: cache-qt
uses: actions/cache@v1 # not v2!
with:
path: ${{env.TOOSL_DIR}}/qt
key: android_${{matrix.os}}-qt${{matrix.qt_version}}-${{matrix.VCPKG_TARGET_TRIPLET}}-${{matrix.BUILD_TYPE}}-2021-11-03
- name: Install Qt
# You may pin to the exact commit or the version.
# uses: jurplel/install-qt-action@a962fb91949c8e846a3e4a944d50e7ef5cc3a28a
uses: jurplel/[email protected]
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
# 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: <tool_name>,<tool_version>,<tool_arch>
#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
- name: apt helper action
uses: ryankurte/[email protected]
with:
# architectures to pass to dpkg --add-architecture
#architectures: # optional
# apt packages to install
packages: yasm nasm
- name: run-vcpkg
uses: lukka/[email protected]
with:
# Indicates whether to only setup vcpkg (i.e. installing it and setting the environment variables VCPKG_ROOT, RUNVCPK_VCPKG_ROOT), without installing any port.
#setupOnly: # optional
#vcpkgGitURL: https://github.com/KangLin/vcpkg.git
vcpkgGitCommitId: ${{env.VCPKGGITCOMMITID}}
vcpkgDirectory: ${{ runner.workspace }}/vcpkg/
# Since the cache must be invalidated when content of the vcpkg.json file changes, let's
# compute its hash and append this to the computed cache's key.
appendedCacheKey: android_${{matrix.os}}-qt${{matrix.qt_version}}-${{matrix.VCPKG_TARGET_TRIPLET}}-${{matrix.BUILD_TYPE}}-${{env.VCPKGGITCOMMITID}}
additionalCachedPaths: $VCPKG_ROOT/installed
vcpkgTriplet: '${{ matrix.VCPKG_TARGET_TRIPLET }}'
vcpkgArguments: 'openssl ffmpeg zlib libpng libjpeg-turbo opus libyuv' # opencv'
- name: Cache installed
uses: actions/cache@v2
id: cache-installed
with:
path: |
${{env.INSTALL_DIR}}
key: cache-installed-android_${{matrix.os}}-qt${{matrix.qt_version}}-${{matrix.VCPKG_TARGET_TRIPLET}}-${{matrix.BUILD_TYPE}}
- 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}} \
-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
fi
- name: git clone RabbitCommon
working-directory: ${{env.SOURCE_DIR}}
run: git clone https://github.com/KangLin/RabbitCommon.git
- name: build qxmpp
working-directory: ${{env.SOURCE_DIR}}
env:
QT_ROOT: ${{env.Qt5_Dir}}
run: |
if [ ! -d ${{env.INSTALL_DIR}}/lib/cmake/qxmpp ]; then
git clone -b v1.2.1 "https://github.com/qxmpp-project/qxmpp.git"
cd qxmpp
cmake -E make_directory build
cd build
cmake .. -DBUILD_EXAMPLES=OFF -DBUILD_TESTS=OFF \
-DCMAKE_BUILD_TYPE=${{matrix.BUILD_TYPE}} \
-DQt5_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5 \
-DQt5Core_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Core \
-DQt5Gui_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Gui \
-DQt5Test_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Test \
-DQt5Xml_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Xml \
-DQt5Network_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Network \
-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
fi
- name: build qzxing
working-directory: ${{env.SOURCE_DIR}}
env:
QT_ROOT: ${{env.Qt5_Dir}}
run: |
if [ ! -d ${{env.INSTALL_DIR}}/lib/cmake/QZXing ]; then
git clone "https://github.com/KangLin/qzxing.git"
cd qzxing
cmake -E make_directory build
cd build
cmake .. -DBUILD_EXAMPLES=OFF -DQZXING_QML=OFF \
-DQZXING_ENABLE_ENCODER=ON \
-DCMAKE_BUILD_TYPE=${{matrix.BUILD_TYPE}} \
-DQt5_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5 \
-DQt5Core_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Core \
-DQt5Gui_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Gui \
-DQt5Network_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Network \
-DQt5Multimedia_DIR=${{env.QT_ROOT}}/lib/cmake/Qt5Multimedia \
-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
fi
- name: build RabbitIm
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}} \
-DCMARK_SHARED=OFF \
-DCMARK_TESTS=OFF \
-DCMARK_STATIC=ON \
-DBUILD_PLUGIN_APP=OFF \
-DLog4Qt_DIR=${{env.INSTALL_DIR}}/lib/cmake/Log4Qt \
-DQXmpp_DIR=${{env.INSTALL_DIR}}/lib/cmake/qxmpp \
-DQZXing_DIR=${{env.INSTALL_DIR}}/lib/cmake/QZXing \
-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}} \
-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
- 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=RabbitIm_${{matrix.ANDROID_ABI}}_${RabbitIm_VERSION}.apk
mv -f ${APK_FILE} ${APK_NAME}
APK_FILE=${APK_NAME}
cp ${{github.workspace}}/Update/update_android.xml .
MD5=`md5sum ${APK_FILE} | awk '{print $1}'`
echo "MD5:${MD5}"
sed -i "s/<VERSION>.*</<VERSION>${RabbitIm_VERSION}</g" update_android.xml
sed -i "s/<INFO>.*</<INFO>Release RabbitIm ${RabbitIm_VERSION}</g" update_android.xml
sed -i "s/<TIME>.*</<TIME>`date`</g" update_android.xml
sed -i "s/<ARCHITECTURE>.*</<ARCHITECTURE>${{matrix.ANDROID_ABI}}</g" update_android.xml
sed -i "s/<MD5SUM>.*</<MD5SUM>${MD5}</g" update_android.xml
sed -i "s:<URL>.*<:<URL>https\://github.com/KangLin/RabbitIm/releases/download/${RabbitIm_VERSION}/${APK_NAME}<:g" update_android.xml
sed -i "s/<MIN_UPDATE_VERSION>.*</<MIN_UPDATE_VERSION>${RabbitIm_VERSION}</g" update_android.xml
- name: update
if: ${{ matrix.BUILD_TYPE == 'Release' }}
uses: actions/upload-artifact@v2
with:
name: rabbitreim_android_${{matrix.ANDROID_ABI}}_${{env.RabbitIm_VERSION}}
path: |
${{env.INSTALL_DIR}}/RabbitIm_${{matrix.ANDROID_ABI}}_${{env.RabbitIm_VERSION}}.apk
- name: Upload To Github Release
if: ${{ matrix.BUILD_TYPE == 'Release' && startsWith(github.ref, 'refs/tags/') }}
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
prerelease: true
body: |
[修改日志](ChangeLog.md)
files: |
${{env.INSTALL_DIR}}/RabbitIm_${{matrix.ANDROID_ABI}}_${{env.RabbitIm_VERSION}}.apk
${{env.INSTALL_DIR}}/update_*.xml