【Android安全- Pixel 8a(akita:6.1-android16内核支持ebpf)AOSP / GKI 内核源码获取、编译与刷机实战指南】此文章归类为:Android安全。
这篇文章围绕 Pixel 8a(akita),系统梳理 AOSP / GKI 内核源码的获取方式、编译方法、镜像含义、刷机步骤,以及后续源码阅读与调试的常见工作流。
在付出一台Pixel 8a刷成砖的代价下,成功刷入了可以使用ebpf的内核。这篇博客原先只是我零散的笔记,今天让AI帮忙整理下,给有需要的人提供参考。
如果你符合下面任意一种情况,这篇文章会比较适合你:
在开始之前,先记住一句最重要的话:
AOSP 负责系统源码,GKI 负责通用内核基线,vendor 模块和设备树负责设备差异化。
如果你把这句话理解透了,后面的下载、编译、刷机、调试,基本都会顺很多。
很多“编不过”“刷不开机”“不知道该拉哪个仓”的问题,本质上都不是命令问题,而是概念没对齐。
AOSP(Android Open Source Project)是 Android 系统源码本身,主要包括:
你如果想看 SystemServer、AMS、PackageManager、Binder Framework、Java Framework 这些内容,主要是在 AOSP 里。
GKI(Generic Kernel Image)可以理解为 Google 主导维护的 Android 通用内核基线。
它的目标是:
设备最终运行的并不只是“通用 GKI 内核”这一层,还包括:
所以,真正落到设备侧,看到的是一套 GKI + vendor 模块 + dtbo + 多种 boot 分区 的组合,而不是传统时代那种“一个厂商大内核打包进 boot.img”这么简单。
如果你是第一次接触 repo 管理的大仓,这一部分建议先看清楚。
1 2 3 4 5 | AOSP 根目录├─ .repo/ # repo 工具本地管理目录│ └─ manifests/ # manifest 仓库同步到本地后的内容│ └─ default.xml # repo 实际使用的清单└─ 其他项目仓库... |
default.xml 在哪里default.xml 来自 platform/manifest 仓库。执行 repo init -u ... 之后,会同步到本地:
1 | .repo/manifests/default.xml |
这也是 repo 实际展开整棵源码树时所依赖的核心清单文件。
kernel/superproject 是什么kernel/superproject 不是某一棵具体内核源码树,它更像一个 聚合型 superproject,用于做多内核仓库的统一组织、索引和版本管理。
可以把它理解成“内核仓库世界里的总入口”,但不是你真正写代码、改配置、编译内核的那棵源代码目录。
例如下面这个分支名:
1 | common-android14-6.1-2025-09 |
可以拆成四部分理解:
common:Android 通用内核线(ACK)android14:目标 Android 版本6.1:基于 Linux 6.1 LTS2025-09:该时间窗口对应的发布线或维护线平台源码 manifest:
1 | 801K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0W2k6$3!0G2k6$3I4W2M7$3!0#2M7X3y4W2i4K6u0W2j5$3!0E0i4K6u0r3M7r3I4S2N6r3k6G2M7X3#2Q4x3V1k6E0j5h3&6A6k6X3g2K6N6l9`.`. |
内核源码 manifest:
1 | 95eK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0W2k6$3!0G2k6$3I4W2M7$3!0#2M7X3y4W2i4K6u0W2j5$3!0E0i4K6u0r3K9$3g2J5L8X3g2D9i4K6u0r3L8h3q4F1K9h3k6W2M7%4c8Q4x3V1j5`. |
Android 12 之前,很多设备更接近“厂商自己维护整棵设备内核”的模式;Android 12 之后,Google 通过 GKI(Generic Kernel Image) 把通用内核基线收拢起来,厂商则更多把差异化能力放到 vendor 模块 和 设备树 里。
1 2 3 4 5 6 7 8 9 10 | Upstream Linux LTS │ ▼Android Common Kernel(kernel/common) │ ▼GKI Kernel Image + vendor modules + dtbo │ ▼具体设备运行镜像 |
| 维度 | Android 12 以下 | Android 12 及以上 |
|---|---|---|
| 内核维护方式 | 厂商 / 机型维护定制内核 | Google 维护 GKI 通用内核基线 |
| 厂商差异化位置 | 大量直接放在设备内核里 | 更多放到 vendor 模块和设备树 |
boot.img 职责 |
常常承载更多厂商定制内容 | 更偏向承载通用内核镜像 |
| 更新模式 | 更依赖整机型内核更新 | 更适合 GKI + vendor 模块分离更新 |
这一步非常关键。
实际工作里,很多人会把下面三类内容混为一谈:
所以,先按目标拆开处理。
Pixel 8a OTA 页面:
1 | 4e2K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1k6i4k6W2L8r3!0H3k6i4u0K6i4K6u0W2k6$3!0G2k6$3I4W2i4K6u0W2j5$3!0E0i4K6u0r3j5h3&6V1M7X3!0A6k6q4)9J5c8X3!0@1j5g2)9K6c8W2)9J5x3$3q4C8K9i4c8S2 |
例如:
这里选择和你手机系统相同版本的ota全量包
我的手机设置里的build版本是 BP4A.260105.004.E1,这里就选择相应的包

