概述
Android 系统自带的拉丁输入法(Latin IME)在部分场景下无法满足业务需求。在 ROM 定制或系统级开发中,通常需要将第三方输入法预装到系统中,并配置为开机默认输入法。
本文介绍在 AOSP / SettingsProvider 层面设置默认输入法的标准做法,并整理常见第三方输入法的包名与服务组件 ID,便于查阅与配置。
设置默认输入法
系统默认输入法由 Settings.Secure 中的两项配置共同决定:
| 配置项 | 说明 |
|---|---|
ENABLED_INPUT_METHODS |
已启用的输入法列表 |
DEFAULT_INPUT_METHOD |
当前默认输入法 |
首次开机时,这两项的值从 defaults.xml 读取,并由 DatabaseHelper 写入 secure 表。
1. 修改 defaults.xml
文件路径: frameworks/base/packages/SettingsProvider/res/values/defaults.xml
在 defaults.xml 中新增或修改以下字符串资源(以拼音输入法为例):
1 | <!-- Create by yeruilai 2026-6-20 11:14:44 Change the default input method --> |
说明:
translatable="false"表示该字符串不参与国际化翻译,适用于包名、组件名等固定标识。
2. 修改 DatabaseHelper.java
文件路径: frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
在 loadSecureSettings() 方法中,将上述默认值加载到系统设置数据库:
1 | private void loadSecureSettings(SQLiteDatabase db) { |
3. 配置格式说明
输入法 ID 的通用格式为:
1 | <包名>/<服务类全名或相对类名> |
例如搜狗输入法:
1 | com.sohu.inputmethod.sogou/.SogouIME |
将 def_enabled_input_methods 和 def_input_method 中的值替换为目标输入法的 ID 即可。
常见输入法 ID 对照表
| 输入法 | IME ID |
|---|---|
| QQ 输入法 | com.tencent.qqpinyin/.QQPYInputMethodService |
| 搜狗输入法 | com.sohu.inputmethod.sogou/.SogouIME |
| 百度输入法 | com.baidu.input/.ImeService |
| 讯飞输入法 | com.iflytek.inputmethod/.FlyIME |
| 谷歌拼音输入法 | com.google.android.inputmethod.pinyin/.PinyinIME |
| 触宝输入法 | com.cootek.smartinput5/.TouchPalIME |
| 系统拉丁输入法(默认) | com.android.inputmethod.latin/.LatinIME |
| 谷歌 Gboard | com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME |
| Go 输入法 | com.jb.emoji.gokeyboard/com.jb.gokeyboard.GoKeyboard |
| SwiftKey | com.touchtype.swiftkey/com.touchtype.KeyboardService |
| 微软必应输入法 | com.bingime.ime/.BingIme |
调试与验证
查看已安装的输入法
通过 ADB 列出设备上所有输入法及其 ID:
1 | adb shell ime list -a |
手动设置默认输入法
若不确定配置值是否正确,可先手动在系统设置中将目标输入法设为默认,再通过以下命令查看当前值:
1 | adb shell settings get secure default_input_method |
将查询结果填入 defaults.xml 即可。
注意事项
- 预装输入法 APK:目标输入法需已内置或预装到系统中,否则开机时无法生效。
- Android 版本差异:不同 Android 版本(如 Android 11–15)在权限与 OEM 定制上可能有差异,部分机型需额外处理权限或厂商配置。
- MTK / RK 等平台:部分平台除修改
defaults.xml与DatabaseHelper.java外,还需在对应 vendor 目录预置 APK 并编写Android.mk。 - 应用层设置:普通应用无法直接修改
DEFAULT_INPUT_METHOD(需WRITE_SECURE_SETTINGS系统权限);无系统权限时只能引导用户到系统设置页手动切换。
相关 API(应用层)
在应用内显示或隐藏软键盘,可使用 InputMethodManager:
1 | // 显示软键盘 |
这与系统级默认输入法配置是不同层面的能力:前者控制单次键盘显隐,后者决定开机后全局默认使用哪款输入法。
总结
在 Android 系统源码中设置默认输入法的核心步骤:
- 在
defaults.xml中定义def_enabled_input_methods与def_input_method; - 在
DatabaseHelper.loadSecureSettings()中加载上述配置; - 使用正确的输入法 IME ID(包名 + 服务组件名);
- 确保目标输入法已预装,并通过
adb shell ime list -a验证。
按以上流程配置后,设备首次开机即可使用指定的默认输入法。
本文链接:
http://longzhiye.top/2026/06/20/2026-06-20/