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.pswp.cn/pingmian/73760.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73760.shtml
英文地址,請注明出處:http://en.pswp.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 和并發處理能力。在本章中,我們將超越基礎知識,探索如何構建高性能異步系統…