提示:如果下载页面打开出现风控,就去找一个有 Google 人机验证的网站,先完成验证再返回下载页面即可。
1 2 | unzip akita-ota-bp4a.260105.004.e1-aa134978.zippayload-dumper-go payload.bin |
解包后你通常会拿到:
boot.imginit_boot.imgvendor_boot.imgvendor_kernel_boot.imgdtbo.imgvbmeta*.imgsystem_dlkm.imgvendor_dlkm.img这些镜像后面刷机会直接用到。

示例版本信息:
| Build ID | Tag | Version | Supported devices | Security patch level |
|---|---|---|---|---|
| BP3A.250905.014 | android-16.0.0_r3 | Android 16 | Android 16 | 2025-09-05 |
拉取命令:
1 2 3 4 | repo init --partial-clone --no-use-superproject \ -b android-16.0.0_r3 \ -u https://android.googlesource.com/platform/manifestrepo sync -c -j8 |
参考:
1 2 | cf8K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6L8%4g2J5j5$3g2Q4x3X3g2S2L8X3c8J5L8$3W2V1i4K6u0W2j5$3!0E0i4K6u0r3k6r3!0U0M7#2)9J5c8Y4y4W2N6s2g2H3i4K6u0r3j5Y4g2A6L8r3c8Q4x3V1k6T1N6h3W2D9k6r3W2F1k6#2)9J5k6s2m8A6P5r3g2D9i4K6u0V1K9$3g2J5L8X3g2D9M7#2)9J5x3%4m8A6P5r3g2D9i4K6u0V1k6$3E0A6i4K6u0V1K9$3g2J5L8X3g2D9i4K6u0V1j5Y4u0S2L8X3y4Z5k6i4x3`.f2eK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0W2k6$3!0G2k6$3I4W2M7$3!0#2M7X3y4W2i4K6u0W2j5$3!0E0i4K6u0r3K9$3g2J5L8X3g2D9i4K6u0r3L8h3q4F1K9h3k6W2M7%4c8Q4x3V1k6Q4x3V1u0Q4x3V1k6J5k6h3k6K6i4K6u0r3K9r3g2S2k6s2y4Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0V1k6%4y4Q4x3X3c8S2K9$3W2@1j5g2)9J5k6o6k6Q4x3X3f1I4i4K6u0V1j5h3&6V1M7X3!0A6k6o6p5$3 |
拉取命令:
1 2 3 | repo init -u https://android.googlesource.com/kernel/manifest \ -b android-gs-akita-6.1-android16-betarepo sync |
由于我们有全量OTA包,驱动可以不下载,这里仅记录
1 | 413K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1k6i4k6W2L8r3!0H3k6i4u0K6i4K6u0W2k6$3!0G2k6$3I4W2i4K6u0W2j5$3!0E0i4K6u0r3j5h3&6V1M7X3!0A6k6q4)9J5c8X3c8J5K9i4k6W2M7Y4y4Q4x3@1k6Z5L8q4)9K6c8s2A6Z5i4K6u0V1j5$3^5`. |
这一部分只聚焦内核本身。aosp的编译网上教程很多,这里就不再赘述了
我是为了使内核支持ebpf,所以增加了一些全局配置
新建以下文件:
//private/devices/google/akita:akita_gki.fragment
1 2 3 4 5 6 7 | CONFIG_FTRACE_SYSCALLS=yCONFIG_FUNCTION_TRACER=yCONFIG_FUNCTION_GRAPH_TRACER=yCONFIG_STACK_TRACER=yCONFIG_DYNAMIC_FTRACE=y# Disable Clang CFI# CONFIG_CFI_CLANG is not set |
关于bazel的使用方法,大家可以问AI,这里直接给出可以完全编译出内核的命令
1 2 3 4 5 6 7 | tools/bazel run \ --config=akita \ --config=use_source_tree_aosp \ //private/devices/google/akita:zuma_akita_dist \ --gki_build_config_fragment=//private/devices/google/akita:akita_gki.fragment \ --defconfig_fragment=//private/devices/google/akita:akita_gki.fragment \ -s --debug_print_scripts --debug_make_verbosity=V |
例如,确认 CONFIG_FTRACE_SYSCALLS 是否开启:
1 | ./aosp/scripts/extract-ikconfig ./out/akita/dist/Image | grep -E "CONFIG_FTRACE_SYSCALLS" |
如果能查到对应配置,说明最终生成的内核镜像里已经包含该配置。
这部分务必认真看。
编译出的内核产物在此目录下:
1 | /path/akita-kernel/out/akita/dist/*.img |
另外一部分是我们从ota中解出的产物,原则是运行刷机流程时,如果遇到了没有编译出的镜像,就用oat解出的产物
强烈建议先刷对应版本的厂包或全量 OTA,确保 A/B 分区上的 bootloader 版本一致。
需要特别注意的是:
这一步不是“保险起见”,而是 Pixel 实机刷机时非常关键的前置条件和保险措施。
1 | fastboot reboot recovery |
进入 recovery 后:
No command:执行:
1 | adb sideload /Users/nuoen/Downloads/akita-ota-bp4a.260105.004.e1-aa134978.zip |
1 2 3 4 5 6 | adb reboot bootloaderfastboot -wfastboot oem pkvm disablefastboot flash boot boot.imgfastboot flash dtbo dtbo.imgfastboot flash vendor_kernel_boot vendor_kernel_boot.img |
1 2 3 4 | fastboot reboot fastbootfastboot getvar is-userspacefastboot flash system_dlkm system_dlkm.imgfastboot flash vendor_dlkm vendor_dlkm.img |
1 2 3 | fastboot flash --disable-verity --disable-verification vbmeta vbmeta.imgfastboot flash --disable-verity --disable-verification vbmeta_system vbmeta_system.imgfastboot flash --disable-verity --disable-verification vbmeta_vendor vbmeta_vendor.img |
完成后再重启设备,验证是否成功进入系统。
.ko)如果你不是只改内核配置,而是要自己编译一个可加载模块,可以参考下面的方式。
1 2 3 4 5 | tools/bazel run \ --config=akita \ --config=use_source_tree_aosp \ --config=no_download_gki_fips140 \ //modules/hello:hello_dist |
hello 模块示例 BUILD.bazel1 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 | load("@//build/kernel/kleaf:kernel.bzl", "kernel_module", "kernel_modules_install")load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir")package( default_visibility = ["//visibility:public"],)filegroup( name = "lkm_sources", srcs = glob( [ "**/*.c", "**/*.h", "Kbuild", ], exclude = [ "BUILD.bazel*", "**/*.bzl", ".gid/**", ], ),)kernel_module( name = "hello", srcs = [":lkm_sources"], outs = ["hello.ko"], kernel_build = "//private/devices/google/akita:kernel",)copy_to_dist_dir( name = "hello_dist", data = [":hello"], dist_dir = "out/hello", flat = True, log = "info",)kernel_modules_install( name = "hello_install", kernel_build = "//private/devices/google/akita:kernel", kernel_modules = [ ":hello", ],) |
具体模块代码可以在我的仓库中找到
fd1K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6F1N6h3!0W2L8W2)9J5c8X3E0W2M7X3&6W2L8q4)9#2k6X3#2G2k6s2g2D9k6i4x3`.
到此基本上内核就刷入完成了,如果需要root可以用Magisk等工具来替换ota包中的镜像
pixel 8a 替换的是 init_boot.img
这一部分建议结合刷机一起理解。
init_boot.img从 Android 13 开始,Pixel 系列把原来放在 boot.img 里的通用 ramdisk 拆分到了 init_boot.img。
boot.imgboot.img 现在主要承载的是 GKI 通用内核镜像,可以理解为:
vendor_boot.img这是厂商专用 ramdisk,通常包含:
vendor_kernel_boot.img这是 GKI 架构下非常关键的一个分区,常见承载内容包括:
这个分区不要随意替换。
刷写错误可能导致:
- kernel panic
- 直接进入 fastboot
- 无法正常启动系统
ramdisk 是内核启动早期挂载的根文件系统的一部分,常见内容包括:
/initsepolicyueventd.rcfstab在 Tensor SoC(Pixel 6 / 7 / 8)体系上,一般可以这样理解:
init_boot.imgvendor_boot.img如果你在分析 ABI、检查可导出符号、验证某个接口是否仍在 KMI 集合内,这一部分会用得上。
1 | aosp/android/ |
abi_gki_aarch64.stg1 | aosp/android/abi_gki_aarch64.stg |
特点:
abi_gki_aarch641 | aosp/android/abi_gki_aarch64 |
通常用于列出一些基础公共符号,例如:
module_layout__put_task_struct例如:
abi_gki_aarch64_qcomabi_gki_aarch64_pixelabi_gki_aarch64_mtkabi_gki_aarch64_exynos1 | grep -i "register_kprobe" aosp/android/abi_gki_aarch64.stg |
如果你的重点是 framework / system 层,建议先把阅读环境搭起来。
1 2 3 4 | source build/envsetup.shlunch <target>-userdebugmmm development/tools/idegen/sh ./development/tools/idegen/idegen.sh |
生成产物:
android.iprandroid.iml可按需调整权限:
1 | chmod 777 android.ipr android.iml |
这两个文件的作用分别是:
android.ipr:Android Studio 打开项目时选择的入口文件android.iml:模块描述文件,可以裁剪无关目录,减少索引压力通常如果你只看 framework,可以优先保留:
frameworkspackageslibcoresystem在 Android Studio 中打开 Project Structure,配置:
必要时删除多余的 class path / source path,减少误跳转。
一般保留下面两类就够了:
<Module source>Android API Platform如果手动加入 frameworks/base 等目录依赖,建议把它放在 Module Source 之上,否则代码跳转时可能优先跳到生成目录而不是源码目录。
在 Project 视图设置里取消勾选:
1 | Show Excluded Files |
在:
1 | File → Settings → Version Control |
删除不必要的目录管理,只保留你真正需要操作的源码路径。
编辑 /etc/sysctl.conf,加入:
fs.inotify.max_user_watches=524288
然后执行:
1 2 | sudo sysctl -pcat /proc/sys/fs/inotify/max_user_watches |
在 Android Studio 中进入:
1 | File → Settings → Appearance & Behavior → System Settings → Memory Settings |
适当把 heap size 调大,否则索引大仓时很容易卡顿甚至 OOM。
调试流程通常是:
system_process如果按钮点击没有反应:
+如果你更偏爱轻量工作流,可以直接走 VS Code。
compile_commands.json1 2 3 4 5 6 7 8 9 10 | cd /path/to/aosp-rootsource build/envsetup.shlunch aosp_arm64-userdebugexport SOONG_GEN_COMPDB=1export SOONG_GEN_COMPDB_DEBUG=1export SOONG_LINK_COMPDB_TO="$PWD"m |
检查输出:
1 2 | ls compile_commands.jsonls out/soong/development/ide/compdb/compile_commands.json |
VS Code 的 .vscode/settings.json 可以这样配置:
{
"clangd.arguments": [
"--compile-commands-dir=.",
"--background-index",
"--all-scopes-completion"
]
}
如果还要阅读 Java 代码,可以补充:
{
"java.project.sourcePaths": [
"frameworks/base/core/java",
"frameworks/base/services/core/java",
"frameworks/base/packages",
"libcore",
"system"
]
}
compile_commands.json1 2 3 4 5 | tools/bazel run \ --config=akita \ --config=use_source_tree_aosp \ //private/devices/google/akita:akita_compile_commands -- \ $(pwd)/compile_commands.json |
VS Code 配置:
{
"clangd.arguments": [
"--compile-commands-dir=${workspaceFolder}"
]
}
这部分不是本文重点,但作为后续工作流的衔接,保留几个常用模板。
servicemanager设备端:
1 2 3 4 5 | adb push lldb-server /data/local/tmp/adb shellcd /data/local/tmpchmod 755 lldb-server./lldb-server p --server --listen unix-abstract:///data/local/tmp/debug.sock |
主机端:
1 2 3 4 5 | (lldb) platform select remote-android(lldb) platform connect unix-abstract-connect:///data/local/tmp/debug.sock(lldb) file out/target/product/marlin/symbols/system/bin/servicemanager(lldb) target modules search-paths add /system /home/nuoen/aosp/out/target/product/marlin/symbols/system(lldb) process attach --pid 477 |
启动:
1 | (lldb) process launch --stdin /dev/stdin --working-dir /data/local/tmp |
/data/local/tmp/main适用场景:已经把可执行文件 main push 到设备,希望在主机端远程调试。
设备端:
1 2 3 4 5 6 7 | adb push ./main /data/local/tmp/mainadb shell chmod 755 /data/local/tmp/mainadb push /path/to/lldb-server /data/local/tmp/lldb-serveradb shell chmod 755 /data/local/tmp/lldb-serveradb shell "/data/local/tmp/lldb-server platform --server --listen unix-abstract:///data/local/tmp/debug-main.sock" |
主机端:
1 | lldb |
(lldb) platform select remote-android (lldb) platform connect unix-abstract-connect:///data/local/tmp/debug-main.sock (lldb) target create ./main (lldb) b main (lldb) process launch --working-dir /data/local/tmp -- arg1 arg2
如果程序已经运行,也可以 attach:
1 | adb shell pidof main |
1 | (lldb) process attach --pid <pid> |
注意:
-g -O0 编译,便于断点和变量显示.so,启动前设置 LD_LIBRARY_PATH=/data/local/tmplldb 与 lldb-server 最好版本匹配/data/local/tmp/aarch64gdb-multiarch,或使用 NDK 提供的 GDB1 2 | adb push ~/linux-6.7.12/LinuxLearn/exp/uaf/pwn_uaf1 /data/local/tmp/adb shell chmod +x /data/local/tmp/pwn_uaf1 |
gdbserver641 2 3 | adb shellcd /data/local/tmp./gdbserver64 :1234 ./pwn_uaf1 1 test_input.txt |
预期输出:
1 2 | Process ./pwn_uaf1 created; pid = xxxxListening on port 1234 |
1 | adb forward tcp:1234 tcp:1234 |
方式 A:
1 | gdb-multiarch ~/linux-6.7.12/LinuxLearn/exp/uaf/pwn_uaf1 |
方式 B:
1 2 | cd $NDK/toolchains/llvm/prebuilt/linux-x86_64/aarch64-linux-android/debugger-bin./aarch64-linux-android-gdb ~/linux-6.7.12/LinuxLearn/exp/uaf/pwn_uaf1 |
target remote :1234 file ~/linux-6.7.12/LinuxLearn/exp/uaf/pwn_uaf1 break main continue
调试时常用命令:
next / stepprint varinfo registers| 问题 | 原因 |
|---|---|
| 连接后立刻断开 | 架构不匹配,确认目标是 aarch64 |
Reply contains invalid hex digit |
GDB / gdbserver 版本不兼容 |
| 传参不生效 | 参数要在设备端启动 gdbserver 时传入 |
| 无法交互输入 | attach 模式下 stdin 可能不可用 |
1 2 3 4 5 6 7 | #!/bin/bashadb push pwn_uaf1 /data/local/tmp/adb shell chmod +x /data/local/tmp/pwn_uaf1adb forward tcp:1234 tcp:1234adb shell "cd /data/local/tmp && ./gdbserver64 :1234 ./pwn_uaf1 arg1 arg2" &sleep 2gdb-multiarch pwn_uaf1 -ex "target remote :1234" |
如果你读到这里,建议把整件事重新串成下面这条主线:
boot、init_boot、vendor_boot、vendor_kernel_boot、vendor_dlkmdebK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0W2k6$3!0G2k6$3I4W2M7$3!0#2M7X3y4W2i4K6u0W2j5$3!0E0i4K6u0r3M7r3I4S2N6r3k6G2M7X3#2Q4x3V1k6E0j5h3&6A6k6X3g2K6N6l9`.`.e74K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0W2k6$3!0G2k6$3I4W2M7$3!0#2M7X3y4W2i4K6u0W2j5$3!0E0i4K6u0r3K9$3g2J5L8X3g2D9i4K6u0r3L8h3q4F1K9h3k6W2M7%4c8Q4x3V1j5`.7f6K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6L8%4g2J5j5$3g2Q4x3X3g2S2L8X3c8J5L8$3W2V1i4K6u0W2j5$3!0E0i4K6u0r3k6r3!0U0M7#2)9J5c8Y4y4W2N6s2g2H3i4K6u0r3j5Y4g2A6L8r3c8Q4x3V1k6T1N6h3W2D9k6r3W2F1k6#2)9J5k6s2m8A6P5r3g2D9i4K6u0V1K9$3g2J5L8X3g2D9M7#2)9J5x3%4m8A6P5r3g2D9i4K6u0V1k6$3E0A6i4K6u0V1K9$3g2J5L8X3g2D9i4K6u0V1j5Y4u0S2L8X3y4Z5k6i4x3`.392K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1k6i4k6W2L8r3!0H3k6i4u0K6i4K6u0W2k6$3!0G2k6$3I4W2i4K6u0W2j5$3!0E0i4K6u0r3j5h3&6V1M7X3!0A6k6q4)9J5c8X3!0@1j5g2)9K6c8W2)9J5x3$3q4C8K9i4c8S24ceK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1k6i4k6W2L8r3!0H3k6i4u0K6i4K6u0W2k6$3!0G2k6$3I4W2i4K6u0W2j5$3!0E0i4K6u0r3j5h3&6V1M7X3!0A6k6q4)9J5c8X3c8J5K9i4k6W2M7Y4y4Q4x3@1k6Z5L8q4)9K6c8s2A6Z5i4K6u0V1j5$3^5`.b16K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8&6N6h3q4F1i4K6u0W2j5$3!0E0i4K6u0r3x3U0l9I4z5q4)9J5c8U0l9$3i4K6u0r3x3o6u0Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0V1j5Y4m8Q4x3V1j5`.502K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2U0L8X3u0D9L8$3N6K6i4K6u0W2j5$3!0E0i4K6u0r3P5h3!0F1k6$3k6W2L8X3N6F1K9h3y4W2i4K6u0r3M7q4)9J5c8U0p5^5x3U0b7$3x3o6M7#2f61K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6B7N6h3g2B7K9h3&6Q4x3X3g2U0L8W2)9J5c8Y4m8G2M7%4c8Q4x3V1j5%4x3e0x3&6y4K6M7K6z5o6t1K6x3e0p5$3y4U0b7H3x3U0j5K6更多【Android安全- Pixel 8a(akita:6.1-android16内核支持ebpf)AOSP / GKI 内核源码获取、编译与刷机实战指南】相关视频教程:www.yxfzedu.com