11name : Build KingWatch APK
2+
23on :
34 push :
4- branches : [main]
5+ branches : [ main ]
6+ pull_request :
7+ branches : [ main ]
58 workflow_dispatch :
9+
610jobs :
711 build :
812 runs-on : ubuntu-22.04
9- env :
10- JAVA_HOME : /usr/lib/jvm/java-17-openjdk-amd64
11- ANDROID_SDK_ROOT : /home/runner/.buildozer/android/platform/android-sdk
13+ timeout-minutes : 60
14+
1215 steps :
13- - uses : actions/checkout@v4
14- - uses : actions/setup-python@v5
16+ # ── 1. Checkout ──────────────────────────────────────────────────────────
17+ - name : Checkout repository
18+ uses : actions/checkout@v4
19+
20+ # ── 2. Python ────────────────────────────────────────────────────────────
21+ - name : Set up Python 3.10
22+ uses : actions/setup-python@v5
1523 with :
16- python-version : ' 3.10'
17- - run : |
24+ python-version : " 3.10"
25+
26+ # ── 3. System dependencies ───────────────────────────────────────────────
27+ - name : Install system dependencies
28+ run : |
1829 sudo apt-get update -qq
19- sudo apt-get install -y git zip unzip openjdk-17-jdk build-essential libssl-dev libffi-dev python3-dev autoconf libtool pkg-config cmake
20- pip install buildozer==1.5.0 cython==0.29.33
21- SDK=$HOME/.buildozer/android/platform/android-sdk
22- mkdir -p $SDK/cmdline-tools
23- cd $SDK/cmdline-tools
24- wget -q https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip
25- unzip -q commandlinetools-linux-11076708_latest.zip
26- mv cmdline-tools latest
27- yes | ./latest/bin/sdkmanager --licenses || true
28- ./latest/bin/sdkmanager "platforms;android-33" "build-tools;33.0.2" "platform-tools"
29- mkdir -p $SDK/tools/bin
30- ln -sf $SDK/cmdline-tools/latest/bin/sdkmanager $SDK/tools/bin/sdkmanager
31- buildozer android debug 2>&1 | tee build.log
32- - uses : actions/upload-artifact@v4
33- if : always()
30+ sudo apt-get install -y --no-install-recommends \
31+ git zip unzip curl wget \
32+ build-essential ccache \
33+ libffi-dev libssl-dev \
34+ libsqlite3-dev \
35+ autoconf libtool \
36+ pkg-config \
37+ cmake \
38+ libltdl-dev \
39+ python3-dev \
40+ openjdk-17-jdk-headless
41+
42+ # ── 4. Java ──────────────────────────────────────────────────────────────
43+ - name : Set JAVA_HOME
44+ run : |
45+ echo "JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))" >> $GITHUB_ENV
46+
47+ # ── 5. pip packages ──────────────────────────────────────────────────────
48+ - name : Install Python build tools
49+ run : |
50+ pip install --upgrade pip setuptools wheel
51+ pip install buildozer==1.5.0
52+ pip install cython==0.29.33
53+
54+ # ── 6. Android SDK / NDK cache ───────────────────────────────────────────
55+ - name : Cache Android SDK, NDK and buildozer global
56+ uses : actions/cache@v4
3457 with :
35- name : apk-or-log
3658 path : |
37- bin/*.apk
38- build.log
59+ ~/.buildozer/android/platform/android-sdk
60+ ~/.buildozer/android/platform/android-ndk-r25b
61+ key : android-sdk-ndk-${{ runner.os }}-r25b-sdk33
62+ restore-keys : |
63+ android-sdk-ndk-${{ runner.os }}-
64+
65+ # ── 7. Buildozer local cache ─────────────────────────────────────────────
66+ - name : Cache buildozer local build
67+ uses : actions/cache@v4
68+ with :
69+ path : .buildozer
70+ key : buildozer-${{ runner.os }}-${{ hashFiles('buildozer.spec') }}-${{ hashFiles('main.py') }}
71+ restore-keys : |
72+ buildozer-${{ runner.os }}-${{ hashFiles('buildozer.spec') }}-
73+ buildozer-${{ runner.os }}-
74+
75+ # ── 8. Accept Android licenses ───────────────────────────────────────────
76+ - name : Pre-accept Android SDK licenses
77+ run : |
78+ mkdir -p ~/.buildozer/android/platform/android-sdk/licenses
79+ echo "8933bad161af4178b1185d1a37fbf41ea5269c55" > ~/.buildozer/android/platform/android-sdk/licenses/android-sdk-license
80+ echo "d56f5187479451eabf01fb78af6dfcb131a6481e" >> ~/.buildozer/android/platform/android-sdk/licenses/android-sdk-license
81+ echo "24333f8a63b6825ea9c5514f83c2829b004d1fee" >> ~/.buildozer/android/platform/android-sdk/licenses/android-sdk-license
82+ echo "84831b9409646a918e30573bab4c9c91346d8abd" > ~/.buildozer/android/platform/android-sdk/licenses/android-sdk-preview-license
83+
84+ # ── 9. Build APK ─────────────────────────────────────────────────────────
85+ - name : Build debug APK with buildozer
86+ env :
87+ JAVA_HOME : ${{ env.JAVA_HOME }}
88+ run : |
89+ # Show spec for debug
90+ echo "=== buildozer.spec ==="
91+ cat buildozer.spec
92+ echo "=== main.py head ==="
93+ head -50 main.py || echo "main.py not found!"
94+ echo "====================="
95+ # Run buildozer
96+ buildozer -v android debug 2>&1 | tee build_output.log
97+ echo "Exit code: $?"
98+
99+ # ── 10. Show build result ────────────────────────────────────────────────
100+ - name : Check APK produced
101+ run : |
102+ echo "Contents of bin/:"
103+ ls -lh bin/ 2>/dev/null || echo "bin/ directory does not exist"
104+ echo "APK files:"
105+ find . -name "*.apk" 2>/dev/null || echo "No APK found"
106+
107+ # ── 11. Upload APK ───────────────────────────────────────────────────────
108+ - name : Upload APK artifact
109+ if : success()
110+ uses : actions/upload-artifact@v4
111+ with :
112+ name : KingWatch-Pro-debug
113+ path : bin/*.apk
114+ if-no-files-found : error
115+
116+ # ── 12. Upload full log (always) ─────────────────────────────────────────
117+ - name : Upload build log
118+ if : always()
119+ uses : actions/upload-artifact@v4
120+ with :
121+ name : build-log
122+ path : build_output.log
123+ if-no-files-found : warn
0 commit comments