电子说
在瑞芯微 RK356x 平台适配 Android 15 系统时,会遇到一个极具迷惑性的兼容性问题:从 Android 12 沿用至 Android 14 的 "开机直接进入系统" 标准配置,在部分 Android 15 版本上彻底失效。
对于工业平板、自助终端、广告机这类设备来说,开机自动跳过锁屏、屏幕永不休眠是最基础的刚需。但 Google 在 Android 15 开发周期中对锁屏初始化逻辑进行了多次调整,且全程没有任何官方文档说明,导致大量从旧版本升级的项目都踩了这个坑。
最让人困惑的现象是:明明在系统设置中看到 "锁屏方式:无",但开机依然会显示滑动锁屏。这种 "配置显示正确但行为错误" 的问题,排查难度远高于直接报错。
本文将基于 AOSP Android 15 官方源码,拆解不同版本间的逻辑差异,给出全版本兼容的解决方案,并详细解释旧配置失效的根本原因。

一、问题复现:为什么同样的配置在不同 Android 15 上表现不一样?
Android 12/13/14 通用标准配置
在过去三个大版本中,行业内通用的禁用锁屏配置只需在设备 overlay 中添加两行:
<bool name="config_disableLockscreenByDefault">truebool><bool name="def_lockscreen_disabled">truebool>
这两行配置的作用清晰明确:
•config_disableLockscreenByDefault:系统框架级别的开关,控制新用户默认是否禁用锁屏
•def_lockscreen_disabled:SettingsProvider 的默认值,系统初始化时会写入数据库
部分 Android 15 版本完全失效
但在 Android 15 正式版及部分 Beta 版本中,即使原封不动保留上述配置,烧录后开机依然会停留在锁屏界面。
典型异常现象:
1.开机必须手动滑动才能进入桌面
2.进入设置→ 安全 → 屏幕锁定,显示为 "无"
3.手动切换为 "滑动" 再改回 "无",重启后锁屏再次出现
4.通过命令查询settings get secure lockscreen_disabled,返回值为1(表示已禁用)
这说明配置已经正确写入系统数据库,但系统在初始化的关键阶段没有读取到这个值。
二、Android 15 全版本通用解决方案
经过对多个 Android 15 版本的源码分析和交叉验证,以下方案在所有 Android 15 版本(从 Beta 1 到最新正式版)上都能稳定生效,同时向下兼容 Android 12/13/14。
1. 禁用锁屏:三个配置同时保留(全版本兼容)
为了覆盖所有 Android 版本和厂商 SDK 变体,建议同时保留以下三个配置:
<bool name="config_disableLockscreenByDefault">truebool><bool name="def_lockscreen_disabled">truebool>
PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.lockscreen.disable.default=true
关键说明:
•ro.lockscreen.disable.default 是 Android 15 新增的系统属性,优先级最高
•必须使用PRODUCT_DEFAULT_PROPERTY_OVERRIDES 写入/default.prop
•保留旧配置不会产生任何副作用,同时保证向下兼容性
•不同芯片厂商的 Android 15 SDK 同步进度不同,部分厂商的早期 SDK 可能仍依赖旧配置
2. 屏幕永不休眠:配置方式无变化
屏幕超时配置在所有 Android 版本中保持一致:
<resources><integer name="def_screen_off_timeout">2147483647integer>resources>
注意事项:
•不要设置为 0 或负数,部分系统会将其视为无效值并使用默认 60 秒
•系统设置界面会显示为 "30 分钟",这是 UI 层的最大值限制,实际内部值正确
•24.8 天对于绝大多数工业设备来说已等同于 "永不休眠"
三、Android 15 内部版本逻辑差异详解
这是最容易被忽略的一点:Android 15 在开发过程中三次修改了锁屏初始化逻辑,导致不同阶段的版本行为完全不同。这也是为什么有人说旧配置在 Android 15 上还能用,有人说完全不行的根本原因。
1. Android 15 Beta 1
•沿用 Android 14 的逻辑
•旧配置config_disableLockscreenByDefault 和def_lockscreen_disabled 完全有效
•不存在ro.lockscreen.disable.default 属性
2. Android 15 Beta 2 ~ Beta 4
•首次引入ro.lockscreen.disable.default 属性
•逻辑实现在LockSettingsService.onBootPhase() 方法中
•系统服务就绪后优先读取该属性,若为 true 则直接禁用锁屏
•旧配置依然有效,但优先级低于新属性
3. Android 15 正式版(r1 及以后)
•逻辑实现位置发生重大变更
•移至LockSettingsService.Injector.getStorage() 方法中的数据库创建回调
•在locksettings.db 数据库创建时直接写入禁用值
•旧配置完全失效,因为 SettingsProvider 启动时数据库中已有值
4. 厂商 SDK 差异
不同芯片厂商的 Android 15 SDK 同步进度不同:
•瑞芯微 2026 年 3 月之后发布的 SDK 已同步正式版逻辑
•部分厂商的早期 Android 15 SDK 仍停留在 Beta 阶段逻辑
•个别厂商可能会对 Google 的逻辑进行二次修改
四、根本原因分析:为什么旧配置失效了?
Android 15 正式版的逻辑变更最为彻底,直接从数据库层面覆盖了所有其他配置。
核心代码逻辑
在 LockSettingsService 初始化时,会注册一个数据库创建回调:
public LockSettingsStorage getStorage() {final LockSettingsStorage storage = new LockSettingsStorage(mContext);storage.setDatabaseOnCreateCallback(new LockSettingsStorage.Callback() {public void initialize(SQLiteDatabase db) {// 从系统属性读取默认值boolean lockScreenDisable = SystemProperties.getBoolean("ro.lockscreen.disable.default", false);if (lockScreenDisable) {// 直接写入数据库,优先级最高storage.writeKeyValue(db, LockPatternUtils.DISABLE_LOCKSCREEN_KEY, "1", 0);}}});return storage;}
系统启动时序决定一切
[阶段1] 内核启动 → 加载 /default.prop → ro.lockscreen.disable.default 生效[阶段2] system_server 启动 → LockSettingsService 初始化[阶段3] 创建 /data/system/locksettings.db 数据库[阶段4] 执行数据库创建回调,直接写入 DISABLE_LOCKSCREEN_KEY = "1"[阶段5] 很久以后,SettingsProvider 启动[阶段6] 发现数据库中已有值,忽略 def_lockscreen_disabled 默认值
可以看到,ro.lockscreen.disable.default 在 SettingsProvider 启动之前就已经完成了数据库写入,旧配置自然被完全覆盖。
为什么必须用
PRODUCT_DEFAULT_PROPERTY_OVERRIDES?
•数据库创建发生在系统启动极早期
•此时/system/build.prop 尚未完全加载
•只有/default.prop 中的属性在该阶段可用
•PRODUCT_DEFAULT_PROPERTY_OVERRIDES 写入/default.prop
•PRODUCT_PROPERTY_OVERRIDES 仅写入/system/build.prop
五、99% 开发者都会踩的终极巨坑
这个逻辑有一个完全没有文档说明的反人类特性:
|
数据库创建回调只在数据库第一次创建时执行一次! |
也就是说:
1.若首次烧录固件时未添加ro.lockscreen.disable.default=true
2.locksettings.db 会被创建,且DISABLE_LOCKSCREEN_KEY 值为0
3.之后再添加该属性并重新烧录,依然不会生效
4.因为数据库已存在,回调不会再次执行
解决方法:每次修改该属性后,必须执行:
adb rootadb shell rm -rf /data/system/locksettings.db*adb reboot
或在烧录固件时选择擦除 data 分区,或恢复出厂设置。
六、全 Android 版本配置对比表
|
Android 版本 |
有效配置 |
优先级 |
备注 |
|
12/13/14 |
config_disableLockscreenByDefault=true |
高 |
两个都需要,缺一不可 |
|
15 Beta 1 |
同上 |
高 |
无新增属性 |
|
15 Beta 2~4 |
旧配置 + ro.lockscreen.disable.default=true |
新属性 > 旧配置 |
新属性可选,旧配置仍有效 |
|
15 正式版 |
ro.lockscreen.disable.default=true |
最高 |
旧配置完全失效 |
最佳实践:三个配置同时保留,可实现从 Android 12 到 Android 15 的全版本兼容,无需针对不同版本单独修改。
七、完整验证步骤
烧录新固件并擦除 data 分区后,按以下步骤验证:
1.重启设备,确认开机后直接进入桌面,无任何锁屏界面
2.进入设置→ 显示 → 屏幕超时,确认显示为 "30 分钟"
3.等待 30 分钟以上,确认屏幕未熄灭
4.进入设置→ 安全 → 屏幕锁定,确认显示为 "None"
5.执行getprop ro.lockscreen.disable.default,返回值应为true
6.执行settings get secure lockscreen_disabled,返回值应为1
7.恢复出厂设置后再次重启,确认依然直接进入桌面
八、完整补丁文件(RK356x 全版本兼容)
diff --git a/device/rockchip/rk356x/overlay/frameworks/base/core/res/res/values/config.xml b/device/rockchip/rk356x/overlay/frameworks/base/core/res/res/values/config.xmlindex 7a8d9f6e..b2c3d4f5 100644--- a/device/rockchip/rk356x/overlay/frameworks/base/core/res/res/values/config.xml+++ b/device/rockchip/rk356x/overlay/frameworks/base/core/res/res/values/config.xml@@ -63,5 +63,9 @@2: gestures only for back, home and overview --><integer name="config_navBarInteractionMode">0integer><bool name="config_swipe_up_gesture_setting_available">truebool>+++ <bool name="config_disableLockscreenByDefault">truebool>+ <bool name="def_lockscreen_disabled">truebool>resources>diff --git a/device/rockchip/rk356x/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/device/rockchip/rk356x/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xmlindex b02c48b5..a5e2a236 100755--- a/device/rockchip/rk356x/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml+++ b/device/rockchip/rk356x/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml@@ -17,7 +17,7 @@*/--><resources>- <integer name="def_screen_off_timeout">60000integer>+ <integer name="def_screen_off_timeout">2147483647integer>resources>diff --git a/device/rockchip/rk356x/rk3566_u/rk3566_u.mk b/device/rockchip/rk356x/rk3566_u/rk3566_u.mkindex 3ec62e6a..0ab868ed 100644--- a/device/rockchip/rk356x/rk3566_u/rk3566_u.mk+++ b/device/rockchip/rk356x/rk3566_u/rk3566_u.mk@@ -47,3 +47,4 @@ PRODUCT_PROPERTY_OVERRIDES += ro.vendor.hdmirotationlock=truePRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.primary=DSIPRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.extend=HDMI-APRODUCT_PROPERTY_OVERRIDES += persist.vendor.framebuffer.main=1920x540+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.lockscreen.disable.default=true
九、总结
Android 15 对锁屏逻辑的多次调整,给工业设备适配带来了不小的麻烦。由于 Google 没有提供任何官方文档说明,导致大量开发者在这个问题上浪费了大量时间,重要提醒,在rk平台开发发现,不同的android15还是有差异,沿用之前的也可以实现功能。
核心要点回顾:
•Android 15 内部不同版本的锁屏逻辑差异巨大
•正式版中ro.lockscreen.disable.default 是唯一有效的配置
•必须使用PRODUCT_DEFAULT_PROPERTY_OVERRIDES 写入该属性
•修改后必须擦除 data 分区或删除 locksettings.db 文件
•同时保留旧配置可实现全版本兼容
希望本文能帮助正在适配 Android 15 的开发者们避开这个坑。如果在适配过程中遇到其他问题,欢迎交流讨论。
全部0条评论
快来发表一下你的评论吧 !