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.mkPRODUCT_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 相关资料,决定变量值地方蛮多,跟编译顺序有关。大多可能存在覆盖地方,所以编译顺序可以参考上面相关资料
  • 本次实验更改,仅供参考。比如其它项目就是定义变量值就可以了,跟编译顺序相关

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统如何查找文件?inode号又是什么?

下面分别详细解释您提到的三个问题: “文件系统怎么定位文件”、“inode 是什么”、“为什么删除后还可能被占用”。 一、文件系统怎么定位文件 1.1 目录与文件名并不直接存储文件数据 在常见的 Unix/Linux 文件系统(如 ext4、xfs)或类似的…

05-SpringBoot3入门-整合SpringMVC(配置静态资源、拦截器)

1、说明 在01-SpringBoot3入门-第一个项目-CSDN博客中,其实就已经整合了SpringMVC。下面讲解怎么配置静态资源和拦截器 2、配置静态资源 命名:static(文件夹) 位置:src/main/resources 编写一个html文件 访问 http:/…

Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型多变量回归预测

聚划算!Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型多变量回归预测 目录 聚划算!Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 聚划算!Tran…

树莓派浏览器配置全解析:从轻量系统到网页应用平台

树莓派(Raspberry Pi)不仅是嵌入式开发的入门利器,也因其低成本和强大的社区支持而成为物联网、数字标牌、教育培训等领域的热门平台。在很多应用中,运行一个浏览器并作为 Web 前端展示、操作或交互的能力显得尤为关键。 但在资源…

初识Qt(一)

本文部分ppt、视频截图原链接:萌马工作室的个人空间-萌马工作室个人主页-哔哩哔哩视频 1. Qt是什么? Qt是一个跨平台的C应用程序开发框架,它既为图形用户界面(GUI)程序开发提供了强大支持,也能用于开发非GUI的控制台程序、服务端…

六十天前端强化训练之第三十二天之Babel 转译配置大师级深度讲解

欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗,谢谢大佬! 目录 一、核心概念与知识体系详解 1. Babel 工作原理全景解析 二、完整配置方案(带详细注释) 1. 进阶版 .babelrc 配置 2. Webpack 集成配置&#xff08…

智能提示词生成器:助力测试工程师快速设计高质量测试用例

在软件测试中,测试用例设计方法的选择和实施是确保软件质量的重要步骤。测试工程师经常需要根据不同的测试场景、参数维度和业务需求,设计出覆盖率高且有效的测试用例。然而,设计测试用例并非易事,特别是在面对复杂的业务逻辑时。 为了帮助测试工程师高效生成测试用例提示…

beanie.exceptions.CollectionWasNotInitialized

遇到这样的情况不要慌,不要慌 1:检查模型是否已经初始化: class TaskModel(Document):"""定时任务模型"""task_id: str Field(default_factorylambda: str(uuid.uuid4()), # 新增默认值description"任…

【CVE-2025-30208】| Vite-漏洞分析与复现

漏洞简介 CVE-2025-30208 是 Vite 开发服务器中的一个任意文件读取漏洞。该漏洞允许攻击者通过特定的 URL 参数绕过访问控制,从而读取服务器上的敏感文件(如 /etc/passwd 或 C:\windows\win.ini)。 该漏洞主要影响以下版本的 Vite&#xff…

将 Markdown 表格结构转换为Excel 文件

在数据管理和文档编写过程中,我们经常使用 Markdown 来记录表格数据。然而,Markdown 格式的表格在实际应用中不如 Excel 方便,特别是需要进一步处理数据时。因此,我们开发了一个使用 wxPython 的 GUI 工具,将 Markdown…

Golang使用 ip2region 查询IP的地区信息

利用 ip2region 进行 IP 地址定位 import ("fmt""log""github.com/lionsoul2014/ip2region/binding/golang/xdb" )func main() {ip : "213.118.179.98"dbPath : ".\\cmd\\ip\\ip2region.xdb"// 1、初始化查询器//searcher,…

对匿名认证的理解

概述:在 Spring Security 中,** 匿名认证(Anonymous Authentication)** 是一种特殊的认证机制,用于处理未提供有效凭证的请求。 匿名认证的本质 目的:允许未认证用户访问特定资源。原理: 当请求…

C++调用Python

Python安装 地址: python官网 可以根据需要下载对应的版本。 调用python python测试脚本 # my_script.py import sys import jsondef calculate(a, b):return a * b 10 # 示例计算逻辑if __name__ "__main__":# 从命令行参数读取 JSON 字符串try…

工程数字建造管理系统平台有哪些?好的数字建造管理系统推荐

一、什么是工程数字建造管理系统平台? 工程数字建造管理系统平台是一种集成了先进信息技术(如云计算、大数据、物联网等)的综合性管理工具,它旨在通过数字化手段提升工程建造全过程的管理效率和决策水平。这一平台不仅覆盖了工程…

Android开发EmojiCompat 初始化

Android开发EmojiCompat 初始化 报错信息: ensure spannable:java.lang.IllegalStateException: EmojiCompat is not initialized 在Application上写上下面代码即可: EmojiCompat.Config config new BundledEmojiCompatConfig(this);EmojiCompat.in…

【Go】数组

数组Array 重点: 数组是值类型 注意点: 1. 数组:是同一种数据类型的固定长度的序列。2. 数组定义:var a [len]int,比如:var a [5]int,数组长度必须是常量,且是类型的组成部分。一旦定义&…

CORDIC算法:三角函数的硬件加速革命——从数学原理到FPGA实现的超高效计算方案

计算机该如何求解三角函数?或许你的第一印象是采用泰勒展开,或者采用多项式进行逼近。对于前者,来回的迭代计算开销成本很大;对于后者,多项式式逼近在较窄的范围內比较接近,超过一定范围后,就变…

【剪辑_BGM 整合】

【优质BGM➽以剪映为基础】 自定义 一、舒缓惬意 二、轻快 1,快乐骑行 2,医疗科普 3,宣传片励志摇滚热血 Going back to Business 4,电子宠物(memories) 5,诗与远方(热播&…

linux 常见命令使用介绍

Linux 常见命令使用介绍 Linux 是一个功能强大的操作系统,其核心是命令行工具。掌握一些常用的 Linux 命令可以极大地提高工作效率。本文将详细介绍一些常见的 Linux 命令及其用法。 1. 文件与目录操作 ls - 列出文件和目录 # 查看当前目录下的所有文件和子目录&…

Rust从入门到精通之精通篇:24.高级异步编程

高级异步编程 在 Rust 精通篇中,我们将深入探索 Rust 的高级异步编程技术。Rust 的异步编程模型基于 Future 特征和异步运行时,提供了高效的非阻塞 I/O 和并发处理能力。在本章中,我们将超越基础知识,探索如何构建高性能异步系统…