[I.MX6UL] 添加永不休眠功能和选项

[I.MX6UL] 添加永不休眠功能和选项 文章目录适用场景与前置条件一、概述方案对比二、实现步骤1. 添加英文选项2. 添加中文选项3. 修改配置选项修改前后配置对比4. 修改系统设置三、常见问题与排查1. 设置界面不显示“永不待机”选项2. 修改后设备仍然休眠3. 编译报错四、总结五、参考文档适用场景与前置条件本文面向需要定制 Android 系统源码的开发者通过修改 Settings 应用与 SettingsProvider 的默认配置在系统设置中新增“永不待机”选项实现设备永不休眠。适用场景定制 ROM / 量产设备需要出厂即默认永不休眠需要从系统层面移除屏幕超时限制而非仅靠应用层保活需要同时保证配置读取异常时仍能维持永不休眠的兜底逻辑。前置条件Android 版本本文示例基于 Android 4.2 及以上版本不同版本源码路径与配置项名称可能略有差异请以实际源码为准源码路径主要涉及packages/apps/Settings与frameworks/base/packages/SettingsProvider两个目录编译环境需要完整的 Android 源码编译环境如 AOSP 或厂商 SDK具备make/mmm等编译工具链并能将编译产物apk / system.img刷入设备或模拟器验证。一、概述本文介绍如何通过修改 Android 系统源码在系统设置中添加“永不待机”选项实现设备永不休眠的功能。主要涉及 Settings 应用及 SettingsProvider 的相关配置修改。方案对比实现设备永不休眠的方式不止一种除了本文介绍的源码修改方案外还可以通过 adb 命令临时设置。下表对比三种常见方式的差异实现方式是否需要编译系统生效范围是否持久化适用场景修改 SettingsProvider 默认值defaults.xml中def_screen_off_timeout需要系统级所有用户生效是写入系统默认配置定制 ROM / 量产设备需出厂即默认永不休眠修改 DisplaySettings 兜底值FALLBACK_SCREEN_TIMEOUT_VALUE需要系统级作为读取配置失败时的兜底是编译进 Settings 应用配合上一方案使用防止配置读取异常时回退到短暂超时adb 命令settings put system screen_off_timeout -1不需要仅当前设备当前用户否恢复出厂设置后失效开发调试、临时验证效果快速测试二、实现步骤1. 添加英文选项修改packages/apps/Settings/res/values/arrays.xml文件表示添加当前行item30minutes/itemitemNever/itemitem1800000/item!--Do not translate.--item-1/item2. 添加中文选项修改packages/apps/Settings/res/values-zh-rCN/arrays.xml文件表示添加当前行item msgid686402715284761141330 分钟/itemitem msgid1781492122915870416永不待机/item3. 修改配置选项修改frameworks/base/packages/SettingsProvider/res/values/defaults.xml文件将integer namedef_screen_off_timeout1800000/integer改为integer namedef_screen_off_timeout-1/integer修改前后配置对比配置文件配置项修改前修改后作用修改后效果arrays.xml英文屏幕超时选项30 minutes值1800000新增Never值-1在设置界面提供“永不待机”的英文选项用户可在设置中选择“Never”使屏幕永不超时arrays.xml中文屏幕超时选项30 分钟新增永不待机在设置界面提供“永不待机”的中文选项中文用户可选择“永不待机”界面显示友好defaults.xmldef_screen_off_timeout180000030 分钟-1定义系统默认的屏幕超时时间系统默认即为永不超时无需用户手动设置DisplaySettings.javaFALLBACK_SCREEN_TIMEOUT_VALUE3000030 秒-1作为读取超时配置失败时的兜底值即使配置读取异常也不会回退到短暂超时保证永不休眠生效4. 修改系统设置修改packages/apps/Settings/src/com/android/settings/DisplaySettings.java文件将private static final int FALLBACK_SCREEN_TIMEOUT_VALUE 30000;改为private static final int FALLBACK_SCREEN_TIMEOUT_VALUE -1;重新编绎SettingsProvider和Settings目录将生成的apk拷贝到对应的目录重启即可。三、常见问题与排查修改源码后可能会遇到以下问题这里结合本文涉及的配置项逐一分析原因并给出解决方案。1. 设置界面不显示“永不待机”选项原因分析arrays.xml英文或arrays.xml中文中的选项未正确添加或添加后未重新编译 Settings 应用。中英文arrays.xml的item数量不一致导致系统在解析选项列表时出现异常界面无法正常渲染新增项。新增的item-1/item未与itemNever/item一一对应导致选项值与显示文本错位。解决方案检查packages/apps/Settings/res/values/arrays.xml中是否已添加itemNever/item和item-1/item并确认packages/apps/Settings/res/values-zh-rCN/arrays.xml中已添加对应的item永不待机/item。确保中英文两个文件的选项数量一致且顺序一一对应。重新编译 Settings 应用并替换系统镜像后重启设备再进入「设置 → 显示 → 休眠」查看。2. 修改后设备仍然休眠原因分析defaults.xml中的def_screen_off_timeout未修改成功或修改后未重新编译 SettingsProvider。DisplaySettings.java中的FALLBACK_SCREEN_TIMEOUT_VALUE仍为30000当系统读取超时配置失败时会回退到 30 秒的兜底值导致设备仍然休眠。系统设置数据库中已存在旧的screen_off_timeout值默认值修改不会覆盖已写入的数据库记录。解决方案确认frameworks/base/packages/SettingsProvider/res/values/defaults.xml中def_screen_off_timeout已改为-1并重新编译 SettingsProvider。确认packages/apps/Settings/src/com/android/settings/DisplaySettings.java中FALLBACK_SCREEN_TIMEOUT_VALUE已改为-1并重新编译 Settings 应用。若设备上已存在旧的超时设置可通过 adb 命令清除或覆盖adb shell settings put system screen_off_timeout -1或恢复出厂设置后重新验证。3. 编译报错原因分析arrays.xml中新增的item标签未闭合或defaults.xml中def_screen_off_timeout的 XML 语法错误如缺少/integer闭合标签。中英文arrays.xml的msgid冲突或重复。DisplaySettings.java中修改的常量值类型不匹配如将int类型误改为字符串。解决方案检查arrays.xml和defaults.xml的 XML 语法确保所有标签正确闭合。例如defaults.xml中应写为integer namedef_screen_off_timeout-1/integer注意闭合标签不能遗漏。检查中英文arrays.xml的msgid是否唯一避免重复。确认DisplaySettings.java中FALLBACK_SCREEN_TIMEOUT_VALUE仍为int类型赋值为-1合法。编译时查看具体报错日志根据日志定位到对应文件与行号逐一修正。四、总结五、参考文档android 4.2以上版本永不休眠Android - 永不锁屏开机不锁屏删除设置中休眠时间选项设置Android系统永不休眠永不锁屏android4.2 添加永不休眠选项Android显示设置中增加“永不休眠”功能android显示设置