当前位置: 首页 > news >正文

MTK Android12-Android13 设置系统默认语言

Android 系统,默认语言

文章目录

  • 需求:
    • 场景
  • 参考资料
  • 实现方案
    • 实现思路
      • 编译脚本熟悉-平台熟悉
      • mssi_64_cn
      • kernel-4.19
    • 解决方案
      • 修改文件-实现方案
  • 源码分析
    • PRODUCT_LOCALES 引用
    • PRODUCT_DEFAULT_LOCALE 定义
    • get-default-product-locale 方法定义
    • PRODUCT_DEFAULT_LOCALE 的使用
    • ro.product.locale
      • adb 看属性值
      • app 应用层获取当前语言
      • 小结
  • 总结


需求:

MTK平台 设置默认语言。一般默认中文、英文偏多。 也有很多其它小语种客制化需求。

场景

Android平台不同客户产品售卖到不同区域,开机默认语言不一样。特别是国外产品,默认大多数是英文,也有日语、韩语、法语…

产品需要客制化客户要求的语言需求

参考资料

MTK android 修改系统默认语言
修改android 系统默认语言
修改Android系统默认语言配置及源码解析
Android10 修改默认语言
MTK系统开发-编译部分了解

实现方案

实现思路

这里在MTK平台上面实验,其它平台并不具备直接的参考性,如RK平台记得更改的也是配置,但方案不一样

编译脚本熟悉-平台熟悉

搞清楚自己的平台下 编译的项目相关信息,比如 编译固件的脚本部分,至少知道编译的平台,反推联系到一些配置文件在哪里比如如下:
在这里插入图片描述

mssi_64_cn

基于上面编译脚本平台熟悉,我们自己就知道部分配置问题,这里只是先给出目录相关信息,
路径:

\device\mediatek\system\mssi_64_cn

在这里插入图片描述

kernel-4.19

其实就是内核目录,用到的是kernel-4.19 版本内核。
这个不是这里的重点,只是提一下,根据编译脚本就知道大概得配置文件在哪个文件下,方便后续看代码,定位具体是哪个文件的配置关联。
在这里插入图片描述

解决方案

修改文件-实现方案

\device\mediatek\system\mssi_64_cn\sys_mssi_64_cn.mk 



PRODUCT_LOCALES := en_US zh_CN zh_TW es_ES pt_BR ru_RU fr_FR de_DE tr_TR vi_VN ms_MY in_ID th_TH it_IT ar_EG hi_IN bn_IN ur_PK fa_IR pt_PT nl_NL el_GR hu_HU tl_PH ro_RO cs_CZ ko_KR km_KH iw_IL my_MM pl_PL es_US bg_BG hr_HR lv_LV lt_LT sk_SK uk_UA de_AT da_DK fi_FI nb_NO sv_SE en_GB hy_AM zh_HK et_EE ja_JP kk_KZ sr_RS sl_SI ca_ES

根据客需,排在第一位的就讲对应的语言放到第一个位置即可。

下面列举不同配置的实际情况,测试有效:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

源码分析

PRODUCT_LOCALES 引用

为什么修改路径 文件中的配置 PRODUCT_LOCALE 顺序有效?
上面分析了 PRODUCT_LOCALES 赋值各种语音,我们看它在哪里用到
如下 路径文件

\build\make\core\sysprop.mk
 PRODUCT_DEFAULT_LOCALE="$(call get-default-product-locale,$(PRODUCT_LOCALES))" \


在这里插入图片描述

PRODUCT_DEFAULT_LOCALE 定义

上面看到PRODUCT_LOCALES 引用地方, 赋值了PRODUCT_DEFAULT_LOCALE 变量,其实调用了方法
get-default-product-locale 传递了参数 PRODUCT_LOCALES,这里就是 变量 PRODUCT_DEFAULT_LOCALE 的定义

接下来其实就要继续看 变量PRODUCT_DEFAULT_LOCALE 在哪里引用 已经 get-default-product-locale 方法说明

get-default-product-locale 方法定义

路径:

\build\make\core\sysprop.mk

上面 定义 PRODUCT_DEFAULT_LOCALE 地方,已经给了 get-default-product-locale 方法定义的说明,如下。

#
# Note: parts of this file that can't be generated by the build-properties
# macro are manually created as separate files and then fed into the macro

