查看: 1720|回复: 1

Android 5.1内置第三方输入法并设置为默认输入法

[复制链接]

47

主题

49

帖子

227

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
227
发表于 2017-11-19 19:27:33 | 显示全部楼层 |阅读模式
   Android 系统自带的输入法LatinIME输入法,不能输入拼音。为此客户要求内置百度输入法,一看客户提供的输入法apk只有8M,便爽快的同意了。

1、首先将APK打包到系统 system.img
     a、在vendor/rockchip/daluotuo/apps/目录下创建文件夹,例如:vendor/rockchip/daluotuo/apps/baidu/
     b、将下载好的百度输入法apk,重命名为baidu_input.apk 扔到上面创建好的目录,并创建Android.mk文件。
          Android.mk添加一些内容:  
  1. # baidu input
  2. LOCAL_PATH := $(call my-dir)
  3. include $(CLEAR_VARS)
  4. LOCAL_MODULE := baidu_input
  5. LOCAL_MODULE_CLASS := APPS
  6. LOCAL_MODULE_TAGS := optional
  7. LOCAL_BUILT_MODULE_STEM := package.apk
  8. LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
  9. #LOCAL_PRIVILEGED_MODULE :=
  10. LOCAL_CERTIFICATE := PRESIGNED
  11. #LOCAL_OVERRIDES_PACKAGES :=
  12. LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
  13. #LOCAL_REQUIRED_MODULES :=
  14. #LOCAL_PREBUILT_JNI_LIBS :=
  15. include $(BUILD_PREBUILT)
复制代码
         c、接下来要告诉编译器:我们要打包baidu_input.apk到系统。                           在vendor/rockchip/daluotuo/apps/apps.mk的末尾添加:  
  1. PRODUCT_PACKAGES += \
  2.     baidu_input
复制代码
        d、编译android、确认daluotuo/out/target/product/rk3288_box/system/app/ 目录下是否有baidu_input目录,如果有证明打包到系统成功了。

2、修改android framwork 设置百度输入法为默认输入法
     a、将系统所有输入法设置为可用
     frameworks/base/core/java/com/android/internal/inputmethod/InputMethodUtils.java
  1. public void enableAllIMEsIfThereIsNoEnabledIME() {
  2.      -            if (TextUtils.isEmpty(getEnabledInputMethodsStr())) {
  3.     +            if (!TextUtils.isEmpty(getEnabledInputMethodsStr())) {  // change by daluotuo at 20171117
复制代码
     b、原生系统并没有设置默认输入法的配置,我们在这添加,用def_input_method这个变量名用来指定输入法的包名
          frameworks/base/packages/SettingsProvider/res/values/defaults.xml
  1. <string name="def_input_method" translatable="false">com.baidu.input/.ImeService</string>
复制代码
    不同的输入法,值不一样,以上是以百度输入法为例。

百度:com.baidu.input/.ImeService

讯飞:com.iflytek.inputmethod/.FlyIME

腾讯:com.tencent.qqpinyin/.QQPYInputMethodService
谷歌:com.google.android.inputmethod.pinyin/.PinyinIME
搜狗:com.sohu.inputmethod.sogou/.SogouIME
触宝:com.cootek.smartinput5/.TouchPalIME


  c、读取资源文件中的def_input_method,放到Settings.Secure.DEFAULT_INPUT_METHOD,用于InputMethodManagerService.java等用到。
           frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
  1. private void loadSecureSettings(SQLiteDatabase db) {
复制代码

3、编译系统、升级,完成












回复

使用道具 举报

0

主题

24

帖子

68

积分

注册会员

Rank: 2

积分
68
发表于 2018-8-9 22:25:11 | 显示全部楼层
厉害了,给力
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表