系统默认搜狗输入法功能实现
文章目录
- 需求:
- 参考资料
- 需求实现
-
- 内置搜狗输入法
-
- [配置第三方apk .mk 和 搜狗安装包,不可卸载方式](#配置第三方apk .mk 和 搜狗安装包,不可卸载方式)
- [搜狗输入法module 配置到系统device.mk 中去](#搜狗输入法module 配置到系统device.mk 中去)
- 设置搜狗输入法为默认输入法
- 给输入法授权,默认所有权限
- 总结
需求:
MTK平台 内置搜狗输入法,用搜狗输入法作为默认的输入法功能
场景
Android平台常用的输入法有系统默认的谷歌拼音、搜狗、讯飞、手心...
各个客需会选择适合自己的输入法,一般会默认内置一个输入法,很少有默认两个输入法的。
参考资料
MTK内置第三方APP-卸载不可卸载-签名问题
Android 10.0 修改搜狗为默认输入法,并且授予运行权限
需求实现
实现需求分为3步骤
- 内置搜狗输入法
- 设置搜狗输入法为默认输入法
- 搜狗输入法默认全部授权权限【规避 搜狗输入法弹出来时候还需要授权操作】
内置搜狗输入法
之前有过相关笔记,可以参考下 MTK内置第三方APP-卸载不可卸载-签名问题
配置第三方apk .mk 和 搜狗安装包,不可卸载方式

这里我们看看Android.mk 源码配置怎样的
java
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := sogouinput
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
##LOCAL_PROPRIETARY_MODULE := true
LOCAL_ENFORCE_USES_LIBRARIES := false
LOCAL_DEX_PREOPT := false
include $(BUILD_PREBUILT)
备注说明:
- LOCAL_CERTIFICATE := PRESIGNED
表明是用的apk 自己的签名,这也是为什么后面第三步骤中我们需要给搜狗输入法默认所有权限的原因。
- LOCAL_MODULE := sogouinput
这里的MODULE 名称为sogouinput, 那么在系统配置编译模块环境编译到系统的时候,就是用的这个module 的value 值 sogouinput 的。
搜狗输入法module 配置到系统device.mk 中去
路径:
java
device\mediatek\system\common\device.mk
具体配置如下
设置搜狗输入法为默认输入法
在配置文件中配置输入法即可,路径如下:
java
frameworks/base/core/res/res/values/config.xml
具体配置如下,配置输入法包名。
java
<!-- The list of IMEs which should be disabled until used.
This function suppresses update notifications for these pre-installed apps.
We need to set this configuration carefully that they should not have functionarities
other than "IME" or "Spell Checker". In InputMethodManagerService,
the listed IMEs are disabled until used when all of the following conditions are met.
1. Not selected as an enabled IME in the Settings
2. Not selected as a spell checker in the Settings
3. Installed
4. A pre-installed IME
5. Not enabled
And the disabled_until_used state for an IME is released by InputMethodManagerService
when the IME is selected as an enabled IME. -->
<!--item>com.android.inputmethod.latin</item-->
<string-array name="config_disabledUntilUsedPreinstalledImes" translatable="false">
<item>com.sohu.inputmethod.sogou</item>
</string-array>
给输入法授权,默认所有权限
修改文件路径:
java
frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
具体修改内容如下,grantDefaultPermissions 方法中,给输入法包名授权
java
public void grantDefaultPermissions(int userId) {
DelayingPackageManagerCache pm = new DelayingPackageManagerCache();
.....
grantRuntimePermissionsForFisePackage(pm, userId, "com.sohu.inputmethod.sogou");
.....
pm.apply();
}
grantRuntimePermissionsForFisePackage 方法可自行查看,通过pm ,拿到资源文件里面权限和请求权限,全部授权一次来实现默认所有权限已授权状态。
最后编译rom,刷固件。
使用效果,进入输入框就直接弹出搜狗输入法了

总结
- 常用客需功能,仅供参考,在MTK平台上面的实践,在RK平台上面只有内置方式不一致而已,默认方式和授权其实一样的。
- 这里只是搜狗输入法的默认方式一次探讨,其它输入法默认 思路完全一样。
- 每种输入法有自己优劣,具体场景具体客需具体对待
思考
- 为什么不给系统签名 ? 其实在日常开发中能不给系统签名的就不会给系统签名,给了系统签名还可能存在编译不通过问题,具体问题具体对待