Android14 设置默认输入法
2026-06-20 / 龙之叶   

概述

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
2
3
<!-- Create by yeruilai 2026-6-20 11:14:44 Change the default input method -->
<string name="def_enabled_input_methods" translatable="false">com.android.inputmethod.pinyin/.PinyinIME</string>
<string name="def_input_method" translatable="false">com.android.inputmethod.pinyin/.PinyinIME</string>

说明: translatable="false" 表示该字符串不参与国际化翻译,适用于包名、组件名等固定标识。

2. 修改 DatabaseHelper.java

文件路径: frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

loadSecureSettings() 方法中,将上述默认值加载到系统设置数据库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void loadSecureSettings(SQLiteDatabase db) {
SQLiteStatement stmt = null;
try {
stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
+ " VALUES(?,?);");

// ... 其他 secure 设置 ...

// 加载默认输入法配置
// Create by yeruilai 2026-6-29 11:14:44 Change the default input method
loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS, R.string.def_enabled_input_methods);
loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, R.string.def_input_method);

// MTK 等平台自定义 Secure 设置(如有)
mUtils.loadCustomSecureSettings(stmt);

// ... 其他 secure 设置 ...
} finally {
if (stmt != null) stmt.close();
}
}

3. 配置格式说明

输入法 ID 的通用格式为:

1
<包名>/<服务类全名或相对类名>

例如搜狗输入法:

1
com.sohu.inputmethod.sogou/.SogouIME

def_enabled_input_methodsdef_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
2
adb shell settings get secure default_input_method
adb shell settings get secure enabled_input_methods

将查询结果填入 defaults.xml 即可。

注意事项

  1. 预装输入法 APK:目标输入法需已内置或预装到系统中,否则开机时无法生效。
  2. Android 版本差异:不同 Android 版本(如 Android 11–15)在权限与 OEM 定制上可能有差异,部分机型需额外处理权限或厂商配置。
  3. MTK / RK 等平台:部分平台除修改 defaults.xmlDatabaseHelper.java 外,还需在对应 vendor 目录预置 APK 并编写 Android.mk
  4. 应用层设置:普通应用无法直接修改 DEFAULT_INPUT_METHOD(需 WRITE_SECURE_SETTINGS 系统权限);无系统权限时只能引导用户到系统设置页手动切换。

相关 API(应用层)

在应用内显示或隐藏软键盘,可使用 InputMethodManager

1
2
3
4
5
6
// 显示软键盘
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(targetView, InputMethodManager.SHOW_FORCED);

// 隐藏软键盘
imm.hideSoftInputFromWindow(targetView.getWindowToken(), 0);

这与系统级默认输入法配置是不同层面的能力:前者控制单次键盘显隐,后者决定开机后全局默认使用哪款输入法。


总结

在 Android 系统源码中设置默认输入法的核心步骤:

  1. defaults.xml 中定义 def_enabled_input_methodsdef_input_method
  2. DatabaseHelper.loadSecureSettings() 中加载上述配置;
  3. 使用正确的输入法 IME ID(包名 + 服务组件名);
  4. 确保目标输入法已预装,并通过 adb shell ime list -a 验证。

按以上流程配置后,设备首次开机即可使用指定的默认输入法。

本文链接:
http://longzhiye.top/2026/06/20/2026-06-20/