9.0 修改默认键盘

417 阅读2分钟

9.0 修改默认键盘

输入法ID

Android端输入法软件主要标识为输入法ID,用户配置相应的输入法ID,达到切换输入法的目的。

常见的输入法ID

com.android.inputmethod.latin/.LatinIME (缩写)
com.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME (完整)
com.sohu.inputmethod.sogou.xiaomi/.SogouIME (搜狗输入法小米版)
  • com.android.inputmethod.latin/.LatinIME

    Android原生默认的输入法

输入法ID的获取

输入法ID的获取方式有多种,此处示范一种获取方法:

  1. 安装要预置的输入法

  2. shell终端中输入命令ime list -a可列出所有输入法的列表

  3. 找到对应的输入法ID

设置流程

此处以第三方输入法LeanKeyKeyboardPro为例

预置APK

Android默认的输入法源码目录为:packages/inputmethods/ 该目录已存在两种输入法LatinIMEOpenWnn

建立输入法目录LeanKeyKeyboardPro,将独立输入法apk放置其中并建立Android.mk文件,用于源码编译时以预置apk方式编译进系统。

Android.mk示例:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := LeanKeyKeyboardPro
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := .apk

LOCAL_MODULE_TARGET_ARCH := arm
my_src_arch := $(call get-prebuilt-src-arch,$(LOCAL_MODULE_TARGET_ARCH))
	
LOCAL_PREBUILT_JNI_LIBS_arm := 

LOCAL_CERTIFICATE := PRESIGNED
LOCAL_DEX_PREOPT := false
include $(BUILD_PREBUILT)

将该包添加到编译脚本中

配置默认输入法

Android系统的默认输入法是读取SettingProvide的数据库中配置的输入法ID,进行设置的。

  1. 建立输入法ID对应的String文本,文件目录为

    frameworks\base\packages\SettingsProvider\res\values\defaults.xml,在该文件中添加了新的输入法ID:com.liskovsoft.leankeyboard/.ime.LeanbackImeService,赋值给了def_default_input_methoddef_enabled_input_methods

    • def_default_input_method

      在Android系统初始化的时候,会将该标签对应的输入法ID赋值给Settings.Secure.DEFAULT_INPUT_METHOD,该变量将会把输入法ID存储到SettingProvider的数据库中,以此做到设置默认输入法的功效。

    • def_enabled_input_methods

      该值标识系统使能的输入法,可设置多个输入法ID,多个输入法之间采用{ : }分隔

  2. 配置输入法默认值

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

private void loadSecureSettings(SQLiteDatabase db) {
    ...
    loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD,
                      R.string.def_default_input_method);
                    
    loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS,
                      R.string.def_enabled_input_methods);
    ...
}

该处的方法表示,系统在初始化的时候会将string对应的输入法ID赋值到数据库的属性中。

至此修改系统默认输入法的步骤已完成。

输入法测试

  • adb shell ime list -a

    列出本设备支持输入法

  • adb shell settings get secure default_input_method

    获取默认输入法,用于验证默认输入法是否设置成功

  • adb shell settings get secure enabled_input_methods

    获取使能的输入法列表

  • adb shell ime enable com.liskovsoft.leankeyboard/.ime.LeanbackImeService

    使能特定输入法

  • adb shell ime set com.liskovsoft.leankeyboard/.ime.LeanbackImeService

    设置当前输入法

This message is used to verify that this feed (feedId:87310356539807744) belongs to me (userId:78433846862367744). Join me in enjoying the next generation information browser follow.is.