-
Notifications
You must be signed in to change notification settings - Fork 1.6k
executable file
·845 lines (792 loc) · 48.3 KB
/
fastbuild_6.6.30.yml
File metadata and controls
executable file
·845 lines (792 loc) · 48.3 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
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
name: 6.6.30 欧加真OKI内核快速构建
env:
TZ: Asia/Shanghai
ANDROID_VERSION: 'android15'
KERNEL_VERSION: '6.6'
SUB_VERSION: '30'
KERNEL_NAME: 'android15-8-g29d86c5fc9dd-abogki428889875-4k'
CCACHE_KEY: ccache-ecsv3-6.6.30
on:
workflow_dispatch:
inputs:
ksu_type:
description: 'KernelSU分支(ReSukiSU/SukiSU Ultra/KernelSU Next/KSU(原版)/无内置KSU,默认ReSukiSU)'
required: true
type: choice
default: 'resukisu'
options:
- 'resukisu'
- 'sukisu'
- 'ksunext'
- 'ksu'
- 'none'
susfs_enable:
description: '是否开启susfs(用于增强隐藏环境挂载功能; 可能轻微增加耗电,上游更新导致不稳定时或不需要可关闭)'
required: true
type: boolean
default: 'true'
kpm_enable:
description: '是否开启kpm(builtin-使用(re)sukisu内置kpm, kpn-使用独立kpm实现(支持任意KSU/面具环境); 不需要可保持默认关闭)'
required: true
type: choice
default: 'false'
options:
- 'false'
- 'builtin'
- 'kpn'
lz4_enable:
description: '是否安装 lz4 1.10.0+zstd 1.5.7 补丁'
required: true
type: boolean
default: 'true'
lz4kd_enable:
description: '是否安装 LZ4KD 补丁(若已开启lz4+zstd补丁则可不开启)'
required: true
type: boolean
default: 'false'
bbr_enable:
description: "是否启用bbr算法(优化上行数据,对手机日用无太大意义甚至可能负优化;false关闭,true仅加入算法,default启用算法并设为默认)"
required: true
type: choice
default: 'false'
options:
- 'false'
- 'true'
- 'default'
droidspaces_enable:
description: '是否启用Droidspaces容器支持(轻量化的完整Linux容器支持;false关闭,standard开启容器+ntsync支持,extend开启更多测试支持项)'
required: true
type: choice
default: 'false'
options:
- 'false'
- 'standard'
- 'extend'
better_net:
description: '是否开启网络功能拓展配置(用于为ipset及需要iptables等高级网络功能内核支持的程序提供支持)'
required: true
type: boolean
default: 'false'
adios_enable:
description: '是否启用ADIOS IO调度器支持(提升IO读写性能)'
required: true
type: boolean
default: 'false'
rekernel_enable:
description: '是否启用Re-Kernel支持(与Freezer/NoActive等软件配合, 提升应用冻结能力)'
required: true
type: boolean
default: 'false'
baseband_guard:
description: '是否开启内核级基带保护(阻止一切对非用户分区的写入,有效防止格机)'
required: true
type: boolean
default: 'true'
ccache_update:
description: '更新ccache缓存(将本次编译生成的ccache缓存覆盖至仓库缓存,在更改编译配置、源码或需要刷新缓存时开启)'
required: true
type: boolean
default: 'false'
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 }}
ak3name: ${{ steps.create_zip.outputs.ak3name }}
permissions:
actions: write
contents: read
steps:
- name: 安装环境依赖+初始化源码仓库及llvm-Clang18工具链
run: |
rm -rf kernel_workspace
mkdir kernel_workspace
cd kernel_workspace
echo "当前仓库:$GITHUB_REPOSITORY"
echo "当前分支:$GITHUB_REF_NAME"
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 &
#旧版完整指令:(由于经过验证大部分指令已内置于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
#使用最新版ccache-ECS(特化优化内核编译缓存,大幅提升二次不同配置编译速度)
wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/lib/ccache-x86-64 -O ccache &&
sudo cp -f ./ccache /usr/bin/ccache &&
sudo chmod +x /usr/bin/ccache &&
rm -f ./ccache &
echo "正在克隆源码仓库..."
aria2c -s16 -x16 -k1M https://github.com/cctv18/android_kernel_common_oneplus_sm8750/archive/refs/heads/oneplus/sm8750_v_15.0.0_oneplus_13.zip -o common.zip &&
unzip -q common.zip &&
mv "android_kernel_common_oneplus_sm8750-oneplus-sm8750_v_15.0.0_oneplus_13" 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_${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}" >> $GITHUB_ENV
echo "CCACHE_MAXSIZE=3G" >> $GITHUB_ENV
echo "当前磁盘空间:"
df -h
echo "当前构建内核版本:${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}"
if [[ "${{ github.event.inputs.droidspaces_enable }}" != "false" ]]; then
CCACHE_REAL_KEY=${{ env.CCACHE_KEY }}-Droidspaces
else
CCACHE_REAL_KEY=${{ env.CCACHE_KEY }}-none
fi
echo "CCACHE_REAL_KEY=$CCACHE_REAL_KEY" >> $GITHUB_ENV
- name: 载入当前版本内核的 ccache缓存
uses: actions/cache@v5
id: ccache-restore
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ env.CCACHE_REAL_KEY }}-${{ runner.os }}-${{ github.ref_name }}
restore-keys: |
${{ env.CCACHE_REAL_KEY }}-${{ runner.os }}-
${{ env.CCACHE_REAL_KEY }}-
- name: 拉取公共预置 ccache 缓存
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
echo "检查本地缓存状态..."
if [ -d "${{ env.CCACHE_DIR }}" ] && [ "$(ls -A ${{ env.CCACHE_DIR }} 2>/dev/null)" ]; then
echo "检测到本地已成功载入 ccache 缓存,跳过公共 ccache 拉取!"
exit 0
fi
echo "未命中缓存,尝试拉取最新公共 ccache ..."
mkdir -p ${{ env.CCACHE_DIR }}
if [[ "${{ github.event.inputs.droidspaces_enable }}" != "false" ]]; then
FILE_NAME="ccache-${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-Droidspaces.tar.zst"
else
FILE_NAME="ccache-${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}.tar.zst"
fi
if gh release download -p "$FILE_NAME" -R cctv18/public_ccache; then
echo "成功下载 $FILE_NAME,正在解压..."
tar -I zstd -xf "$FILE_NAME" -C ${{ env.CCACHE_DIR }}
echo "公共 ccache 恢复完成!"
else
echo "公共 ccache 中未找到对应的 ccache 文件,将进行全量全新编译..."
fi
- name: 清除旧 ccache 缓存
if: inputs.ccache_update
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
echo "正在清除仓库中的旧 ccache 缓存..."
if gh cache delete ${{ env.CCACHE_REAL_KEY }}-${{ runner.os }}-${{ github.ref_name }} -R ${{ github.repository }}; then
echo "成功删除旧的 ccache 缓存!"
else
echo "旧缓存不存在或已被清理!"
fi
- name: 初始化并配置ccache
run: |
# 设置ccache环境变量
export CCACHE_COMPILERCHECK="none"
export CCACHE_BASEDIR="${{ github.workspace }}"
export CCACHE_NOHASHDIR="true"
export CCACHE_NOHARDLINK="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" || ${{ github.event.inputs.ksu_type }} == "resukisu" ]]; then
echo "正在配置ReSukiSU(由于SukiSU长期未维护无法正常编译,且ReSukiSU兼容sukisu管理器,故SukiSU源码仓库已重定向为resukisu)..."
curl -LSs "https://raw.githubusercontent.com/ReSukiSU/ReSukiSU/refs/heads/main/kernel/setup.sh" | bash -s main
echo 'CONFIG_KSU_FULL_NAME_FORMAT="%TAG_NAME%-%COMMIT_SHA%@cctv18"' >> ./common/arch/arm64/configs/gki_defconfig
cd ./KernelSU
# 生成自定义版本号(基于提交计数), 失败时使用 114514
KSU_VERSION=$(expr $(git rev-list --count main) + 30700 2>/dev/null || echo 114514)
# 存储版本号到 GitHub 环境变量
echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
echo "正在配置KernelSU Next..."
curl -LSs "https://raw.githubusercontent.com/pershoot/KernelSU-Next/refs/heads/dev-susfs/kernel/setup.sh" | bash -s dev-susfs
cd KernelSU-Next
rm -rf .git
KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/pershoot/KernelSU-Next/commits?sha=dev&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 30000)
echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
sed -i "s/KSU_VERSION_FALLBACK := 1/KSU_VERSION_FALLBACK := $KSU_VERSION/g" kernel/Kbuild
KSU_GIT_TAG=$(curl -sL "https://api.github.com/repos/KernelSU-Next/KernelSU-Next/tags" | grep -o '"name": *"[^"]*"' | head -n 1 | sed 's/"name": "//;s/"//')
sed -i "s/KSU_VERSION_TAG_FALLBACK := v0.0.1/KSU_VERSION_TAG_FALLBACK := $KSU_GIT_TAG/g" kernel/Kbuild
#为KernelSU Next添加WildKSU管理器支持
cd ../common/drivers/kernelsu
wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/other_patch/apk_sign.patch
patch -p2 -N -F 3 < apk_sign.patch || true
elif [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
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') "+" 30000)
echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
sed -i "s/DKSU_VERSION=16/DKSU_VERSION=${KSU_VERSION}/" kernel/Kbuild
else
echo "已选择无内置KernelSU模式,跳过KernelSU配置..."
fi
- name: 应用 KernelSU & SUSFS 补丁
if: inputs.susfs_enable
run: |
cd kernel_workspace
if [[ ${{ github.event.inputs.ksu_type }} != "none" ]]; then
echo "正在添加susfs补丁..."
git clone --depth=1 https://github.com/cctv18/susfs4oki.git susfs4ksu -b oki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}
wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/other_patch/69_hide_stuff.patch -O ./common/69_hide_stuff.patch
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/
cd ./common
patch -p1 < 50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch || true
patch -p1 -N -F 3 < 69_hide_stuff.patch || true
cd ..
else
echo "已选择无内置KernelSU模式,跳过susfs配置..."
fi
if [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
echo "正在为原版 KernelSU (tiann/KernelSU)添加补丁..."
cp ./susfs4ksu/kernel_patches/KernelSU/10_enable_susfs_for_ksu.patch ./KernelSU/
cd ./KernelSU
patch -p1 < 10_enable_susfs_for_ksu.patch || true
fi
- name: 应用lz4 1.10.0 & zstd 1.5.7补丁
if: inputs.lz4_enable
run: |
echo "正在添加lz4 1.10.0 & zstd 1.5.7补丁…"
cd kernel_workspace
git clone --depth=1 https://github.com/$GITHUB_REPOSITORY.git -b $GITHUB_REF_NAME $GITHUB_ACTOR
cp ./$GITHUB_ACTOR/zram_patch/001-lz4.patch ./common/
cp ./$GITHUB_ACTOR/zram_patch/lz4armv8.S ./common/lib
cp ./$GITHUB_ACTOR/zram_patch/002-zstd.patch ./common/
cd ./common
git apply -p1 < 001-lz4.patch || true
patch -p1 < 002-zstd.patch || true
- name: 应用 lz4kd 补丁
if: inputs.lz4kd_enable
run: |
echo "正在添加lz4kd补丁…"
cd kernel_workspace
if [ ! -d "SukiSU_patch" ]; then
git clone --depth=1 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
- 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 }} == 'builtin' && ( "${{ github.event.inputs.ksu_type }}" == "sukisu" || "${{ github.event.inputs.ksu_type }}" == "resukisu" ) ]]; then
echo "CONFIG_KPM=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [[ "${{ github.event.inputs.susfs_enable }}" == "false" ]]; then
echo "CONFIG_KSU_SUSFS=n" >> ./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.lz4kd_enable }}" == "true" ]]; 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: 启用网络功能增强优化配置
if: inputs.better_net
run: |
cd kernel_workspace
#启用 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/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/other_patch/config.patch
patch -p1 -F 3 < config.patch || true
- name: 添加 BBR 等一系列拥塞控制算法
run: |
if [[ "${{ github.event.inputs.bbr_enable }}" != "false" ]]; 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: 启用 Droidspaces 容器支持
run: |
if [[ "${{ github.event.inputs.droidspaces_enable }}" != "false" ]]; then
echo "正在启用 Droidspaces 容器支持..."
cd kernel_workspace/common
# 应用 Droidspaces 容器必须补丁
wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/droidspaces_patch/fix_sysvipc_kabi_6_7_8.patch
patch -p1 -F 3 < fix_sysvipc_kabi_6_7_8.patch || true
# 修补 oplus_bsp_midas 行为,避免开机崩溃
wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/droidspaces_patch/fix_oplus_bsp_midas.patch
patch -p1 -F 3 < fix_oplus_bsp_midas.patch || true
# 应用 NTSync 补丁
wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/droidspaces_patch/ntsync_base.patch
wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/droidspaces_patch/ntsync_compat_${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch
patch -p1 -F 3 < ntsync_base.patch || true
patch -p1 -F 3 < ntsync_compat_${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch || true
# 开启 Droidspaces 容器所需内核支持
echo "CONFIG_PID_NS=y" >> ./arch/arm64/configs/gki_defconfig
echo "CONFIG_IPC_NS=y" >> ./arch/arm64/configs/gki_defconfig
echo "CONFIG_SYSVIPC=y" >> ./arch/arm64/configs/gki_defconfig
echo "CONFIG_DEVTMPFS=y" >> ./arch/arm64/configs/gki_defconfig
echo "CONFIG_NAMESPACES=y" >> ./arch/arm64/configs/gki_defconfig
echo "CONFIG_POSIX_MQUEUE=y" >> ./arch/arm64/configs/gki_defconfig
echo "CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y" >> ./arch/arm64/configs/gki_defconfig
echo "CONFIG_NETFILTER_XT_TARGET_LOG=y" >> ./arch/arm64/configs/gki_defconfig
echo "CONFIG_NETFILTER_XT_MATCH_RECENT=y" >> ./arch/arm64/configs/gki_defconfig
# 未经测试的配置选项,可能导致bug
#echo "CONFIG_CGROUP_DEVICE=y" >> ./arch/arm64/configs/gki_defconfig
#echo "CONFIG_CGROUP_PIDS=y" >> ./arch/arm64/configs/gki_defconfig
#echo "CONFIG_FW_LOADER_COMPRESS=y" >> ./arch/arm64/configs/gki_defconfig
#echo "CONFIG_BRIDGE_NETFILTER=y" >> ./arch/arm64/configs/gki_defconfig
#echo "CONFIG_NF_TABLES=y" >> ./arch/arm64/configs/gki_defconfig
# 开启 NTSync
echo "CONFIG_NTSYNC=y" >> ./arch/arm64/configs/gki_defconfig
if [[ "${{ github.event.inputs.droidspaces_enable }}" == "extend" ]]; then
echo "正在启用容器环境扩展支持..."
# 开启虚拟 HCI 设备支持
echo "CONFIG_BT_HCIVHCI=y" >> ./arch/arm64/configs/gki_defconfig
# 开启 systemd-coredump 支持
echo "CONFIG_STATIC_USERMODEHELPER=n" >> ./arch/arm64/configs/gki_defconfig
# 添加 Lindroid EVDI DRM 驱动
wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/droidspaces_patch/evdi_drm.patch
patch -p1 -F 3 < evdi_drm.patch || true
echo "CONFIG_DRM_LINDROID_EVDI=y" >> ./arch/arm64/configs/gki_defconfig
fi
fi
- name: 启用ADIOS IO调度器
if: inputs.adios_enable
run: |
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
- name: 启用Re-Kernel支持
if: inputs.rekernel_enable
run: |
echo "正在启用Re-Kernel支持(用于与Freezer,NoActive等软件配合使用,提升冻结后台能力)…"
cd kernel_workspace
echo "CONFIG_REKERNEL=y" >> ./common/arch/arm64/configs/gki_defconfig
- name: 启用内核级基带保护
if: inputs.baseband_guard
run: |
echo "正在启用启用内核级基带保护支持…"
cd kernel_workspace
echo "CONFIG_BBG=y" >> ./common/arch/arm64/configs/gki_defconfig
cd ./common
curl -sSL https://github.com/cctv18/Baseband-guard/raw/master/setup.sh | bash
sed -i '/^config LSM$/,/^help$/{ /^[[:space:]]*default/ { /baseband_guard/! s/selinux/selinux,baseband_guard/ } }' security/Kconfig
- 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_NOHARDLINK="true"
export CCACHE_DIR="${{ env.CCACHE_DIR }}"
export CCACHE_MAXSIZE="3G"
export CCACHE_IS_KERNEL_COMPILING="true"
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/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/lib/libfakestat.so
wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/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: 保存新的 ccache 缓存
if: inputs.ccache_update || steps.ccache-restore.outputs.cache-hit != 'true'
uses: actions/cache/save@v5
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ env.CCACHE_REAL_KEY }}-${{ runner.os }}-${{ github.ref_name }}
- name: 应用KPM并修补内核
run: |
if [[ ${{ github.event.inputs.kpm_enable }} == 'builtin' && ( "${{ github.event.inputs.ksu_type }}" == "sukisu" || "${{ github.event.inputs.ksu_type }}" == "resukisu" ) ]]; 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
if [[ ${{ github.event.inputs.kpm_enable }} == 'kpn' ]]; then
echo "正在应用KP-N并修补内核..."
cd kernel_workspace/common/out/arch/arm64/boot
wget https://github.com/KernelSU-Next/KPatch-Next/releases/latest/download/kptools-linux
wget https://github.com/KernelSU-Next/KPatch-Next/releases/latest/download/kpimg-linux
chmod +x ./kptools-linux
./kptools-linux -p -i ./Image -k ./kpimg-linux -o ./oImage
rm -f Image
mv oImage Image
fi
- name: 克隆 AnyKernel3 并打包
id: create_zip
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 }} == "resukisu" ]]; then
KSU_TYPENAME="ReSukiSU"
elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
KSU_TYPENAME="KSUNext"
elif [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
KSU_TYPENAME="KSU"
else
KSU_TYPENAME="none"
fi
if [[ "${{ github.event.inputs.lz4kd_enable }}" == "true" ]]; then
wget https://raw.githubusercontent.com/$GITHUB_REPOSITORY/refs/heads/$GITHUB_REF_NAME/zram.zip
fi
if [[ ${{ github.event.inputs.kpm_enable }} == 'kpn' ]]; then
wget https://github.com/cctv18/KPatch-Next/releases/latest/download/kpn.zip
fi
if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
AK3_NAME=AnyKernel3_${KSU_TYPENAME}_${{ env.KSUVER }}_${{ env.KERNEL_VERSION }}_${{ github.event.inputs.kernel_suffix }}.zip
else
AK3_NAME=AnyKernel3_${KSU_TYPENAME}_${{ env.KSUVER }}_${{ env.KERNEL_VERSION }}_${{ env.KERNEL_NAME }}.zip
fi
zip -r ../$AK3_NAME ./*
echo "ak3name=$AK3_NAME" >> $GITHUB_OUTPUT
#为AK3添加注释(调试信息)
if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ github.event.inputs.kernel_suffix }}
else
FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ env.KERNEL_NAME }}
fi
TIME_NOW="$(TZ='Asia/Shanghai' date +'%Y-%m-%d %H:%M:%S')"
echo "Author: $GITHUB_ACTOR" > ./ak3.log
echo "Repo: $GITHUB_REPOSITORY" >> ./ak3.log
echo "Branch: $GITHUB_REF_NAME" >> ./ak3.log
echo "Run ID: $GITHUB_RUN_ID" >> ./ak3.log
echo "Commit: $GITHUB_SHA" >> ./ak3.log
echo "Time: $TIME_NOW" >> ./ak3.log
echo "Kernel Ver: $FULL_VERSION" >> ./ak3.log
echo "KSU Branch: ${KSU_TYPENAME}" >> ./ak3.log
echo "KSU Ver: ${KSUVER}" >> ./ak3.log
echo "susfs: ${{ github.event.inputs.susfs_enable }}" >> ./ak3.log
echo "KPM: ${{ github.event.inputs.kpm_enable }}" >> ./ak3.log
echo "LZ4: ${{ github.event.inputs.lz4_enable }}" >> ./ak3.log
echo "LZ4KD: ${{ github.event.inputs.lz4kd_enable }}" >> ./ak3.log
echo "IPset: ${{ github.event.inputs.better_net }}" >> ./ak3.log
echo "BBR&Brutal: ${{ github.event.inputs.bbr_enable }}" >> ./ak3.log
echo "Droidspaces: ${{ github.event.inputs.droidspaces_enable }}" >> ./ak3.log
echo "ADIOS: ${{ github.event.inputs.adios_enable }}" >> ./ak3.log
echo "Re-Kernel: ${{ github.event.inputs.rekernel_enable }}" >> ./ak3.log
echo "BBG: ${{ github.event.inputs.baseband_guard }}" >> ./ak3.log
zip -z ../$AK3_NAME < ./ak3.log
- name: 上传 Ccache 调试日志
if: always() && inputs.ccache_debug
uses: actions/upload-artifact@v7
with:
name: ccache-debug-log
path: ${{ github.workspace }}/kernel_workspace/ccache.log
archive: true
- name: 上传 ZIP 工件
uses: actions/upload-artifact@v7
with:
path: ${{ github.workspace }}/kernel_workspace/AnyKernel*.zip
archive: false
release:
needs: build
runs-on: ubuntu-latest
permissions:
contents: write
packages: write
actions: read
steps:
- name: 下载 ZIP 工件
uses: actions/download-artifact@v8
with:
name: ${{ needs.build.outputs.ak3name }}
path: ./release_zips
skip-decompress: true
- name: 设置环境变量
run: |
if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ github.event.inputs.kernel_suffix }}
echo "FULL_VERSION=$FULL_VERSION" >> $GITHUB_ENV
export FULL_VERSION=$FULL_VERSION
else
FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_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-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 }} == "resukisu" ]]; then
KSU_TYPENAME="ReSukiSU"
elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
KSU_TYPENAME="KernelSU Next"
elif [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
KSU_TYPENAME="KSU"
else
KSU_TYPENAME="无内置KSU"
fi
echo "KSU_TYPENAME=$KSU_TYPENAME" >> $GITHUB_ENV
- name: 创建发布
id: create_release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
cat << 'EOF' > release_notes.md
### 📱 欧加真 ${{ env.KSU_TYPENAME }} SM8750 通用内核 | 构建信息
- 内核版本号: ${{ env.FULL_VERSION }}
- 编译时间: ${{ env.TIME_FORM }}
- 机型:欧加真骁龙8Elite通用 ${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }} 内核(基于一加13 ${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }} 版官方OKI源码)
- KSU分支:${{ env.KSU_TYPENAME }}
- susfs支持:${{ github.event.inputs.susfs_enable }}
- KPM支持 :${{ github.event.inputs.kpm_enable }}
- LZ4支持:${{ github.event.inputs.lz4_enable }}
- LZ4KD支持:${{ github.event.inputs.lz4kd_enable }}
- 网络功能增强:${{ github.event.inputs.better_net }}
- BBR/Brutal 等拥塞控制算法支持:${{ github.event.inputs.bbr_enable }}
- Droidspaces 容器支持:${{ github.event.inputs.droidspaces_enable }}
- ADIOS IO调度器支持:${{ github.event.inputs.adios_enable }}
- Re-Kernel支持:${{ github.event.inputs.rekernel_enable }}
- 内核级基带保护支持:${{ github.event.inputs.baseband_guard }}
- ReSukiSU管理器下载:[ReSukiSU_CI](https://github.com/cctv18/ReSukiSU_CI/releases)
- SukiSU Ultra管理器下载:[SukiSU-Ultra](https://github.com/SukiSU-Ultra/SukiSU-Ultra/releases)
- KernelSU Next管理器下载:[KernelSU-Next](https://github.com/KernelSU-Next/KernelSU-Next/releases)
- 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模块;
5. 由于KernelSU上游更新了元模块功能,最新版KSU管理器(包括除KernelSU Next以外的各分支)需要配合元模块(metamodule)才能正常挂载模块。目前的元模块包括[meta overlayfs](https://github.com/KernelSU-Modules-Repo/meta-overlayfs), [mountify](https://github.com/backslashxx/mountify), [meta magicmount](https://github.com/7a72/meta-magic_mount/), [meta magicmount rs](https://github.com/Tools-cx-app/meta-magic_mount/), [hybrid mount](https://github.com/YuzakiKokuban/meta-hybrid_mount)等。若你是第一次使用KSU或刚从旧版KSU管理器升级至新版,请先安装一个元模块,这样其他涉及系统挂载的模块才能正常运行;
6. KernelPatch Next(即KPN)是一个独立于KSU的KPM实现,可以运行在任意KSU/面具环境中(不适用于Apatch),且不能与(Re)SukiSU内置的kpm功能共同使用,使用前请保证你的内核没有内置的kpm实现/修补。
#### ※※※刷写内核有风险,为防止出现意外导致手机变砖,在刷入内核前请务必用[KernelFlasher](https://github.com/capntrips/KernelFlasher)等软件备份boot等关键启动分区!※※※
EOF
gh release create "${{ env.TAG_HEAD }}-${{ env.TIME }}" \
--repo "${{ github.repository }}" \
--title "${{ env.TAG_HEAD }}-${{ env.FULL_VERSION }}" \
--notes-file release_notes.md \
release_zips/AnyKernel3_*.zip