# Accepts a whitespace separated list of product locales such as
# (en_US en_AU en_GB...) and returns the first locale in the list with
# underscores replaced with hyphens. In the example above, this will
# return "en-US".
define get-default-product-locale
$(strip $(subst _,-, $(firstword $(1))))
endef

在这里插入图片描述
其实就是你传递参数数字,取第一个。 这个就验证了 配置 PRODUCT_LOCALES 变量值顺序时候就可以默认哪个语音的原因

PRODUCT_DEFAULT_LOCALE 的使用

上面层层分析了变量、变量应用、方法。 这里开始追踪上面最终赋值到了 PRODUCT_DEFAULT_LOCALE,那么它在哪里调用。
路径:

\build\tools\buildinfo.sh 

在这里插入图片描述

最终赋值给了属性值:ro.product.locale

ro.product.locale

adb 看属性值

C:\Users\Administrator>adb shell
getDisPlay:/ $ getprop | grep ro.product.locale
[ro.product.locale]: [en-US]
DisPlay:/ $

app 应用层获取当前语言

            Locale locale = getResources().getConfiguration().locale;
            String language = locale.getLanguage();
            String local = Locale.getDefault().toString();

小结

涉及到的文件参考或修改如下:

\device\mediatek\system\mssi_64_cn\sys_mssi_64_cn.mk    变量PRODUCT_LOCALES 值 顺序,调整默认语言
\build\make\core\sysprop.mk    定义变量PRODUCT_DEFAULT_LOCALE  引用变量 PRODUCT_LOCALES ,定义方法 get-default-product-locale

\build\tools\buildinfo.sh     引用变量PRODUCT_LOCALES,赋值属性 ro.product.locale



adb 获取 或者 app 应用上层,获取语言其实就是获取属性值 ro.product.locale,这样就完整分析了 为什么修改PRODUCT_LOCALES 值value 顺序可以实现默认语言功能了。

总结

  • mtk 平台设置默认语言流程分析清除了,调整变量值PRODUCT_LOCALES 的顺序
  • 为什么要搞清楚编译编译脚本 相关的项目、内核版本、项目名称,这些就直接能够找到对应文件配置在哪个地方可能是变量值定义或者引用地方。 grep 搜索太多、大量的地方,搞不清楚具体应该是哪一个。
  • 既然分析到了改变属性值顺序就可以了,那我们直接定义变量值不就可以了嘛。这里可以参考mtk 相关资料,决定变量值地方蛮多,跟编译顺序有关。大多可能存在覆盖地方,所以编译顺序可以参考上面相关资料
  • 本次实验更改,仅供参考。比如其它项目就是定义变量值就可以了,跟编译顺序相关

相关文章:

  • 服务器修改内存后Oracle无法正常启动
  • Contactile三轴触觉传感器:多维力感赋能机器人抓取
  • PCL 点云多平面探测
  • 一个纯.Net开发的JavaScript执行引擎
  • uniapp再次封装uni-nav-bar导航栏组件
  • 智能打气泵方案:无线充气泵的适用场景有哪些?
  • 备战蓝桥day-7(递归回溯)
  • PP-PLL:基于概率传播的部分标签学习
  • Python第六章13:集合(set)的定义和操作
  • 【euclid】21 3D包围盒模块(box3d.rs)
  • 【Python Cookbook】字符串和文本(二)
  • 【鸿蒙开发】第五十一章 Camera Kit(相机服务)
  • pagehelper 分页插件使用说明
  • 程序化广告行业(33/89):深入了解OTT、OTV及多样广告形式
  • 文字也能生成视频?【蓝耘实践】:通义万相2.1文生视频
  • SPPAS安装及问题汇总
  • 生成对抗网络(GAN)模型的详细介绍
  • 数据结构与算法-图论-强连通分量(tarjan算法)
  • 开个坑记录一下树莓派4B部署yolo的一些问题
  • C++手撕共享指针、多线程交替、LRU缓存
  • 做效果图常用的网站有哪些软件/百度商务合作电话
  • 博物馆建设 政府网站/百度搜图匹配相似图片
  • 做网站待遇/自己做一个网站要多少钱
  • 做外国的独立网站怎么推广/app推广策略
  • 制作网站首先做的工作/如何找到网络公关公司
  • 韩国网站后缀/阿里指数在哪里看