4242 sudo apt-get install -y --no-install-recommends \
4343 bc bison build-essential ca-certificates cpio flex \
4444 git kmod libelf-dev libssl-dev lz4 python3 \
45- zip wget curl sed binutils-aarch64-linux-gnu \
45+ zip unzip wget curl sed binutils-aarch64-linux-gnu \
4646 crossbuild-essential-arm64 gcc-aarch64-linux-gnu \
4747 gcc-arm-linux-gnueabi clang lld llvm
4848
8383 run : |
8484 cd android-kernel
8585 KSU_TAG="${{ steps.ksu_info.outputs.ksu_version }}"
86- echo "Integrating KernelSU $KSU_TAG into kernel ${{ steps.kver.outputs.version }} ..."
86+ echo "Integrating KernelSU $KSU_TAG ..."
8787 curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s "$KSU_TAG"
8888 echo "--- KernelSU Makefile header ---"
8989 head -5 KernelSU/kernel/Makefile 2>/dev/null || head -5 drivers/kernelsu/Makefile 2>/dev/null
@@ -94,11 +94,12 @@ jobs:
9494 echo "Downloading ZyCromerZ Clang 17..."
9595 wget -q --show-progress \
9696 https://github.com/ZyCromerZ/Clang/releases/download/17.0.0-20230725-release/Clang-17.0.0-x86_64.tar.gz \
97- -O /tmp/clang.tar.gz && \
98- tar -xzf /tmp/clang.tar.gz -C $HOME/toolchain/clang/ && \
99- rm /tmp/clang.tar.gz && \
100- echo "Clang ready: $(clang --version | head -1)" || {
101- echo "Download failed — falling back to system clang"
97+ -O /tmp/clang.tar.gz \
98+ && tar -xzf /tmp/clang.tar.gz -C $HOME/toolchain/clang/ \
99+ && rm /tmp/clang.tar.gz \
100+ && echo "Clang ready" \
101+ || {
102+ echo "Download failed - falling back to system clang"
102103 mkdir -p $HOME/toolchain/clang/bin
103104 for b in clang clang++ ld.lld llvm-ar llvm-nm llvm-objcopy llvm-objdump llvm-strip; do
104105 [ -f "/usr/bin/$b" ] && ln -sf "/usr/bin/$b" "$HOME/toolchain/clang/bin/$b"
@@ -118,50 +119,39 @@ jobs:
118119 sed -i 's/PVRSRVDevicePreClockSpeedChange(ui32RGXDevIdx,/PVRSRVDevicePreClockSpeedChange(MTKGetRGXDevNode(),/g' "$TARGET"
119120 echo "GPU fix applied."
120121 else
121- echo "mtk_mfgsys.c not found — skipping GPU fix."
122+ echo "mtk_mfgsys.c not found - skipping GPU fix."
122123 fi
123124
124125 - name : Configure kernel
125126 run : |
126127 cd android-kernel
127128 export PATH=$HOME/toolchain/clang/bin:$PATH
128129
129- # Auto-detect defconfig
130- DEFCONFIG=$(find arch/arm64/configs -name "*a04s*" -o -name "*a04*defconfig" 2>/dev/null | head -1 | xargs basename 2>/dev/null)
131- if [ -z "$DEFCONFIG" ]; then
132- DEFCONFIG="a04_defconfig"
133- fi
130+ DEFCONFIG=$(find arch/arm64/configs -name "*a04s*" -o -name "*a04*defconfig" 2>/dev/null | head -1 | xargs -r basename)
131+ [ -z "$DEFCONFIG" ] && DEFCONFIG="a04_defconfig"
134132 echo "Using defconfig: $DEFCONFIG"
135133 echo "DEFCONFIG=$DEFCONFIG" >> $GITHUB_ENV
136134
137- make O=out ARCH=arm64 \
138- CC=clang \
135+ make O=out ARCH=arm64 CC=clang \
139136 CLANG_TRIPLE=aarch64-linux-gnu- \
140137 CROSS_COMPILE=aarch64-linux-gnu- \
141138 "$DEFCONFIG"
142139
143- # Silence Werror so upstream warnings don't abort the build
144140 sed -i 's/CONFIG_WERROR=y/CONFIG_WERROR=n/g' out/.config
145141
146- # KernelSU — enable KSU + required dependencies for 4.x non-GKI
147142 scripts/config --file out/.config \
148143 -e CONFIG_KSU \
149144 -e CONFIG_KPROBES \
150145 -e CONFIG_HAVE_KPROBES \
151146 -e CONFIG_KPROBE_EVENTS \
152147 -e CONFIG_OVERLAY_FS \
153- -e CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE
154-
155- # Disable KSU_DEBUG in production builds
156- scripts/config --file out/.config \
148+ -e CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE \
157149 -d CONFIG_KSU_DEBUG
158150
159- # Embed KSU version into kernel local version string
160151 scripts/config --file out/.config \
161152 --set-str CONFIG_LOCALVERSION "-KSU-${{ steps.ksu_info.outputs.ksu_version }}" \
162153 --disable CONFIG_LOCALVERSION_AUTO
163154
164- # Strip debug info to reduce Image size and speed up build
165155 scripts/config --file out/.config \
166156 --disable CONFIG_DEBUG_INFO \
167157 --disable CONFIG_DEBUG_INFO_SPLIT \
@@ -172,9 +162,7 @@ jobs:
172162 --enable CONFIG_STRIP_ASM_SYMS \
173163 --enable CONFIG_CC_OPTIMIZE_FOR_SIZE
174164
175- # Accept all new config prompts with defaults
176- make O=out ARCH=arm64 \
177- CC=clang \
165+ make O=out ARCH=arm64 CC=clang \
178166 CLANG_TRIPLE=aarch64-linux-gnu- \
179167 CROSS_COMPILE=aarch64-linux-gnu- \
180168 olddefconfig
@@ -201,49 +189,29 @@ jobs:
201189 Image dtbs 2>&1 | tee $GITHUB_WORKSPACE/compile.log
202190
203191 if [ ! -f out/arch/arm64/boot/Image ]; then
204- echo "::error::Build failed — kernel Image not found!"
192+ echo "::error::Build failed - kernel Image not found!"
205193 exit 1
206194 fi
207-
208195 echo "Build successful! Image size: $(du -h out/arch/arm64/boot/Image | cut -f1)"
209196
210197 - name : Collect DTBs
211198 run : |
212199 cd android-kernel
213- # Concatenate all DTBs into a single dtb file for AnyKernel3
214- find out/arch/arm64/boot/dts -name "*.dtb" 2>/dev/null | sort | \
215- xargs cat > out/arch/arm64/boot/dtb.img 2>/dev/null || true
216-
200+ find out/arch/arm64/boot/dts -name "*.dtb" 2>/dev/null | sort | xargs cat > out/arch/arm64/boot/dtb.img 2>/dev/null || true
217201 if [ -s out/arch/arm64/boot/dtb.img ]; then
218202 echo "DTB collected: $(du -h out/arch/arm64/boot/dtb.img | cut -f1)"
219203 echo "HAS_DTB=true" >> $GITHUB_ENV
220204 else
221- echo "No DTBs found — skipping DTB packaging."
205+ echo "No DTBs found - skipping DTB packaging."
222206 echo "HAS_DTB=false" >> $GITHUB_ENV
223207 fi
224208
225- - name : Package with AnyKernel3
209+ - name : Write anykernel.sh
226210 run : |
227- git clone --depth=1 https://github.com/osm0sis/AnyKernel3 AnyKernel3
228- cd AnyKernel3
229- rm -rf .git .github *.md
230-
231- # Copy kernel Image
232- cp $GITHUB_WORKSPACE/android-kernel/out/arch/arm64/boot/Image ./
233-
234- # Copy DTB if present
235- if [ "${{ env.HAS_DTB }}" = "true" ]; then
236- mkdir -p dtb
237- cp $GITHUB_WORKSPACE/android-kernel/out/arch/arm64/boot/dtb.img ./dtb.img
238- echo "DTB included in zip."
239- fi
240-
241- # Write a clean anykernel.sh — no indentation inside heredoc
242- cat > anykernel.sh << 'EOF'
211+ mkdir -p $GITHUB_WORKSPACE/ak3out
212+ cat > $GITHUB_WORKSPACE/ak3out/anykernel.sh << 'AKEOF'
243213# AnyKernel3 Ramdisk Mod Script
244214# Samsung Galaxy A04s (SM-A047F) + KernelSU
245-
246- # # AnyKernel setup
247215properties() { '
248216kernel.string=Samsung A04s KernelSU Kernel
249217do.devicecheck=1
@@ -259,26 +227,31 @@ device.name5=a047x
259227supported.versions=12-14
260228supported.patchlevels=
261229' ; }
262-
263- # shell variables
264230block=auto;
265231is_slot_device=0;
266232ramdisk_compression=auto;
267233patch_vbmeta_flag=auto;
268-
269- ## AnyKernel methods (DO NOT CHANGE)
270234. tools/ak3-core.sh;
271-
272- ## AnyKernel install
273235split_boot;
274-
275- # Flash DTB if present
276236if [ -f "$AKHOME/dtb.img" ]; then
277237 flash_dtb;
278238fi
279-
280239flash_boot;
281- EOF
240+ AKEOF
241+
242+ - name: Package with AnyKernel3
243+ run: |
244+ git clone --depth=1 https://github.com/osm0sis/AnyKernel3 AnyKernel3
245+ cd AnyKernel3
246+ rm -rf .git .github *.md
247+
248+ cp $GITHUB_WORKSPACE/android-kernel/out/arch/arm64/boot/Image ./
249+ cp $GITHUB_WORKSPACE/ak3out/anykernel.sh ./anykernel.sh
250+
251+ if [ "${{ env.HAS_DTB }}" = "true" ]; then
252+ cp $GITHUB_WORKSPACE/android-kernel/out/arch/arm64/boot/dtb.img ./dtb.img
253+ echo "DTB included in zip."
254+ fi
282255
283256 BUILD_DATE=$(date +%Y%m%d-%H%M)
284257 KSU_VER="${{ steps.ksu_info.outputs.ksu_version }}"
@@ -290,12 +263,12 @@ EOF
290263
291264 - name : Verify zip contents
292265 run : |
266+ ZIP_NAME="${{ env.ZIP_NAME }}"
293267 echo "=== ZIP contents ==="
294- unzip -l "$ZIP_NAME"
295- echo ""
296- # Fail if Image is missing from zip
297- unzip -l "$ZIP_NAME" | grep -q "Image" || { echo "::error::Image missing from zip!"; exit 1; }
298- echo "Image present in zip — OK"
268+ unzip -l "$GITHUB_WORKSPACE/$ZIP_NAME"
269+ unzip -l "$GITHUB_WORKSPACE/$ZIP_NAME" | grep -q "Image" \
270+ && echo "Image present in zip - OK" \
271+ || { echo "::error::Image missing from zip!"; exit 1; }
299272
300273 - name : Upload artifact
301274 uses : actions/upload-artifact@v4
316289 uses : softprops/action-gh-release@v2
317290 with :
318291 tag_name : ksu-${{ steps.ksu_info.outputs.ksu_version }}-build${{ github.run_number }}
319- name : " KernelSU ${{ steps.ksu_info.outputs.ksu_version }} — Samsung A04s"
292+ name : " KernelSU ${{ steps.ksu_info.outputs.ksu_version }} - Samsung A04s"
320293 body : |
321294 ## Samsung A04s (SM-A047F) Kernel + KernelSU
322295
333306 2. Flash the ZIP
334307 3. Reboot to system
335308 4. Install **KernelSU Manager APK** from the [KernelSU releases page](https://github.com/tiann/KernelSU/releases)
336- 5. Open Manager — status should show **Working**
309+ 5. Open Manager - status should show **Working**
337310
338311 > Built automatically via GitHub Actions
339312 files : ${{ env.ZIP_NAME }}
0 commit comments