# Android2HarmonyStringResConverter **Repository Path**: Leungmx/android2harmony_string_res_converter ## Basic Information - **Project Name**: Android2HarmonyStringResConverter - **Description**: 这是一个Python自动化工具,支持GUI和CLI两种模式,用于将Android字符串资源转换为鸿蒙字符串资源格式。 注意:该工具是由Ai写的 - **Primary Language**: Python - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-19 - **Last Updated**: 2025-06-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: Android ## README # Android到鸿蒙字符串资源转换工具 这是一个Python自动化工具,支持GUI和CLI两种模式,用于将Android字符串资源转换为鸿蒙字符串资源格式。 ## 功能特性 - 🖥️ **双模式支持**: GUI图形界面和CLI命令行模式 - 🔍 **智能搜索**: 支持按资源名称、字符串值、语言限定标识三种模式查找 - 🎯 **匹配模式**: 支持精确匹配和模糊匹配两种字符串匹配策略 - 🌍 **多语言支持**: 自动识别并转换所有语言版本的资源 - 📁 **递归搜索**: 在res目录中递归查找所有strings.xml文件 - 🛡️ **异常处理**: 自动跳过损坏的XML文件,生成详细错误日志 - 📊 **统计报告**: 提供匹配结果统计和优化建议 - 📋 **标准格式**: 输出符合鸿蒙标准的JSON格式资源文件 ## 安装要求 - Python 3.6+ - tkinter (通常随Python安装) - 标准库模块: xml.etree.ElementTree, json, pathlib等 ## 使用方法 ### GUI模式 直接运行脚本启动图形界面: ```bash python HarmonyResMigrator.py ``` #### GUI操作步骤 1. **选择Android资源目录**: 点击"浏览"按钮选择Android项目的res目录 2. **选择转换模式**: - **按资源名称**: 直接输入资源名称,如 `app_name` - **按字符串值**: 输入要搜索的字符串内容,如 `Welcome`(支持模糊匹配) - **按语言限定**: 输入语言限定标识,如 `zh:app_name` 3. **设置匹配模式**(仅限"按字符串值"模式): - **模糊匹配**:搜索包含目标字符串的值(如"分析"匹配"财务分析") - **精确匹配**:搜索完全相同的字符串值(大小写敏感) 4. **输入转换内容**: 在文本框中每行输入一个项目 5. **设置输出目录**: 指定生成的鸿蒙资源保存位置 6. **开始转换**: 点击"开始转换"按钮执行转换 ### CLI模式 使用命令行参数运行: ```bash # 按资源名称转换 python HarmonyResMigrator.py /path/to/android/res --mode names --input "app_name,button_text" # 按字符串值转换(模糊匹配) python HarmonyResMigrator.py /path/to/android/res --mode values --input "Welcome,Submit" # 按字符串值转换(精确匹配) python HarmonyResMigrator.py /path/to/android/res --mode values --match-type exact --input "Welcome,Submit" # 按语言限定转换 python HarmonyResMigrator.py /path/to/android/res --mode qualified --input "zh:app_name,en:button_text" # 指定输出目录和详细日志 python HarmonyResMigrator.py /path/to/android/res --mode names --input "app_name" --output my_harmony_res --verbose ``` #### CLI参数说明 - `res_dir`: Android项目的res目录路径(必需) - `--mode`: 转换模式,可选值: `names`, `values`, `qualified`(默认: names) - `--input`: 输入内容,多个值用逗号分隔(必需) - `--match-type`: 匹配模式(仅限values模式),可选值: `exact`, `fuzzy`(默认: fuzzy) - `--output`: 输出目录(默认: harmony_resources) - `--verbose, -v`: 显示详细日志 ## 转换模式详解 ### 模式A: 按资源名称 (names) 直接通过资源名称查找对应的字符串资源。 **输入示例**: ```text app_name button_submit error_message ``` **适用场景**: 已知具体的资源名称,需要提取特定资源 ### 模式B: 按字符串值 (values) 通过字符串内容搜索资源,支持两种匹配模式: - **模糊匹配**(默认):搜索包含目标字符串的值(如"分析"匹配"财务分析") - **精确匹配**:搜索完全相同的字符串值(大小写敏感) **输入示例**: ```text Welcome 提交 错误 ``` **适用场景**: - 根据显示文本查找对应的资源名称 - 需要灵活匹配部分字符串内容 - 需要精确匹配特定字符串值 **匹配模式建议**: - 使用模糊匹配进行快速搜索 - 当模糊匹配结果过多时,尝试精确匹配 - 精确匹配未找到时,工具会建议尝试模糊匹配 ### 模式C: 按语言限定标识 (qualified) 使用"语言:资源名称"的格式,优先匹配指定语言的资源。 **输入示例**: ```text zh:app_name en:button_text zh_CN:error_message ``` **适用场景**: 需要从特定语言版本中提取资源 ## 输出格式 工具会按照鸿蒙标准格式生成JSON资源文件: ```text harmony_resources/ ├── resources/ │ ├── base/ │ │ └── element/ │ │ └── string.json │ ├── zh_CN/ │ │ └── element/ │ │ └── string.json │ └── en/ │ └── element/ │ └── string.json ``` 每个string.json文件的格式: ```json { "string": [ {"name": "app_name", "value": "MyApp"}, {"name": "button_text", "value": "Submit"} ] } ``` ## 语言代码映射 工具会自动将Android的语言代码转换为鸿蒙格式: | Android格式 | 鸿蒙格式 | 说明 | |------------|---------|------| | values | base | 默认语言 | | values-en | en | 英语 | | values-zh-rCN | zh_CN | 简体中文 | | values-zh-rTW | zh_TW | 繁体中文(台湾) | | values-zh-rHK | zh_HK | 繁体中文(香港) | ## 错误处理 - **目录不存在**: 检查Android资源目录路径是否正确 - **XML解析错误**: 自动跳过损坏的XML文件,在日志中记录错误 - **未找到匹配**: 当没有找到匹配的资源时,会显示警告信息 - **权限错误**: 确保对输出目录有写入权限 ## 示例 假设有以下Android资源结构: ```text res/ ├── values/ │ └── strings.xml ├── values-en/ │ └── strings.xml └── values-zh-rCN/ └── strings.xml ``` 使用工具转换后会生成: ```text harmony_resources/ └── resources/ ├── base/ │ └── element/ │ └── string.json ├── en/ │ └── element/ │ └── string.json └── zh_CN/ └── element/ └── string.json ``` ## 注意事项 1. 确保Android项目的res目录结构正确 2. strings.xml文件必须是有效的XML格式 3. 输出目录如果已存在会被覆盖 4. 建议在转换前备份原始资源文件 ## 故障排除 ### 常见问题 **Q: 提示"未找到任何strings.xml文件"** A: 检查指定的目录是否为Android项目的res目录,确保包含values子目录 **Q: 某些语言的资源没有转换** A: 检查对应语言目录下的strings.xml文件是否存在且格式正确 **Q: GUI界面无法启动** A: 确保系统安装了tkinter库,在某些Linux发行版中需要单独安装 **Q: 模糊匹配返回了太多结果** A: 1. 尝试使用更具体的搜索词 2. 切换到精确匹配模式 3. 检查日志中的统计报告,获取优化建议 **Q: 精确匹配没有找到任何结果** A: 1. 检查输入值是否与资源完全匹配(包括大小写) 2. 尝试使用模糊匹配模式 3. 检查日志中的建议,工具会自动提示尝试模糊匹配 **Q: 转换后的JSON文件为空** A: 1. 检查输入的资源名称或字符串值是否在原始资源中存在 2. 确认是否选择了正确的匹配模式 3. 查看日志中的错误和警告信息 ### 日志分析 工具会生成详细的日志信息,包括: - 找到的strings.xml文件路径 - 解析的字符串数量 - 匹配的资源统计 - 生成的输出文件信息 - 错误和警告信息 通过查看日志可以快速定位问题所在。