android10 添加默认输入法
前言
提示:这里可以添加本文要记录的大概内容:
安卓aosp默认只有英文输入,不同的平台,有些可能不一样,我这个是基于mtk的
提示:以下是本篇文章正文内容,下面案例可供参考
一、添加MK编译脚本
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
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_PRIVILEGED_MODULE := true
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_PREBUILT_JNI_LIBS := \
@lib/armeabi/libsogouime.so
include $(BUILD_PREBUILT)
LOCAL_PRIVILEGED_MODULE 是放在priv-app下面;
重点 LOCAL_CERTIFICATE 这里要用自己app的签名,不要用平台签名
在项目对应的device.mk 中添加要编译的输入法
二、修改系统设置
1.修改SettingsProvider
开机启动的时候会读取设置的
代码如下(示例):
diff --git a/alps/vendor/mediatek/proprietary/packages/apps/SettingsProvider/res/values/defaults.xml b/alps/vendor/mediatek/proprietary/packages/apps/SettingsProvider/res/values/defaults.xml
index 53868072d1..bb67d247e4 100755
--- a/alps/vendor/mediatek/proprietary/packages/apps/SettingsProvider/res/values/defaults.xml
+++ b/alps/vendor/mediatek/proprietary/packages/apps/SettingsProvider/res/values/defaults.xml
@@ -54,6 +54,10 @@
<bool name="def_backup_enabled">false</bool>
<string name="def_backup_transport" translatable="false">com.android.localtransport/.LocalTransport</string>
+ <string name="default_input_method" translatable="false">com.sohu.inputmethod.sogou.tv/.SogouIME</string>
+ <string name="enabled_input_methods" translatable="false">com.sohu.inputmethod.sogou.tv/.SogouIME</string>
+
+
<!-- Default value for whether or not to pulse the notification LED when there is a
pending notification -->
<bool name="def_notification_pulse">true</bool>
diff --git a/alps/vendor/mediatek/proprietary/packages/apps/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/alps/vendor/mediatek/proprietary/packages/apps/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index ea92e2b776..e9d34d2ca1 100644
--- a/alps/vendor/mediatek/proprietary/packages/apps/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/alps/vendor/mediatek/proprietary/packages/apps/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -2406,6 +2406,13 @@ class DatabaseHelper extends SQLiteOpenHelper {
com.android.internal.R.string.config_dreamsDefaultComponent);
loadStringSetting(stmt, Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT,
com.android.internal.R.string.config_dreamsDefaultComponent);
+
+ loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD,
+ R.string.default_input_method);
+
+ loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS,
+ R.string.enabled_input_methods);
+
这里又有点差别了,去inputmanagerservice里面找一找Settings.Secure.DEFAULT_INPUT_METHOD对应的字符串是哪个,两个都要加上,Settings.Secure.ENABLED_INPUT_METHODS表示开机输入法
2.修改系统默认权限
没有这个的话, 开机会谈赋予权限的对话框,这里,又两种方式,
第一,在MK文件中去掉LOCAL_PRIVILEGED_MODULE=true, 即放在system/app下面,然后修改系统代码
代码如下(示例):
diff --git a/alps/frameworks/base/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/alps/frameworks/base/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
index 3d5d73a2ba..cbf7b82372 100644
--- a/alps/frameworks/base/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/alps/frameworks/base/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -1123,6 +1123,8 @@ public class PermissionManagerService {
} else {
// For modern apps keep runtime permissions unchanged.
grant = GRANT_RUNTIME;
}
+ if(pkg.packageName.contains("com.sohu.inputmethod.sogou.tv"))
+ grant = GRANT_INSTALL;
} else if (bp.isSignature()) {
// For all apps signature permissions are install time ones.
@@ -1130,6 +1132,8 @@ public class PermissionManagerService {
if (allowedSig) {
grant = GRANT_INSTALL;
}
+ if(pkg.packageName.contains("com.sohu.inputmethod.sogou.tv"))
+ grant = GRANT_INSTALL;
}
if (DEBUG_PERMISSIONS) {
@@ -1148,6 +1152,9 @@ public class PermissionManagerService {
// updating the platform).
if (!isNewPlatformPermissionForPackage(perm, pkg)) {
grant = GRANT_DENIED;
+
+ if(pkg.packageName.contains("com.sohu.inputmethod.sogou.tv"))
+ grant = GRANT_INSTALL;
}
}
}
同理,其他第三方app也能在这里修改
第二,在MK文件中加上LOCAL_PRIVILEGED_MODULE=true, 即放在system/priv-app下面,然后再对应
frameworks\base\data\etc\privapp-permissions-platform.xml中添加权限,如
<privapp-permissions package="com.xxx.xxxx">
<permission name="android.permission.REBOOT"/>
<permission name="android.permission.RECOVERY"/>
<permission name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<permission name="android.permission.READ_EXTERNAL_STORAGE"/>
<permission name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<permission name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<permission name="android.permission.RECEIVE_BOOT_COMPLETED"/>
</privapp-permissions>
总结
以上就是添加第三方输入法的方式, 同理,添加其他第三方app也是一样的,权限问题参考第二步