-
Notifications
You must be signed in to change notification settings - Fork 1.6k
executable file
·812 lines (769 loc) · 47.1 KB
/
fastbuild_6.6.89_mtk.yml
File metadata and controls
executable file
·812 lines (769 loc) · 47.1 KB
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
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
name: (天玑特供)加速版构建 6.6.89 欧加真OKI内核
env:
TZ: Asia/Shanghai
ANDROID_VERSION: 'android15'
KERNEL_VERSION: '6.6'
KERNEL_NAME: 'android15-8-g29d86c5fc9dd-abogki428889875-4k'
on:
workflow_dispatch:
inputs:
ksu_type:
description: 'KernelSU分支(SukiSU Ultra/KernelSU Next/MKSU/KernelSU(原版),默认SukiSU Ultra)'
required: true
type: choice
default: 'sukisu'
options:
- 'sukisu'
- 'ksunext'
- 'mksu'
- 'ksu'
kpm_enable:
description: '是否开启kpm(仅对sukisu生效;可能轻微增加耗电; 可能轻微增加耗电,不需要可保持默认关闭)'
required: true
type: choice
default: 'false'
options:
- 'true'
- 'false'
susfs_enable:
description: '是否开启susfs(用于增强隐藏环境挂载功能; 可能轻微增加耗电,上游更新导致不稳定时或不需要可关闭)'
required: true
type: boolean
default: 'true'
lz4_enable:
description: '是否安装 lz4 1.10.0+zstd 1.5.7 补丁及 LZ4KD 补丁(0=均不安装,1=安装lz4&zstd补丁,2=安装lz4kd补丁,3=均安装,默认1)'
required: true
type: choice
default: '1'
options:
- '0'
- '1'
- '2'
- '3'
bbr_enable:
description: "是否启用bbr算法(优化上行数据,对手机日用无太大意义甚至可能负优化;false关闭,true仅加入算法,default添加算法并设为默认)"
required: true
type: choice
default: 'false'
options:
- 'false'
- 'true'
- 'default'
better_net:
description: '是否开启网络功能拓展配置(用于为ipset及需要iptables等高级网络功能内核支持的程序提供支持,天玑机型可能导致bug)'
required: true
type: choice
default: 'false'
options:
- 'true'
- 'false'
adios_rekernel_enable:
description: '是否启用ADIOS IO调度器及Re-Kernel支持(0=均不安装,1=安装ADIOS调度器,2=安装Re-Kernel,3=均安装,默认1)'
required: true
type: choice
default: '1'
options:
- '0'
- '1'
- '2'
- '3'
baseband_guard:
description: '是否开启内核级基带保护(阻止一切对非用户分区的写入,有效防止格机)'
required: true
type: boolean
default: 'true'
ccache_debug:
description: '是否上传 Ccache调试日志(用于调试, 无需要可关闭)'
required: true
type: boolean
default: 'false'
kernel_suffix:
description: '内核后缀(留空默认,开头别加连字符,勿加空格等影响指令运行的保留字符)'
required: false
type: string
default: ''
jobs:
build:
runs-on: ubuntu-latest
outputs:
ksuver: ${{ steps.ksu_version.outputs.ksuver }}
steps:
- name: 安装环境依赖+初始化源码仓库及llvm-Clang18工具链
run: |
rm -rf kernel_workspace
mkdir kernel_workspace
cd kernel_workspace
sudo apt-mark hold firefox &&
sudo apt-mark hold libc-bin &&
sudo apt purge man-db &&
sudo rm -rf /var/lib/man-db/auto-update &&
sudo apt update &&
sudo apt-get install -y --no-install-recommends binutils python-is-python3 libssl-dev libelf-dev ccache &
#旧版完整指令:(由于经过验证大部分指令已内置于GitHub Action环境中,故进行精简)
#sudo apt-get install -y --no-install-recommends curl bison flex make binutils git perl gcc python3 python-is-python3 bc libssl-dev libelf-dev zip unzip ccache
echo "正在克隆源码仓库..."
aria2c -s16 -x16 -k1M https://github.com/cctv18/android_kernel_oneplus_mt6991/archive/refs/heads/oneplus/mt6991_v_15.0.2_ace5_ultra_6.6.89.zip -o common.zip &&
unzip -q common.zip &&
mv "android_kernel_oneplus_mt6991-oneplus-mt6991_v_15.0.2_ace5_ultra_6.6.89" common &&
rm -rf common.zip &
echo "正在克隆llvm-clang18工具链..." &&
mkdir -p clang18 &&
aria2c -s16 -x16 -k1M https://github.com/cctv18/oneplus_sm8650_toolchain/releases/download/LLVM-Clang18-r510928/clang-r510928.zip -o clang.zip &&
unzip -q clang.zip -d clang18 &&
rm -rf clang.zip &
echo "正在克隆构建工具..." &&
aria2c -s16 -x16 -k1M https://github.com/cctv18/oneplus_sm8650_toolchain/releases/download/LLVM-Clang18-r510928/build-tools.zip -o build-tools.zip &&
unzip -q build-tools.zip &&
rm -rf build-tools.zip &
wait
echo "所有源码及llvm-Clang18工具链初始化完成!"
echo "正在去除 ABI 保护 & 去除 dirty 后缀..."
rm common/android/abi_gki_protected_exports_* || true
for f in common/scripts/setlocalversion; do
sed -i 's/ -dirty//g' "$f"
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' "$f"
done
- name: 配置ccache目录
run: |
echo "CCACHE_DIR=$HOME/.ccache_mtk_6.6.89" >> $GITHUB_ENV
echo "CCACHE_MAXSIZE=3G" >> $GITHUB_ENV
echo "当前磁盘空间:"
df -h
echo "当前构建内核版本:6.6.89"
- name: 载入当前版本内核的 ccache缓存
uses: actions/cache@v4
id: ccache-restore
with:
path: ${{ env.CCACHE_DIR }}
key: ccache-neov4-mtk_6.6.89-${{ runner.os }}-main
restore-keys: |
ccache-neov4-mtk_6.6.89-${{ runner.os }}-
ccache-neov4-mtk_6.6.89-
- name: 初始化并配置ccache
run: |
# 设置ccache环境变量
export CCACHE_COMPILERCHECK="none"
export CCACHE_BASEDIR="${{ github.workspace }}"
export CCACHE_NOHASHDIR="true"
export CCACHE_HARDLINK="true"
export CCACHE_DIR="${{ env.CCACHE_DIR }}"
export CCACHE_MAXSIZE="${{ env.CCACHE_MAXSIZE }}"
# 确保ccache目录存在
mkdir -p "$CCACHE_DIR"
# 每次运行都重新配置缓存大小
echo "配置ccache缓存大小为: $CCACHE_MAXSIZE"
ccache -M "$CCACHE_MAXSIZE"
ccache -o compression=true
# 显示初始缓存状态
echo "ccache初始状态:"
ccache -s
# 如果缓存恢复命中,显示详细信息
if [ "${{ steps.ccache-restore.outputs.cache-hit }}" == 'true' ]; then
echo "ccache缓存命中详情:"
ccache -sv
fi
- name: 添加KernelSU
id: ksu_version
run: |
# 进入内核工作目录
cd kernel_workspace
if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
echo "正在配置SukiSU Ultra..."
curl -LSs "https://raw.githubusercontent.com/ShirkNeko/SukiSU-Ultra/refs/heads/main/kernel/setup.sh" | bash -s susfs-main
cd ./KernelSU
# 获取当前 Git 提交的短哈希 (8位)
GIT_COMMIT_HASH=$(git rev-parse --short=8 HEAD)
echo "当前提交哈希: $GIT_COMMIT_HASH"
export KSU_VERSION=$KSU_VERSION
# 尝试最多 3 次获取 KernelSU API 版本号
for i in {1..3}; do
# 从远程 Makefile 中提取 KSU_API_VERSION
KSU_API_VERSION=$(curl -s "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/susfs-main/kernel/Makefile" |
# 查找第一个包含版本定义的行
grep -m1 "KSU_VERSION_API :=" |
# 提取等号后的值
awk -F'= ' '{print $2}' |
# 删除所有空白字符
tr -d '[:space:]')
# 如果成功获取到版本号则跳出循环,否则等待 1 秒后重试
[ -n "$KSU_API_VERSION" ] && break || sleep 1
done
# 如果获取失败,使用默认版本号 3.1.7
[ -z "$KSU_API_VERSION" ] && KSU_API_VERSION="3.1.7"
# 将 API 版本号存储到 GitHub 环境变量
echo "KSU_API_VERSION=$KSU_API_VERSION" >> $GITHUB_ENV
# 创建版本定义模板&版本格式函数: 使用获取的提交哈希和固定后缀
# KSU_VERSION_API: API 版本定义
# KSU_VERSION_FULL: 完整版本定义
VERSION_DEFINITIONS=$'define get_ksu_version_full\nv\\$1-'"$GIT_COMMIT_HASH"$'@cctv18\nendef\n\nKSU_VERSION_API := '"$KSU_API_VERSION"$'\nKSU_VERSION_FULL := v'"$KSU_API_VERSION"$'-'"$GIT_COMMIT_HASH"$'@cctv18'
# 清理内核 Makefile 中的旧版本定义
# 删除版本函数
sed -i '/define get_ksu_version_full/,/endef/d' kernel/Makefile
# 删除 API 版本定义
sed -i '/KSU_VERSION_API :=/d' kernel/Makefile
# 删除完整版本定义
sed -i '/KSU_VERSION_FULL :=/d' kernel/Makefile
# 在 REPO_OWNER 行后插入新版本定义
awk -v def="$VERSION_DEFINITIONS" '
# 当找到 REPO_OWNER 行时,插入版本定义并设置标记
/REPO_OWNER :=/ {print; print def; inserted=1; next}
# 打印所有行
1
# 如果未找到插入点,在文件末尾追加
END {if (!inserted) print def}
' kernel/Makefile > kernel/Makefile.tmp && mv kernel/Makefile.tmp kernel/Makefile
# 生成自定义版本号(基于提交计数), 失败时使用 114514
KSU_VERSION=$(expr $(git rev-list --count main) + 37185 2>/dev/null || echo 114514)
# 存储版本号到 GitHub 环境变量
echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
# 验证修改结果
grep -A10 "REPO_OWNER" kernel/Makefile # 检查插入点后的内容
grep "KSU_VERSION_FULL" kernel/Makefile # 确认版本定义存在
echo "SukiSU版本号: v${KSU_API_VERSION}-${GIT_COMMIT_HASH}@cctv18"
elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
echo "正在配置KernelSU Next..."
curl -LSs "https://raw.githubusercontent.com/pershoot/KernelSU-Next/next-susfs/kernel/setup.sh" | bash -s next-susfs
cd KernelSU-Next
KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/pershoot/KernelSU-Next/commits?sha=next&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 10200)
echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
sed -i "s/DKSU_VERSION=11998/DKSU_VERSION=${KSU_VERSION}/" kernel/Makefile
#为KernelSU Next添加WildKSU管理器支持
cd ../common/drivers/kernelsu
wget https://github.com/WildKernels/kernel_patches/raw/refs/heads/main/next/susfs_fix_patches/v1.5.12/fix_apk_sign.c.patch
patch -p2 -N -F 3 < fix_apk_sign.c.patch || true
elif [[ ${{ github.event.inputs.ksu_type }} == "mksu" ]]; then
echo "正在配置 MKSU (5ec1cff/KernelSU)..."
curl -LSs "https://raw.githubusercontent.com/5ec1cff/KernelSU/refs/heads/main/kernel/setup.sh" | bash -s main
cd ./KernelSU
KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/5ec1cff/KernelSU/commits?sha=main&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 20000)
echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
sed -i "s/DKSU_VERSION=16/DKSU_VERSION=${KSU_VERSION}/" kernel/Makefile
else
echo "正在配置原版 KernelSU (tiann/KernelSU)..."
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/refs/heads/main/kernel/setup.sh" | bash -s main
cd ./KernelSU
KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/tiann/KernelSU/commits?sha=main&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 20000)
echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
sed -i "s/DKSU_VERSION=16/DKSU_VERSION=${KSU_VERSION}/" kernel/Makefile
fi
- name: 应用 KernelSU & SUSFS 补丁
if: inputs.susfs_enable
run: |
cd kernel_workspace
if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
echo "正在添加SukiSU Ultra补丁..."
git clone https://github.com/ShirkNeko/susfs4ksu.git -b gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}
git clone https://github.com/ShirkNeko/SukiSU_patch.git
cp ./susfs4ksu/kernel_patches/50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch ./common/
cp ./susfs4ksu/kernel_patches/fs/* ./common/fs/
cp ./susfs4ksu/kernel_patches/include/linux/* ./common/include/linux/
cp ./SukiSU_patch/69_hide_stuff.patch ./common/
cd ./common
patch -p1 < 50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch || true
#临时修复 undeclared identifier 'vma' 编译错误:把vma = find_vma(...)替换为struct vm_area_struct *vma = find_vma(...),解决部分版本源码中vma定义缺失的问题
sed -i 's|vma = find_vma(mm|struct vm_area_struct *&|' ./fs/proc/task_mmu.c
patch -p1 < 69_hide_stuff.patch || true
elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
echo "正在添加KernelSU Next补丁..."
git clone https://gitlab.com/simonpunk/susfs4ksu.git -b gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}
#由于KernelSU Next尚未更新并适配susfs 2.0.0,故回退至susfs 1.5.12
cd susfs4ksu && git checkout f450ec00bf592d080f59b01ff6f9242456c9a427 && cd ..
git clone https://github.com/WildKernels/kernel_patches.git
cp ./susfs4ksu/kernel_patches/50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch ./common/
cp ./susfs4ksu/kernel_patches/fs/* ./common/fs/
cp ./susfs4ksu/kernel_patches/include/linux/* ./common/include/linux/
cp ./kernel_patches/next/scope_min_manual_hooks_v1.5.patch ./common/
cp ./kernel_patches/69_hide_stuff.patch ./common/
cd ./common
patch -p1 < 50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch || true
#临时修复 undeclared identifier 'vma' 编译错误:把vma = find_vma(...)替换为struct vm_area_struct *vma = find_vma(...),解决部分版本源码中vma定义缺失的问题
sed -i 's|vma = find_vma(mm|struct vm_area_struct *&|' ./fs/proc/task_mmu.c
patch -p1 -N -F 3 < scope_min_manual_hooks_v1.5.patch || true
patch -p1 -N -F 3 < 69_hide_stuff.patch || true
elif [[ ${{ github.event.inputs.ksu_type }} == "mksu" ]]; then
echo "正在为 MKSU (5ec1cff/KernelSU)添加补丁..."
git clone https://gitlab.com/simonpunk/susfs4ksu.git -b gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}
git clone https://github.com/ShirkNeko/SukiSU_patch.git
cp ./susfs4ksu/kernel_patches/KernelSU/10_enable_susfs_for_ksu.patch ./KernelSU/
cp ./susfs4ksu/kernel_patches/50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch ./common/
cp ./susfs4ksu/kernel_patches/fs/* ./common/fs/
cp ./susfs4ksu/kernel_patches/include/linux/* ./common/include/linux/
cp ./SukiSU_patch/69_hide_stuff.patch ./common/
cd ./KernelSU
patch -p1 < 10_enable_susfs_for_ksu.patch || true
#为MKSU修正susfs 2.0.0补丁
wget https://github.com/cctv18/oppo_oplus_realme_sm8750/raw/refs/heads/main/other_patch/mksu_supercalls.patch
patch -p1 < mksu_supercalls.patch || true
wget https://github.com/cctv18/oppo_oplus_realme_sm8750/raw/refs/heads/main/other_patch/fix_umount.patch
patch -p1 < fix_umount.patch || true
cd ../common
patch -p1 < 50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch || true
#临时修复 undeclared identifier 'vma' 编译错误:把vma = find_vma(...)替换为struct vm_area_struct *vma = find_vma(...),解决部分版本源码中vma定义缺失的问题
sed -i 's|vma = find_vma(mm|struct vm_area_struct *&|' ./fs/proc/task_mmu.c
patch -p1 -N -F 3 < 69_hide_stuff.patch || true
else
echo "正在为原版 KernelSU (tiann/KernelSU)添加补丁..."
git clone https://gitlab.com/simonpunk/susfs4ksu.git -b gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}
git clone https://github.com/ShirkNeko/SukiSU_patch.git
cp ./susfs4ksu/kernel_patches/KernelSU/10_enable_susfs_for_ksu.patch ./KernelSU/
cp ./susfs4ksu/kernel_patches/50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch ./common/
cp ./susfs4ksu/kernel_patches/fs/* ./common/fs/
cp ./susfs4ksu/kernel_patches/include/linux/* ./common/include/linux/
cp ./SukiSU_patch/69_hide_stuff.patch ./common/
cd ./KernelSU
patch -p1 < 10_enable_susfs_for_ksu.patch || true
wget https://github.com/cctv18/oppo_oplus_realme_sm8750/raw/refs/heads/main/other_patch/fix_umount.patch
patch -p1 < fix_umount.patch || true
cd ../common
patch -p1 < 50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch || true
#临时修复 undeclared identifier 'vma' 编译错误:把vma = find_vma(...)替换为struct vm_area_struct *vma = find_vma(...),解决部分版本源码中vma定义缺失的问题
sed -i 's|vma = find_vma(mm|struct vm_area_struct *&|' ./fs/proc/task_mmu.c
patch -p1 -N -F 3 < 69_hide_stuff.patch || true
fi
- name: 应用lz4 1.10.0 & zstd 1.5.7补丁
run: |
if [[ "${{ github.event.inputs.lz4_enable }}" == "1" || "${{ github.event.inputs.lz4_enable }}" == "3" ]]; then
echo "正在添加lz4 1.10.0 & zstd 1.5.7补丁…"
cd kernel_workspace
git clone https://github.com/cctv18/oppo_oplus_realme_sm8750.git
cp ./oppo_oplus_realme_sm8750/zram_patch/001-lz4.patch ./common/
cp ./oppo_oplus_realme_sm8750/zram_patch/001-lz4-clearMake.patch ./common/
cp ./oppo_oplus_realme_sm8750/zram_patch/lz4armv8.S ./common/lib
cp ./oppo_oplus_realme_sm8750/zram_patch/002-zstd.patch ./common/
cd ./common
git apply -p1 < 001-lz4.patch || true
git apply -p1 < 001-lz4-clearMake.patch || true
patch -p1 < 002-zstd.patch || true
fi
- name: 应用 lz4kd 补丁
run: |
if [[ "${{ github.event.inputs.lz4_enable }}" == "2" || "${{ github.event.inputs.lz4_enable }}" == "3" ]]; then
echo "正在添加lz4kd补丁…"
cd kernel_workspace
if [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
git clone https://github.com/ShirkNeko/SukiSU_patch.git
fi
cd common
cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./include/linux/
cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./lib
cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./crypto
cp ../SukiSU_patch/other/zram/zram_patch/${{ env.KERNEL_VERSION }}/lz4kd.patch ./
patch -p1 -F 3 < lz4kd.patch || true
fi
- name: 添加SUSFS 配置项
if: inputs.susfs_enable
run: |
cd kernel_workspace
echo "CONFIG_KSU_SUSFS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_HAS_MAGIC_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_PATH=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_AUTO_ADD_SUS_KSU_DEFAULT_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_AUTO_ADD_SUS_BIND_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_KSTAT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_TRY_UMOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SPOOF_UNAME=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_ENABLE_LOG=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_OPEN_REDIRECT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_MAP=y" >> ./common/arch/arm64/configs/gki_defconfig
- name: 添加 KSU & 其他配置项
run: |
cd kernel_workspace
echo "CONFIG_KSU=y" >> ./common/arch/arm64/configs/gki_defconfig
if [[ ${{ github.event.inputs.kpm_enable }} == 'true' && ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
echo "CONFIG_KPM=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
#添加对 Mountify (backslashxx/mountify) 模块的支持
echo "CONFIG_TMPFS_XATTR=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TMPFS_POSIX_ACL=y" >> ./common/arch/arm64/configs/gki_defconfig
if [[ "${{ github.event.inputs.lz4_enable }}" == "2" || "${{ github.event.inputs.lz4_enable }}" == "3" ]]; then
echo "CONFIG_ZSMALLOC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_CRYPTO_LZ4HC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_CRYPTO_LZ4K=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_CRYPTO_LZ4KD=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_CRYPTO_842=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
# 开启O2编译优化配置
echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> ./common/arch/arm64/configs/gki_defconfig
#禁用 defconfig 检查
sed -i 's/check_defconfig//' ./common/build.config.gki
#跳过将uapi标准头安装到 usr/include 目录的不必要操作,节省编译时间
echo "CONFIG_HEADERS_INSTALL=n" >> ./common/arch/arm64/configs/gki_defconfig
- name: 启用网络功能增强优化配置
run: |
cd kernel_workspace
if [[ "${{ github.event.inputs.better_net }}" == "true" ]]; then
#启用 BPF 流解析器,实现高性能网络流量处理,增强网络监控和分析能力
echo "CONFIG_BPF_STREAM_PARSER=y" >> ./common/arch/arm64/configs/gki_defconfig
#开启增强 Netfilter 防火墙扩展模块,支持基于地址类型的匹配规则,启用 IP 集合支持,提高防火墙规则灵活性,支持更复杂的流量过滤策略
echo "CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NETFILTER_XT_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
#启用 IP 集框架及其多种数据结构实现,提供高效的大规模 IP 地址管理,提高防火墙规则处理效率,减少内存占用
echo "CONFIG_IP_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_MAX=65534" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_PORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPMARK=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORTIP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_MAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETIFACE=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_LIST_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
#启用 IPv6 网络地址转换
echo "CONFIG_IP6_NF_NAT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP6_NF_TARGET_MASQUERADE=y" >> ./common/arch/arm64/configs/gki_defconfig
#由于部分机型的vintf兼容性检测规则,在开启CONFIG_IP6_NF_NAT后开机会出现"您的设备内部出现了问题。请联系您的设备制造商了解详情。"的提示,故添加一个配置修复补丁,在编译内核时隐藏CONFIG_IP6_NF_NAT=y但不影响对应功能编译
cd common
wget https://github.com/cctv18/oppo_oplus_realme_sm8750/raw/refs/heads/main/other_patch/config.patch
patch -p1 -F 3 < config.patch || true
fi
- name: 添加 BBR 等一系列拥塞控制算法
run: |
if [[ "${{ github.event.inputs.bbr_enable }}" == "true" || "${{ github.event.inputs.bbr_enable }}" == "default" ]]; then
echo "正在添加BBR等拥塞控制算法..."
cd kernel_workspace
#开启TCP拥塞控制算法控制器(必需)
echo "CONFIG_TCP_CONG_ADVANCED=y" >> ./common/arch/arm64/configs/gki_defconfig
################################################################################################################################
# BBR:基于链路容量的代表拥塞控制算法,不再使用丢包、延时等信号去衡量拥塞是否发生,而是直接对网络建模来应对、避免真实的网络拥塞;
# 具有高吞吐、低延迟、抗丢包的特点,但在手机上使用时由于持续探测带宽/RTT、高频计算与发包增加 CPU 和射频模块功耗,会增加耗电及发热;
# 且移动基站缓冲区深度通常较小(~50ms),BBR 的带宽探测阶段(ProbeRTT)过度降窗可能导致吞吐量骤降,且网络切换(WiFi→5G)时需重新
# 探测参数,反而增加延迟或导致速率振荡(短暂卡顿),且存在 RTT 不公平性,与基于丢包的流竞争时可能过于强势,在混合网络环境中
#(如 BBR + CUBIC 共存),BBR 会抢占更多其他软件的带宽,降低其他应用的公平性(如后台软件更新影响前台视频播放)。
# 因此,虽然BBR可以显著减少排队延迟,抗丢包能力强,带宽利用率高,但由于其会增加耗电,且易导致网络速率波动,故安卓系统默认不使用
# BBR拥塞算法,而是使用在吞吐量、稳定性、兼容性、能效之间取得最佳平衡的CUBIC算法。在开启BBR前,请考虑自己是否真的有使用BBR的必要。
################################################################################################################################
echo "CONFIG_TCP_CONG_BBR=y" >> ./common/arch/arm64/configs/gki_defconfig
#CUBIC:安卓的默认TCP拥塞控制算法,在吞吐量、稳定性、兼容性、能效之间取得最佳平衡,具有高兼容性与公平性、抗网络波动性强、低计算开销的特点,是绝大部分移动场景的优先选择
echo "CONFIG_TCP_CONG_CUBIC=y" >> ./common/arch/arm64/configs/gki_defconfig
#VEGAS:基于时延的拥塞控制算法之一,将回路响应时间(Round Trip Time,RTT)增加视为出现拥塞,增加时增大拥塞窗口,减小时减小拥塞窗口
echo "CONFIG_TCP_CONG_VEGAS=y" >> ./common/arch/arm64/configs/gki_defconfig
#New Vegas:Vegas 算法的改进版,优化了 RTT 测量和竞争公平性,可以更准确地检测拥塞,与 Reno/CUBIC 共存能力提升
echo "CONFIG_TCP_CONG_NV=y" >> ./common/arch/arm64/configs/gki_defconfig
#Westwood+:基于带宽估计(ACK 到达率)动态设置拥塞窗口和慢启动阈值;快速恢复,适合无线网络(区分拥塞丢包与无线丢包)
echo "CONFIG_TCP_CONG_WESTWOOD=y" >> ./common/arch/arm64/configs/gki_defconfig
#HTCP:一种基于损失的算法,使用 AIMD 来控制拥塞窗口,根据 RTT 动态调整增长因子,结合延迟和丢包信号,针对高延迟的高速网络进行优化
echo "CONFIG_TCP_CONG_HTCP=y" >> ./common/arch/arm64/configs/gki_defconfig
#brutal:一种通过主动探测 + 激进抢占最大化吞吐量的拥塞算法,无拥塞窗口上限,轻度丢包(<20%)不降窗,避免类似 BBR 的 ProbeRTT 阶段,
#持续维持高发送速率,与 Reno/CUBIC 共存时,Brutal 可通过高频发包抢占 90%+ 带宽,适用于高丢包弱网环境(如公共 Wi-Fi、蜂窝网络)及
#直播推流、云游戏上行链路等需优先保证吞吐量而非延迟敏感的场景,提升弱网吞吐性能,对抗运营商 QoS 限速。但由于TCP Brutal 仅在应用程序
#对每个 TCP 连接设置带宽参数之后才能正常工作,绝大部分安卓应用都不支持该操作,故请勿将 TCP Brutal 设置成默认拥塞控制算法。
echo "CONFIG_TCP_CONG_BRUTAL=y" >> ./common/arch/arm64/configs/gki_defconfig
if [[ "${{ github.event.inputs.bbr_enable }}" == "default" ]]; then
echo "正在将BBR设为默认拥塞控制算法..."
echo "CONFIG_DEFAULT_TCP_CONG=bbr" >> ./common/arch/arm64/configs/gki_defconfig
else
echo "CONFIG_DEFAULT_TCP_CONG=cubic" >> ./common/arch/arm64/configs/gki_defconfig
fi
fi
- name: 启用ADIOS IO调度器
run: |
if [[ "${{ github.event.inputs.adios_rekernel_enable }}" == "1" || "${{ github.event.inputs.adios_rekernel_enable }}" == "3" ]]; then
echo "正在启用ADIOS IO调度器(将截止时间优先调度算法与基于自主学习的自适应延迟控制算法相结合, 降低I/O延迟)…"
cd kernel_workspace
echo "CONFIG_MQ_IOSCHED_ADIOS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_MQ_IOSCHED_DEFAULT_ADIOS=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
- name: 启用Re-Kernel支持
run: |
if [[ "${{ github.event.inputs.adios_rekernel_enable }}" == "2" || "${{ github.event.inputs.adios_rekernel_enable }}" == "3" ]]; then
echo "正在启用Re-Kernel支持(用于与Freezer,NoActive等软件配合使用,提升冻结后台能力)…"
cd kernel_workspace
echo "CONFIG_REKERNEL=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
- name: 启用内核级基带保护
run: |
if [[ "${{ github.event.inputs.baseband_guard }}" == "true" ]]; then
echo "正在启用启用内核级基带保护支持…"
cd kernel_workspace
echo "CONFIG_BBG=y" >> ./common/arch/arm64/configs/gki_defconfig
cd ./common/security
wget https://github.com/cctv18/Baseband-guard/archive/refs/heads/master.zip
unzip -q master.zip
mv "Baseband-guard-master" baseband-guard
printf '\nobj-$(CONFIG_BBG) += baseband-guard/\n' >> ./Makefile
sed -i '/^config LSM$/,/^help$/{ /^[[:space:]]*default/ { /baseband_guard/! s/lockdown/lockdown,baseband_guard/ } }' ./Kconfig
awk '
/endmenu/ { last_endmenu_line = NR }
{ lines[NR] = $0 }
END {
for (i=1; i<=NR; i++) {
if (i == last_endmenu_line) {
sub(/endmenu/, "", lines[i]);
print lines[i] "source \"security/baseband-guard/Kconfig\""
print ""
print "endmenu"
} else {
print lines[i]
}
}
}
' ./Kconfig > Kconfig.tmp && mv Kconfig.tmp ./Kconfig
sed -i 's/selinuxfs.o //g' "./selinux/Makefile"
sed -i 's/hooks.o //g' "./selinux/Makefile"
cat "./baseband-guard/sepatch.txt" >> "./selinux/Makefile"
fi
- name: 添加制作名称
run: |
cd kernel_workspace
echo "替换内核版本后缀..."
if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
echo "当前内核版本后缀:${{ github.event.inputs.kernel_suffix }}"
for f in ./common/scripts/setlocalversion; do
sed -i "\$s|echo \"\\\$res\"|echo \"-${{ github.event.inputs.kernel_suffix }}\"|" "$f"
done
sudo sed -i 's/-4k/-${{ github.event.inputs.KERNEL_SUFFIX }}/g' ./common/arch/arm64/configs/gki_defconfig
else
echo "当前内核版本后缀:${{ env.KERNEL_NAME }}"
for f in ./common/scripts/setlocalversion; do
sed -i "\$s|echo \"\\\$res\"|echo \"-${{ env.KERNEL_NAME }}\"|" "$f"
done
sudo sed -i 's/-4k/-${{ env.KERNEL_NAME }}/g' ./common/arch/arm64/configs/gki_defconfig
fi
sed -i 's/${scm_version}//' ./common/scripts/setlocalversion
echo "CONFIG_LOCALVERSION_AUTO=n" >> ./common/arch/arm64/configs/gki_defconfig
- name: 构建内核
run: |
WORKDIR="$(pwd)"
export PATH="/usr/lib/ccache:$PATH"
export PATH="$WORKDIR/kernel_workspace/clang18/bin:$PATH"
export PATH="$WORKDIR/kernel_workspace/build-tools/bin:$PATH"
CLANG_DIR="$WORKDIR/kernel_workspace/clang18/bin"
CLANG_VERSION="$($CLANG_DIR/clang --version | head -n 1)"
LLD_VERSION="$($CLANG_DIR/ld.lld --version | head -n 1)"
echo "编译器信息:"
echo "Clang版本: $CLANG_VERSION"
echo "LLD版本: $LLD_VERSION"
pahole_version=$(pahole --version 2>/dev/null | head -n1); [ -z "$pahole_version" ] && echo "pahole版本:未安装" || echo "pahole版本:$pahole_version"
export CCACHE_LOGFILE="${{ github.workspace }}/kernel_workspace/ccache.log"
export CCACHE_COMPILERCHECK="none"
export CCACHE_BASEDIR="${{ github.workspace }}"
export CCACHE_NOHASHDIR="true"
export CCACHE_HARDLINK="true"
export CCACHE_DIR="${{ env.CCACHE_DIR }}"
export CCACHE_MAXSIZE="3G"
echo "sloppiness = file_stat_matches,include_file_ctime,include_file_mtime,pch_defines,file_macro,time_macros" >> "$CCACHE_DIR/ccache.conf"
cd kernel_workspace/common
wget https://github.com/cctv18/oppo_oplus_realme_sm8750/raw/refs/heads/main/lib/libfakestat.so
wget https://github.com/cctv18/oppo_oplus_realme_sm8750/raw/refs/heads/main/lib/libfaketimeMT.so
chmod 777 ./*.so
export FAKESTAT="2025-05-25 12:00:00"
export FAKETIME="@2025-05-25 13:00:00"
echo "FAKESTAT=$FAKESTAT" >> $GITHUB_ENV
echo "FAKETIME=$FAKETIME" >> $GITHUB_ENV
SO_DIR=$(pwd)
export PRELOAD_LIBS="$SO_DIR/libfakestat.so $SO_DIR/libfaketimeMT.so"
#创建 CC (编译器) 包装器
echo '#!/bin/bash' > cc-wrapper
echo 'export LD_PRELOAD="'$PRELOAD_LIBS'"' >> cc-wrapper
echo 'export FAKESTAT="'$FAKESTAT'"' >> cc-wrapper
echo 'export FAKETIME="'$FAKETIME'"' >> cc-wrapper
echo 'ccache clang "$@"' >> cc-wrapper
#创建 LD (链接器) 包装器
echo '#!/bin/bash' > ld-wrapper
echo 'export LD_PRELOAD="'$PRELOAD_LIBS'"' >> ld-wrapper
echo 'export FAKESTAT="'$FAKESTAT'"' >> ld-wrapper
echo 'export FAKETIME="'$FAKETIME'"' >> ld-wrapper
echo 'ld.lld "$@"' >> ld-wrapper
# 测试时间劫持测试是否正常工作
echo "--- [Wrapper Test] 正在创建通用的时间劫持测试脚本 ---"
echo '#!/bin/bash' > test-wrapper.sh
echo 'export LD_PRELOAD="'$PRELOAD_LIBS'"' >> test-wrapper.sh
echo 'export FAKESTAT="'$FAKESTAT'"' >> test-wrapper.sh
echo 'export FAKETIME="'$FAKETIME'"' >> test-wrapper.sh
echo 'echo ">>> Wrapper 内部环境检查完毕."' >> test-wrapper.sh
echo 'exec "$@"' >> test-wrapper.sh # 执行所有传入的参数
chmod +x test-wrapper.sh
echo "--- [Wrapper Test] 正在测试 (date) 命令 ---"
./test-wrapper.sh date
echo "--- [Wrapper Test] 正在测试 (stat) 命令 ---"
./test-wrapper.sh stat ./Makefile
echo "--- [Wrapper Test] 测试完毕 ---"
chmod +x cc-wrapper ld-wrapper
echo "--- 编译前环境时间: $(LD_PRELOAD=$PRELOAD_LIBS date) ---"
echo "--- 编译前环境文件时间戳: ---"
LD_PRELOAD=$PRELOAD_LIBS stat ./Makefile
#在构建内核的同时清除不必要的.NET, Android NDK, Haskell, CodeQL运行库,清理空间且不阻塞后续步骤运行
sudo rm -rf /usr/share/dotnet &
sudo rm -rf /usr/local/lib/android &
sudo rm -rf /opt/ghc &
sudo rm -rf /opt/hostedtoolcache/CodeQL &
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" LD="ld.lld" HOSTLD=ld.lld O=out KCFLAGS+=-O2 KCFLAGS+=-Wno-error gki_defconfig &&
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="$(pwd)/cc-wrapper" LD="$(pwd)/ld-wrapper" HOSTLD=ld.lld O=out KCFLAGS+=-O2 KCFLAGS+=-Wno-error Image
# 编译后时间劫持二次校验
echo "--- 编译后环境时间: $(LD_PRELOAD=$PRELOAD_LIBS date) ---"
echo "--- 编译后环境文件时间戳: ---"
LD_PRELOAD=$PRELOAD_LIBS stat ./Makefile
echo "内核编译完成!"
echo "ccache状态:"
ccache -s
echo "编译后空间:"
df -h
- name: 应用KPM并修补内核
run: |
if [[ ${{ github.event.inputs.kpm_enable }} == 'true' && ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
echo "正在应用KPM并修补内核..."
cd kernel_workspace/common/out/arch/arm64/boot
curl -LO https://github.com/SukiSU-Ultra/SukiSU_KernelPatch_patch/releases/latest/download/patch_linux
chmod +x patch_linux
./patch_linux
rm -f Image
mv oImage Image
fi
- name: 克隆 AnyKernel3 并打包
run: |
cd kernel_workspace
git clone https://github.com/cctv18/AnyKernel3 --depth=1
rm -rf ./AnyKernel3/.git
cd AnyKernel3
cp ../common/out/arch/arm64/boot/Image ./Image
if [[ ! -f ./Image ]]; then
echo "未找到内核镜像文件,构建可能出错"
exit 1
fi
if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
KSU_TYPENAME="SukiSU"
elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
KSU_TYPENAME="KSUNext"
elif [[ ${{ github.event.inputs.ksu_type }} == "mksu" ]]; then
KSU_TYPENAME="MKSU"
else
KSU_TYPENAME="KSU"
fi
if [[ "${{ github.event.inputs.lz4_enable }}" == "2" || "${{ github.event.inputs.lz4_enable }}" == "3" ]]; then
wget https://raw.githubusercontent.com/cctv18/oppo_oplus_realme_sm8750/refs/heads/main/zram.zip
fi
if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
zip -r ../AnyKernel3_${KSU_TYPENAME}_${{ env.KSUVER }}_${{ env.KERNEL_VERSION }}_A15_${{ github.event.inputs.kernel_suffix }}.zip ./*
else
zip -r ../AnyKernel3_${KSU_TYPENAME}_${{ env.KSUVER }}_${{ env.KERNEL_VERSION }}_A15_${{ env.KERNEL_NAME }}.zip ./*
fi
- name: 上传 Ccache 调试日志
if: always() && inputs.ccache_debug
uses: actions/upload-artifact@v4
with:
name: ccache-debug-log
path: ${{ github.workspace }}/kernel_workspace/ccache.log
- name: 上传 ZIP 工件
uses: actions/upload-artifact@v4
with:
name: Kernel_ZIP_Artifacts
path: ${{ github.workspace }}/kernel_workspace/AnyKernel*.zip
release:
needs: build
runs-on: ubuntu-latest
permissions:
contents: write
packages: write
actions: read
steps:
- name: 下载 ZIP 工件
uses: actions/download-artifact@v4
with:
name: Kernel_ZIP_Artifacts
path: ./release_zips
- name: 设置环境变量
run: |
if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
FULL_VERSION=${{ format('{0}.89-{1}', env.KERNEL_VERSION, github.event.inputs.kernel_suffix) }}
echo "FULL_VERSION=$FULL_VERSION" >> $GITHUB_ENV
export FULL_VERSION=$FULL_VERSION
else
FULL_VERSION=${{ format('{0}.89-{1}', env.KERNEL_VERSION, env.KERNEL_NAME) }}
echo "FULL_VERSION=$FULL_VERSION" >> $GITHUB_ENV
export FULL_VERSION=$FULL_VERSION
fi
TIME="$(TZ='Asia/Shanghai' date +'%y%m%d%H%M%S')"
TIME_FORM="$(TZ='Asia/Shanghai' date +'%Y-%m-%d %H:%M:%S')"
echo "TIME=$TIME" >> $GITHUB_ENV
echo "TIME_FORM=$TIME_FORM" >> $GITHUB_ENV
TAG_HEAD="OPPO+OPlus+Realme-A15-build"
echo "TAG_HEAD=$TAG_HEAD" >> $GITHUB_ENV
if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
KSU_TYPENAME="SukiSU Ultra"
elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
KSU_TYPENAME="KSUNext"
elif [[ ${{ github.event.inputs.ksu_type }} == "mksu" ]]; then
KSU_TYPENAME="MKSU"
else
KSU_TYPENAME="KSU"
fi
echo "KSU_TYPENAME=$KSU_TYPENAME" >> $GITHUB_ENV
if [[ "${{ github.event.inputs.lz4_enable }}" == "2" || "${{ github.event.inputs.lz4_enable }}" == "3" ]]; then
lz4kd_enable="true"
else
lz4kd_enable="false"
fi
if [[ "${{ github.event.inputs.lz4_enable }}" == "1" || "${{ github.event.inputs.lz4_enable }}" == "3" ]]; then
lz4_zstd_enable="true"
else
lz4_zstd_enable="false"
fi
if [[ "${{ github.event.inputs.adios_rekernel_enable }}" == "1" || "${{ github.event.inputs.adios_rekernel_enable }}" == "3" ]]; then
adios_enable="true"
else
adios_enable="false"
fi
if [[ "${{ github.event.inputs.adios_rekernel_enable }}" == "2" || "${{ github.event.inputs.adios_rekernel_enable }}" == "3" ]]; then
rekernel_enable="true"
else
rekernel_enable="false"
fi
echo "lz4kd_enable=$lz4kd_enable" >> $GITHUB_ENV
echo "lz4_zstd_enable=$lz4_zstd_enable" >> $GITHUB_ENV
echo "adios_enable=$adios_enable" >> $GITHUB_ENV
echo "rekernel_enable=$rekernel_enable" >> $GITHUB_ENV
- name: 创建发布
id: create_release
uses: softprops/action-gh-release@v1
with:
tag_name: "${{ env.TAG_HEAD }}-${{ env.TIME }}"
name: "${{ env.TAG_HEAD }}-${{ env.FULL_VERSION }}"
body: |
### 📱 欧加真 Android 15 ${{ env.KSU_TYPENAME }} MT6991 通用内核 | 构建信息
- 内核版本号: ${{ env.FULL_VERSION }}
- 编译时间: ${{ env.TIME_FORM }}
- 机型:欧加真天玑9400+ 6.6.89 Android 15内核通用(基于一加Ace5 Ultra 6.6.89 版官方OKI源码)
- 特性:${{ env.KSU_TYPENAME }} + 风驰内核
- susfs支持:${{ github.event.inputs.susfs_enable }}
- KPM支持 (仅对sukisu生效):${{ github.event.inputs.kpm_enable }}
- LZ4KD支持:${{ env.lz4kd_enable }}
- LZ4支持:${{ env.lz4_zstd_enable }}
- 网络功能增强:${{ github.event.inputs.better_net }}
- BBR/Brutal 等拥塞控制算法支持:${{ github.event.inputs.bbr_enable }}
- ADIOS IO调度器支持:${{ env.adios_enable }}
- Re-Kernel支持:${{ env.rekernel_enable }}
- 内核级基带保护支持:${{ github.event.inputs.baseband_guard }}
- 推荐系统:ColorOS 15 / RealmeUI 6.0
- SukiSU Ultra管理器下载:[SukiSU-Ultra](https://github.com/SukiSU-Ultra/SukiSU-Ultra/releases)
- KernelSU Next管理器下载:[KernelSU-Next](https://github.com/KernelSU-Next/KernelSU-Next/releases)
- MKSU管理器下载:[Magic-KernelSU](https://github.com/5ec1cff/KernelSU/actions)
- KSU原版管理器下载:[KernelSU](https://github.com/tiann/KernelSU/releases)
### ⏫️ 更新内容:
- 更新${{ env.KSU_TYPENAME }}至最新版本(${{ needs.build.outputs.ksuver }})
- (预留)
### 📋 安装方法 | Installation Guide
1. 若你的手机已经安装了第三方Recovery(如TWRP),可下载对应机型的AnyKernel刷机包后进入Recovery模式,通过Recovery刷入刷机包后重启设备
2. 若你的手机之前已有 root 权限,可在手机上安装[HorizonKernelFlasher](https://github.com/libxzr/HorizonKernelFlasher/releases),在HorizonKernelFlasher中刷入AnyKernel刷机包并重启
3. 若你之前已刷入SukiSU Ultra内核,且SukiSU Ultra管理器已更新至最新版本,可在SukiSU Ultra管理器中直接刷入AnyKernel刷机包并重启
4. 刷入无lz4kd补丁版的内核前若刷入过lz4kd补丁版的内核,为避免出错,请先关闭zram模块
#### ※※※刷写内核有风险,为防止出现意外导致手机变砖,在刷入内核前请务必用[KernelFlasher](https://github.com/capntrips/KernelFlasher)等软件备份boot等关键启动分区!※※※
draft: false
prerelease: false
files: |
release_zips/AnyKernel3_*.zip