惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
有赞技术团队
有赞技术团队
J
Java Code Geeks
H
Hackread – Cybersecurity News, Data Breaches, AI and More
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
酷 壳 – CoolShell
酷 壳 – CoolShell
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
Check Point Blog
博客园 - 【当耐特】
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
The Cloudflare Blog
Microsoft Azure Blog
Microsoft Azure Blog
腾讯CDC
Vercel News
Vercel News
IT之家
IT之家
MyScale Blog
MyScale Blog
博客园_首页
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
罗磊的独立博客

Chongxiの咖啡屋

Google相册迁移到iCloud分享 - Chongxiの咖啡屋 讲讲「万物皆虚,万事皆允」 - Chongxiの咖啡屋 舞萌DX 落雪查分器使用指南 - Chongxiの咖啡屋 现代人的刻舟求剑 - Chongxiの咖啡屋 舞萌DX错误码0010深度解析及处理方法 - Chongxiの咖啡屋 做了一个明日方舟-奇象巡展的像素画拼豆工具 - Chongxiの咖啡屋 舞萌DX国服封禁机制详解 - Chongxiの咖啡屋 舞萌开机网络自检底层技术说明,断网如何排查讲解 - Chongxiの咖啡屋 舞萌机台开机初始化进程详解 - Chongxiの咖啡屋 为什么喜欢音乐 反而不该去学音乐? - Chongxiの咖啡屋 从装逼到嘉豪:中国互联网的精神胜利进化史 - Chongxiの咖啡屋 游蒋介石故居:奉化溪口 - Chongxiの咖啡屋 钢铁雄心4 steam正版导入全DLC补丁 - Chongxiの咖啡屋 漫漫长夜全地图及介绍 - Chongxiの咖啡屋 记一次无需实名换绑米哈游通行证手机号 - Chongxiの咖啡屋 邮储银行万事达借记卡全面指南 - Chongxiの咖啡屋 x402:一个来自27年前的状态码能救活被ai榨干的「人类网站」吗 - Chongxiの咖啡屋 舞萌国人口大普查:全服玩家数据分析 - Chongxiの咖啡屋 家中网络「捉奸」记 - Chongxiの咖啡屋 中国移动PT927G光猫折腾指南:破解超级密码改桥接 - Chongxiの咖啡屋 最好用的Android邮件客户端推荐 - Chongxiの咖啡屋 如何验证对方是不是Chongxi我本人 - Chongxiの咖啡屋 三星S20系列刷入移植OneUI8流程 - Chongxiの咖啡屋 使用obisidian和git插件来完美管理静态博客 - Chongxiの咖啡屋 玩客云拆机教程 - Chongxiの咖啡屋 母语级英语的本质,不是英语 - Chongxiの咖啡屋 我用过最好用的Android桌面(启动器) - Chongxiの咖啡屋 1. 区块链基本知识 - Chongxiの咖啡屋 b站创作激励提现几乎无门槛了 - Chongxiの咖啡屋 速报:APKPure 版 Telegram 被植入恶意后门 - Chongxiの咖啡屋
三星极致的软件模块化:图形驱动居然是个apk - Chongxiの咖啡屋
Chongxi · 2026-03-02 · via Chongxiの咖啡屋

0. 引#

经常玩手游的三星用户,在折腾性能优化的时候估计听到过一个说法去应用商店更新下图形驱动。乍一看有点离谱,驱动这种东西为什么是在应用商店更新?结果一看还真是个 apk,是不是感觉草台班子?本文将把时间线拨回 2020 年,以 Galaxy S20 为起点,带你了解三星这个神秘的图形驱动 APK 化

1. 为什么是 Galaxy S20?#

2020 年发布的 Galaxy S20 系列是安卓阵营的一个重要分水岭。这要归功于当时三个底层技术的一拍即合

首先是硬件方面,在 2019 年底发布的骁龙 865 处理器上,高通首次宣布支持可更新的 GPU 驱动。S20 正是首批搭载骁龙 865 的旗舰机

其次就是软件方面,Google 在 Android 10 中引入了 Project Mainline,其核心目的就是系统组件模块化,允许通过应用商店更新核心组件。而 Samsung 作为 Android 的老大哥,也是第一时间跟进了这个

到了 2020 年底,Samsung 真的在 Google Play 商店和自家的 Galaxy Store 上架了名为 Samsung Game Driver 的独立 APK 应用,这就标志着 GPU 驱动作为 App 存在的正式落地

2. 神秘的双版本#

a-screenshot-of-Samsung-GameDriver-Adreno-S20/N20

如果你回去看当年的上架记录,会发现一个很有意思的现象,三星上架了两个版本的 apk,这其实不难理解

  1. Samsung Game Driver - Adreno,是专门给搭载骁龙处理器的 S20/Note20 系列用的
  2. Samsung Game Driver - Mali,这就是专门给搭载猎户座 Exynos 处理器的 S20/Note20 系列用的

当时这个驱动更新并不是提升全局性能,而是有高度针对性的。Samsung 明确写着:本次更新优化了《使命召唤手游》等游戏

