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

AOSP世界时间的更新

在 AOSP(Android Open Source Project)中,世界时间的更新主要涉及设备时区数据的管理和更新,以确保设备能够正确显示全球各地的时间。AOSP 依赖 IANA 时区数据库(也称为 tzdata)来提供时区规则和世界时间数据,而这些数据的更新通常通过系统模块(如 Mainline 模块)或固件更新实现。

1. AOSP 中世界时间的数据来源

AOSP 使用 IANA 时区数据库(tzdata)来管理世界时间和时区信息:

  • IANA tzdata:由国际互联网编号分配机构(IANA)维护的全球时区数据库,包含全球时区规则、夏令时变化、历史时区数据等。对时间和时区不够理解的可以查看这篇博文:Android时间相关的概念理解
  • 存储位置:在 AOSP 源码中,tzdata 文件通常位于 system/timezone 目录,并被编译到系统镜像(system.img)中的 /system/usr/share/zoneinfo/ 目录。
  • 内容:包括时区规则(如 Asia/Shanghai)、偏移量、夏令时(DST)切换时间等。

示例:/system/usr/share/zoneinfo/Asia/Shanghai 包含中国标准时间的规则(固定 UTC+8,无夏令时)。


2. 世界时间更新的机制

AOSP 中世界时间的更新主要通过以下方式实现:

(1) Mainline 模块更新(Android 10 及以上)MainLine简介
  • 背景:从 Android 10 开始,tzdata 被模块化为 APEX 模块com.android.tzdata),可以通过 Google Play 系统更新(Google Play System Updates)独立更新,而无需完整的 OTA 固件更新。
  • 更新流程
    1. Google 定期从 IANA 获取最新的 tzdata 数据。
    2. 编译为 com.android.tzdata APEX 模块,推送到设备。
    3. 设备通过 Google Play 系统更新下载并安装模块(存储在 /apex/com.android.tzdata)。
    4. 系统加载新的时区数据,应用到时间显示和计算。
  • 优点
    • 快速更新:无需等待 OEM 的完整固件更新。
    • 一致性:所有支持 Mainline 的设备使用相同的时区数据。
  • 限制
    • 仅 Android 10 及以上设备支持。
    • 需要 Google Play 服务支持,AOSP 纯净版设备可能无法直接获取。
(2) 系统固件更新(OTA)
  • 对于不支持 Mainline 模块的设备(例如 Android 9 或更早版本),tzdata 更新需要通过完整的系统固件更新(OTA):
    • OEM 或开发者将新的 tzdata 文件编译到 system.img 中。
    • 通过 OTA 推送更新,替换 /system/usr/share/zoneinfo/ 目录中的数据。
  • 缺点
    • 更新速度慢,依赖 OEM 的适配和推送。
    • 许多设备可能无法及时获取最新的时区数据。
