Android12 Rom定制设置默认语言为中文
1.前言:
最近在做Android系统Rom客制化定制时需要默认语言为中文,而且可以切换输入法,之前讲解过在ROM中如何设置默认输入法,这里就不展开了,其实这个需求很简单,就是调试的时候发现不能输入中文,这里记录一下过程,直接上代码.
2.在device.mk文件设置:
PRODUCT_LOCALES := zh_CN
PRODUCT_PROPERTY_OVERRIDES += \
persist.sys.locale=zh-CN \
ro.product.locale=zh-CN
3.修改Languages_default.xml:
设置默认语言修改为中文,有的可能默认语言是en_US
PRODUCT_LOCALES := \
zh_CN \
en_US \
af_ZA \
am_ET \
ar_EG \
ar_XB \
as_IN \
az_AZ \
be_BY \
bg_BG \
bn_BD \
bs_BA \
ca_ES \
cs_CZ \
da_DK \
de_DE \
el_GR \
en_AU \
en_CA \
en_GB \
en_IN \
4.修改common-vendor.xml
PRODUCT_LOCALES := zh_CN
PRODUCT_PROPERTY_OVERRIDES += \
persist.sys.locale=zh-CN \
ro.product.locale=zh-CN
5.遇到问题:
之前预制的是讯飞输入法,如果不懂Rom咋预制输入法的同学可以看我之前的文章,这里就不重复了,打开网页发现不能输入中文,虽然显示默认语言为中文,按照上面的配置,通过日志排查和adb查看配置是否生效,发现还是不能切换语言。
6.解决方法如下:
尝试了更换不同的输入法和不同的apk版本,卸载了系统自带的输入法等等多种方式,总有一种适合你。
6.1 使用google拼音输入法
发现google拼音是可以正常切换输入法语言的,中英文繁体都正常.
6.2 在模拟器上使用不同输入法:
安装了讯飞、搜狗和google拼音输入法,直接安装apk发现都是可以切换中文输入法的,这个问题真的是很头疼,以为是代码和配置问题.
6.3 adb查看日志
发现输入法默认语言是中文,默认的输入法也是讯飞,单独安装的时候也是可以输入中文的,打包成镜像后就不行了,我换了一个google拼音输入法打包发现是可以生效的,而且默认的语言也是中文,默认的输入法也是讯飞,这里想起来之前最开始定制输入法的时候是更换了一个其他版本的apk.
6.4 去掉默认的输入法
这里为了更好地排查和不使用系统键盘,所以去掉默认系统的输入法和键盘
7.替换新apk:
于是去apkpure上面下载了一个讯飞输入法小米版.下载地址:apkpure.net/
7.1 源码目录:
/packages/apps/FlyInputMethod
如果是Gapps的方式就在 /vendor/gapps/common/proprietary/product
7.2 Android.mk方式:
apk和模块名称随意,只要你能找到,也知道这个App是干啥的就行,目录根据需要自己决定放哪里.
# FlyInputMethod
LOCAL_PATH := $(call my-dir) //设置当前模块的路径为当前目录
include $(CLEAR_VARS) //清除之前定义的变量,开始一个新模块的定义
LOCAL_MODULE := FlyInputMethod //模块名称
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk //源文件名称
LOCAL_MODULE_TAGS := optional //标记此模块为可选模块
LOCAL_MODULE_CLASS := APPS //指定模块类别为应用程序
LOCAL_CERTIFICATE := PRESIGNED //表示APK已经预先签名,不需要再签名
LOCAL_PRIVILEGED_MODULE := true //表示这是一个特权模块,会安装到系统的 priv-app 目录
LOCAL_DEX_PREOPT := false //禁用dex预优化
LOCAL_OVERRIDES_PACKAGES := LatinIME //表示这个模块会替换系统中的 LatinIME
include $(BUILD_PREBUILT) //包含预构建模块的脚本
7.3 Android.bp方式:
android_app_import {
name: "FlyInputMethod", # 模块名称
apk: "prebuilts/apks/FlyInputMethod/FlyInputMethod.apk", #预编译APK的路径
presigned: true, # 使用预先签名的APK
dex_preopt: {
enabled: false, # 禁用dex预优化
},
privileged: true, # 标记为特权应用(可安装在 /system/priv-app 目录)
product_specific: true, # 表示此模块是产品特定(而非通用系统模块)
}
8.在编译镜像时引用讯飞输入法:
在你项目的device.mk或者product.mk都可以,具体看你自己项目配置
PRODUCT_PACKAGES += \
FlyInputMethod
9.实现的效果如下:
10.总结:
今天的内容很简单,代码不多,但是调试和排查花了不少时间,本来很快就可以解决的问题,老是纠结代码容易陷入误区,这里不要在意解决问题的方式,而是要注意排查问题的方式和解题思路,有时候可能需要休息一下,眺望远方,说不定就可以找到灵感。
- 这里的配置适用于Android7、9、11、12、13、14。
- 设置默认语言为中文zh_CN。
- .mk和.bp文件不熟悉的同学去看看资料,本文我注释很详细了。
- 更换不同输入法,这里根据需要自行选择。
- 通过adb日志查看语言和输入法是否生效。
- 如果你定制输入法时,设置默认语言和默认输入法,发现没效果可以试试上面的方式。
- 每个人遇到的情况可能不一样,但是问题原理可能是一样,需要根据实际情况进行排查。