也就是说,如果某个热门大作突然发布,出现了图形错误或者负优化,三星不需要去搞系统 OTA,只需找高通等厂商写个补丁,打一个几十 MB 的 apk 发在商店,玩家一更新,重进游戏就好

3. APK 怎么能变底层驱动?#

背后的核心机制叫做 Updatable Graphics Drivers,在 AOSP 源码里主要涉及 frameworks/native/libs/graphicsenvframeworks/native/opengl/libs/EGL/Loader.cpp

我们分四个部分来讲

3.1 发现机制#

系统怎么知道这个 APK 是驱动?不是随便装个 APK 就能冒充的

  1. 元数据声明 三星发布的 Samsung Game Driver.apk,在其 AndroidManifest.xml 里必须包含特定的 <meta-data> 标签:

PRTCL // XML

// 示例

<meta-data android:name="android.graphics.driver.build_time" value="Chongxi & CEPATO" />

<meta-data android:name="com.android.graphics.driver.library" value="libGLESv2_adreno.so" />

这个 com.android.graphics.driver.library 是关键,它让系统知道他是货真价实的库

  1. Game Driver Service:
    Android 系统启动时,GraphicsEnvironment会扫描所有已安装的应用。它会寻找包名符合规则(如 com.samsung.gamedriver.sm8250)且带有上述元数据的 App

一旦找到,它会把这个 APK 的路径(/data/app/~~.../base.apk!/lib/arm64-v8a/)缓存到系统服务里,标记为 Available Driver Provider

3.2 注入#

当你在启动 codm 时,进程刚 Zygote Fork,加载图形库的流程如下:

游戏进程首先加载的是系统的 /system/lib64/libEGL.so/system/lib64/libvulkan.so

这只是个 Wrapper/Stub,里面全是空函数或者转发逻辑,真正的驱动还没加载

在 AOSP 源码的 Loader.cpp 中,有一个关键函数 Loader::openDriver。它会向 GraphicsEnvironment 发起查询:

这个叫血战孤儿院的,有没有被指定使用‘Game Driver’?

如果确实启用了,Linker 会创建一个独立的 Native Namespace

  • 一般情况下 Linker 去 /vendor/lib64/egllibGLESv2_adreno.so
  • 现在系统会调用 android_create_namespace,并把 LD_LIBRARY_PATH 强行指向 解压目录/data/app/...

这意味着,游戏进程在这个独立的命名空间里,它以为它加载的是系统库,实际上 Linker 给它塞的是 APK 里的 .so

3.3 握握手#

APK 只能更新用户层面 (UMD),也就是运行在 User Space 的 OpenGL/Vulkan 实现库。但硬件是运行在 Kernel Space 的,也就是内核 KMD

在这台手机上

  • KMD: 是编译进 boot.img 里的 kgsl 模块。它暴露的设备节点通常是 /dev/kgsl-3d0
  • UMD: 就是 APK 里那几个 .so

怎么通讯?IOCTL

当你用 APK 更新了驱动,新的 UMD 会打开 /dev/kgsl-3d0,通过 ioctl 系统调用发送命令流给内核

这里有个大问题就是 ABI 稳定性

APK 里的新驱动(UMD)必须得向下兼容老旧的内核驱动(KMD)
如果高通在新的 UMD 里用了一个新的 ioctl 命令,但你的内核是 3 年前的,根本不认识这个指令,驱动初始化就会失败

这就是为什么三星 / 高通不能无限制地给 S20 这个机子推送最新的驱动 APK。APK 里的 UMD 版本,必须跟你的内核 KMD 版本握手成功才能跑

3.4 SELinux#

Android 的 SELinux 极其严格。普通 app 是没有权限去加载另一个 App 私有目录下的 .so 文件的

为了让这个 APK 驱动能跑,Google 在 Android 10 的 SELinux 策略里开了一个白名单

  • 定义了一个新的域 gamedriver_file
  • 允许 appdomain(普通应用进程)对标记为 gamedriver_file 的文件执行 mapexecute 操作

所以,那个驱动 APK 安装后,系统会自动给它的 .so 文件打上特殊的 SELinux 标签,否则 Linker 加载时会被直接 Permission Denied

这就是为什么说 S20 的模块化是教科书级别的

它在不刷机、不 Root、不修改系统分区的前提下,通过 Linker NamespaceSELinux 策略,实现了核心渲染逻辑的热替换。这在以前绝对做不到

4. 现在如何了#

既然这个功能这么强,为什么现在好像很少听到大家天天去下「图形驱动 APK」了?

其实它没有消失,而是变得更无感、更模块化了:

  • Google 后来把很多原本需要单独下 APK 的驱动级更新,整合进了系统后台默默进行的「Google Play 系统更新」中
  • Samsung 后来把更多的游戏调度、底层适配策略,做进了另一个引发过巨大争议的模块化应用GOS

GOS 也是一个可以通过应用商店随时热更新的 APK,它不仅能调配驱动参数,还能控制 CPU/GPU 的温控墙和频率

5. 小结#

Samsung 可以说是把系统软件模块化做到极致的厂商,Android 老大哥这名号不是白来的,感兴趣的话以后也可以讲讲 Samsung 的 One UI 还有哪些趣事。这里是 Chongxi,我们下期再见