(3) 手动更新(开发者或 Root 设备)
  • 开发者或高级用户可以通过手动替换 tzdata 文件更新时区数据:
    1. 从 IANA 官网(https://www.iana.org/time-zones)下载最新的 tzdata 文件。
    2. 编译或直接替换 /system/usr/share/zoneinfo/ 中的文件。
    3. 需要 Root 权限或修改系统分区,操作复杂且有风险。

3. 如何在 AOSP 中配置世界时间更新

(1) 单编
1. 下载最新的 IANA 时区数据
  • 操作
    • 打开 AOSP 源码的 system/timezone/input_data/iana/ 目录,查看当前 tzdata 版本(例如 tzdata2018e.tar.gztzdata2018e.tar.gz.asc)。
    • 访问 IANA 官网,下载对应版本或更新的 tzdata*.tar.gztzdata*.tar.gz.asc 文件。或者在AOSP的system/timezone下执行download-iana-files.py下载相关文件(需要能够访问外部网络)
  • 注意
    • 确保下载的版本与目标 Android 版本兼容(例如,Android 15 可能需要 tzdata2024a 或更新)。
    • .asc 文件是签名文件,用于验证 tzdata 的完整性。
2. 替换旧的时区数据
  • 操作
    • 将下载的 tzdata*.tar.gztzdata*.tar.gz.asc 放入 system/timezone/input_data/iana/ 目录。
    • 删除目录中旧版本的 tzdata 文件(例如 tzdata2018e.tar.gz)。
  • 注意
    • 备份旧文件以防出错。
    • 确保文件名和格式正确,避免编译错误。
3. 执行 update-tzdata.py 脚本
  • 操作
    • 设置 AOSP 编译环境:
      source build/envsetup.sh
      lunch aosp_divide-userdebug  # 替换为你的设备目标,例如 aosp_divide
      
    • 进入 system/timezone/ 目录:
      cd system/timezone
      
    • 运行 update-tzdata.py 脚本:
      python update-tzdata.py
      
  • 输出
    • 脚本会在以下目录生成更新后的文件:
      • system/timezone/output_data/iana/tzdata:最新的 IANA 时区数据库。
      • system/timezone/output_data/icu_overlay/icu_tzdata.dat:ICU 格式的时区数据。
      • external/icu/icu4c/source/data/misc/zoneinfo64.txt:ICU 时区元数据。
      • external/icu/icu4c/source/stubdata/icudt60l.dat:ICU 数据存根。
      • external/icu/icu4j/main/shared/data/icutzdata.jar:ICU Java 库的时区数据。
  • 注意
    • 确保 Python 环境正确(AOSP 通常使用 Python 2 或 3,视版本而定)。
    • 脚本会根据 input_data/iana/tzdata*.tar.gz 更新所有相关文件。
4. 重新编译 AOSP打包刷机
(2) 在谷歌的gerrit上下载更新

Google会定期更新世界时间因此只需要在谷歌的gerrit上下载即可
https://android-review.googlesource.com/q/message:TZDB
在这里插入图片描述
在这里插入图片描述
谷歌每次更新一般都是对这三个目录下的文件进行修改
system/timezone
external/icu
external/cldr
在这里插入图片描述
然后将这三个目录下的所有文件下载

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过git 将这三个目录下是所有内容全部clone下来。然后使用对比工具,和项目内部的进行逐一对比,进而更新项目内部的文件。

设置添加新的时区

修改packages/apps/Settings/res/xml-xx-xx/timezones.xml (xx-xx表示不同的语言和区域),添加下面的内容:

    <!-- timezones.xml 用于在setting中增加一个时区设置项 --><timezone id="Africa/Lagos">Lagos</timezone>

如果是多个国家和语言,则可以使用Android Studio 进行替换添加

可能会遇到的修改
修改NTP服务器地址 设备联网无法同步时间
在 frameworks/base/core/res/res/values/config.xml 文件中修改

	<string-array translatable="false" name="config_ntpServers"><item>ntp://time.android.com</item><item>ntp7.aliyun.com</item></string-array>

设置默认时区
在device下的mk文件中添加

PRODUCT_PROPERTY_OVERRIDES += persist.sys.timezone=Asia/Shanghai

相关文章:

  • 基于多模态双路TCN-SE-YOLO的小目标检测
  • 三维领域的语义分割
  • 【深基18.例3】查找文献-图的储存与遍历
  • 无线uniapp调试设备
  • EthernetiP转modbusTCP网关在加氢催化中的应用
  • Flask(补充内容)配置SSL 证书 实现 HTTPS 服务
  • Flask(2): 在windows系统上部署项目2
  • 【C】初阶数据结构10 -- 希尔排序
  • 知识库Qanyting部署问题总结
  • 使用sealos部署kubernetes集群并实现集群管理
  • Idea连接远程云服务器上的MySQL,开放云服务器端口
  • Markdown 教程
  • Linux驱动开发-①regmap②IIO子系统
  • Spring Boot 项目中发布流式接口支持实时数据向客户端推送
  • 【KWDB创作者计划】_KwDB2.2.0深度实践:从存储引擎到物联网场景的多模数据库实战
  • XSS之同源、跨域、内容安全策略
  • C语言——数组
  • 【网络技术_域名解析DNS】一、DNS 基础剖析及其原理
  • [轻量化超分]CAMixerSR: Only Details Need More “Attention“
  • HTML5好看的水果蔬菜在线商城网站源码系列模板5
  • 警方通报男子地铁上拍视频致乘客恐慌受伤:列车运行一度延误,已行拘
  • 外交部答澎湃:美方攻击抹黑中加关系与合作的卑劣图谋不会得逞
  • 抗战回望21︱《“良民”日记》:一个“良民”在沦陷区的见闻与感受
  • 定位真核生物起源于约27.2亿年前,华东师大团队在《自然》发文
  • 习近平向“和平薪火 时代新章——纪念中国人民抗日战争和苏联伟大卫国战争胜利80周年中俄人文交流活动”致贺信
  • 用社群活动维系“不开发”古镇的生命力