做RK3588安卓系统定制的朋友,肯定都遇到过这种尴尬:板子调好了、界面改完了、APK预置进去了,结果客户一上手——中文输不进去。这个需求看起来特别小,但“内置输入法”四个字,在实际项目里能把人折腾够呛。我在多个RK3588项目里踩过一轮,今天把这套流程和.mk文件改法整理出来,尤其是那些网上基本没人写的坑,一次性讲清楚。
这篇东西适合这几类人看:正在做RK3588盒子类、商显类、边缘计算类设备固件定制的工程师;想把第三方输入法(搜狗、百度、讯飞等)做成系统默认输入法的朋友;以及那些被“输入法装进去了但是出不来”这种问题折磨到怀疑人生的同学。如果你只是想给自己手机装个输入法,那这篇帮不上你,建议出门左转应用商店。
先一句话把核心结论说在前面:在RK3588的安卓系统里内置输入法,本质就两件事——把输入法APK以系统应用的方式预置进固件,然后在系统配置里把这个输入法设为默认。听起来简单,做起来有四个坑:预置目录选错、默认输入法ID写错、输入法进程被杀、权限和SELinux策略缺失。下面逐个展开。
1. 先搞清楚:为什么要“内置”而不是“安装”
1.1 项目背景:RK3588设备为什么非要预置输入法
RK3588这个平台这两年出货量非常大,盒子、商显、边缘计算盒子、工控一体机、视频会议终端,到处都有它的影子。这些项目有一个共同特点:设备不是个人手机,而是“专机专用”,用户拿到手之后不会自己去装软件,尤其不会去应用商店下输入法。厂商如果不在系统里把输入法预置好,客户开机第一件事——连Wi-Fi输密码、搜索内容打字——就直接卡住。
更麻烦的是,很多定制系统的设置里做了应用安装限制,普通APK根本装不进去。还有些项目因为合规或者安全要求,不允许开放第三方应用安装入口。这种情况下,输入法只能走系统内置路线,而且必须是开机就能用、不需要任何手动激活步骤的那种“真内置”。
1.2 内置和普通安装的本质区别
可能有人觉得,内置不就是把APK放到系统镜像里吗?没那么简单。普通安装是把APK装到/data分区,用户能卸载、能停用、恢复出厂设置会清掉;内置是把APK放进/system分区(或者system_ext,甚至vendor分区),它变成系统固件的一部分,恢复出厂设置后依然存在,普通用户也卸载不掉。
还有个关键差异:内置到不同目录,应用拿到的权限等级不一样。放在/system/app下,它只是一个普通系统应用;放在/system/priv-app下,它才能拿到signature级别的系统权限。输入法这种组件,要跟系统的InputMethodManagerService深度交互,放在priv-app下才稳。后面我会细说为什么。
1.3 内置方案的总体思路
在RK3588的安卓系统里内置输入法,整体流程可以分为四步:
- 准备输入法APK,确认包名、组件名、so库架构,最好做平台签名。
- 修改产品mk文件,把APK编译进system镜像的priv-app目录。
- 修改系统默认配置,把这个输入法设为系统默认输入法。
- 编译、烧录、恢复出厂测试,确认输入法能自动弹出且稳定运行。
看起来平平无奇,对吧?但每一步都有细节,尤其是第二步和第三步,网上能找到的资料大多只讲了半截。下面我从输入法APK的准备工作开始讲。
2. 输入法应用本身的准备工作
2.1 输入法APK的选型:不是拿来就能用
先说选型。搜狗、百度、讯飞、QQ输入法,这些都是常见的第三方输入法,各有各的优缺点。搜狗的词库和云输入强,百度在部分设备上兼容性好一些,讯飞适合有语音输入需求的项目,QQ在轻量化方面有优势。
但要注意一点:从手机ROM里提取的输入法APK,不一定能直接用在RK3588这种嵌入式平台上。手机版输入法往往带了大量和核心功能无关的东西,比如广告SDK、热更新模块、统计SDK,这些在定制系统里轻则耗电耗内存,重则直接crash。更隐蔽的问题在于,很多手机厂商定制版输入法依赖GMS(Google Mobile Services),你在AOSP系统上跑,它开机就报错,连设置界面都进不去。
我的建议是,优先找输入法厂商要行业定制版,也就是那种去广告、去GMS依赖、可以预置到行业设备里的版本。如果实在没有,就自己用apktool解包,把不必要的库和资源清理掉,但注意别把输入法核心so库弄没了,否则编译完刷进去就是个残废。这块操作风险较高,没把握的话别硬来,找一个干净的公版APK是最稳妥的。
2.2 确认输入法的包名和IME服务组件名
这一步太重要了,因为后面设置默认输入法时,你填的不是应用名称,而是“组件ID”,格式是包名/服务名。写错一个字符,内置就白做了,系统根本找不到那个输入法。
怎么查?如果你手上有APK,用aapt命令行可以直接看:
aapt dump badging SogouInput.apk其中package:后面是包名,service组件的声明在aapt dump xmltree里看,更简单的方式是把APK解压,打开AndroidManifest.xml,搜索android.view.InputMethod这个intent-filter,它所在的那个service节点的android:name就是服务名。
以搜狗输入法为例:
包名:com.sohu.inputmethod.sogou 服务名:.SogouIME 完整ID:com.sohu.inputmethod.sogou/.SogouIME百度输入法则是com.baidu.input/.ImeService。不同版本、不同厂商定制版可能不一样,务必以实际APK解析结果为准。
2.3 平台签名重签:避免权限申请失败
RK3588的系统镜像一般用AOSP测试密钥或厂商平台密钥签名。第三方输入法APK如果用自己的签名,预置进系统后还能跑,但一旦它需要申请system级别的权限,就会因为签名不一致被拒绝。
输入法这种应用要跟系统输入法框架深度绑定,常见需要申请的高权限包括:
android.permission.INTERACT_ACROSS_USERS(跨用户切换时用)android.permission.STATUS_BAR_SERVICE(部分输入法要用)android.permission.SYSTEM_ALERT_WINDOW(候选词窗口上浮)
这些权限有的属于signature级别,如果签名不一致,运行时会被静默拒绝,表现出来就是输入法功能异常。所以行业定制里通用的做法是:解包APK,用平台的platform密钥重新签名,然后再打包预置。
重签名命令网上很多,这里给一个基于apksigner的参考:
# 先生成platform密钥对应的keystore,或直接用platform.pk8/platform.x509.pem apksigner sign --key platform.pk8 --cert platform.x509.pem --out SogouInput_signed.apk SogouInput.apk注意重签名后APK的签名信息变了,如果它原本带有签名校验(部分输入法会校验自身签名,防止被篡改),那重签名后可能启动自检失败。遇到这种情况,只能换版本或者找厂商技术支持。
2.4 确认so库架构:RK3588是ARM64,别拿个x86包来折腾
RK3588是ARM架构的芯片,跑的是64位系统,所以输入法APK里的native库必须是arm64-v8a,至少也得有armeabi-v7a。如果你手上的APK只带x86的so库,那基本不用试了,装上去直接报错。
怎么确认?解压APK,看看lib/目录下有什么:
lib/arm64-v8a/libNative.so lib/armeabi-v7a/libNative.so有这两种目录就稳了。如果只有x86或x86_64,果断换包。另外要注意部分输入法会在64位和32位进程间切换,如果你的系统只跑了64位的zygote,而APK只提供32位so库,也可能出问题。好的行业定制版通常都会把两种架构的库都带上。
3. 把输入法塞进系统:mk文件的正确改法
3.1 RK3588项目里的mk文件体系
这部分是很多人最懵的地方。RK3588的安卓BSP里,mk文件散在各处,新手一进去就迷路。我来帮你理一下最核心的几个:
device/rockchip/rk3588/:这是RK3588芯片平台的主目录,里面有rk3588.mk、device.mk等,是产品配置的总入口。device/rockchip/common/:RK平台公共配置,很多通用模块都在这里。vendor/rockchip/common/:Rockchip预置的第三方应用和库,部分APK会放在这里。build/target/product/:AOSP自带的通用产品配置,比如full_base.mk、aosp_base.mk,继承链的底层就在这里。
实际产品开发中,一般不会去改原生的rk3588.mk,而是建议新建一个自己的产品目录,或者在一个单独的产品mk里做增量配置。比如我在项目里习惯这样组织:
device/rockchip/rk3588/ ├── rk3588.mk ├── device.mk └── my_custom/ ├── my_device.mk └── overlay/然后在my_device.mk里用include方式把它并进构建体系。这样代码管理清晰,后续升级RK官方BSP时,也不容易因为直接改了原生mk导致冲突。
3.2 添加输入法APK到编译产物:PRODUCT_PACKAGES的两种姿势
把预置APK加进系统编译,最常用的是PRODUCT_PACKAGES,但在此之前你得先定义一个模块。做法有两种。
第一种:直接把APK作为预编译模块
在my_device.mk同目录下新建一个Android.mk,内容大致是这样:
include $(CLEAR_VARS) LOCAL_MODULE := SogouInput LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_TAGS := optional LOCAL_BUILT_MODULE_STEM := package.apk LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_PRIVILEGED_MODULE := true LOCAL_SRC_FILES := SogouInput.apk LOCAL_CERTIFICATE := platform include $(BUILD_PREBUILT)注意几个关键参数:
LOCAL_PRIVILEGED_MODULE := true:这行决定APK安装到/system/priv-app下,而不是/system/app。我建议一定要开,后面会讲原因。LOCAL_CERTIFICATE := platform:用平台密钥给APK重签名。如果你的APK已经用平台密钥签过了,这行可以保持这样,构建系统会再签一遍;如果不想动签名,也可以写PRESIGNED,表示保持原签名。LOCAL_SRC_FILES := SogouInput.apk:APK文件本身,和Android.mk放同一目录。
然后在产品mk里把这个模块加进编译:
PRODUCT_PACKAGES += \ SogouInput第二种:不用Android.mk,直接用PRODUCT_COPY_FILES拷贝
这种更暴力,直接指定APK拷贝到目标路径:
PRODUCT_COPY_FILES += \ vendor/rockchip/common/app/SogouInput/SogouInput.apk:system/priv-app/SogouInput/SogouInput.apk这种方式少写一个Android.mk,但缺了模块化的灵活性,比如之后要给它配置权限、定义组件时就不方便。我个人的习惯是,简单项目用COPY_FILES快速验证,正式项目还是用Android.mk定义模块,后续维护清晰。
3.3 为什么强烈建议预置到priv-app而不是app
这个点我要单独拿出来说,因为很多人第一次做的时候都会选错。
/system/app下的应用是"普通系统应用",/system/priv-app下的应用是"特权系统应用"。Android系统对这两种应用的信任程度完全不同。放在priv-app下,应用才有资格申请signature|privileged级别的权限,例如直接调用输入法相关服务、读取系统设置、绑定系统窗口等。
输入法这种组件,本质上是一个后台服务,它要随时响应InputMethodManagerService的绑定请求,还需要在系统启动早期就准备好。如果放在普通app目录下,某些高权限功能可能能用,但系统对它的后台限制、权限授予会比priv-app严格得多,这样就容易出一些莫名其妙的问题——比如输入法能用但语音输入调不起来、设置项能看但无法默认启用。
所以,结论很简单:输入法一律放priv-app。
3.4 设置默认输入法:mk文件里到底怎么写
这是坑最多的环节。很多人的做法是,把APK编译进去,刷机后进设置里手动选一下默认输入法,然后就以为完事了。但产品交付的时候,客户可没功夫去设置里翻。要求是:恢复出厂设置后,第一次开机,默认输入法就已经是第三方输入法,不需要任何人手动操作。
要做到这一点,本质是让系统Settings.Secure里的default_input_method这个值在首次开机时就指向你的输入法。系统启动时,InputMethodManagerService会读取这个值,决定哪个输入法作为默认。如果这个值为空,或者指向的组件ID不存在,系统就会退回AOSP原生键盘。
各种mk写法、overlay写法本质都是围绕这个值做文章。我介绍几种实际项目里验证过有效的做法,按推荐程度排序。
推荐做法一:通过framework overlay修改config_defaultInputMethod
AOSP在frameworks/base/core/res/res/values/config.xml里有一个字符串配置:
<string name="config_defaultInputMethod" translatable="false"></string>如果这个值为空,系统启动时就不会主动设置默认输入法。我们可以在自己的产品目录下放一个overlay,把这个值改成目标输入法的组件ID。
overlay目录结构:
my_custom/overlay/frameworks/base/core/res/res/values/config.xmlconfig.xml内容:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="config_defaultInputMethod" translatable="false">com.sohu.inputmethod.sogou/.SogouIME</string> </resources>然后在产品mk里声明overlay:
PRODUCT_PACKAGE_OVERLAYS += \ device/rockchip/rk3588/my_custom/overlay这种做法的好处是,它直接作用于framework层,系统首次启动时就会把默认输入法设置好,可靠性和兼容性都最好。
推荐做法二:通过ro.config.default_input_method属性
有些RK的BSP版本里,InputMethodManagerService在初始化时会检查ro.config.default_input_method这个系统属性,如果Settings.Secure里没有值,就会用这个属性的值。所以在产品mk里可以这样写:
PRODUCT_PROPERTY_OVERRIDES += \ ro.config.default_input_method=com.sohu.inputmethod.sogou/.SogouIME不过在Android 12上,更推荐用PRODUCT_PRODUCT_PROPERTIES,因为它写入到product分区,和系统属性隔离更合理:
PRODUCT_PRODUCT_PROPERTIES += \ ro.config.default_input_method=com.sohu.inputmethod.sogou/.SogouIME需要注意的是,不同BSP对这个属性的支持情况不完全一样,有的版本确实保留了这套fallback逻辑。你在项目里可以先加这个属性,编译烧录后验证一下,如果不行就换回overlay方案。
补充做法:直接在SettingsProvider的defaults.xml里写
在packages/apps/SettingsProvider/res/values/defaults.xml里,有一个def_input_method字符串,对应Settings.Secure.DEFAULT_INPUT_METHOD的默认值。改这里也可以,但因为这是原生文件,改动后升级BSP容易冲突,不如overlay干净。
<string name="def_input_method" translatable="false">com.sohu.inputmethod.sogou/.SogouIME</string>我整理一下这几种方案的对比:
| 方案 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| framework overlay | 修改config_defaultInputMethod | 稳定、兼容性好、升级不易冲突 | 需要理解overlay机制 |
| PRODUCT_PRODUCT_PROPERTIES | 设置ro.config.default_input_method属性 | 一行搞定、修改集中 | 依赖BSP是否支持该属性 |
| 改defaults.xml | 修改SettingsProvider默认值 | 直接、有效 | 改原生文件,升级易冲突 |
3.5 移除AOSP默认键盘,还是留着?
AOSP默认键盘的包名是com.android.inputmethod.latin,组件名为com.android.inputmethod.latin/.LatinIME。这个键盘功能简单、没有中文词库,体验太差,一般产品都会把它替换掉。
移除方法有两种。一种是在产品mk里显式移除:
PRODUCT_PACKAGES_REMOVE += \ LatinIME另一种是直接把相关的编译模块注释掉,但这样容易误伤其他依赖,不推荐。
有个问题要注意:如果你设置了默认输入法指向第三方输入法,但同时又保留LatinIME,那么第三方输入法一旦crash或没绑定上,系统可能会自动回退到LatinIME。这在调试期很烦,因为你会看到键盘一会儿是中文输入法、一会儿变成系统默认键盘。排查时这一度让我走了不少弯路。
我的建议是:保留LatinIME在系统里但不让它出现在输入法列表里,或者干脆移除。如果你不想动系统原生的编译配置,可以用PRODUCT_PACKAGES_REMOVE把它从最终镜像里去掉。但要确认系统里没有其他模块依赖LatinIME的组件ID,否则可能会引发服务绑定异常。
另外提醒一点,部分RK的BSP里,输入法列表的展示逻辑还跟input_method_subtype相关,这会影响到键盘的默认语言。你在验证时如果发现切换不出中文,除了看default_input_method之外,还要检查输入法APK里是否自带中文子类型,以及系统语言设置是否匹配。
3.6 编译与镜像内验证
按上面的方式改完后,编译命令参考:
source build/envsetup.sh lunch rk3588-userdebug make -j16编译完成后,烧录到板子上,先不要急着点输入法,直接进命令行:
adb shell settings get secure default_input_method如果输出是com.sohu.inputmethod.sogou/.SogouIME,说明默认输入法配置生效了。
再确认输入法APK确实在priv-app目录下:
adb shell pm path com.sohu.inputmethod.sogou输出应该是:
package:/system/priv-app/SogouInput/SogouInput.apk看到这个路径,说明编译部署成功。接下来验证系统里注册的输入法服务:
adb shell ime list -s这个命令会列出所有可用输入法,确认你的输入法ID在其中且无异常。
最后恢复出厂设置再确认一遍:
adb shell recovery --wipe_data或者直接在设置里恢复出厂。这一步是最重要的,因为有些配置只在首启时生效一次,如果你不是从出厂状态验证,很容易漏掉问题。
4. 内置完成后,那些绕不过去的坑
4.1 坑一:默认输入法ID设置不生效
这是最经典的问题。APK预置进去了,settings get secure default_input_method返回也正确,但打开输入框弹出的还是系统默认键盘。
这种情况十有八九是组件ID写错了。输入法注册时使用的组件ID,必须和AndroidManifest里声明的完全一致,包括大小写。你可能会问,我明明用的是从manifest里看来的组件名,怎么会错?问题出在完整ID的拼接格式上。
如果manifest里service的android:name是.SogouIME,包名是com.sohu.inputmethod.sogou,那完整ID是com.sohu.inputmethod.sogou/.SogouIME。如果service名是com.sohu.inputmethod.sogou.SogouIME,那完整ID就变成com.sohu.inputmethod.sogou/com.sohu.inputmethod.sogou.SogouIME。两种写法结果不一样,但也都能用,系统会自动做归一化。建议统一用点号开头的相对写法,可读性好一些。
还有一种情况是,系统首次启动时Settings.Secure.DEFAULT_INPUT_METHOD确实写入了正确值,但某个系统应用或你自己的预置应用,在开机时又把设置覆盖了。排查方法是在logcat里过滤InputMethodManagerService关键字,看它在初始化时读到的值到底是什么。如果是被覆盖,就顺着覆盖逻辑定位。
4.2 坑二:恢复出厂设置后默认输入法丢了
这个问题隐蔽性很强。明明我改了mk、设置了默认值,刚烧录时验证正常,但一恢复出厂,默认输入法就变回空或者变成AOSP键盘。
原因在于:你用adb shell settings put secure default_input_method xxx设置的值,只写进了当前data分区的设置数据库。而恢复出厂会清空data分区,设置数据库重新初始化。如果你的mk配置没有真正让SettingsProvider在初始化时写入这个默认值,那么恢复出厂后你之前手动设置的值就全部归零。
所以验证时千万别偷懒,一定做完恢复出厂再测。我见过不少项目,开发机验证通过了,量产时客户一恢复出厂就出问题,最后只能重新出固件,非常被动。
解决这个问题,就是前面3.4节讲的那几种方案。核心原则是:要让系统在初始化设置数据库时就知道默认输入法是谁,而不是等系统开机后再去改。
4.3 坑三:输入法进程被杀,键盘弹不出来
RK3588平台上跑的应用比较多,尤其是做盒子或商显的项目,后台服务一大堆,内存吃紧。输入法进程一旦被lmkd(低内存杀手)干掉,再次点击输入框时系统会尝试重新绑定输入法服务,正常情况能拉起来,但会有几秒延迟。
如果你的输入法APK自己写了android:persistent="true",那这个进程被杀后系统会强制重启它,但也可能因为APK本身崩溃导致反复重启。更稳妥的做法是,在系统里把输入法进程加入“不杀白名单”,具体方法是写一个自启动服务,在开机后动态调整进程优先级,或者在ActivityManager的白名单配置里加上输入法包名。
另一种更恶心的场景是:输入法APK在后台被系统“冻结”了,点击输入框后InputMethodManagerService去bind服务,但service因为ANR太久没起来,键盘就一直不弹。这种问题在logcat里通常能看到Timeout waiting for IME之类的报错。解决思路是优化输入法APK的启动逻辑,减少onCreate里的耗时操作;如果APK是第三方的没法改,那就在系统侧提高它的进程优先级,比如把它的android:process调整为系统共享进程,或者通过init.rc强制保活。
4.4 坑四:SELinux和权限问题,log里全是avc denied
RK3588官方的BSP默认会开启SELinux,而且是enforcing模式。预置的输入法APK如果访问了某些文件节点或者系统服务,触发SELinux拒绝,权限申请就会失败,表现为输入法启动后某些功能无法使用,或者整个进程直接crash。
排查方法很简单,抓logcat:
adb logcat -b events | grep -i avc看到avc: denied字样,就是SELinux拦截了。常见的拦截包括:
- 输入法要读取网络状态、当前输入框的包名、剪贴板内容等。
- 输入法要写入cache目录或创建子进程。
- 输入法要访问
debugfs、sysfs节点等。
解决办法是追加SELinux策略文件。在RK的BSP中,通常位于device/rockchip/common/sepolicy目录下,新增或修改对应应用的te文件。比如给搜狗输入法增加规则:
type sogou_input, domain; typeattribute sogou_input coredomain; allow sogou_input system_data_file:dir rw_dir_perms; allow sogou_input system_data_file:file rw_file_perms;写好之后重新编译,烧录验证。这个方向只会在真机调试中遇到,网上资料少,如果你不熟悉sepolicy,建议先搜对应的audit2allow工具用法,它能自动把avc denied日志转换成Allow规则,省不少事。
4.5 坑五:第三方输入法自带的“国产SDK”问题
这一点我不想说得太细,但必须提醒。很多第三方输入法APK里,除了输入逻辑,还挂了一堆云服务、广告SDK、统计SDK、热更新SDK。在个人手机上这些可能没什么,但到了行业设备上,它们会引发三类问题:
- 隐私合规审核过不了。行业设备往往要求不能偷偷上传用户输入数据,输入法的云输入和统计功能必须关掉。
- 网络被限制的设备上,SDK反复重试连接,造成耗电和卡顿。
- 输入法版本更新走热更新通道,可能导致出厂固件里的输入法行为不可控。
我的建议是:找一个关闭了云输入和统计功能的“纯净版”输入法APK,或者找厂商定制一个行业版本。实在不行,就在系统侧用防火墙规则或应用管理策略,把输入法的网络权限限制住。这样既保住了输入体验,也规避了合规和稳定性风险。
4.6 坑六:多用户、工作资料等场景下的输入法异常
RK3588设备不少会开多用户或者访客模式。AOSP的多用户机制下,每个用户有独立的输入法设置。前面我们设置的默认输入法只对默认用户(user 0)生效。如果切换到访客用户,输入法列表可能为空,键盘弹不出来。
解决方案有两种,一种是在InputMethodManagerService初始化时,给所有用户都写入默认输入法配置;另一种是写一个开机广播接收器,在用户解锁后动态设置。前者改动framework,工作量稍大但彻底;后者适合快速验证。如果你只是做一个单用户的产品,这条可以忽略,但如果是做教育平板、多用户盒子之类的项目,一定要提前测一下。
5. 内置完成后的验收清单
这部分是给交付兜底的。前面所有步骤做完,不要急着打包,按下面这个清单过一遍,很多问题能提前暴露。
5.1 功能层面验收
- 恢复出厂设置后,第一次开机,打开任意输入框,默认弹出的是第三方输入法,而不是AOSP键盘。
- 在输入法设置里,能看到第三方输入法及中文、英文等子类型。
- 中英文切换正常,候选词、联想、云输入(如有)正常工作。
- 切换应用再回来,输入法能保持之前的状态,不会反复重新加载。
- 密码输入框内,输入法不能出现候选词泄露风险。
- 横竖屏切换时键盘布局正常,不被系统输入法UI遮挡。
5.2 系统层面验收
adb shell pm path显示输入法在/system/priv-app下。adb shell settings get secure default_input_method返回正确组件ID。adb shell ime list -s显示输入法已注册且为default状态。- 反复开关软键盘100次以上,没有出现IME未响应或进程被杀。
- 长时间运行后,内存中输入法进程的占用无明显泄漏。
5.3 还有一些容易被忽略的收尾工作
- 确认输入法APK不需要动态申请存储权限,避免在低权限场景下写不了配置。
- 确认系统语言切换后,输入法键盘布局能跟随系统语言变化。
- 如果项目有OTA升级,确认升级后输入法APK和默认配置不会丢失。
- 如果有多款输入法预置需求,建议在设置里预置一个
InputMethodManager的管理入口,方便用户切换。
最后说一个我自己的小习惯。所有输入法相关的mk修改,我会单独抽出来放一个文件,比如my_input_method.mk,然后在产品mk里include它。这样后续升级BSP、换输入法品牌、调按键音、加默认键盘布局,都是在一个文件里改,不用到处翻。这个习惯帮我省了非常多的时间,尤其是有多个项目在并行的时候,复制粘贴一个文件就完成输入法适配,效率是成倍的提升。
希望这篇能帮你在RK3588输入法内置这件事上少走点弯路。如果你按这个流程做完还有问题,欢迎在评论区把logcat贴出来,我看到会尽量帮你分析。嵌入式定制这条路,大家都是在踩坑和填坑中过来的,多交流才能走得快。