1+ name : Android Debug Build 
2+ 
3+ on :
4+   push :
5+     branches :
6+       - main 
7+       - develop 
8+       - ' feature/**' 
9+       - ' feat/**' 
10+       - ' bugfix/**' 
11+   pull_request :
12+     branches :
13+       - main 
14+       - develop 
15+   workflow_dispatch :
16+ 
17+ jobs :
18+   build :
19+     runs-on : ubuntu-latest 
20+     permissions :
21+       contents : write 
22+     
23+     steps :
24+     - name : Checkout code 
25+       uses : actions/checkout@v4 
26+       with :
27+         submodules : recursive 
28+ 
29+     - name : Set up JDK 17 
30+       uses : actions/setup-java@v4 
31+       with :
32+         java-version : ' 17' 
33+         distribution : ' temurin' 
34+ 
35+     - name : Setup Android SDK 
36+       uses : android-actions/setup-android@v3 
37+ 
38+     - name : Install Qt ARM64 
39+       uses : jurplel/install-qt-action@v4 
40+       with :
41+         version : ' 6.9.1' 
42+         host : ' linux' 
43+         target : ' android' 
44+         arch : ' android_arm64_v8a' 
45+         modules : ' qtmultimedia' 
46+         cache : true 
47+         
48+     - name : Install Qt ARMv7 
49+       uses : jurplel/install-qt-action@v4 
50+       with :
51+         version : ' 6.9.1' 
52+         host : ' linux' 
53+         target : ' android' 
54+         arch : ' android_armv7' 
55+         modules : ' qtmultimedia' 
56+         cache : true 
57+ 
58+     - name : Install Android NDK 
59+       run : | 
60+         sdkmanager "ndk;27.2.12479018" 
61+         echo "ANDROID_NDK_ROOT=$ANDROID_SDK_ROOT/ndk/27.2.12479018" >> $GITHUB_ENV 
62+ 
63+ name : Cache CMake build 
64+       uses : actions/cache@v4 
65+       with :
66+         path : | 
67+           android/build 
68+           ~/.ccache 
69+ key : ${{ runner.os }}-cmake-${{ hashFiles('**/CMakeLists.txt') }} 
70+         restore-keys : | 
71+           ${{ runner.os }}-cmake- 
72+ 
73+ name : Install build dependencies 
74+       run : | 
75+         sudo apt-get update 
76+         sudo apt-get install -y build-essential cmake ninja-build 
77+ 
78+ name : Initialize Opus submodule 
79+       run : | 
80+         git submodule update --init --recursive android/3rdparty/opus || echo "Opus submodule not found, will need to be added" 
81+ 
82+ name : Update version for debug build 
83+       if : github.ref_name != 'main' 
84+       run : | 
85+         SHORT_SHA="${{ github.sha }}" 
86+         SHORT_SHA=${SHORT_SHA:0:8} 
87+          
88+         # Update AndroidManifest.xml (ensure proper escaping) 
89+         sed -i "s/android:versionName=\"[^\"]*\"/android:versionName=\"${SHORT_SHA}\"/" android/android/AndroidManifest.xml 
90+          
91+         # Update ReflectorClient.cpp 
92+         sed -i "s/\"swVer\": \"latry-yo6say-[^\"]*\"/\"swVer\": \"latry-yo6say-${SHORT_SHA}\"/" android/ReflectorClient.cpp 
93+          
94+         # Update Main.qml 
95+         sed -i "s/text: 'v[^']*'/text: 'v${SHORT_SHA}'/" android/Main.qml 
96+          
97+         # Verify changes 
98+         echo "=== AndroidManifest.xml ==="  
99+         grep "versionName" android/android/AndroidManifest.xml 
100+         echo "=== ReflectorClient.cpp ===" 
101+         grep "swVer" android/ReflectorClient.cpp 
102+         echo "=== Main.qml ===" 
103+         grep "text: 'v" android/Main.qml 
104+ 
105+ name : Configure CMake for Android 
106+       working-directory : android 
107+       run : | 
108+         # Use primary Qt installation (arm64) for qt-cmake   
109+         QT_CMAKE_PATH="$QT_ROOT_DIR/bin/qt-cmake" 
110+          
111+         $QT_CMAKE_PATH -S . -B build \ 
112+           -DQT_ANDROID_ABIS="armeabi-v7a;arm64-v8a" \ 
113+           -DANDROID_SDK_ROOT=$ANDROID_SDK_ROOT \ 
114+           -DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT \ 
115+           -DANDROID_PLATFORM=android-28 \ 
116+           -DCMAKE_BUILD_TYPE=Debug \ 
117+           -G Ninja 
118+ 
119+ name : Build Android APK 
120+       working-directory : android 
121+       run : | 
122+         cmake --build build --target apk 
123+ 
124+ name : Find and rename APK files 
125+       id : find_apk 
126+       run : | 
127+         APK_PATH=$(find android/build -name "*.apk" -type f | head -1) 
128+         if [ -z "$APK_PATH" ]; then 
129+           echo "No APK found!" 
130+           exit 1 
131+         fi 
132+          
133+         # Create branch-specific APK name 
134+         BRANCH_NAME="${{ github.ref_name }}" 
135+         SAFE_BRANCH_NAME=$(echo "$BRANCH_NAME" | sed 's/[^a-zA-Z0-9._-]/_/g') 
136+         SHORT_SHA="${{ github.sha }}" 
137+         SHORT_SHA=${SHORT_SHA:0:8} 
138+          
139+         APK_DIR=$(dirname "$APK_PATH") 
140+         NEW_APK_NAME="latry-debug-${SAFE_BRANCH_NAME}-${SHORT_SHA}.apk" 
141+         NEW_APK_PATH="$APK_DIR/$NEW_APK_NAME" 
142+          
143+         mv "$APK_PATH" "$NEW_APK_PATH" 
144+          
145+         echo "apk_path=$NEW_APK_PATH" >> $GITHUB_OUTPUT 
146+         echo "apk_name=$NEW_APK_NAME" >> $GITHUB_OUTPUT 
147+ 
148+ name : Upload APK artifact 
149+       uses : actions/upload-artifact@v4 
150+       with :
151+         name : ${{ steps.find_apk.outputs.apk_name }} 
152+         path : ${{ steps.find_apk.outputs.apk_path }} 
153+         retention-days : 90 
154+ 
155+     - name : Create Release for main/develop branches 
156+       if : github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'develop') 
157+       uses : softprops/action-gh-release@v2 
158+       with :
159+         files : ${{ steps.find_apk.outputs.apk_path }} 
160+         tag_name : " debug-${{ github.ref_name }}-${{ github.run_number }}" 
161+         name : " Debug Build - ${{ github.ref_name }} #${{ github.run_number }}" 
162+         body : | 
163+           **Debug Build Information** 
164+           - Branch: ${{ github.ref_name }} 
165+           - Commit: ${{ github.sha }} 
166+           - Build: #${{ github.run_number }} 
167+            
168+           **APK Details** 
169+           - Multi-ABI: armeabi-v7a, arm64-v8a 
170+           - Version: ${{ github.sha }} 
171+           - Signed: Debug keystore 
172+ draft : false 
173+         prerelease : true 
174+         make_latest : false 
175+ 
176+     - name : Add build info to summary 
177+       run : | 
178+         echo "## Android Debug Build Complete ✅" >> $GITHUB_STEP_SUMMARY 
179+         echo "- **Branch:** ${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY 
180+         echo "- **Commit:** ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY 
181+         echo "- **APK:** ${{ steps.find_apk.outputs.apk_name }}" >> $GITHUB_STEP_SUMMARY 
182+         if [[ "${{ github.event_name }}" == "push" && ("${{ github.ref_name }}" == "main" || "${{ github.ref_name }}" == "develop") ]]; then 
183+           echo "- **Release:** Created as prerelease" >> $GITHUB_STEP_SUMMARY 
184+         else 
185+           echo "- **Download:** Available in Actions artifacts" >> $GITHUB_STEP_SUMMARY 
186+         fi 
0 commit comments