From 295558836b4e03f572e3b4cbefa049add4b1aa65 Mon Sep 17 00:00:00 2001 From: soft_windy <317709796@qq.com> Date: Tue, 7 Jul 2026 14:37:04 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=96=87=E4=BB=B6=E7=9B=AE?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- A07/Qiyuan_A07_Multi-lan-installer.py | 1378 ++++-- A07/app.ico | Bin 0 -> 119072 bytes A07/pack_a07.bat | 50 +- AGENTS.md | 113 +- CLAUDE.md | 426 +- .../CS55-Q05_Installer.py | 572 ++- CS55-Q05/cs55-q05.ico | Bin 0 -> 138477 bytes CS55-Q05/engmode.key | 1 + CS55-Q05/pack_cs55_q05.bat | 133 + .../CS75Pro_Installer.py | 1075 +++-- CS75Pro/cs75pro.ico | Bin 0 -> 138477 bytes CS75Pro/pack_cs75pro.bat | 133 + Mazda-EZ6/Mazda-EZ6_Installer.py | 1398 ++++++ Mazda-EZ6/app.ico | Bin 0 -> 49026 bytes Mazda-EZ6/pack_mazda_ez6.bat | 153 + Mazda-EZ60/Mazda-EZ60_1.2.py | 3981 +++++++++++++++++ .../Mazda-EZ60_1.2_voice-assistant_backup.py | 3037 +++++++++++++ .../Mazda_EZ60-Language-Install_v1.0.py | 2446 ++++++++++ ..._EZ60-Language-Install_v1.0_direct_push.py | 2443 ++++++++++ Mazda-EZ60/app.ico | Bin 0 -> 49026 bytes Mazda-EZ60/manual_push_apps_to_system_app.ps1 | 209 + Mazda-EZ60/pack_mazda_ez60.bat | 100 - Mazda-EZ60/pack_mazda_ez60_1.0.bat | 159 + .../pack_mazda_ez60_1.0_direct_push.bat | 159 + Mazda-EZ60/pack_mazda_ez60_1.2.bat | 194 + Q05-Lidar/Q05-Lidar_Installer.py | 568 ++- Q05-Lidar/pack_q05_lidar.bat | 16 +- ...p.py => Qiyuan_Q07-multi-lan-installer.py} | 879 ++-- Q07/app.ico | Bin 0 -> 154730 bytes Q07/pack.bat | 95 - Q07/pack_q07.bat | 65 +- README.md | 42 +- S05/{S05_fixed.py => Deepal_S05.py} | 1114 +++-- S05/S05.py | 1615 ------- S05/app.ico | Bin 0 -> 162254 bytes S05/pack_s05_fixed.bat | 152 +- UNI-T/UNI-T-multi-lan-installer.py | 2112 +++++++++ S05/pack_s05.bat => UNI-T/pack_unit.bat | 65 +- X5plus/X5plusTool.py | 1095 +++-- X5plus/app.ico | Bin 0 -> 2506 bytes X5plus/apps/FZLTHPro_GB18030.ttf | Bin 0 -> 305608 bytes X5plus/pack_x5plus.bat | 253 +- .../Changan_Yidong-Language_Installer.exe.id0 | Bin 0 -> 3833856 bytes .../Changan_Yidong-Language_Installer.exe.id1 | Bin 0 -> 1114112 bytes .../Changan_Yidong-Language_Installer.exe.id2 | Bin 0 -> 7001 bytes .../Changan_Yidong-Language_Installer.exe.nam | Bin 0 -> 24576 bytes .../Changan_Yidong-Language_Installer.exe.til | Bin 0 -> 9418 bytes Yidong/pack_common.bat | 96 - tools/encrypt_q05_lidar_resource.py | 56 +- tools/usb_driver/android_winusb.inf | 195 + tools/usb_driver/androidwinusb86.cat | Bin 0 -> 12789 bytes tools/usb_driver/androidwinusba64.cat | Bin 0 -> 12825 bytes tools/usb_driver/source.properties | 3 + 53 files changed, 22339 insertions(+), 4242 deletions(-) create mode 100644 A07/app.ico rename Yidong/app-install.py => CS55-Q05/CS55-Q05_Installer.py (76%) create mode 100644 CS55-Q05/cs55-q05.ico create mode 100644 CS55-Q05/engmode.key create mode 100644 CS55-Q05/pack_cs55_q05.bat rename Mazda-EZ60/Mazda-EZ60.py => CS75Pro/CS75Pro_Installer.py (64%) create mode 100644 CS75Pro/cs75pro.ico create mode 100644 CS75Pro/pack_cs75pro.bat create mode 100644 Mazda-EZ6/Mazda-EZ6_Installer.py create mode 100644 Mazda-EZ6/app.ico create mode 100644 Mazda-EZ6/pack_mazda_ez6.bat create mode 100644 Mazda-EZ60/Mazda-EZ60_1.2.py create mode 100644 Mazda-EZ60/Mazda-EZ60_1.2_voice-assistant_backup.py create mode 100644 Mazda-EZ60/Mazda_EZ60-Language-Install_v1.0.py create mode 100644 Mazda-EZ60/Mazda_EZ60-Language-Install_v1.0_direct_push.py create mode 100644 Mazda-EZ60/app.ico create mode 100644 Mazda-EZ60/manual_push_apps_to_system_app.ps1 delete mode 100644 Mazda-EZ60/pack_mazda_ez60.bat create mode 100644 Mazda-EZ60/pack_mazda_ez60_1.0.bat create mode 100644 Mazda-EZ60/pack_mazda_ez60_1.0_direct_push.bat create mode 100644 Mazda-EZ60/pack_mazda_ez60_1.2.bat rename Q07/{app.py => Qiyuan_Q07-multi-lan-installer.py} (62%) create mode 100644 Q07/app.ico delete mode 100644 Q07/pack.bat rename S05/{S05_fixed.py => Deepal_S05.py} (53%) delete mode 100644 S05/S05.py create mode 100644 S05/app.ico create mode 100644 UNI-T/UNI-T-multi-lan-installer.py rename S05/pack_s05.bat => UNI-T/pack_unit.bat (55%) create mode 100644 X5plus/app.ico create mode 100644 X5plus/apps/FZLTHPro_GB18030.ttf create mode 100644 Yidong/Changan_Yidong-Language_Installer.exe.id0 create mode 100644 Yidong/Changan_Yidong-Language_Installer.exe.id1 create mode 100644 Yidong/Changan_Yidong-Language_Installer.exe.id2 create mode 100644 Yidong/Changan_Yidong-Language_Installer.exe.nam create mode 100644 Yidong/Changan_Yidong-Language_Installer.exe.til delete mode 100644 Yidong/pack_common.bat create mode 100644 tools/usb_driver/android_winusb.inf create mode 100644 tools/usb_driver/androidwinusb86.cat create mode 100644 tools/usb_driver/androidwinusba64.cat create mode 100644 tools/usb_driver/source.properties diff --git a/A07/Qiyuan_A07_Multi-lan-installer.py b/A07/Qiyuan_A07_Multi-lan-installer.py index f13adde..890d6a8 100644 --- a/A07/Qiyuan_A07_Multi-lan-installer.py +++ b/A07/Qiyuan_A07_Multi-lan-installer.py @@ -2,6 +2,7 @@ # -*- coding: utf-8 -*- import os +import atexit import shlex import sys import subprocess @@ -24,6 +25,27 @@ import shutil import time +STARTUP_T = { + 'zh': { + 'python_version_error': '错误:需要Python 3.6或更高版本', + 'startup_failed_title': '错误', + 'startup_failed_console': '启动失败: {error}', + 'startup_failed_dialog': '程序启动失败: {error}', + }, + 'en': { + 'python_version_error': 'Error: Python 3.6 or later is required', + 'startup_failed_title': 'Error', + 'startup_failed_console': 'Startup failed: {error}', + 'startup_failed_dialog': 'Program startup failed: {error}', + } +} + + +def startup_t(key): + lang = 'en' if os.environ.get('LANGUAGE_INSTALLER_LANG', '').lower().startswith('en') else 'zh' + return STARTUP_T.get(lang, STARTUP_T['zh']).get(key, key) + + def get_app_dir(): return Path(sys.executable).resolve().parent if getattr(sys, 'frozen', False) else Path(__file__).resolve().parent @@ -60,16 +82,32 @@ def find_tool(file_name, fallback=None): path = find_resource(file_name) if path.exists(): return str(path) - return fallback or str(path) + return fallback or str(path) + + +def set_windows_app_user_model_id(): + if sys.platform != 'win32': + return + try: + import ctypes + ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID( + "yibin.keyi.qiyuan.a07.language.installer" + ) + except Exception: + pass + + class ADKAPKGUI: A07_SHELL_PASSWORD = "omo75A322@" SYSTEM_MOUNT_CANDIDATES = ("/system", "/system_root", "/") def __init__(self): + set_windows_app_user_model_id() self.root = tk.Tk() - self.root.title("启源A07多语言安装") + self.root.title("") self.root.geometry("650x640") self.root.resizable(True, True) + self.set_window_icon() # 设置颜色主题 self.colors_dark = { @@ -128,14 +166,187 @@ class ADKAPKGUI: 'auth_yes': '已授权', 'auth_no': '未授权', 'btn_refresh': '🔄 检查', - 'hint_factory': '🔧 启源A07:首次 adb shell 将自动输入登录密码,并通过 Magisk SU 解锁系统分区', 'theme_dark': '🌙 暗色', 'theme_light': '☀️ 亮色', - 'lang_zh': '中', - 'lang_en': 'EN', + 'lang_zh': '中文', + 'lang_en': 'English', 'switch_lang': '语言 / Language', 'switch_theme': '切换主题', - 'about_company': '宜宾科宜科技有限公司 - 智能设备管理平台', + 'key_query_label': '登录密码获取:', + 'vin_placeholder': '输入VIN或者VIN后六位', + 'auth_code_placeholder': '输入授权码', + 'btn_query_pwd': '获取密码', + 'key_need_input': '请输入VIN和授权码', + 'key_querying': '正在获取密码...', + 'key_query_success': '密码: {password}', + 'key_query_failed': '失败: {message}', + 'key_request_failed': '请求失败', + 'key_dial_tip': '打开车辆拨号App,拨号*#*#666,获取授权码。', + 'tip_1': '1. 安装语言过程中请保持车辆和电脑的电量充足,不可中途停止。', + 'tip_2': '2. 获取权限以后,车辆自动重启以后再进入语言刷入。', + 'tip_3': '3. 部分语言需要重启后生效,可以一切工作完成以后再重启。', + 'dialog_warning': '警告', + 'dialog_error': '错误', + 'dialog_info': '提示', + 'dialog_success': '成功', + 'dialog_device_not_connected_title': '设备未连接', + 'dialog_device_not_connected_body': '请先连接设备并点击「检查」按钮刷新状态!', + 'log_cleared': '日志已清空', + 'log_device_connected': '设备已连接', + 'log_device_disconnected': '设备已断开连接', + 'log_device_not_connected': '设备未连接', + 'log_current_vin': '当前车辆VIN: {vin}', + 'log_vin_unavailable': '无法获取VIN', + 'log_refresh_failed': '刷新设备状态失败: {error}', + 'log_root_ready': 'A07 system 分区已解锁,可以开始刷入', + 'log_root_failed': '获取权限失败', + 'log_cache_invalid': '已解压缓存无效: {reason}', + 'log_no_available_apk': '未找到可用 APK', + 'log_zero_apk': '发现 0KB APK: {preview}{suffix}', + 'extract_wrong_password': '解压密码错误,请重新确认 package.bin 密码', + 'extract_data_error': '资源包数据错误,可能是密码错误或 package.bin 损坏', + 'extract_broken': '资源包损坏或不完整,请检查 package.bin', + 'extract_prepare_failed_detail': '资源准备失败: {error}', + 'extract_prepare_failed': '资源准备失败,请检查解压密码是否正确', + 'progress_resource_loading': '资源加载中...', + 'progress_resource_done': '资源加载完成', + 'log_package_missing_path': '错误:未找到资源包 ({path})', + 'log_extract_password_missing': '错误:解压密码未设置', + 'log_7za_missing': '错误:未找到 7za.exe ({path})', + 'log_resource_preparing': '正在准备资源包...', + 'log_resource_dir_missing': '警告:未找到对应目录', + 'log_resource_invalid': '解压后的资源无效: {reason}。已停止刷入,请检查解压密码或资源包。', + 'log_resource_ready_debug': '资源准备完成 (app: {app}, priv-app: {priv}, system_ext: {system_ext})', + 'log_resource_ready': '资源准备完成', + 'log_resource_prepare_exception': '资源准备失败: {error}', + 'log_resource_prepare_retry': '资源准备失败,请检查网络连接后重试', + 'log_package_missing': '未找到资源包文件', + 'log_adb_missing': '未找到adb命令,请将ADB文件放入本目录', + 'log_cache_invalid_cleaned': '缓存资源无效,已清理: {reason}', + 'log_debug_skip_auth': '调试模式: 跳过授权验证', + 'log_auth_checking': '正在验证授权...', + 'log_auth_ok': '授权验证通过', + 'log_vehicle_name': '车辆名称: {vehicle_name}', + 'log_auth_failed': '授权验证失败', + 'log_connect_adb_first': '请先连接adb!', + 'log_prepare_failed_no_vehicle': '数据准备失败: 未获取到车型', + 'log_prepare_failed_reason': '数据准备失败: {reason}', + 'log_prepare_failed_error': '数据准备失败: {error}', + 'err_unknown': '未知错误', + 'push_fail': 'push失败: {error}', + 'copy_fail': 'cp失败: {error}', + 'dialog_need_vin': '请先刷新设备状态并获取VIN码', + 'dialog_flash_warning_title': '重要提示', + 'dialog_flash_warning_body': '刷入过程中请勿:\n ● 重启车机\n ● 退出本程序\n ● 关闭电脑\n\n否则可能导致车机系统损坏!', + 'log_flash_start': '开始刷入语言包,请勿断电或重启电脑和车机。', + 'dialog_auth_failed_title': '授权失败', + 'dialog_auth_failed_body': '设备未授权', + 'dialog_resource_failed_body': '资源准备失败!', + 'dialog_resource_dir_missing': '资源目录未找到', + 'log_system_unlock_failed': 'system 分区解锁失败', + 'log_lang_pkg_missing': '未找到语言包文件', + 'log_readonly_system': 'system 分区仍为只读,请重新点击「获取权限」后再试', + 'progress_flashing': '正在刷入...', + 'progress_flash_done': '刷入完成', + 'progress_aborted': '已终止', + 'log_flash_done': '刷入完成,共 {total} 个语言包', + 'log_flash_reboot_required': '语言包已刷入完成,请务必重启设备,system/priv-app 需要开机扫描后才会显示', + 'log_flash_partial': '部分刷入成功({success}/{total})', + 'log_flash_scan_required': '已刷入的系统应用需要重启设备后才会显示', + 'dialog_select_apk_folder': '选择包含APK文件的文件夹', + 'dialog_no_apk_in_folder': '所选文件夹中没有APK文件!', + 'dialog_confirm_install_title': '确认安装', + 'dialog_confirm_install_folder': '找到 {count} 个APK文件\n\n是否开始批量安装?', + 'log_batch_install_start': '开始批量安装 {count} 个APK...', + 'progress_installing': '安装中...', + 'progress_installing_apk': '安装中 ({apk})', + 'progress_install_done': '安装完成', + 'log_install_all_success': '安装完成:全部 {count} 个成功', + 'dialog_install_done_title': '安装完成', + 'dialog_install_all_success': '成功安装 {count} 个APK!', + 'log_install_partial': '安装完成:{success}/{total} 成功', + 'dialog_install_partial_title': '部分成功', + 'dialog_install_partial_body': '成功: {success}\n失败: {failed}', + 'log_install_failed': '安装失败', + 'dialog_install_failed_title': '安装失败', + 'dialog_install_all_failed': '所有APK安装失败!', + 'log_install_exception': '安装过程异常: {error}', + 'dialog_install_exception': '安装过程异常:{error}', + 'dialog_select_apk_file': '选择APK文件', + 'filetype_apk': 'APK文件', + 'filetype_all': '所有文件', + 'progress_done': '完成', + 'log_single_install_success': '✓ 安装成功', + 'log_single_install_failed': '✗ 安装失败', + 'quick_lang_title': '快捷语言设置', + 'quick_lang_header': '选择目标语言', + 'quick_lang_hint': '点击按钮即可将系统语言切换为对应语言,重启后生效', + 'quick_lang_system_button': '⚙️ 打开系统语言设置(手动选择)', + 'quick_lang_zh': '🇨🇳 中文', + 'quick_lang_en': '🇺🇸 英语', + 'quick_lang_ru': '🇷🇺 俄语', + 'quick_lang_fr': '🇫🇷 法语', + 'quick_lang_es': '🇪🇸 西班牙语', + 'quick_lang_pt': '🇵🇹 葡萄牙语', + 'quick_lang_it': '🇮🇹 意大利语', + 'quick_lang_ar': '🇸🇦 阿拉伯语', + 'log_setting_language': '正在设置系统语言为: {language} ({locale})', + 'log_language_set_success': '✓ 语言已设置为 {language}', + 'dialog_language_success_title': '设置成功', + 'dialog_language_success_body': '系统语言已设置为 {language}\n\n⚠️ 请重启设备使其生效。', + 'log_language_set_failed': '✗ 语言设置失败: {error}', + 'dialog_language_failed_title': '设置失败', + 'dialog_language_failed_body': '语言设置失败!\n\n{error}', + 'dialog_confirm_reboot_title': '确认重启', + 'dialog_confirm_reboot_body': '确定要重启设备吗?', + 'log_rebooting': '设备正在重启...', + 'log_reboot_failed': '重启失败: {error}', + 'dialog_clear_cache_title': '确认清理缓存', + 'dialog_clear_cache_body': '将删除本地解压缓存目录:\n{cache_dir}\n\n下次刷入会重新解压 package.bin,是否继续?', + 'log_clear_cache_cancelled': '已取消清理缓存', + 'log_cache_cleared': '解压缓存已清理', + 'dialog_cache_cleared_title': '清理完成', + 'dialog_cache_cleared_body': '解压缓存已清理。', + 'log_cache_clear_failed': '清理缓存失败: {error}', + 'dialog_cache_clear_failed_title': '清理失败', + 'dialog_cache_clear_failed_body': '清理缓存失败:{error}', + 'log_key_success': '登录密码获取成功', + 'log_key_failed': '登录密码获取失败: {message}', + 'log_key_request_failed_detail': '登录密码请求失败: {error}', + 'debug_title': '调试模式', + 'debug_prompt': '请输入调试密码:', + 'debug_status': '🔧 调试模式', + 'log_debug_disabled': '调试模式已关闭', + 'log_debug_enabled': '🔧 调试模式已开启 - 跳过授权和设备校验,显示详细ADB日志', + 'debug_password_wrong': '密码错误', + 'debug_extract_need_enable': '请先按 Ctrl+Shift+D 开启调试模式', + 'debug_extract_title': '测试解压', + 'debug_extract_prompt': '请输入 package.bin 解压密码:', + 'debug_extract_success_title': '测试解压成功', + 'debug_extract_success_body': '资源已解压到:\n{path}', + 'debug_extract_failed_title': '测试解压失败', + 'debug_extract_failed_body': '请查看日志中的 7za 输出', + 'log_debug_extract_success': '测试解压成功', + 'log_debug_extract_failed': '测试解压失败', + 'log_apkpure_permission_ok': '已授予 APKPure 安装应用权限', + 'log_apkpure_permission_partial': 'APKPure 安装应用权限部分失败: {details}', + 'log_language_switched': '语言已切换为 {language}', + 'language_name_zh': '中文', + 'language_name_en': 'English', + 'log_shell_login_try': '正在尝试交互式 adb shell 登录...', + 'log_selinux_permissive': 'SELinux 已切换为宽松模式', + 'log_system_rw_debug': '系统分区已重新挂载为可写: {mount_point}', + 'log_builtin_cleaning': '正在删除预置应用目录...', + 'log_builtin_deleted': '已删除: {path}', + 'log_builtin_delete_failed': '删除失败: {path} ({error})', + 'log_builtin_done_partial': '预置应用清理完成,{count} 个目录未成功', + 'log_builtin_done': '预置应用清理完成', + 'log_selinux_restored': 'SELinux 已恢复为 Enforcing', + 'log_selinux_restore_failed': 'SELinux 恢复失败: {error}', + 'startup_python_version_error': '错误:需要Python 3.6或更高版本', + 'startup_failed_title': '错误', + 'startup_failed_console': '启动失败: {error}', + 'startup_failed_dialog': '程序启动失败: {error}', }, 'en': { 'title': 'Qiyuan A07 Multi-Language', @@ -161,16 +372,190 @@ class ADKAPKGUI: 'auth_yes': 'Authorized', 'auth_no': 'Unauthorized', 'btn_refresh': '🔄 Check', - 'hint_factory': '🔧 Qiyuan A07 auto-signs into adb shell, then uses Magisk SU for system remount', 'theme_dark': '🌙 Dark', 'theme_light': '☀️ Light', - 'lang_zh': '中', - 'lang_en': 'EN', + 'lang_zh': '中文', + 'lang_en': 'English', 'switch_lang': 'Language', 'switch_theme': 'Theme', - 'about_company': 'Yibin Keyi Technology - Smart Device Platform', + 'key_query_label': 'Login password:', + 'vin_placeholder': 'Enter VIN or last 6 digits', + 'auth_code_placeholder': 'Enter auth code', + 'btn_query_pwd': 'Get Password', + 'key_need_input': 'Enter VIN and auth code', + 'key_querying': 'Getting password...', + 'key_query_success': 'Password: {password}', + 'key_query_failed': 'Failed: {message}', + 'key_request_failed': 'Request failed', + 'key_dial_tip': 'Open the vehicle Dialer app and dial *#*#666 to get the auth code.', + 'tip_1': '1. Keep the vehicle and computer powered during installation. Do not stop midway.', + 'tip_2': '2. After getting permission, wait for the vehicle system to reboot before flashing.', + 'tip_3': '3. Some languages take effect after reboot. You can reboot after all tasks are complete.', + 'dialog_warning': 'Warning', + 'dialog_error': 'Error', + 'dialog_info': 'Notice', + 'dialog_success': 'Success', + 'dialog_device_not_connected_title': 'Device Not Connected', + 'dialog_device_not_connected_body': 'Connect the device, then click "Check" to refresh status.', + 'log_cleared': 'Log cleared', + 'log_device_connected': 'Device connected', + 'log_device_disconnected': 'Device disconnected', + 'log_device_not_connected': 'Device not connected', + 'log_current_vin': 'Current VIN: {vin}', + 'log_vin_unavailable': 'Unable to get VIN', + 'log_refresh_failed': 'Failed to refresh device status: {error}', + 'log_root_ready': 'A07 system partition is ready. You can start flashing.', + 'log_root_failed': 'Failed to get permission', + 'log_cache_invalid': 'Extracted cache is invalid: {reason}', + 'log_no_available_apk': 'No available APK found', + 'log_zero_apk': 'Found 0KB APK: {preview}{suffix}', + 'extract_wrong_password': 'Wrong extraction password. Please confirm the package.bin password.', + 'extract_data_error': 'Resource data error. The password may be wrong or package.bin may be damaged.', + 'extract_broken': 'Resource package is damaged or incomplete. Please check package.bin.', + 'extract_prepare_failed_detail': 'Resource preparation failed: {error}', + 'extract_prepare_failed': 'Resource preparation failed. Please check the extraction password.', + 'progress_resource_loading': 'Preparing resources...', + 'progress_resource_done': 'Resources ready', + 'log_package_missing_path': 'Error: resource package not found ({path})', + 'log_extract_password_missing': 'Error: extraction password is not set', + 'log_7za_missing': 'Error: 7za.exe not found ({path})', + 'log_resource_preparing': 'Preparing resources...', + 'log_resource_dir_missing': 'Warning: required resource folder not found', + 'log_resource_invalid': 'Extracted resources are invalid: {reason}. Flashing stopped. Please check the password or package.', + 'log_resource_ready_debug': 'Resources ready (app: {app}, priv-app: {priv}, system_ext: {system_ext})', + 'log_resource_ready': 'Resources ready', + 'log_resource_prepare_exception': 'Resource preparation failed: {error}', + 'log_resource_prepare_retry': 'Resource preparation failed. Check the network connection and try again.', + 'log_package_missing': 'Resource package file not found', + 'log_adb_missing': 'ADB command not found. Put ADB files in this folder.', + 'log_cache_invalid_cleaned': 'Invalid cached resources removed: {reason}', + 'log_debug_skip_auth': 'Debug mode: skipped authorization check', + 'log_auth_checking': 'Checking authorization...', + 'log_auth_ok': 'Authorization verified', + 'log_vehicle_name': 'Vehicle name: {vehicle_name}', + 'log_auth_failed': 'Authorization failed', + 'log_connect_adb_first': 'Please connect ADB first.', + 'log_prepare_failed_no_vehicle': 'Data preparation failed: vehicle model not found', + 'log_prepare_failed_reason': 'Data preparation failed: {reason}', + 'log_prepare_failed_error': 'Data preparation failed: {error}', + 'err_unknown': 'Unknown error', + 'push_fail': 'Push failed: {error}', + 'copy_fail': 'Copy failed: {error}', + 'dialog_need_vin': 'Please refresh device status and get VIN first.', + 'dialog_flash_warning_title': 'Important Notice', + 'dialog_flash_warning_body': 'During flashing, do not:\n - reboot the vehicle system\n - exit this program\n - shut down the computer\n\nOtherwise the vehicle system may be damaged.', + 'log_flash_start': 'Starting language installation. Do not power off or reboot the computer or vehicle system.', + 'dialog_auth_failed_title': 'Authorization Failed', + 'dialog_auth_failed_body': 'Device is not authorized', + 'dialog_resource_failed_body': 'Resource preparation failed!', + 'dialog_resource_dir_missing': 'Resource folder not found', + 'log_system_unlock_failed': 'System partition unlock failed', + 'log_lang_pkg_missing': 'Language package file not found', + 'log_readonly_system': 'System partition is still read-only. Click "Get Root" and try again.', + 'progress_flashing': 'Flashing...', + 'progress_flash_done': 'Flash complete', + 'progress_aborted': 'Aborted', + 'log_flash_done': 'Flash complete. {total} language packages processed.', + 'log_flash_reboot_required': 'Language packages have been flashed. Please reboot the device so system apps can be scanned.', + 'log_flash_partial': 'Partially flashed ({success}/{total})', + 'log_flash_scan_required': 'Flashed system apps need a reboot before they appear.', + 'dialog_select_apk_folder': 'Select Folder Containing APK Files', + 'dialog_no_apk_in_folder': 'No APK files found in the selected folder!', + 'dialog_confirm_install_title': 'Confirm Install', + 'dialog_confirm_install_folder': 'Found {count} APK files.\n\nStart batch installation?', + 'log_batch_install_start': 'Starting batch install for {count} APKs...', + 'progress_installing': 'Installing...', + 'progress_installing_apk': 'Installing ({apk})', + 'progress_install_done': 'Install complete', + 'log_install_all_success': 'Install complete: all {count} succeeded', + 'dialog_install_done_title': 'Install Complete', + 'dialog_install_all_success': 'Successfully installed {count} APKs!', + 'log_install_partial': 'Install complete: {success}/{total} succeeded', + 'dialog_install_partial_title': 'Partial Success', + 'dialog_install_partial_body': 'Success: {success}\nFailed: {failed}', + 'log_install_failed': 'Install failed', + 'dialog_install_failed_title': 'Install Failed', + 'dialog_install_all_failed': 'All APK installations failed!', + 'log_install_exception': 'Install error: {error}', + 'dialog_install_exception': 'Install error: {error}', + 'dialog_select_apk_file': 'Select APK File', + 'filetype_apk': 'APK files', + 'filetype_all': 'All files', + 'progress_done': 'Done', + 'log_single_install_success': '✓ Install succeeded', + 'log_single_install_failed': '✗ Install failed', + 'quick_lang_title': 'Quick Language Settings', + 'quick_lang_header': 'Select Target Language', + 'quick_lang_hint': 'Click a button to switch the system language. Reboot to apply.', + 'quick_lang_system_button': '⚙️ Open System Language Settings', + 'quick_lang_zh': '🇨🇳 Chinese', + 'quick_lang_en': '🇺🇸 English', + 'quick_lang_ru': '🇷🇺 Russian', + 'quick_lang_fr': '🇫🇷 French', + 'quick_lang_es': '🇪🇸 Spanish', + 'quick_lang_pt': '🇵🇹 Portuguese', + 'quick_lang_it': '🇮🇹 Italian', + 'quick_lang_ar': '🇸🇦 Arabic', + 'log_setting_language': 'Setting system language to: {language} ({locale})', + 'log_language_set_success': '✓ Language set to {language}', + 'dialog_language_success_title': 'Success', + 'dialog_language_success_body': 'System language has been set to {language}.\n\n⚠️ Please reboot the device to apply it.', + 'log_language_set_failed': '✗ Failed to set language: {error}', + 'dialog_language_failed_title': 'Failed', + 'dialog_language_failed_body': 'Language setting failed!\n\n{error}', + 'dialog_confirm_reboot_title': 'Confirm Reboot', + 'dialog_confirm_reboot_body': 'Are you sure you want to reboot the device?', + 'log_rebooting': 'Device is rebooting...', + 'log_reboot_failed': 'Reboot failed: {error}', + 'dialog_clear_cache_title': 'Confirm Cache Cleanup', + 'dialog_clear_cache_body': 'This will delete the local extracted cache folder:\n{cache_dir}\n\nNext flash will extract package.bin again. Continue?', + 'log_clear_cache_cancelled': 'Cache cleanup cancelled', + 'log_cache_cleared': 'Extracted cache cleared', + 'dialog_cache_cleared_title': 'Cleanup Complete', + 'dialog_cache_cleared_body': 'Extracted cache has been cleared.', + 'log_cache_clear_failed': 'Failed to clear cache: {error}', + 'dialog_cache_clear_failed_title': 'Cleanup Failed', + 'dialog_cache_clear_failed_body': 'Failed to clear cache: {error}', + 'log_key_success': 'Login password retrieved', + 'log_key_failed': 'Failed to get login password: {message}', + 'log_key_request_failed_detail': 'Login password request failed: {error}', + 'debug_title': 'Debug Mode', + 'debug_prompt': 'Enter debug password:', + 'debug_status': '🔧 Debug Mode', + 'log_debug_disabled': 'Debug mode disabled', + 'log_debug_enabled': '🔧 Debug mode enabled - authorization/device checks are skipped and detailed ADB logs are shown', + 'debug_password_wrong': 'Wrong password', + 'debug_extract_need_enable': 'Press Ctrl+Shift+D to enable debug mode first.', + 'debug_extract_title': 'Extraction Test', + 'debug_extract_prompt': 'Enter package.bin extraction password:', + 'debug_extract_success_title': 'Extraction Test Succeeded', + 'debug_extract_success_body': 'Resources extracted to:\n{path}', + 'debug_extract_failed_title': 'Extraction Test Failed', + 'debug_extract_failed_body': 'Check the 7za output in the log.', + 'log_debug_extract_success': 'Extraction test succeeded', + 'log_debug_extract_failed': 'Extraction test failed', + 'log_apkpure_permission_ok': 'APKPure install permission granted', + 'log_apkpure_permission_partial': 'APKPure install permission partly failed: {details}', + 'log_language_switched': 'Language switched to {language}', + 'language_name_zh': '中文', + 'language_name_en': 'English', + 'log_shell_login_try': 'Trying interactive adb shell login...', + 'log_selinux_permissive': 'SELinux switched to permissive mode', + 'log_system_rw_debug': 'System partition remounted writable: {mount_point}', + 'log_builtin_cleaning': 'Cleaning preinstalled app entries...', + 'log_builtin_deleted': 'Deleted: {path}', + 'log_builtin_delete_failed': 'Delete failed: {path} ({error})', + 'log_builtin_done_partial': 'Preinstalled app cleanup completed, {count} entries failed', + 'log_builtin_done': 'Preinstalled app cleanup completed', + 'log_selinux_restored': 'SELinux restored to Enforcing', + 'log_selinux_restore_failed': 'Failed to restore SELinux: {error}', + 'startup_python_version_error': 'Error: Python 3.6 or later is required', + 'startup_failed_title': 'Error', + 'startup_failed_console': 'Startup failed: {error}', + 'startup_failed_dialog': 'Program startup failed: {error}', } } + self.root.title(self.t('title')) # 从 exe/py 所在目录查找资源文件 self.base_dir = get_app_dir() @@ -183,7 +568,9 @@ class ADKAPKGUI: self.system_ext_dir = None self.temp_dir = None self.api_url = "https://api.changan.softwindy.cn/api/authorizations/auth-check" + self.debug_password_api_url = "https://api.changan.softwindy.cn/api/authorizations/verify-debug-mode-password" self.vin = None + self.vehicle_name = "" self.device_connected = False self._refreshing = False # 防止并发刷新 self.debug_mode = False # 调试模式 @@ -191,10 +578,12 @@ class ADKAPKGUI: self.system_mount_point = None self.selinux_restore_mode = None self.shell_login_verified = False + self._pwd_result_state = None # 设置样式 self.setup_styles() self.setup_ui() + self.root.after(200, self.set_window_icon) self.center_window() # 检查环境 @@ -202,6 +591,40 @@ class ADKAPKGUI: # 启动设备状态监控 self.start_device_monitor() + self.root.protocol("WM_DELETE_WINDOW", self.on_close) + atexit.register(self.cleanup_cache_on_exit) + + def set_window_icon(self): + """Set runtime Tk titlebar/taskbar icon; PyInstaller --icon only sets the exe file icon.""" + try: + icon_path = find_resource("app.ico") + if icon_path.exists(): + self.root.iconbitmap(str(icon_path)) + self._set_windows_hwnd_icon(icon_path) + except Exception: + pass + + def _set_windows_hwnd_icon(self, icon_path): + if sys.platform != 'win32': + return + try: + import ctypes + user32 = ctypes.windll.user32 + hwnd = self.root.winfo_id() + image_icon = 1 + lr_loadfromfile = 0x00000010 + wm_seticon = 0x0080 + icon_small = 0 + icon_big = 1 + path = str(icon_path) + small = user32.LoadImageW(None, path, image_icon, 16, 16, lr_loadfromfile) + big = user32.LoadImageW(None, path, image_icon, 32, 32, lr_loadfromfile) + if small: + user32.SendMessageW(hwnd, wm_seticon, icon_small, small) + if big: + user32.SendMessageW(hwnd, wm_seticon, icon_big, big) + except Exception: + pass def setup_styles(self): """设置自定义样式""" @@ -230,70 +653,101 @@ class ADKAPKGUI: main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) # 顶部标题栏 - title_frame = tk.Frame(main_frame, bg=self.colors['bg_dark'], height=65) + title_frame = tk.Frame(main_frame, bg=self.colors['bg_dark'], height=45) title_frame.pack(fill=tk.X, pady=(0, 10)) title_frame.pack_propagate(False) + title_frame.grid_columnconfigure(0, weight=1) + title_frame.grid_columnconfigure(1, weight=0) + title_frame.grid_columnconfigure(2, weight=1) + # 标题 self.title_label = tk.Label(title_frame, - text="🚀 启源A07多语言安装", + text=f"🚀 {self.t('title')}", font=('Microsoft YaHei', 18, 'bold'), fg=self.colors['accent'], bg=self.colors['bg_dark']) - self.title_label.pack() + self.title_label.grid(row=0, column=1, pady=(3, 0)) - self.subtitle_label = tk.Label(title_frame, - text="宜宾科宜科技有限公司 - 智能设备管理平台", - font=('Microsoft YaHei', 9), - fg=self.colors['text_secondary'], - bg=self.colors['bg_dark']) - self.subtitle_label.pack() + self.btn_lang_switch = tk.Button(title_frame, + text=self.t('lang_en') if self.lang == 'zh' else self.t('lang_zh'), + command=self.toggle_lang, + font=('Microsoft YaHei', 10, 'bold'), + fg='white', + bg=self.colors['accent'], + activeforeground='white', + activebackground=self.colors['accent_hover'], + relief=tk.FLAT, + cursor='hand2', + width=9, + height=1) + self.btn_lang_switch.grid(row=0, column=2, sticky='e', padx=(0, 6), pady=(6, 0)) - # 工程密码查询区域 + # 登录密码查询区域 pwd_query_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) pwd_query_frame.pack(fill=tk.X, pady=(0, 5), padx=5) - tk.Label(pwd_query_frame, text="工程密码查询:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT, padx=(10, 5), pady=5) + pwd_query_row = tk.Frame(pwd_query_frame, bg=self.colors['bg_light']) + pwd_query_row.pack(fill=tk.X, padx=10, pady=(5, 2)) - self.vin_input = tk.Entry(pwd_query_frame, - font=('Consolas', 9), - bg='#2d2d3d', - fg='#636e72', - insertbackground='white', - relief=tk.FLAT, - width=20) - self.vin_input.insert(0, "请输入VIN") + self.key_query_label = tk.Label(pwd_query_row, text=self.t('key_query_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.key_query_label.pack(side=tk.LEFT, padx=(0, 5), pady=3) + + self.vin_input = tk.Entry(pwd_query_row, + font=('Consolas', 9), + bg='#2d2d3d', + fg='#636e72', + insertbackground='white', + relief=tk.FLAT, + width=22) + self.vin_input.insert(0, self.t('vin_placeholder')) self.vin_input.bind("", self._on_vin_input_focus_in) self.vin_input.bind("", self._on_vin_input_focus_out) - self.vin_input.pack(side=tk.LEFT, padx=5, pady=5) + self.vin_input.pack(side=tk.LEFT, padx=5, pady=3) - self.btn_query_pwd = tk.Button(pwd_query_frame, text="查询密码", - command=self.query_password_by_vin, + self.auth_code_input = tk.Entry(pwd_query_row, + font=('Consolas', 9), + bg='#2d2d3d', + fg='#636e72', + insertbackground='white', + relief=tk.FLAT, + width=16) + self.auth_code_input.insert(0, self.t('auth_code_placeholder')) + self.auth_code_input.bind("", self._on_auth_code_focus_in) + self.auth_code_input.bind("", self._on_auth_code_focus_out) + self.auth_code_input.pack(side=tk.LEFT, padx=5, pady=3) + + self.btn_query_pwd = tk.Button(pwd_query_row, text=self.t('btn_query_pwd'), + command=self.query_login_password_by_key, font=('Microsoft YaHei', 8), fg='white', bg=self.colors['accent'], relief=tk.FLAT, cursor='hand2') - self.btn_query_pwd.pack(side=tk.LEFT, padx=5, pady=5) + self.btn_query_pwd.pack(side=tk.LEFT, padx=5, pady=3) - self.pwd_result_label = tk.Label(pwd_query_frame, text="", + pwd_result_row = tk.Frame(pwd_query_frame, bg=self.colors['bg_light']) + pwd_result_row.pack(fill=tk.X, padx=10, pady=(0, 2)) + + self.pwd_result_label = tk.Label(pwd_result_row, text="", font=('Microsoft YaHei', 9, 'bold'), fg=self.colors['success'], - bg=self.colors['bg_light']) - self.pwd_result_label.pack(side=tk.LEFT, padx=10, pady=5) - - # 工厂模式提示 - factory_hint_frame = tk.Frame(main_frame, bg=self.colors['bg_dark']) - factory_hint_frame.pack(fill=tk.X, pady=(0, 3)) - self.hint_label = tk.Label(factory_hint_frame, - text="🔧 启源A07:首次 adb shell 将自动输入登录密码,并通过 Magisk SU 解锁系统分区", - font=('Microsoft YaHei', 8), - fg=self.colors['warning'], - bg=self.colors['bg_dark']) - self.hint_label.pack(side=tk.LEFT, padx=2) + bg=self.colors['bg_light'], + anchor='w', + justify=tk.LEFT) + self.pwd_result_label.pack(fill=tk.X, padx=(104, 0), pady=(0, 2)) + + self.key_tip_label = tk.Label(pwd_query_frame, + text=self.t('key_dial_tip'), + font=('Microsoft YaHei', 8), + fg=self.colors['warning'], + bg=self.colors['bg_light'], + anchor='w', + justify=tk.LEFT) + self.key_tip_label.pack(fill=tk.X, padx=10, pady=(0, 5)) # 按钮区域(两排,每排5个) @@ -314,25 +768,25 @@ class ADKAPKGUI: row1_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) row1_frame.pack(pady=(8, 4)) - self.btn_root = tk.Button(row1_frame, text="🔓 获取权限", + self.btn_root = tk.Button(row1_frame, text=self.t('btn_root'), command=self.get_root_permission, bg=self.colors['success'], **btn_params) self.btn_root.pack(side=tk.LEFT, padx=4) - self.btn_push = tk.Button(row1_frame, text="📦 刷入语言包", + self.btn_push = tk.Button(row1_frame, text=self.t('btn_push'), command=self.push_all_apks, bg=self.colors['accent'], **btn_params) self.btn_push.pack(side=tk.LEFT, padx=4) - self.btn_install_all = tk.Button(row1_frame, text="📱 安装App", + self.btn_install_all = tk.Button(row1_frame, text=self.t('btn_install'), command=self.install_apps, bg=self.colors['accent'], **btn_params) self.btn_install_all.pack(side=tk.LEFT, padx=4) - self.btn_language = tk.Button(row1_frame, text="🌐 语言设置", + self.btn_language = tk.Button(row1_frame, text=self.t('btn_language'), command=self.open_language_quick_set, bg=self.colors['accent'], **btn_params) @@ -342,25 +796,25 @@ class ADKAPKGUI: row2_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) row2_frame.pack(pady=(4, 8)) - self.btn_timezone = tk.Button(row2_frame, text="⏰ 时区设置", + self.btn_timezone = tk.Button(row2_frame, text=self.t('btn_timezone'), command=self.open_timezone_settings, bg=self.colors['accent'], **btn_params) self.btn_timezone.pack(side=tk.LEFT, padx=4) - self.btn_settings = tk.Button(row2_frame, text="⚙️ 安卓设置", + self.btn_settings = tk.Button(row2_frame, text=self.t('btn_settings'), command=self.open_android_settings, bg=self.colors['accent'], **btn_params) self.btn_settings.pack(side=tk.LEFT, padx=4) - self.btn_reboot = tk.Button(row2_frame, text="🔄 重启设备", + self.btn_reboot = tk.Button(row2_frame, text=self.t('btn_reboot'), command=self.reboot_device, bg=self.colors['warning'], **btn_params) self.btn_reboot.pack(side=tk.LEFT, padx=4) - self.btn_exit = tk.Button(row2_frame, text="🧹 清理缓存", + self.btn_exit = tk.Button(row2_frame, text=self.t('btn_clear_cache'), command=self.clear_extract_cache, bg=self.colors['error'], **btn_params) @@ -379,75 +833,77 @@ class ADKAPKGUI: self.status_indicator.pack(side=tk.LEFT) self.status_dot = self.status_indicator.create_oval(2, 2, 8, 8, fill='#636e72') - tk.Label(status_indicator_frame, text="设备:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT, padx=(5, 3)) + self.device_label = tk.Label(status_indicator_frame, text=self.t('device_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.device_label.pack(side=tk.LEFT, padx=(5, 3)) - self.device_status_label = tk.Label(status_indicator_frame, text="未检测", - font=('Microsoft YaHei', 9, 'bold'), - fg='#636e72', - bg=self.colors['bg_light'], - anchor='w', width=4) + self.device_status_label = tk.Label(status_indicator_frame, text=self.t('status_detecting'), + font=('Microsoft YaHei', 9, 'bold'), + fg='#636e72', + bg=self.colors['bg_light'], + anchor='w', width=8) self.device_status_label.pack(side=tk.LEFT) # VIN信息 vin_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) vin_frame.pack(side=tk.LEFT, padx=20, pady=5) - tk.Label(vin_frame, text="VIN码:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT) - self.vin_label = tk.Label(vin_frame, text="未获取", - font=('Microsoft YaHei', 9, 'bold'), - fg='#636e72', - bg=self.colors['bg_light'], - anchor='w', width=17) + self.vin_label_title = tk.Label(vin_frame, text=self.t('vin_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.vin_label_title.pack(side=tk.LEFT) + self.vin_label = tk.Label(vin_frame, text=self.t('vin_none'), + font=('Microsoft YaHei', 9, 'bold'), + fg='#636e72', + bg=self.colors['bg_light'], + anchor='w', width=17) self.vin_label.pack(side=tk.LEFT, padx=(5, 0)) # 授权状态 auth_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) auth_frame.pack(side=tk.LEFT, padx=20, pady=5) - tk.Label(auth_frame, text="授权:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT) - self.auth_label = tk.Label(auth_frame, text="未验证", - font=('Microsoft YaHei', 9, 'bold'), - fg='#636e72', - bg=self.colors['bg_light'], - anchor='w', width=4) + self.auth_label_title = tk.Label(auth_frame, text=self.t('auth_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.auth_label_title.pack(side=tk.LEFT) + self.auth_label = tk.Label(auth_frame, text=self.t('auth_none'), + font=('Microsoft YaHei', 9, 'bold'), + fg='#636e72', + bg=self.colors['bg_light'], + anchor='w', width=10) self.auth_label.pack(side=tk.LEFT, padx=(5, 0)) # 刷新按钮 - refresh_btn = tk.Button(status_bar_frame, text="🔄 检查", - command=self.refresh_device_status, - font=('Microsoft YaHei', 8), - fg=self.colors['accent'], - bg=self.colors['bg_light'], - relief=tk.FLAT, - cursor='hand2') - refresh_btn.pack(side=tk.RIGHT, padx=10, pady=5) + self.btn_refresh = tk.Button(status_bar_frame, text=self.t('btn_refresh'), + command=self.refresh_device_status, + font=('Microsoft YaHei', 8), + fg=self.colors['accent'], + bg=self.colors['bg_light'], + relief=tk.FLAT, + cursor='hand2') + self.btn_refresh.pack(side=tk.RIGHT, padx=10, pady=5) # 提示信息区域(设备状态下方) tips_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) tips_frame.pack(fill=tk.X, pady=(5, 5), padx=5) - tips = [ - "1. 安装语言过程中请保持车辆和电脑的电量充足,不可中途停止。", - "2. 获取权限以后,车辆自动重启以后再进入语言刷入。", - "3. 部分语言需要重启后生效,可以一切工作完成以后再重启。", - ] + tips = ['tip_1', 'tip_2', 'tip_3'] + self.tip_labels = [] - for i, tip in enumerate(tips): + for i, tip_key in enumerate(tips): tip_row = tk.Frame(tips_frame, bg=self.colors['bg_light']) tip_row.pack(fill=tk.X, padx=10, pady=(5 if i == 0 else 0, 5 if i == len(tips) - 1 else 0)) - tk.Label(tip_row, text=tip, - font=('Microsoft YaHei', 9), - fg=self.colors['warning'], - bg=self.colors['bg_light'], - wraplength=600, - justify=tk.LEFT).pack(side=tk.LEFT) + tip_label = tk.Label(tip_row, text=self.t(tip_key), + font=('Microsoft YaHei', 9), + fg=self.colors['warning'], + bg=self.colors['bg_light'], + wraplength=600, + justify=tk.LEFT) + tip_label.pack(side=tk.LEFT) + self.tip_labels.append((tip_label, tip_key)) # 解压进度条框架 progress_frame = tk.Frame(main_frame, bg=self.colors['bg_dark']) @@ -479,12 +935,13 @@ class ADKAPKGUI: log_title_frame.pack(fill=tk.X) log_title_frame.pack_propagate(False) - tk.Label(log_title_frame, text="📋 运行日志", - font=('Microsoft YaHei', 10, 'bold'), - fg=self.colors['accent'], - bg=self.colors['bg_dark']).pack(side=tk.LEFT, padx=10) + self.log_title_label = tk.Label(log_title_frame, text=self.t('log_title'), + font=('Microsoft YaHei', 10, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.log_title_label.pack(side=tk.LEFT, padx=10) - self.btn_clear = tk.Button(log_title_frame, text="🗑 清空日志", + self.btn_clear = tk.Button(log_title_frame, text=self.t('btn_clear_log'), command=self.clear_log, font=('Microsoft YaHei', 8), fg=self.colors['text_secondary'], @@ -520,14 +977,14 @@ class ADKAPKGUI: bottom_status.pack(fill=tk.X, pady=(5, 0)) bottom_status.pack_propagate(False) - self.status_text = tk.Label(bottom_status, text="就绪", + self.status_text = tk.Label(bottom_status, text=self.t('status_ready'), font=('Microsoft YaHei', 8), fg=self.colors['text_secondary'], bg=self.colors['bg_light']) self.status_text.pack(side=tk.LEFT, padx=10) - # 主题和语言切换按钮 - self.btn_theme_switch = tk.Button(bottom_status, text="🌙 暗色", + # 主题切换按钮 + self.btn_theme_switch = tk.Button(bottom_status, text=self.t('theme_light'), command=self.toggle_theme, font=('Microsoft YaHei', 8), fg=self.colors['accent'], @@ -536,15 +993,6 @@ class ADKAPKGUI: cursor='hand2') self.btn_theme_switch.pack(side=tk.RIGHT, padx=5) - self.btn_lang_switch = tk.Button(bottom_status, text="EN", - command=self.toggle_lang, - font=('Microsoft YaHei', 8, 'bold'), - fg=self.colors['accent'], - bg=self.colors['bg_light'], - relief=tk.FLAT, - cursor='hand2') - self.btn_lang_switch.pack(side=tk.RIGHT, padx=5) - # 调试模式快捷键 self.root.bind('', self._toggle_debug) self.root.bind('', self._debug_test_extract) @@ -624,6 +1072,14 @@ class ADKAPKGUI: lines.append(stripped) return "\n".join(lines).strip() + def _set_pwd_result(self, key=None, color_key='success', **kwargs): + self._pwd_result_state = (key, color_key, kwargs) + if key: + self.pwd_result_label.config(text=self.t(key).format(**kwargs), + fg=self.colors.get(color_key, color_key)) + else: + self.pwd_result_label.config(text="") + def _shell_login_required(self, output): text = (output or "").lower() return "run adb shell to login with password first" in text @@ -648,16 +1104,16 @@ class ADKAPKGUI: return True, output if self.debug_mode: self.log(f"CMD FAIL: {output[:300]}", "CMD") - return False, output or "adb shell 执行失败" + return False, output or "adb shell failed" except subprocess.TimeoutExpired: - return False, "命令超时" + return False, "Command timed out" except Exception as e: return False, str(e) def _auto_login_shell(self, timeout=15): """在 Windows 上尝试自动完成一次 adb shell 登录。""" if sys.platform != 'win32': - return False, "当前系统不支持自动 adb shell 登录" + return False, "Automatic adb shell login is not supported on this system" return self._auto_login_shell_interactive(timeout=timeout) @@ -673,7 +1129,7 @@ class ADKAPKGUI: proc = None try: if self.debug_mode: - self.log("正在尝试交互式 adb shell 登录...", "INFO") + self.log(self.t('log_shell_login_try'), "INFO") proc = subprocess.Popen( [adb_path, '-d', 'shell'], creationflags=subprocess.CREATE_NEW_CONSOLE, @@ -703,7 +1159,7 @@ class ADKAPKGUI: def _write_console_input_helper(self, pid, text, timeout=5): """用独立 helper 进程写入控制台输入,避免破坏主进程句柄。""" if sys.platform != 'win32': - return False, "当前系统不支持控制台输入写入" + return False, "Console input writing is not supported on this system" helper_code = r''' import ctypes @@ -727,7 +1183,7 @@ while time.time() < deadline: time.sleep(0.1) if not attached: - print(f"连接 adb shell 控制台失败: {ctypes.get_last_error()}", file=sys.stderr) + print(f"Failed to attach adb shell console: {ctypes.get_last_error()}", file=sys.stderr) sys.exit(2) class CharUnion(ctypes.Union): @@ -759,7 +1215,7 @@ try: input_handle = kernel32.GetStdHandle(wintypes.DWORD(-10)) invalid_handle = ctypes.c_void_p(-1).value if not input_handle or input_handle == invalid_handle: - print("获取 adb shell 控制台输入句柄失败", file=sys.stderr) + print("Failed to get adb shell console input handle", file=sys.stderr) sys.exit(3) records = (InputRecord * (len(text) * 2))() @@ -784,7 +1240,7 @@ try: ctypes.byref(written) ) if not ok: - print(f"写入 adb shell 控制台输入失败: {ctypes.get_last_error()}", file=sys.stderr) + print(f"Failed to write adb shell console input: {ctypes.get_last_error()}", file=sys.stderr) sys.exit(4) finally: kernel32.FreeConsole() @@ -800,7 +1256,7 @@ finally: ) if result.returncode == 0: return True, "" - return False, self._sanitize_shell_output(result.stdout, result.stderr) or "写入 adb shell 控制台输入失败" + return False, self._sanitize_shell_output(result.stdout, result.stderr) or "Failed to write adb shell console input" except Exception as e: return False, str(e) @@ -815,7 +1271,7 @@ finally: self.shell_login_verified = False login_ok, login_output = self._auto_login_shell() if not login_ok: - return False, login_output or "adb shell 尚未登录,请先手动执行一次 adb shell 并输入密码" + return False, login_output or "adb shell is not logged in. Please run adb shell once manually and enter the password." ok, output = self._run_adb_shell_raw(shell_command, timeout=timeout) if ok and not self._shell_login_required(output): @@ -825,12 +1281,12 @@ finally: if self._shell_login_required(output): login_ok, login_output = self._auto_login_shell() if not login_ok: - return False, login_output or "adb shell 尚未登录,请先手动执行一次 adb shell 并输入密码" + return False, login_output or "adb shell is not logged in. Please run adb shell once manually and enter the password." ok, output = self._run_adb_shell_raw(shell_command, timeout=timeout) if ok and not self._shell_login_required(output): self.shell_login_verified = True return True, output - return False, output or "adb shell 自动登录后仍不可用,请先手动执行一次 adb shell 并输入密码" + return False, output or "adb shell is still unavailable after auto login. Please run adb shell once manually and enter the password." return ok, output @@ -895,11 +1351,11 @@ finally: self.selinux_restore_mode = None ok, output = self.run_adb_shell("echo SHELL_AUTH_OK") if not ok or "SHELL_AUTH_OK" not in output: - return False, output or "adb shell 登录失败,请检查设备密码" + return False, output or "adb shell login failed. Please check the device password." ok, output = self.run_adb_su_command("id") if not ok or "uid=0" not in output: - return False, output or "Magisk SU 不可用或未授权" + return False, output or "Magisk SU is unavailable or not authorized" ok, selinux_output = self.run_adb_shell("getenforce") if ok and selinux_output: @@ -907,13 +1363,13 @@ finally: if self.selinux_restore_mode.lower() == "enforcing": ok, output = self.run_adb_su_command("setenforce 0") if not ok: - return False, output or "SELinux 切换失败" + return False, output or "SELinux switch failed" if self.debug_mode: - self.log("SELinux 已切换为宽松模式", "INFO") + self.log(self.t('log_selinux_permissive'), "INFO") candidates, mount_output = self._get_system_mount_candidates() if not candidates: - return False, mount_output or "未找到系统分区挂载点" + return False, mount_output or "System partition mount point not found" last_error = "" for mount_point in candidates: @@ -923,18 +1379,18 @@ finally: ): ok, output = self.run_adb_su_command(remount_cmd) if not ok: - last_error = output or f"{mount_point} remount 失败" + last_error = output or f"{mount_point} remount failed" continue verify_ok, verify_output = self._verify_system_write_access() if verify_ok: self.system_mount_point = mount_point if self.debug_mode: - self.log(f"系统分区已重新挂载为可写: {mount_point}", "SUCCESS") + self.log(self.t('log_system_rw_debug').format(mount_point=mount_point), "SUCCESS") self.remove_builtin_app_dirs() return True, mount_point - last_error = verify_output or f"{mount_point} 仍不可写" + last_error = verify_output or f"{mount_point} is still not writable" - return False, last_error or "system 分区仍为只读" + return False, last_error or "System partition is still read-only" def remove_builtin_app_dirs(self): """system 可写后删除指定系统应用目录。""" @@ -951,21 +1407,24 @@ finally: ] if self.debug_mode: - self.log("正在删除预置应用目录...", "INFO") + self.log(self.t('log_builtin_cleaning'), "INFO") failed_count = 0 for app_dir in app_dirs: ok, output = self.run_adb_su_command(f"rm -rf {self._quote_remote(app_dir)}") if ok: if self.debug_mode: - self.log(f"已删除: {app_dir}", "SUCCESS") + self.log(self.t('log_builtin_deleted').format(path=app_dir), "SUCCESS") else: failed_count += 1 - self.log(f"删除失败: {app_dir} ({output or '未知错误'})", "WARNING") + self.log(self.t('log_builtin_delete_failed').format( + path=app_dir, + error=output or self.t('err_unknown') + ), "WARNING") if failed_count: - self.log(f"预置应用清理完成,{failed_count} 个目录未成功", "WARNING") + self.log(self.t('log_builtin_done_partial').format(count=failed_count), "WARNING") else: - self.log("预置应用清理完成", "SUCCESS") + self.log(self.t('log_builtin_done'), "SUCCESS") def restore_selinux_mode(self): """按原状态恢复 SELinux。""" @@ -975,9 +1434,9 @@ finally: return ok, output = self.run_adb_su_command("setenforce 1") if ok: - self.log("SELinux 已恢复为 Enforcing", "INFO") + self.log(self.t('log_selinux_restored'), "INFO") elif output: - self.log(f"SELinux 恢复失败: {output}", "WARNING") + self.log(self.t('log_selinux_restore_failed').format(error=output), "WARNING") self.selinux_restore_mode = None def t(self, key): @@ -989,7 +1448,8 @@ finally: self.lang = 'en' if self.lang == 'zh' else 'zh' self.btn_lang_switch.config(text=self.t('lang_en') if self.lang == 'zh' else self.t('lang_zh')) self._refresh_ui_texts() - self.log(f"语言已切换为 {'English' if self.lang == 'en' else '中文'}", "INFO") + language_name = self.t('language_name_en') if self.lang == 'en' else self.t('language_name_zh') + self.log(self.t('log_language_switched').format(language=language_name), "INFO") def toggle_theme(self): """切换主题""" @@ -1022,13 +1482,22 @@ finally: self.log_text.configure(bg='#ffffff', fg='#2d3436') else: self.log_text.configure(bg='#2d2d3d', fg='#e0e0e0') + if getattr(self, 'btn_lang_switch', None): + self.btn_lang_switch.configure( + fg='white', + bg=c['accent'], + activeforeground='white', + activebackground=c['accent_hover'] + ) def _refresh_ui_texts(self): """刷新所有UI文本""" t = self.t + self.root.title(t('title')) widgets = [ - (getattr(self, 'title_label', None), 'title', None), - (getattr(self, 'subtitle_label', None), 'about_company', None), + (getattr(self, 'key_query_label', None), 'key_query_label', None), + (getattr(self, 'btn_query_pwd', None), 'btn_query_pwd', None), + (getattr(self, 'key_tip_label', None), 'key_dial_tip', None), (getattr(self, 'btn_root', None), 'btn_root', None), (getattr(self, 'btn_push', None), 'btn_push', None), (getattr(self, 'btn_install_all', None), 'btn_install', None), @@ -1044,16 +1513,33 @@ finally: (getattr(self, 'vin_label_title', None), 'vin_label', None), (getattr(self, 'auth_label_title', None), 'auth_label', None), (getattr(self, 'btn_refresh', None), 'btn_refresh', None), - (getattr(self, 'hint_label', None), 'hint_factory', None), ] for w, key, _ in widgets: if w: w.config(text=t(key)) + if getattr(self, 'title_label', None): + self.title_label.config(text=f"🚀 {t('title')}") + for tip_label, tip_key in getattr(self, 'tip_labels', []): + tip_label.config(text=t(tip_key)) self.btn_theme_switch.config(text=t('theme_light') if self.theme == 'dark' else t('theme_dark')) self.btn_lang_switch.config(text=t('lang_en') if self.lang == 'zh' else t('lang_zh')) + if getattr(self, 'vin_input', None) and self.is_placeholder_vin(self.vin_input.get()): + self.vin_input.delete(0, tk.END) + self.vin_input.insert(0, t('vin_placeholder')) + if getattr(self, 'auth_code_input', None) and self.is_placeholder_auth_code(self.auth_code_input.get()): + self.auth_code_input.delete(0, tk.END) + self.auth_code_input.insert(0, t('auth_code_placeholder')) + if getattr(self, '_pwd_result_state', None): + key, color_key, kwargs = self._pwd_result_state + if key: + self.pwd_result_label.config(text=t(key).format(**kwargs), + fg=self.colors.get(color_key, color_key)) if self.vin: self._update_device_status_impl(self.device_connected, self.vin, getattr(self, '_last_authorized', False)) + else: + self._update_device_status_impl(self.device_connected, None, + getattr(self, '_last_authorized', False)) def _log_impl(self, message, level="INFO"): """日志写入的实际实现(必须在主线程调用)""" @@ -1069,7 +1555,7 @@ finally: def clear_log(self): """清空日志""" self.log_text.delete(1.0, tk.END) - self.log("日志已清空", "INFO") + self.log(self.t('log_cleared'), "INFO") def _show_progress_impl(self, show=True, is_push=False): """显示/隐藏进度条的实际实现(必须在主线程调用)""" @@ -1144,7 +1630,10 @@ finally: if self.debug_mode: return True if not self.device_connected: - messagebox.showwarning("设备未连接", "请先连接设备并点击「检查」按钮刷新状态!") + messagebox.showwarning( + self.t('dialog_device_not_connected_title'), + self.t('dialog_device_not_connected_body') + ) return False return True @@ -1163,7 +1652,7 @@ finally: elif not devices and self.device_connected: # 设备断开连接 self.update_device_status(False) - self.log("设备已断开连接", "WARNING") + self.log(self.t('log_device_disconnected'), "WARNING") time.sleep(5) except: @@ -1181,9 +1670,9 @@ finally: try: ok, output = self.prepare_system_rw() if ok: - self.log("A07 system 分区已解锁,可以开始刷入", "SUCCESS") + self.log(self.t('log_root_ready'), "SUCCESS") else: - self.log(output or "获取权限失败", "ERROR") + self.log(output or self.t('log_root_failed'), "ERROR") finally: self.restore_selinux_mode() self.show_progress(False, is_push=False) @@ -1198,7 +1687,7 @@ finally: if has_app or has_priv or has_system_ext: ok, reason = self._validate_extracted_apks() if not ok: - self.log(f"已解压缓存无效: {reason}", "ERROR") + self.log(self.t('log_cache_invalid').format(reason=reason), "ERROR") self._clear_extracted_cache() return False return has_app or has_priv or has_system_ext @@ -1212,21 +1701,34 @@ finally: if self.system_ext_dir and self.system_ext_dir.exists(): apks.extend(self.system_ext_dir.rglob("*.apk")) if not apks: - return False, "未找到可用 APK" + return False, self.t('log_no_available_apk') zero_apks = [apk.name for apk in apks if apk.stat().st_size <= 0] if zero_apks: preview = ", ".join(zero_apks[:5]) suffix = "..." if len(zero_apks) > 5 else "" - return False, f"发现 0KB APK: {preview}{suffix}" + return False, self.t('log_zero_apk').format(preview=preview, suffix=suffix) return True, "" + def _cache_dir_path(self): + local_appdata = os.environ.get('LOCALAPPDATA', os.path.expanduser('~\\AppData\\Local')) + return Path(local_appdata) / ".cache" / "system" / ".android" / "apps_cache_A07" + def _clear_extracted_cache(self): - if self.temp_dir and self.temp_dir.exists(): - shutil.rmtree(self.temp_dir, ignore_errors=True) + cache_dir = self.temp_dir if self.temp_dir else self._cache_dir_path() + if cache_dir and cache_dir.exists(): + shutil.rmtree(cache_dir, ignore_errors=True) time.sleep(0.5) self.apps_dir = None self.priv_apps_dir = None self.system_ext_dir = None + self.temp_dir = None + + def cleanup_cache_on_exit(self): + self._clear_extracted_cache() + + def on_close(self): + self.cleanup_cache_on_exit() + self.root.destroy() def _format_extract_error(self, err_msg): text = (err_msg or "").lower() @@ -1237,14 +1739,14 @@ finally: "data error in encrypted file", "can not open encrypted archive", )): - return "解压密码错误,请重新确认 package.bin 密码" + return self.t('extract_wrong_password') if "data error" in text: - return "资源包数据错误,可能是密码错误或 package.bin 损坏" + return self.t('extract_data_error') if "headers error" in text or "unexpected end" in text: - return "资源包损坏或不完整,请检查 package.bin" + return self.t('extract_broken') if err_msg.strip(): - return f"资源准备失败: {err_msg.strip()[:300]}" - return "资源准备失败,请检查解压密码是否正确" + return self.t('extract_prepare_failed_detail').format(error=err_msg.strip()[:300]) + return self.t('extract_prepare_failed') def _decode_7z_output(self, output): """解码 7za 输出,兼容中文 Windows 控制台编码""" @@ -1257,7 +1759,7 @@ finally: def _extract_with_7za_progress(self): """运行 7za 并实时解析百分比进度""" - self.update_progress(0, 100, "资源加载中...") + self.update_progress(0, 100, self.t('progress_resource_loading')) cmd = [ self.sz, 'x', str(self.package_file), f'-p{self.extract_password}', @@ -1294,12 +1796,12 @@ finally: percent = min(100, int(matches[-1])) if percent != last_percent: last_percent = percent - self.update_progress(percent, 100, "资源加载中...") + self.update_progress(percent, 100, self.t('progress_resource_loading')) return_code = proc.wait() decoded_output = self._decode_7z_output(bytes(output)) if return_code == 0: - self.update_progress(100, 100, "资源加载完成") + self.update_progress(100, 100, self.t('progress_resource_done')) return True, decoded_output return False, decoded_output @@ -1320,15 +1822,15 @@ finally: def extract_package_silent(self): """静默解压语言包(带进度)""" if not self.package_file.exists(): - self.log(f"错误:未找到资源包 ({self.package_file})", "ERROR") + self.log(self.t('log_package_missing_path').format(path=self.package_file), "ERROR") return False if not self.extract_password: - self.log("错误:解压密码未设置", "ERROR") + self.log(self.t('log_extract_password_missing'), "ERROR") return False if not os.path.exists(self.sz): - self.log(f"错误:未找到 7za.exe ({self.sz})", "ERROR") + self.log(self.t('log_7za_missing').format(path=self.sz), "ERROR") return False try: @@ -1351,7 +1853,7 @@ finally: subprocess.run(f'attrib +h "{self.temp_dir.parent}"', shell=True, capture_output=True) subprocess.run(f'attrib +h "{self.temp_dir}"', shell=True, capture_output=True) - self.log(f"正在准备资源包...", "INFO") + self.log(self.t('log_resource_preparing'), "INFO") ok, err_msg = self._extract_with_7za_progress() if not ok: @@ -1377,7 +1879,7 @@ finally: self.system_ext_dir = system_ext_candidates[0] if not self.apps_dir and not self.priv_apps_dir and not self.system_ext_dir: - self.log("警告:未找到对应目录", "WARNING") + self.log(self.t('log_resource_dir_missing'), "WARNING") self._clear_extracted_cache() return False @@ -1386,19 +1888,24 @@ finally: system_ext_count = len(list(self.system_ext_dir.rglob("*.apk"))) if self.system_ext_dir else 0 ok, reason = self._validate_extracted_apks() if not ok: - self.log(f"解压后的资源无效: {reason}。已停止刷入,请检查解压密码或资源包。", "ERROR") + self.log(self.t('log_resource_invalid').format(reason=reason), "ERROR") self._clear_extracted_cache() return False - self.log(f"资源准备完成 (app: {apk_count}, priv-app: {priv_count}, system_ext: {system_ext_count})", "SUCCESS") + if self.debug_mode: + self.log(self.t('log_resource_ready_debug').format( + app=apk_count, priv=priv_count, system_ext=system_ext_count + ), "SUCCESS") + else: + self.log(self.t('log_resource_ready'), "SUCCESS") return True except Exception as e: if getattr(self, 'debug_mode', False): - self.log(f"资源准备失败: {str(e)}", "ERROR") + self.log(self.t('log_resource_prepare_exception').format(error=str(e)), "ERROR") import traceback self.log(traceback.format_exc(), "ERROR") else: - self.log("资源准备失败,请检查网络连接后重试", "ERROR") + self.log(self.t('log_resource_prepare_retry'), "ERROR") self._clear_extracted_cache() return False @@ -1409,18 +1916,17 @@ finally: if result.returncode == 0: self.refresh_device_status() if not self.package_file.exists(): - self.log("未找到资源包文件", "WARNING") + self.log(self.t('log_package_missing'), "WARNING") else: self._try_reuse_extracted() else: - self.log("未找到adb命令,请将ADB文件放入本目录", "ERROR") + self.log(self.t('log_adb_missing'), "ERROR") except FileNotFoundError: - self.log("未找到adb命令,请将ADB文件放入本目录", "ERROR") + self.log(self.t('log_adb_missing'), "ERROR") def _try_reuse_extracted(self): """检查磁盘上是否已有解压好的资源,有则直接复用""" - local_appdata = os.environ.get('LOCALAPPDATA', os.path.expanduser('~\\AppData\\Local')) - cache_dir = Path(local_appdata) / ".cache" / "system" / ".android" / "apps_cache_A07" + cache_dir = self._cache_dir_path() if not cache_dir.exists(): return @@ -1451,7 +1957,7 @@ finally: self.temp_dir = cache_dir ok, reason = self._validate_extracted_apks() if not ok: - self.log(f"缓存资源无效,已清理: {reason}", "WARNING") + self.log(self.t('log_cache_invalid_cleaned').format(reason=reason), "WARNING") self._clear_extracted_cache() return # self.log("已复用缓存的资源文件", "INFO") @@ -1475,7 +1981,7 @@ finally: if devices: # 只在首次连接时打日志 if not was_connected: - self.log("设备已连接", "SUCCESS") + self.log(self.t('log_device_connected'), "SUCCESS") # 获取VIN — 兼容两种 key,过滤 Android null 返回值 vin = '' @@ -1486,20 +1992,20 @@ finally: break vin = '' if vin: - self.log(f"当前车辆VIN: {vin}", "INFO") + self.log(self.t('log_current_vin').format(vin=vin), "INFO") # 验证授权 authorized = self.check_authorization(vin) self.update_device_status(True, vin, authorized) else: - self.log("无法获取VIN", "WARNING") + self.log(self.t('log_vin_unavailable'), "WARNING") self.update_device_status(True, None, False) else: if was_connected: - self.log("设备未连接", "WARNING") + self.log(self.t('log_device_not_connected'), "WARNING") self.update_device_status(False) except Exception as e: - self.log(f"刷新设备状态失败: {str(e)}", "ERROR") + self.log(self.t('log_refresh_failed').format(error=str(e)), "ERROR") finally: self._refreshing = False @@ -1508,38 +2014,57 @@ finally: def check_authorization(self, vin): """检查授权""" if self.debug_mode: - self.log("调试模式: 跳过授权验证", "WARNING") + self.log(self.t('log_debug_skip_auth'), "WARNING") return True - self.log("正在验证授权...", "INFO") + self.log(self.t('log_auth_checking'), "INFO") try: - url = f"{self.api_url}?{urlencode({'vin': vin})}" - req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) - - with urlopen(req, timeout=10) as response: - data = json.loads(response.read().decode('utf-8')) - - if data.get('authorized') == True: - self.log("✅ 授权验证通过!", "SUCCESS") - if 'data' in data and 'vehicleName' in data['data']: - self.log(f"车辆名称: {data['data']['vehicleName']}", "INFO") + authorized, vehicle_name, _ = self.query_authorization_info(vin) + if authorized: + self.log(self.t('log_auth_ok'), "SUCCESS") + if vehicle_name: + self.log(self.t('log_vehicle_name').format(vehicle_name=vehicle_name), "INFO") return True else: - self.log(f"❌ 授权验证失败", "ERROR") + self.log(self.t('log_auth_failed'), "ERROR") return False except Exception as e: - self.log(f"❌ 授权验证失败", "ERROR") + self.log(self.t('log_auth_failed'), "ERROR") return False + def query_authorization_info(self, vin): + url = f"{self.api_url}?{urlencode({'vin': vin})}" + req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + payload = data.get('data', {}) if isinstance(data, dict) else {} + vehicle_name = payload.get('vehicleName') or payload.get('vehicle_name') or "" + vehicle_name = str(vehicle_name).strip() + if data.get('authorized') is True and vehicle_name: + self.vehicle_name = vehicle_name + return data.get('authorized') is True, vehicle_name, data + def fetch_package_password(self): """从服务端获取资源包解压密码""" if not self.vin: - self.log("请先连接adb!", "ERROR") + self.log(self.t('log_connect_adb_first'), "ERROR") return False try: + vehicle_name = self.vehicle_name + if not vehicle_name: + authorized, vehicle_name, _ = self.query_authorization_info(self.vin) + if not authorized: + self.log(self.t('log_auth_failed'), "ERROR") + return False + if not vehicle_name: + self.log(self.t('log_prepare_failed_no_vehicle'), "ERROR") + return False + pwd_api_url = "https://api.changan.softwindy.cn/api/authorizations/package-key" - url = f"{pwd_api_url}?{urlencode({'vin': self.vin})}" + url = f"{pwd_api_url}?{urlencode({'vin': self.vin, 'vehicleName': vehicle_name})}" + if self.debug_mode: + self.log(f"PACKAGE KEY URL: {url}", "CMD") req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) with urlopen(req, timeout=10) as response: @@ -1547,13 +2072,17 @@ finally: if data.get('success') and 'data' in data and 'password' in data['data']: self.extract_password = data['data']['password'] + if self.debug_mode: + self.log("PACKAGE KEY: password received", "CMD") return True else: - self.log(f"数据准备失败: {data.get('message', '未知错误')}", "ERROR") + self.log(self.t('log_prepare_failed_reason').format( + reason=data.get('message', self.t('err_unknown')) + ), "ERROR") return False except Exception as e: - self.log(f"数据准备失败: {str(e)}", "ERROR") + self.log(self.t('log_prepare_failed_error').format(error=str(e)), "ERROR") return False def run_adb_command(self, command): @@ -1633,7 +2162,7 @@ finally: ok, err = self.run_adb_command(f'adb -d push "{apk_path}" {temp_apk_path}') if not ok: - return False, f"push失败: {err}" + return False, self.t('push_fail').format(error=err) self.run_adb_su_command(f"mkdir -p {self._quote_remote(target_dir)}") ok, err = self.run_adb_su_command( @@ -1643,7 +2172,7 @@ finally: self.run_adb_su_command(f"rm -rf {self._quote_remote(f'{target_dir}/oat')}") self.run_adb_su_command(f"rm -f {self._quote_remote(temp_apk_path)}") if not ok: - return False, f"cp失败: {err}" + return False, self.t('copy_fail').format(error=err) return True, "" @@ -1652,44 +2181,58 @@ finally: if not self.check_device_connection(): return if not self.vin: - messagebox.showwarning("警告", "请先刷新设备状态并获取VIN码") + messagebox.showwarning(self.t('dialog_warning'), self.t('dialog_need_vin')) return - messagebox.showwarning("⚠️ 重要提示", - "刷入过程中请勿:\n" - " ● 重启车机\n" - " ● 退出本程序\n" - " ● 关闭电脑\n\n" - "否则可能导致车机系统损坏!") + messagebox.showwarning( + self.t('dialog_flash_warning_title'), + self.t('dialog_flash_warning_body') + ) def do_push_all(): try: - self.log("开始刷入语言包,请勿断电或重启电脑和车机。", "WARNING") + self.log(self.t('log_flash_start'), "WARNING") if not self.check_authorization(self.vin): - self.run_on_ui_thread(lambda: messagebox.showerror("授权失败", "设备未授权")) + self.run_on_ui_thread( + messagebox.showerror, + self.t('dialog_auth_failed_title'), + self.t('dialog_auth_failed_body') + ) return if not self.extract_password: if not self.fetch_package_password(): - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源准备失败!")) + self.run_on_ui_thread( + messagebox.showerror, + self.t('dialog_error'), + self.t('dialog_resource_failed_body') + ) return if not self.check_package_extracted(): self.show_progress(True, is_push=False) if not self.extract_package_silent(): self.show_progress(False, is_push=False) - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源准备失败!")) + self.run_on_ui_thread( + messagebox.showerror, + self.t('dialog_error'), + self.t('dialog_resource_failed_body') + ) return self.show_progress(False, is_push=False) if (not self.apps_dir or not self.apps_dir.exists()) and \ (not self.priv_apps_dir or not self.priv_apps_dir.exists()) and \ (not self.system_ext_dir or not self.system_ext_dir.exists()): - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源目录未找到")) + self.run_on_ui_thread( + messagebox.showerror, + self.t('dialog_error'), + self.t('dialog_resource_dir_missing') + ) return self.show_progress(True, is_push=True) ok, output = self.prepare_system_rw() if not ok: - self.log(output or "system 分区解锁失败", "ERROR") + self.log(output or self.t('log_system_unlock_failed'), "ERROR") return self.run_adb_su_command('mkdir -p /data/local/tmp') @@ -1712,7 +2255,7 @@ finally: self.system_ext_dir = None self.temp_dir = None if not self.fetch_package_password() or not self.extract_package_silent(): - self.log("未找到语言包文件", "WARNING") + self.log(self.t('log_lang_pkg_missing'), "WARNING") return # 重新收集 all_apks = [] @@ -1726,7 +2269,7 @@ finally: for apk in self.system_ext_dir.rglob("*.apk"): all_apks.append((apk, "system_ext")) if not all_apks: - self.log("未找到语言包文件", "WARNING") + self.log(self.t('log_lang_pkg_missing'), "WARNING") return total = len(all_apks) @@ -1738,23 +2281,25 @@ finally: if ok: success_count += 1 else: - if "Read-only file system" in err or "system 分区仍为只读" in err: - self.log("system 分区仍为只读,请重新点击「获取权限」后再试", "ERROR") + if "Read-only file system" in err or "read-only" in err.lower() or "只读" in err: + self.log(self.t('log_readonly_system'), "ERROR") aborted = True break - self.update_progress(i, total, "正在刷入...", is_push=True) + self.update_progress(i, total, self.t('progress_flashing'), is_push=True) - self.update_progress(total, total, "刷入完成" if not aborted else "已终止", is_push=True) + self.update_progress(total, total, + self.t('progress_flash_done') if not aborted else self.t('progress_aborted'), + is_push=True) if success_count == total: - self.log(f"刷入完成,共 {total} 个语言包", "SUCCESS") + self.log(self.t('log_flash_done').format(total=total), "SUCCESS") self._refresh_package_scan_after_system_push() - self.log("语言包已刷入完成,请务必重启设备,system/priv-app 需要开机扫描后才会显示", "WARNING") + self.log(self.t('log_flash_reboot_required'), "WARNING") elif success_count > 0: - self.log(f"部分刷入成功({success_count}/{total})", "WARNING") + self.log(self.t('log_flash_partial').format(success=success_count, total=total), "WARNING") if not aborted: self._refresh_package_scan_after_system_push() - self.log("已刷入的系统应用需要重启设备后才会显示", "WARNING") + self.log(self.t('log_flash_scan_required'), "WARNING") finally: self.restore_selinux_mode() self.show_progress(False, is_push=True) @@ -1766,49 +2311,70 @@ finally: if not self.check_device_connection(): return - apk_dir = filedialog.askdirectory(title="选择包含APK文件的文件夹") + apk_dir = filedialog.askdirectory(title=self.t('dialog_select_apk_folder')) if not apk_dir: return apk_files = list(Path(apk_dir).glob("*.apk")) if not apk_files: - messagebox.showerror("错误", "所选文件夹中没有APK文件!") + messagebox.showerror(self.t('dialog_error'), self.t('dialog_no_apk_in_folder')) return - result = messagebox.askyesno("确认安装", - f"找到 {len(apk_files)} 个APK文件\n\n是否开始批量安装?") + result = messagebox.askyesno( + self.t('dialog_confirm_install_title'), + self.t('dialog_confirm_install_folder').format(count=len(apk_files)) + ) if not result: return def install(): self.show_progress(True, is_push=True) total = len(apk_files) - self.log(f"开始批量安装 {total} 个APK...", "INFO") + self.log(self.t('log_batch_install_start').format(count=total), "INFO") success_count = 0 try: self.run_adb_command('adb -d shell setprop vecentek.model 1') for i, apk_path in enumerate(apk_files, 1): - self.update_progress(i, total, "安装中...", is_push=True) + self.update_progress(i, total, self.t('progress_installing'), is_push=True) success, _ = self.run_adb_command(f'adb -d install -r "{apk_path}"') if success: success_count += 1 - self.update_progress(total, total, "安装完成", is_push=True) + self.update_progress(total, total, self.t('progress_install_done'), is_push=True) self.grant_apkpure_install_permission_if_present() if success_count == total: - self.log(f"安装完成:全部 {total} 个成功", "SUCCESS") - self.run_on_ui_thread(messagebox.showinfo, "安装完成", f"成功安装 {total} 个APK!") + self.log(self.t('log_install_all_success').format(count=total), "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t('dialog_install_done_title'), + self.t('dialog_install_all_success').format(count=total) + ) elif success_count > 0: - self.log(f"安装完成:{success_count}/{total} 成功", "WARNING") - self.run_on_ui_thread(messagebox.showwarning, "部分成功", f"成功: {success_count}\n失败: {total - success_count}") + self.log(self.t('log_install_partial').format(success=success_count, total=total), "WARNING") + self.run_on_ui_thread( + messagebox.showwarning, + self.t('dialog_install_partial_title'), + self.t('dialog_install_partial_body').format( + success=success_count, + failed=total - success_count + ) + ) else: - self.log("安装失败", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "安装失败", "所有APK安装失败!") + self.log(self.t('log_install_failed'), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('dialog_install_failed_title'), + self.t('dialog_install_all_failed') + ) except Exception as e: - self.log(f"安装过程异常: {str(e)}", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "安装失败", f"安装过程异常:{str(e)}") + self.log(self.t('log_install_exception').format(error=str(e)), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('dialog_install_failed_title'), + self.t('dialog_install_exception').format(error=str(e)) + ) finally: self.run_adb_command('adb -d shell setprop vecentek.model 0') self.show_progress(False, is_push=True) @@ -1822,8 +2388,8 @@ finally: return file_path = filedialog.askopenfilename( - title="选择APK文件", - filetypes=[("APK文件", "*.apk"), ("所有文件", "*.*")] + title=self.t('dialog_select_apk_file'), + filetypes=[(self.t('filetype_apk'), "*.apk"), (self.t('filetype_all'), "*.*")] ) if not file_path: @@ -1831,18 +2397,18 @@ finally: def install(): self.show_progress(True, is_push=True) - self.update_progress(50, 100, f"安装中", is_push=True) + self.update_progress(50, 100, self.t('progress_installing'), is_push=True) try: self.run_adb_command('adb -d shell setprop vecentek.model 1') success, _ = self.run_adb_command(f'adb -d install -r "{file_path}"') - self.update_progress(100, 100, f"完成", is_push=True) + self.update_progress(100, 100, self.t('progress_done'), is_push=True) self.grant_apkpure_install_permission_if_present() if success: - self.log("✓ 安装成功", "SUCCESS") + self.log(self.t('log_single_install_success'), "SUCCESS") else: - self.log("✗ 安装失败", "ERROR") + self.log(self.t('log_single_install_failed'), "ERROR") except Exception as e: - self.log(f"安装过程异常: {str(e)}", "ERROR") + self.log(self.t('log_install_exception').format(error=str(e)), "ERROR") finally: self.run_adb_command('adb -d shell setprop vecentek.model 0') self.show_progress(False, is_push=True) @@ -1863,7 +2429,7 @@ finally: # 创建弹窗 popup = tk.Toplevel(self.root) - popup.title("快捷语言设置") + popup.title(self.t('quick_lang_title')) popup.geometry("520x320") popup.configure(bg=self.colors['bg_dark']) popup.resizable(False, False) @@ -1877,13 +2443,13 @@ finally: popup.grab_set() # 标题 - header = tk.Label(popup, text="选择目标语言", + header = tk.Label(popup, text=self.t('quick_lang_header'), font=('Microsoft YaHei', 13, 'bold'), fg=self.colors['accent'], bg=self.colors['bg_dark']) header.pack(pady=(15, 10)) - hint = tk.Label(popup, text="点击按钮即可将系统语言切换为对应语言,重启后生效", + hint = tk.Label(popup, text=self.t('quick_lang_hint'), font=('Microsoft YaHei', 9), fg=self.colors['text_secondary'], bg=self.colors['bg_dark']) @@ -1891,14 +2457,14 @@ finally: # 语言列表:(显示名, locale_code) languages = [ - ("🇨🇳 中文", "zh-CN"), - ("英 English", "en-US"), - ("俄 Русский", "ru-RU"), - ("法 Français", "fr-FR"), - ("西 Español", "es-ES"), - ("葡 Português", "pt-BR"), - ("意 Italiano", "it-IT"), - ("阿 العربية", "ar-SA"), + (self.t('quick_lang_zh'), "zh-CN"), + (self.t('quick_lang_en'), "en-US"), + (self.t('quick_lang_ru'), "ru-RU"), + (self.t('quick_lang_fr'), "fr-FR"), + (self.t('quick_lang_es'), "es-ES"), + (self.t('quick_lang_pt'), "pt-BR"), + (self.t('quick_lang_it'), "it-IT"), + (self.t('quick_lang_ar'), "ar-SA"), ] # 创建按钮容器 @@ -1933,7 +2499,7 @@ finally: sep = tk.Frame(popup, bg=self.colors['border'], height=1) sep.pack(fill=tk.X, padx=20, pady=(8, 6)) - sys_btn = tk.Button(popup, text="⚙️ 打开系统语言设置(手动选择)", + sys_btn = tk.Button(popup, text=self.t('quick_lang_system_button'), command=lambda: self._open_sys_and_close(popup), font=('Microsoft YaHei', 9), fg=self.colors['text_secondary'], @@ -1947,21 +2513,25 @@ finally: popup.destroy() def do_set(): - self.log(f"正在设置系统语言为: {language_name} ({locale_code})", "INFO") + self.log(self.t('log_setting_language').format(language=language_name, locale=locale_code), "INFO") success, output = self.run_adb_command( f'adb -d shell settings put system system_locales {locale_code}' ) if success: - self.log(f"✓ 语言已设置为 {language_name}", "SUCCESS") + self.log(self.t('log_language_set_success').format(language=language_name), "SUCCESS") self.run_on_ui_thread( messagebox.showinfo, - "设置成功", - f"系统语言已设置为 {language_name}\n\n⚠️ 请重启设备使其生效。" + self.t('dialog_language_success_title'), + self.t('dialog_language_success_body').format(language=language_name) ) else: - self.log(f"✗ 语言设置失败: {output}", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "设置失败", f"语言设置失败!\n\n{output}") + self.log(self.t('log_language_set_failed').format(error=output), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('dialog_language_failed_title'), + self.t('dialog_language_failed_body').format(error=output) + ) threading.Thread(target=do_set, daemon=True).start() @@ -1986,29 +2556,27 @@ finally: """重启设备""" if not self.check_device_connection(): return - if messagebox.askyesno("确认重启", "确定要重启设备吗?"): + if messagebox.askyesno(self.t('dialog_confirm_reboot_title'), self.t('dialog_confirm_reboot_body')): def do_reboot(): ok, output = self.run_adb_shell('reboot') if ok: - self.log("设备正在重启...", "INFO") + self.log(self.t('log_rebooting'), "INFO") self.update_device_status(False) elif output: - self.log(f"重启失败: {output}", "ERROR") + self.log(self.t('log_reboot_failed').format(error=output), "ERROR") threading.Thread(target=do_reboot, daemon=True).start() def clear_extract_cache(self): """清理解压缓存目录。""" - local_appdata = os.environ.get('LOCALAPPDATA', os.path.expanduser('~\\AppData\\Local')) - cache_dir = Path(local_appdata) / ".cache" / "system" / ".android" / "apps_cache_A07" + cache_dir = self._cache_dir_path() result = messagebox.askyesno( - "确认清理缓存", - f"将删除本地解压缓存目录:\n{cache_dir}\n\n" - "下次刷入会重新解压 package.bin,是否继续?" + self.t('dialog_clear_cache_title'), + self.t('dialog_clear_cache_body').format(cache_dir=cache_dir) ) if not result: - self.log("已取消清理缓存", "INFO") + self.log(self.t('log_clear_cache_cancelled'), "INFO") return def clear_cache(): @@ -2021,39 +2589,71 @@ finally: self.priv_apps_dir = None self.system_ext_dir = None self.temp_dir = None - self.log("解压缓存已清理", "SUCCESS") - self.run_on_ui_thread(messagebox.showinfo, "清理完成", "解压缓存已清理。") + self.log(self.t('log_cache_cleared'), "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t('dialog_cache_cleared_title'), + self.t('dialog_cache_cleared_body') + ) except Exception as e: - self.log(f"清理缓存失败: {e}", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "清理失败", f"清理缓存失败:{e}") + self.log(self.t('log_cache_clear_failed').format(error=e), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('dialog_cache_clear_failed_title'), + self.t('dialog_cache_clear_failed_body').format(error=e) + ) finally: self.show_progress(False, is_push=False) threading.Thread(target=clear_cache, daemon=True).start() + def is_placeholder_vin(self, value): + return value in (self.T['zh']['vin_placeholder'], self.T['en']['vin_placeholder']) + + def is_placeholder_auth_code(self, value): + return value in (self.T['zh']['auth_code_placeholder'], self.T['en']['auth_code_placeholder']) + def _on_vin_input_focus_in(self, event): """输入框获得焦点时清除占位符""" - if self.vin_input.get() == "请输入VIN": + if self.is_placeholder_vin(self.vin_input.get()): self.vin_input.delete(0, tk.END) self.vin_input.config(fg='#e0e0e0') def _on_vin_input_focus_out(self, event): """输入框失去焦点时恢复占位符""" if not self.vin_input.get(): - self.vin_input.insert(0, "请输入VIN") + self.vin_input.insert(0, self.t('vin_placeholder')) self.vin_input.config(fg='#636e72') - def query_password_by_vin(self): - """通过VIN查询密码""" - vin = self.vin_input.get().strip() - if not vin: - messagebox.showwarning("提示", "请输入VIN码") + def _on_auth_code_focus_in(self, event): + """输入框获得焦点时清除占位符""" + if self.is_placeholder_auth_code(self.auth_code_input.get()): + self.auth_code_input.delete(0, tk.END) + self.auth_code_input.config(fg='#e0e0e0') + + def _on_auth_code_focus_out(self, event): + """输入框失去焦点时恢复占位符""" + if not self.auth_code_input.get(): + self.auth_code_input.insert(0, self.t('auth_code_placeholder')) + self.auth_code_input.config(fg='#636e72') + + def query_login_password_by_key(self): + """通过 VIN 和授权码查询登录密码。""" + vin_text = self.vin_input.get().strip() + auth_code = self.auth_code_input.get().strip() + if (not vin_text or self.is_placeholder_vin(vin_text) or + not auth_code or self.is_placeholder_auth_code(auth_code)): + messagebox.showwarning(self.t('dialog_info'), self.t('key_need_input')) return + self._set_pwd_result('key_querying', 'warning') + def do_query(): try: - api_url = "https://api.changan.softwindy.cn/api/authorizations/generate-password-by-vin" - url = f"{api_url}?{urlencode({'vin': vin})}" + api_url = "https://api.changan.softwindy.cn/api/authorizations/a07-dial-password" + url = f"{api_url}?{urlencode({'vin': vin_text, 'display_code': auth_code})}" + if self.debug_mode: + self.log(f"A07 DIAL PASSWORD URL: {url}", "CMD") req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) with urlopen(req, timeout=10) as response: @@ -2061,29 +2661,39 @@ finally: def update_ui(): if data.get('success'): - pwd = data.get('data', {}).get('devicePassword', '未知') - self.pwd_result_label.config( - text=f"密码: *#{pwd}#*", - fg=self.colors['success'] - ) - self.log(f"密码查询成功 VIN={vin} -> {pwd}", "SUCCESS") - else: - msg = data.get('message', '查询失败') - self.pwd_result_label.config( - text=f"失败: {msg}", - fg=self.colors['error'] - ) - self.log(f"密码查询失败: {msg}", "ERROR") + password = data.get('data', {}).get('password') + if password: + self._set_pwd_result('key_query_success', 'success', password=password) + self.log(self.t('log_key_success'), "SUCCESS") + return + message = data.get('message') or self.t('key_request_failed') + self._set_pwd_result('key_query_failed', 'error', message=message) + self.log(self.t('log_key_failed').format(message=message), "ERROR") self.run_on_ui_thread(update_ui) + except HTTPError as e: + try: + error_body = e.read().decode('utf-8', errors='replace') + error_data = json.loads(error_body) if error_body else {} + message = error_data.get('message') or self.t('key_request_failed') + except Exception: + message = self.t('key_request_failed') + + def update_ui_http_error(): + self._set_pwd_result('key_query_failed', 'error', message=message) + self.log(self.t('log_key_failed').format(message=message), "ERROR") + + self.run_on_ui_thread(update_ui_http_error) + except Exception as e: def update_ui_error(): - self.pwd_result_label.config( - text=f"请求失败", - fg=self.colors['error'] - ) - self.log(f"密码查询请求失败: {str(e)}", "ERROR") + self._set_pwd_result('key_request_failed', 'error') + if self.debug_mode: + self.log(self.t('log_key_request_failed_detail').format(error=str(e)), "ERROR") + else: + self.log(self.t('key_request_failed'), "ERROR") + self.run_on_ui_thread(update_ui_error) threading.Thread(target=do_query, daemon=True).start() @@ -2092,27 +2702,62 @@ finally: """切换调试模式(隐藏入口,Ctrl+Shift+D)""" if self.debug_mode: self.debug_mode = False - self.log("调试模式已关闭", "WARNING") - self.status_text.config(text="就绪") + self.log(self.t('log_debug_disabled'), "WARNING") + self.status_text.config(text=self.t('status_ready')) self.refresh_device_status() return - pwd = simpledialog.askstring("调试模式", "请输入调试密码:", show='*', parent=self.root) - if pwd == "zxch5200": - self.debug_mode = True - self.update_device_status(True, "", True) - self.log("🔧 调试模式已开启 - 跳过授权和设备校验,显示详细ADB日志", "WARNING") - self.status_text.config(text="🔧 调试模式") - elif pwd is not None: - messagebox.showwarning("错误", "密码错误") + pwd = simpledialog.askstring(self.t('debug_title'), self.t('debug_prompt'), show='*', parent=self.root) + if not pwd: + return + + def verify(): + valid, message = self.verify_debug_mode_password(pwd) + + def apply_result(): + if valid: + self.debug_mode = True + self.update_device_status(True, "", True) + self.log(self.t('log_debug_enabled'), "WARNING") + self.status_text.config(text=self.t('debug_status')) + else: + messagebox.showwarning(self.t('dialog_error'), message or self.t('debug_password_wrong')) + + self.run_on_ui_thread(apply_result) + + threading.Thread(target=verify, daemon=True).start() + + def _post_json(self, url, payload, timeout=10): + body = json.dumps(payload, ensure_ascii=False).encode('utf-8') + req = Request( + url, + data=body, + method='POST', + headers={ + 'Content-Type': 'application/json', + 'User-Agent': 'Mozilla/5.0', + } + ) + with urlopen(req, timeout=timeout) as response: + return json.loads(response.read().decode('utf-8')) + + def verify_debug_mode_password(self, password): + try: + data = self._post_json(self.debug_password_api_url, {"password": password}) + if data.get('success') is True: + return True, "" + return False, data.get('message') or self.t('debug_password_wrong') + except Exception as e: + return False, str(e) def _debug_test_extract(self, event=None): """调试模式下仅测试资源包解压,不检查设备和授权""" if not self.debug_mode: - messagebox.showwarning("调试模式", "请先按 Ctrl+Shift+D 开启调试模式") + messagebox.showwarning(self.t('debug_title'), self.t('debug_extract_need_enable')) return - pwd = simpledialog.askstring("测试解压", "请输入 package.bin 解压密码:", show='*', parent=self.root) + pwd = simpledialog.askstring(self.t('debug_extract_title'), self.t('debug_extract_prompt'), + show='*', parent=self.root) if not pwd: return @@ -2125,15 +2770,19 @@ finally: try: self.show_progress(True, is_push=False) if self.extract_package_silent(): - self.log("测试解压成功", "SUCCESS") + self.log(self.t('log_debug_extract_success'), "SUCCESS") self.run_on_ui_thread( messagebox.showinfo, - "测试解压成功", - f"资源已解压到:\n{self.temp_dir}" + self.t('debug_extract_success_title'), + self.t('debug_extract_success_body').format(path=self.temp_dir) ) else: - self.log("测试解压失败", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "测试解压失败", "请查看日志中的 7za 输出") + self.log(self.t('log_debug_extract_failed'), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('debug_extract_failed_title'), + self.t('debug_extract_failed_body') + ) finally: self.show_progress(False, is_push=False) self.extract_password = old_password @@ -2149,27 +2798,34 @@ finally: return file_paths = filedialog.askopenfilenames( - title="选择APK文件", - filetypes=[("APK文件", "*.apk"), ("所有文件", "*.*")] + title=self.t('dialog_select_apk_file'), + filetypes=[(self.t('filetype_apk'), "*.apk"), (self.t('filetype_all'), "*.*")] ) if not file_paths: return count = len(file_paths) - result = messagebox.askyesno("确认安装", f"已选择 {count} 个APK文件\n\n是否开始安装?") + result = messagebox.askyesno( + self.t('dialog_confirm_install_title'), + self.t('dialog_confirm_install_folder').format(count=count) + ) if not result: return def install(): self.show_progress(True, is_push=True) - self.log(f"开始安装 {count} 个APK...", "INFO") + self.log(self.t('log_batch_install_start').format(count=count), "INFO") success_count = 0 try: self.run_adb_command('adb -d shell setprop vecentek.model 1') for i, file_path in enumerate(file_paths, 1): apk_name = Path(file_path).stem - self.update_progress(i, count, f"安装中 ({apk_name})", is_push=True) + self.update_progress( + i, count, + self.t('progress_installing_apk').format(apk=apk_name), + is_push=True + ) success, _ = self.run_adb_command(f'adb -d install -r "{file_path}"') if success: self.log(f"✓ {apk_name}.apk", "SUCCESS") @@ -2177,21 +2833,40 @@ finally: else: self.log(f"✗ {apk_name}.apk", "ERROR") - self.update_progress(count, count, "安装完成", is_push=True) + self.update_progress(count, count, self.t('progress_install_done'), is_push=True) self.grant_apkpure_install_permission_if_present() if success_count == count: - self.log(f"安装完成:全部 {count} 个成功", "SUCCESS") - self.run_on_ui_thread(messagebox.showinfo, "安装完成", f"成功安装 {count} 个APK!") + self.log(self.t('log_install_all_success').format(count=count), "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t('dialog_install_done_title'), + self.t('dialog_install_all_success').format(count=count) + ) elif success_count > 0: - self.log(f"安装完成:{success_count}/{count} 成功", "WARNING") - self.run_on_ui_thread(messagebox.showwarning, "部分成功", f"成功: {success_count}\n失败: {count - success_count}") + self.log(self.t('log_install_partial').format(success=success_count, total=count), "WARNING") + self.run_on_ui_thread( + messagebox.showwarning, + self.t('dialog_install_partial_title'), + self.t('dialog_install_partial_body').format( + success=success_count, + failed=count - success_count + ) + ) else: - self.log("安装失败", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "安装失败", "所有APK安装失败!") + self.log(self.t('log_install_failed'), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('dialog_install_failed_title'), + self.t('dialog_install_all_failed') + ) except Exception as e: - self.log(f"安装过程异常: {str(e)}", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "安装失败", f"安装过程异常:{str(e)}") + self.log(self.t('log_install_exception').format(error=str(e)), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('dialog_install_failed_title'), + self.t('dialog_install_exception').format(error=str(e)) + ) finally: self.run_adb_command('adb -d shell setprop vecentek.model 0') self.show_progress(False, is_push=True) @@ -2214,9 +2889,9 @@ finally: failed.append(f"user {user_id}: {output}") if not failed: - self.log("已授予 APKPure 安装应用权限", "SUCCESS") + self.log(self.t('log_apkpure_permission_ok'), "SUCCESS") else: - self.log(f"APKPure 安装应用权限部分失败: {'; '.join(failed)}", "WARNING") + self.log(self.t('log_apkpure_permission_partial').format(details='; '.join(failed)), "WARNING") def run(self): """运行程序""" @@ -2225,17 +2900,20 @@ finally: def main(): """主函数""" if sys.version_info < (3, 6): - print("错误:需要Python 3.6或更高版本") + print(startup_t('python_version_error')) sys.exit(1) try: app = ADKAPKGUI() app.run() except Exception as e: - print(f"启动失败: {e}") + print(startup_t('startup_failed_console').format(error=e)) import traceback traceback.print_exc() - messagebox.showerror("错误", f"程序启动失败: {e}") + messagebox.showerror( + startup_t('startup_failed_title'), + startup_t('startup_failed_dialog').format(error=e) + ) if __name__ == "__main__": main() diff --git a/A07/app.ico b/A07/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..44baf2ed6a1d6889b185c86b9851f87cdc10917b GIT binary patch literal 119072 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 l6zza-00006Nklnul cd /d "%~dp0" set "ROOT=%~dp0.." -set "TOOLS=%ROOT%\tools" -set "NAME=Qiyuan_07_Multi-lan-installer" -set "SRC=Qiyuan_A07_Multi-lan-installer.py" -title %NAME% - Build +set "TOOLS=%ROOT%\tools" +set "NAME=Qiyuan_07_Multi-lan-installer" +set "SRC=Qiyuan_A07_Multi-lan-installer.py" +set "ICON=%~dp0app.ico" +title %NAME% - Build echo ============================================================ echo %NAME% - Cython Build @@ -13,13 +14,18 @@ echo ============================================================ echo. where python >nul 2>&1 -if errorlevel 1 ( - echo [ERROR] Python not found - pause - exit /b -) -for /f "delims=" %%i in ('where python') do set PY=%%i -echo Python: %PY% +if errorlevel 1 ( + echo [ERROR] Python not found + pause + exit /b +) +if not exist "%ICON%" ( + echo [ERROR] app.ico not found in A07 folder: %ICON% + pause + exit /b +) +for /f "delims=" %%i in ('where python') do set PY=%%i +echo Python: %PY% echo [1/6] Installing deps... %PY% -m pip install pyinstaller cython pyzipper -q @@ -58,14 +64,14 @@ copy "%PYD%" _core.pyd >nul %PY% -c "open('launcher.py','w').write('# -*- coding: utf-8 -*-\nfrom _core import main\nmain()\n')" echo [4/6] Copy resources... -copy "%TOOLS%\adb.exe" . >nul -copy "%TOOLS%\AdbWinApi.dll" . >nul -copy "%TOOLS%\AdbWinUsbApi.dll" . >nul -copy "%TOOLS%\7za.exe" . >nul -if exist "%ROOT%\app.ico" copy "%ROOT%\app.ico" . >nul - -echo [5/6] PyInstaller... -%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ROOT%\app.ico" --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin launcher.py +copy "%TOOLS%\adb.exe" . >nul +copy "%TOOLS%\AdbWinApi.dll" . >nul +copy "%TOOLS%\AdbWinUsbApi.dll" . >nul +copy "%TOOLS%\7za.exe" . >nul +copy "%ICON%" . >nul + +echo [5/6] PyInstaller... +%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ICON%" --add-data "%ICON%;." --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin launcher.py if errorlevel 1 ( cd .. echo [ERROR] PyInstaller failed @@ -79,9 +85,9 @@ rmdir /s /q build 2>nul cd .. goto :DONE -:NORMAL -echo [INFO] Normal PyInstaller... -%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ROOT%\app.ico" --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin %SRC% +:NORMAL +echo [INFO] Normal PyInstaller... +%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ICON%" --add-data "%ICON%;." --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin %SRC% :DONE echo. diff --git a/AGENTS.md b/AGENTS.md index 36d2e55..739dab4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -10,14 +10,17 @@ Most tools are single-file tkinter apps with the same rough architecture: GUI, V | Tool file | Vehicle / purpose | Window title | Pack script | |-----------|-------------------|--------------|-------------| -| `Q07/app.py` | 启源Q07 | 长安语言安装工具 | `Q07/pack_q07.bat` | +| `Q07/Qiyuan_Q07-multi-lan-installer.py` | 启源Q07 | 适用于启源Q07多语言安装 | `Q07/pack_q07.bat` | | `S05/S05.py` | 深蓝S05 original | 深蓝S05多语言安装 | `S05/pack_s05.bat` | | `S05/S05_fixed.py` | 深蓝S05 fixed/experimental copy | 长安语言安装工具 | `S05/pack_s05_fixed.bat` | | `X5plus/X5plusTool.py` | X5plus | 适用于X5plus多语言安装 | `X5plus/pack_x5plus.bat` | -| `Yidong/app-install.py` | 长安逸动通用 | 长安语言刷入工具 | `Yidong/pack_common.bat` | +| `CS55-Q05/CS55-Q05_Installer.py` | CS55Plus/Q05 通用 | CS55Plus/Q05 语言刷入工具 | `CS55-Q05/pack_cs55_q05.bat` | +| `CS75Pro/CS75Pro_Installer.py` | CS75Pro | CS75Pro 语言刷入工具 | `CS75Pro/pack_cs75pro.bat` | | `Yidong/app-yidong.py` | 长安逸动 | 长安逸动语言刷入工具 | `Yidong/pack_yidong.bat` | | `UNIZ/UNIZ.py` | UNI-Z file pusher | UNI-Z语言文件推送工具 | `UNIZ/pack_uniz.bat` | -| `Mazda-EZ60/Mazda-EZ60.py` | Mazda-EZ60 OS 1.2 | Mazda-EZ60_OS-1.2适用 | `Mazda-EZ60/pack_mazda_ez60.bat` | +| `UNI-T/UNI-T-multi-lan-installer.py` | UNI-T | 适用于UNI-T多语言安装 | `UNI-T/pack_unit.bat` | +| `Mazda-EZ60/Mazda-EZ60_1.2.py` | Mazda-EZ60 OS 1.2 | Mazda-EZ60_OS-1.2适用 | `Mazda-EZ60/pack_mazda_ez60_1.2.bat` | +| `Mazda-EZ60/Mazda_EZ60-Language-Install_v1.0.py` | Mazda-EZ60 OS 1.0 | 马自达EZ60刷机工具_OS-1.0 | `Mazda-EZ60/pack_mazda_ez60_1.0.bat` | | `Q05-Lidar/Q05-Lidar_Installer.py` | Q05_Lidar permission/bootstrap + language installer | Q05_Lidar | `Q05-Lidar/pack_q05_lidar.bat` | ## Project Structure @@ -26,8 +29,11 @@ Most tools are single-file tkinter apps with the same rough architecture: GUI, V ├── Q07/ # Q07 script, pack scripts, ignored build outputs ├── S05/ # S05 original and fixed copy ├── X5plus/ # X5plus tool -├── Yidong/ # common/yidong tools +├── CS55-Q05/ # CS55Plus/Q05 common installer and icon +├── CS75Pro/ # CS75Pro installer copied from CS55-Q05 flow +├── Yidong/ # Yidong-specific tool ├── UNIZ/ # UNI-Z file pusher +├── UNI-T/ # UNI-T installer cloned from Q07 flow ├── Mazda-EZ60/ # Mazda-EZ60 tool ├── A07/ # Qiyuan A07 tool ├── Q05-Lidar/ # Q05_Lidar tool plus resource.dat/tools @@ -54,30 +60,33 @@ Most tools are single-file tkinter apps with the same rough architecture: GUI, V - `run_adb_command(command)` handles normal ADB commands such as `adb devices`, `adb push`, and non-shell install calls. - `run_adb_shell(shell_command)` exists in the 逸动-family tools and Mazda copy; it shells into the device and automatically sends password `adb36987`. -- All `adb shell` operations in `Yidong/app-install.py`, `Yidong/app-yidong.py`, and `Mazda-EZ60/Mazda-EZ60.py` should go through `run_adb_shell()`. +- All `adb shell` operations in `CS55-Q05/CS55-Q05_Installer.py`, `CS75Pro/CS75Pro_Installer.py`, `Yidong/app-yidong.py`, and `Mazda-EZ60/Mazda-EZ60_1.2.py` should go through `run_adb_shell()`. - `UNIZ/UNIZ.py` must not use `adb shell`; it only checks devices and pushes APKs to `/storage/emulated/0/Download/`. - Standard auth flow uses: - `auth-check?vin=...` for authorization. - `package-key?vin=...` for `package.bin` extraction password. - VIN keys: - Q07/S05/X5plus: `ca_vin_info` or `VIN`. + - UNI-T: try `persist.vendor.car.VIN`, then `settings get global VIN`, then legacy system VIN keys. - 逸动/Mazda: `settings get system ca.car.vin` via auto-password shell. - UNI-Z: user manually enters VIN. ## Package Extraction -- `package.bin` is extracted under `%LOCALAPPDATA%\.cache\system\.android\...`. +- `package.bin`-style encrypted resources are extracted under `%LOCALAPPDATA%\.cache\system\.android\...`. - Current cache directories: - - `Q07/app.py` -> `apps_cache_Q07` + - `Q07/Qiyuan_Q07-multi-lan-installer.py` -> `apps_cache_Q07` - `S05/S05.py` / `S05/S05_fixed.py` -> `apps_cache_S05` - `X5plus/X5plusTool.py` -> `apps_cache_X5plus` - - `Yidong/app-install.py` -> `apps_cache_common` + - `CS55-Q05/CS55-Q05_Installer.py` -> `apps_cache_common` + - `CS75Pro/CS75Pro_Installer.py` -> `apps_cache_CS75Pro` - `Yidong/app-yidong.py` -> `apps_cache_yidong` - `UNIZ/UNIZ.py` -> `apps_cache_UNIZ` - - `Mazda-EZ60/Mazda-EZ60.py` -> `apps_cache_Mazda_EZ60` + - `UNI-T/UNI-T-multi-lan-installer.py` -> `apps_cache_UNI_T` + - `Mazda-EZ60/Mazda-EZ60_1.2.py` -> `apps_cache_Mazda_EZ60` - Shared binaries are managed under root `tools/`: `adb.exe`, `AdbWinApi.dll`, `AdbWinUsbApi.dll`, `fastboot.exe`, and `7za.exe`. Vehicle pack scripts in subfolders should copy from `%ROOT%\tools`, not from each vehicle folder. - For progress display, detect support for `-bsp1` by checking for `-bs{o|e|p}` in 7za help output. -- If `Incorrect command line` appears, retry with the basic compatible command: `x package.bin -pPASSWORD -oDIR -y`. +- If `Incorrect command line` appears, retry with the basic compatible command: `x PACKAGE -pPASSWORD -oDIR -y`. - Decode 7za output with GBK first, then UTF-8 fallback. - 7za progress must parse streamed output cumulatively. Do not read one byte and regex that single byte; percentages such as `42%` span multiple bytes and will otherwise jump from 0 to 100. - User-facing resource extraction text should say `资源准备中` / `Preparing resources`, not `资源解压` / `Extracting package`, unless the UI is an explicit debug test. @@ -94,6 +103,21 @@ Most tools are single-file tkinter apps with the same rough architecture: GUI, V ## Model-Specific Behavior +### Q07 + +- Main script is `Q07/Qiyuan_Q07-multi-lan-installer.py`; keep `Q07/app.py` retired unless explicitly asked to restore the old name. +- Q07 release resource package is `Q07_package.bin`, not shared root `package.bin`. The tool may keep a compatibility fallback for old local `package.bin`, but user-facing errors/logs should name `Q07_package.bin`. +- Q07 cache directory is `%LOCALAPPDATA%\.cache\system\.android\apps_cache_Q07`. Clean it before extraction, on normal window close, and through `atexit`. +- Q07 `package-key` requests must include both `vin` and `vehicleName`; `vehicleName` comes from `auth-check` (`data.vehicleName`) and should be cached when available. +- Q07 `安装App` must also verify the current VIN is authorized before installing selected APK files. Debug mode may skip this check; normal mode must not. +- Q07 debug mode uses `Ctrl+Shift+D` and verifies the password through `POST /api/authorizations/verify-debug-mode-password`; do not restore hardcoded local debug passwords. +- Q07 debug mode exposes `解压测试` / `Ctrl+Shift+E`; it fetches `package-key` and extracts `Q07_package.bin`. The success log should only say `资源准备完成` / `Resources ready`, not app or priv-app counts. +- Q07 normal logs should keep the resource structure black-box: do not show app/priv-app counts or the current APK name during `刷入语言包`. `安装App` may show the selected APK filename currently being installed. +- Q07 UI has only language switching. Do not reintroduce dark/light theme switching or company/about subtitle text. +- Q07 window/taskbar icon should use `Q07/app.ico` at runtime: call `iconbitmap`, set a Windows AppUserModelID before creating `Tk()`, and set big/small Win32 window icons when possible. The pack scripts must include `--icon="%ICON%"` and `--add-data "%ICON%;."`. +- Q07 pack scripts (`Q07/pack_q07.bat` and `Q07/pack.bat`) are Cython-only. If Cython fails or no `_core*.pyd` is generated, stop with an error; do not fallback to normal PyInstaller. +- Q07 pack scripts use ASCII output name `Qiyuan_Q07-multi-lan-installer`, compile `Qiyuan_Q07-multi-lan-installer.py` into `_core.pyd`, use a tiny launcher, and bundle `adb.exe`, `AdbWinApi.dll`, `AdbWinUsbApi.dll`, `7za.exe`, and `Q07/app.ico`. + ### S05 - Keep `S05/S05.py` as original unless explicitly asked. @@ -112,12 +136,60 @@ Most tools are single-file tkinter apps with the same rough architecture: GUI, V - Language selection: RU/FR/ES/EN. Only the selected language Settings APK is pushed; other language Settings APKs are skipped silently. - Hidden debug mode: `Ctrl+Shift+D`, password `zxch5200`, logs full ADB/7za/API details. +### UNI-T + +- Main script is `UNI-T/UNI-T-multi-lan-installer.py`; it is cloned from the Q07 installer flow and preserves Q07-style VIN authorization, package extraction, system app push/install logic, language settings, debug password verification, and Cython-only packaging. +- UNI-T VIN should be read with fallbacks: `adb shell getprop persist.vendor.car.VIN`, then `settings get global VIN`, then legacy `settings get system VIN` / `settings get system ca_vin_info`. On the connected S202_MCA device, the live VIN is currently in `settings global VIN`. +- UNI-T `获取权限` must run `adb shell setenforce 0` before `adb root` and `adb remount`; without this pre-step, `adb root` may not open on this vehicle. +- UNI-T release resource package is `UNI-T_package.bin`, with legacy `package.bin` fallback only for local compatibility. User-facing errors/logs should name `UNI-T_package.bin`. +- UNI-T cache directory is `%LOCALAPPDATA%\.cache\system\.android\apps_cache_UNI_T`. Clean it before extraction, on normal window close, and through `atexit`. +- Before UNI-T `刷入语言包` pushes files, run `pm disable-user --user 10` for: `com.wt.roadbook`, `com.thunder.carplay`, `com.tencent.wecarmas`, `com.tencent.qqlive.audiobox`, `com.incall.apps.softmanager`, `com.changan.appmarket`, and `com.bytedance.byteautoservice`. +- UNI-T package root may contain `CarSystemUI.apk`; during `刷入语言包`, push it separately and copy it with `cp -f` to `/system/system_ext/priv-app/CarSystemUI/CarSystemUI.apk`. +- UNI-T `package-key` requests must include both `vin` and `vehicleName`; `vehicleName` comes from `auth-check` (`data.vehicleName`) and should be cached when available. +- `UNI-T/pack_unit.bat` is Cython-only. If Cython fails or no `_core*.pyd` is generated, stop the build; do not fallback to normal PyInstaller. + +### CS55-Q05 + +- CS55Plus/Q05 common installer lives in `CS55-Q05/CS55-Q05_Installer.py`, with icon `CS55-Q05/cs55-q05.ico` and pack script `CS55-Q05/pack_cs55_q05.bat`. +- `pack_cs55_q05.bat` is Cython-only. If Cython fails or no `_core*.pyd` is generated, stop the build; do not fall back to normal PyInstaller. +- `刷入语言包` must verify VIN authorization before resource flashing. After authorization passes and before APK flashing, run both `pm disable-user ` and `pm uninstall -k --user 0 ` through `run_adb_shell()` for `com.wtcl.electronicdirections`, `com.tinnove.netease.music`, and `com.changan.appmarket`. +- All CS55/Q05 language package and manual APK installs should use `pm install -d -f -r ` through `run_adb_shell()` so older/different app versions can install reliably. +- After CS55/Q05 language flashing or APK installation, do not reset `setprop vecentek.model` back to `0`; keep it at `1` so users can continue installing APKs manually. +- Normal `刷入语言包` logs should not reveal APK names; show generic current/total progress only. `安装App` may show each APK result and current APK name. + +### CS75Pro + +- CS75Pro installer lives in `CS75Pro/CS75Pro_Installer.py`, copied from the CS55-Q05 flow, with icon `CS75Pro/cs75pro.ico` and pack script `CS75Pro/pack_cs75pro.bat`. +- Keep the CS75Pro flashing flow aligned with CS55-Q05 unless explicitly requested. +- CS75Pro cache directory is `%LOCALAPPDATA%\.cache\system\.android\apps_cache_CS75Pro`. +- CS75Pro `package-key` requests must include both `vin` and `vehicleName`, but `vehicleName` is intentionally hardcoded to `CS75Pro`. This is an explicit exception to the general auth-returned `vehicleName` rule; do not replace it with `auth-check` `data.vehicleName` in future edits. +- Before CS75Pro `刷入语言包`, run `pm disable-user ` first and then `pm uninstall -k --user 0 ` through `run_adb_shell()` for `com.wtcl.electronicdirections`, `com.tinnove.netease.music`, `com.incall.apps.softmanager`, and `com.tencent.qqlive.audiobox`. +- CS75Pro language package installs should use `pm install -d -f -r ` through `run_adb_shell()`. + ### Mazda-EZ60 -- Based on `Yidong/app-install.py` / 逸动 flow. +- Based on `CS55-Q05/CS55-Q05_Installer.py` / 逸动 flow. - Uses auto-password shell (`adb36987`) for VIN reads, `pm install`, overlay enable, disable commands, settings, and reboot. - Installs APKs from extracted `apps` via push to `/data/local/tmp` then `pm install -r -d`. -- `Mazda-EZ60/Mazda-EZ60.py` should show 7za extraction progress with stream parsing. +- `Mazda-EZ60/Mazda-EZ60_1.2.py` should show 7za extraction progress with stream parsing. +- Mazda 1.2 resource package is `package_voice-assistant.bin`, not the old `package.bin`; `package-key` still supplies the extraction password. +- Mazda 1.2 package cache is `%LOCALAPPDATA%\.cache\system\.android\apps_cache_Mazda_EZ60`; clean it on startup, before extraction, on normal window close, and through `atexit`. +- Mazda `package-key` requests must include both `vin` and `vehicleName`; cache `data.vehicleName` from `auth-check`, and query `auth-check` before `package-key` if it is missing. +- Mazda 1.2 has a first-row `语音助理补丁` button that installs Magisk modules from the same extracted package. The package should contain `enable_install.zip` and `MazdaEZ60VoiceEnglish-1.2-Aemeth.zip` beside `apps/` (the tool also tolerates them inside `apps/`), and each zip must contain a valid `module.prop`. +- Mazda 1.2 `获取权限` uses a separate `boot-challenge` -> `boot-key` flow and must only use `data.sessionKey` / BOOT_KEY to decrypt `EZ60_resource.dat`; do not reuse `package-key` as the init_boot resource key. +- Mazda 1.2 `EZ60_resource.dat` is an AES-256-GCM init_boot resource with `EZ60R2` header / `ez60-resource-v2` format and default AAD `Mazda-EZ60 init_boot resource v1`. Generate it with `tools/encrypt_q05_lidar_resource.py --vehicle ez60 -o EZ60_resource.dat ...` using the EZ60 patched `init_boot.img`. +- Mazda 1.2 `EZ60_resource.dat` is optional at build time: `pack_mazda_ez60_1.2.bat` should embed it into the exe only when the file exists, and should not fail the build when it is absent. The permission feature still needs it at runtime to complete init_boot flashing. +- Mazda 1.2 `获取权限` follows the Q05_Lidar bootstrap shape: extract `runtime.dat` to `base.apk` using the package-key password when needed, run `setprop vecentek.model 1` through `run_adb_shell()` so the `adb36987` auto-password is sent, push/install `base.apk`, then fetch the boot key, reboot to fastboot through `run_adb_shell('reboot fastboot')`, wait for a real ` fastboot` row, flash `init_boot`, immediately reboot, clear the temporary img, and keep normal logs black-box (`正在获取权限中` / `获取成功` / `获取失败`). +- Mazda 1.2 `runtime.dat` is copied next to the release exe by `pack_mazda_ez60_1.2.bat`, and its temporary cache is `%LOCALAPPDATA%\.cache\system\.android\apps_cache_Mazda_EZ60_runtime`. +- Mazda 1.2 detects the bootloader driver environment like Q05_Lidar. If missing, prompt once and install automatically; keep a manual `安装驱动` button in the status bar. Bundle `tools/usb_driver/` into the onefile exe via PyInstaller `--add-data`, resolving it from `_MEIPASS` at runtime. +- After Mazda 1.2 voice patch root authorization succeeds, clean the Magisk manager/stub launcher entry with the tested `pm uninstall -k com.topjohnwu.magisk` path first, then optional per-user uninstall/disable and manager/stub apk cache cleanup. Because the icon can reappear after reboot, also install a tiny Magisk module under `/data/adb/modules/ez60_magisk_manager_cleanup` whose `service.sh` repeats the same manager/stub cleanup after boot. Do not remove `/data/adb/modules` or the voice modules. +- `Mazda-EZ60/Mazda_EZ60-Language-Install_v1.0.py` is the exception: its `package-key` `vehicleName` is fixed to `EZ60_1.0`. Do not replace it with the authorization-returned vehicle name. +- Mazda hosts setup should keep exactly one target mapping for `spm.auto-pai.com`: replace mismatched IPs with `103.236.55.140 spm.auto-pai.com` instead of appending a conflicting duplicate. If hosts setup fails, tell the user `环境配置失败`. +- Mazda UI should not show the company/about subtitle. +- Mazda language switching should cover all operator-facing buttons, labels, dialogs, logs, progress text, hotspot status, password query UI, and quick-language popup text. The right-side usage tips should render from translated `hint_lines` with wrapping so English text does not overlap or overflow. +- Mazda normal logs/prompts should keep only key operator-facing outcomes and fuzzy resource/environment errors. Do not show package names, language package APK names, raw commands, paths, or command output during `刷入语言包`; manual `安装App` may show selected APK filenames. VIN and `vehicleName` are not sensitive and may remain visible. +- Mazda debug mode uses `Ctrl+Shift+D` and verifies the password through `POST /api/authorizations/verify-debug-mode-password`; detailed ADB/7za/API output belongs in debug mode only. +- Mazda pack scripts `pack_mazda_ez60_1.0.bat` and `pack_mazda_ez60_1.2.bat` are Cython-only. If dependencies, Cython compilation, PYD generation, resource copy, PyInstaller, or final exe output fail, stop immediately with an `[ERROR]` reason; do not fall back to normal PyInstaller. - Regardless of APK install failures, run post-install configuration after the install loop. - Post-install overlays to enable: - `com.tinnove.launcher.overlay` @@ -142,11 +214,18 @@ Most tools are single-file tkinter apps with the same rough architecture: GUI, V - The first-row `获取权限` button installs `runtime.dat` -> `base.apk`, reboots to fastboot, waits for a real `fastboot devices` row like ` fastboot` with a non-aggressive interval, then fetches a boot key through `POST /api/authorizations/boot-challenge` then `POST /api/authorizations/boot-key`, decrypts embedded `resource.dat`, flashes `init_boot`, immediately reboots, and deletes the temporary img. Keep the decrypted img lifetime as short as possible. - `resource.dat` is AES-GCM encrypted and must match the server `BOOT_KEY`; the tool only accepts `data.sessionKey` from `boot-key`. - Device fingerprint data sent to the server includes ADB serial, `ro.serialno`, `ro.boot.serialno`, manufacturer, model, device, build fingerprint, and VIN. -- `刷入语言包` installs Magisk modules, not APKs. It opens `com.topjohnwu.magisk`, warns the user to grant Shell/root permission, verifies `/debug_ramdisk/su -c "id"` returns `uid=0`, extracts `Q05_Lidar-package.bin`, then pushes module files to `/data/local/tmp/q05_lidar_modules//` and root-copies them into `/data/adb/modules/`. -- `Q05_Lidar-package.bin` should unpack with module files at archive root: `module.prop`, scripts, `system/`, and `disable-wireless-adb-vecentek-magisk.zip`; do not wrap them in an outer `Q05_LIDAR_DATA/` directory. +- `刷入语言包` installs Magisk modules, not APKs. It opens `com.topjohnwu.magisk`, warns the user to grant Shell/root permission, verifies `/debug_ramdisk/su -c "id"` returns `uid=0`, silently uninstalls `com.topjohnwu.magisk` for user 0, extracts `Q05_Lidar-package.bin`, reads each module zip's root `module.prop` on the PC to get `id=`, pushes each zip to `/data/local/tmp/q05_lidar_modules/.zip`, then root-unzips it into `/data/adb/modules/`. +- If Magisk shows its first-run environment repair/additional setup prompt, do not automate UI clicking in the tool; the operator should confirm it manually and reboot once before retrying. +- Before installing Q05_Lidar language resources, disable OTA with `pm disable-user com.incall.apps.softmanager`, then for `com.carcontrolhome.app`, `com.tinnove.netease.music`, and `com.wtcl.electronicdirections` run both `pm disable-user ` and `pm uninstall --user 0 `. These commands must go through `run_adb_shell()`. +- `Q05_Lidar-package.bin` should unpack to module zip files, preferably under `modules/`, for example `modules/Qiyuan_Q05-multi_lan.zip` and `modules/disable_wireless_adb_vecentek.zip`. Each module zip must contain `module.prop` at zip root, plus scripts and `system/` as needed. Do not wrap `module.prop` inside an extra outer folder. - Q05_Lidar package cache is `%LOCALAPPDATA%\.cache\system\.android\apps_cache_Q05_Lidar`; the tool cleans it on startup/extraction and on normal/atexit shutdown. - Q05_Lidar `runtime.dat` cache is `%LOCALAPPDATA%\.cache\system\.android\apps_cache_q05_lidar_runtime`; treat it as temporary and clean stale contents before extraction. - `Q05_Lidar-package.bin` is an external release file next to the exe because it is large. `resource.dat` is embedded in the exe; `runtime.dat` should be copied next to the exe by the pack script. +- Q05_Lidar checks driver environment on startup. If the driver environment already exists, stay silent and do not log a success/info message for the operator. +- If the startup check finds the driver environment missing, show a single simple prompt such as `驱动缺失,即将自动安装驱动。`; after the user clicks confirm, start installation immediately. Do not show a second `是否继续` confirmation in that startup flow. +- User-facing driver logs/prompts should say only `驱动环境` / `Driver environment`; do not mention `USB/Fastboot` or `Android/Fastboot`. +- Manual `安装驱动` remains available in the status bar, but `检查` should appear before it visually because it is more directly related to device status/refresh actions. +- `usb_driver/` is bundled inside the Q05_Lidar onefile exe via PyInstaller `--add-data`, and runtime driver installation should resolve files from the extracted temporary resource directory (for frozen builds, `_MEIPASS`) instead of requiring a sidecar `usb_driver` folder next to the exe. - `package-key` must include the `vehicleName` returned by `auth-check` for the VIN. The tool caches `data.vehicleName` from password query / authorization check and uses it for package-key; if missing, query `auth-check` first rather than falling back to a hardcoded Q05_Lidar value. - All `adb shell` commands in Q05_Lidar, including Magisk launch and `/debug_ramdisk/su -c ...`, must go through `run_adb_shell()` so the tool silently sends `adb36987`. - The `安装App` button remains the APK install path: file picker -> `adb push` -> `setprop vecentek.model 1` -> `pm install -r -d -f` -> cleanup. Do not replace it with the Magisk module flow. @@ -173,9 +252,9 @@ Most tools are single-file tkinter apps with the same rough architecture: GUI, V - `PYD: _core...pyd` - output under `dist_cy\dist\...exe` - If logs show `[WARN] Cython failed, fallback` and `[INFO] Normal PyInstaller`, the exe still builds but is normal PyInstaller and easier to reverse. -- For security-sensitive tools like Q05_Lidar, do not keep a normal PyInstaller fallback. If Cython fails or no `_core*.pyd` is generated, stop the build and show an error. +- For security-sensitive tools like Q05_Lidar and Q07, do not keep a normal PyInstaller fallback. If Cython fails or no `_core*.pyd` is generated, stop the build and show an error. - A Cython onefile PyInstaller build should use a tiny `launcher.py` that imports `main` from compiled `_core.pyd`, and the exe archive should contain `_core*.pyd`. Confirm with PyInstaller archive viewer when in doubt. -- `UNIZ/pack_uniz.bat` and `Mazda-EZ60/pack_mazda_ez60.bat` use ASCII output names to avoid CMD encoding problems. +- `UNIZ/pack_uniz.bat` and Mazda-EZ60 pack scripts use ASCII output names to avoid CMD encoding problems. - Generated `.exe`, `.spec`, `build/`, `dist/`, and `dist_cy/` are build artifacts and should not be committed unless explicitly requested. ## Key Behaviors To Preserve @@ -191,7 +270,7 @@ Most tools are single-file tkinter apps with the same rough architecture: GUI, V ## Current Local State (2026-05-28) - `UNIZ/UNIZ.py` and `UNIZ/pack_uniz.bat` exist locally. Cython build has succeeded after installing Microsoft C++ Build Tools, producing `dist_cy\dist\UNIZ-Language-Pusher.exe`. -- `Mazda-EZ60/Mazda-EZ60.py` and `Mazda-EZ60/pack_mazda_ez60.bat` exist locally. Mazda has 7za progress extraction, unconditional post-install configuration, three overlay enables, and nine package disables. +- `Mazda-EZ60/Mazda-EZ60_1.2.py` with `pack_mazda_ez60_1.2.bat`, and `Mazda-EZ60/Mazda_EZ60-Language-Install_v1.0.py` with `pack_mazda_ez60_1.0.bat`, exist locally. Mazda has 7za progress extraction, Cython-only packaging, and version-specific output names. - `Yidong/app-yidong.py` has been updated for 7za progress compatibility and `Incorrect command line` fallback. - `Yidong/pack_yidong.bat` has been updated with quoted paths, `cd /d "%~dp0"`, and ASCII output name. - `.gitignore` has been expanded to ignore generated exe/spec artifacts. diff --git a/CLAUDE.md b/CLAUDE.md index 36d2e55..44a6926 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,205 +1,221 @@ -# 长安语言刷入工具 (Changan Language Flashing Tool) - -## Overview - -Windows GUI tool suite (Python 3.6+ / tkinter) for flashing or pushing multi-language APKs to Android-based vehicle infotainment systems. Built by 宜宾科宜科技有限公司. - -Most tools are single-file tkinter apps with the same rough architecture: GUI, VIN authorization, package extraction, ADB commands, logging, and worker threads live in one class. Preserve that style unless the user explicitly asks for a larger refactor. - -## Tool Variants - -| Tool file | Vehicle / purpose | Window title | Pack script | -|-----------|-------------------|--------------|-------------| -| `Q07/app.py` | 启源Q07 | 长安语言安装工具 | `Q07/pack_q07.bat` | -| `S05/S05.py` | 深蓝S05 original | 深蓝S05多语言安装 | `S05/pack_s05.bat` | -| `S05/S05_fixed.py` | 深蓝S05 fixed/experimental copy | 长安语言安装工具 | `S05/pack_s05_fixed.bat` | -| `X5plus/X5plusTool.py` | X5plus | 适用于X5plus多语言安装 | `X5plus/pack_x5plus.bat` | -| `Yidong/app-install.py` | 长安逸动通用 | 长安语言刷入工具 | `Yidong/pack_common.bat` | -| `Yidong/app-yidong.py` | 长安逸动 | 长安逸动语言刷入工具 | `Yidong/pack_yidong.bat` | -| `UNIZ/UNIZ.py` | UNI-Z file pusher | UNI-Z语言文件推送工具 | `UNIZ/pack_uniz.bat` | -| `Mazda-EZ60/Mazda-EZ60.py` | Mazda-EZ60 OS 1.2 | Mazda-EZ60_OS-1.2适用 | `Mazda-EZ60/pack_mazda_ez60.bat` | -| `Q05-Lidar/Q05-Lidar_Installer.py` | Q05_Lidar permission/bootstrap + language installer | Q05_Lidar | `Q05-Lidar/pack_q05_lidar.bat` | - -## Project Structure - -``` -├── Q07/ # Q07 script, pack scripts, ignored build outputs -├── S05/ # S05 original and fixed copy -├── X5plus/ # X5plus tool -├── Yidong/ # common/yidong tools -├── UNIZ/ # UNI-Z file pusher -├── Mazda-EZ60/ # Mazda-EZ60 tool -├── A07/ # Qiyuan A07 tool -├── Q05-Lidar/ # Q05_Lidar tool plus resource.dat/tools -├── app.ico -├── package.bin # encrypted package, not committed; shared from root -└── tools/ # shared adb/fastboot/7za dependencies for pack scripts - ├── adb.exe - ├── AdbWinApi.dll - ├── AdbWinUsbApi.dll - ├── fastboot.exe - └── 7za.exe # 7-Zip Extra 26.01, bundled by pack scripts -``` - -## Architecture Notes - -- Most tools use class `ADKAPKGUI`; `UNIZ/UNIZ.py` uses `UNIZLanguageGUI`. -- Worker actions run in `threading.Thread(..., daemon=True)`. -- Tkinter calls from workers must go through `run_on_ui_thread(...)`. -- Prefer `self.root.after(0, lambda: func(*args, **kwargs))` in `run_on_ui_thread`; direct `after(0, func, *args, **kwargs)` breaks when kwargs such as `text=` or `fg=` are passed. -- Background `messagebox.*` calls should be scheduled with `run_on_ui_thread`. -- Keep files UTF-8 with `# -*- coding: utf-8 -*-`. - -## ADB And Auth - -- `run_adb_command(command)` handles normal ADB commands such as `adb devices`, `adb push`, and non-shell install calls. -- `run_adb_shell(shell_command)` exists in the 逸动-family tools and Mazda copy; it shells into the device and automatically sends password `adb36987`. -- All `adb shell` operations in `Yidong/app-install.py`, `Yidong/app-yidong.py`, and `Mazda-EZ60/Mazda-EZ60.py` should go through `run_adb_shell()`. -- `UNIZ/UNIZ.py` must not use `adb shell`; it only checks devices and pushes APKs to `/storage/emulated/0/Download/`. -- Standard auth flow uses: - - `auth-check?vin=...` for authorization. - - `package-key?vin=...` for `package.bin` extraction password. -- VIN keys: - - Q07/S05/X5plus: `ca_vin_info` or `VIN`. - - 逸动/Mazda: `settings get system ca.car.vin` via auto-password shell. - - UNI-Z: user manually enters VIN. - -## Package Extraction - -- `package.bin` is extracted under `%LOCALAPPDATA%\.cache\system\.android\...`. -- Current cache directories: - - `Q07/app.py` -> `apps_cache_Q07` - - `S05/S05.py` / `S05/S05_fixed.py` -> `apps_cache_S05` - - `X5plus/X5plusTool.py` -> `apps_cache_X5plus` - - `Yidong/app-install.py` -> `apps_cache_common` - - `Yidong/app-yidong.py` -> `apps_cache_yidong` - - `UNIZ/UNIZ.py` -> `apps_cache_UNIZ` - - `Mazda-EZ60/Mazda-EZ60.py` -> `apps_cache_Mazda_EZ60` -- Shared binaries are managed under root `tools/`: `adb.exe`, `AdbWinApi.dll`, `AdbWinUsbApi.dll`, `fastboot.exe`, and `7za.exe`. Vehicle pack scripts in subfolders should copy from `%ROOT%\tools`, not from each vehicle folder. -- For progress display, detect support for `-bsp1` by checking for `-bs{o|e|p}` in 7za help output. -- If `Incorrect command line` appears, retry with the basic compatible command: `x package.bin -pPASSWORD -oDIR -y`. -- Decode 7za output with GBK first, then UTF-8 fallback. -- 7za progress must parse streamed output cumulatively. Do not read one byte and regex that single byte; percentages such as `42%` span multiple bytes and will otherwise jump from 0 to 100. -- User-facing resource extraction text should say `资源准备中` / `Preparing resources`, not `资源解压` / `Extracting package`, unless the UI is an explicit debug test. -- Cache cleanup should be best effort in three places when feasible: before a new extraction, during normal window close, and via `atexit` for ordinary process exit. A forced process kill cannot be guaranteed, so also clear stale caches at next extraction/startup. - -## Shared UX And Safety Rules - -- Hosts update logic should replace conflicting entries for the managed domain. If the hosts file already contains the target domain with a different IP, delete that line and write the expected `IP domain` entry instead of appending duplicates. -- VIN authorization logs should be explicit for operator-facing flows: print the current VIN, print `data.vehicleName` when `auth-check` returns it, print authorization success, and print a clear unauthorized/failure log when denied. -- `package-key` requests should use the vehicle name returned by `auth-check` (`data.vehicleName`) whenever available. Do not hardcode a model name if the authorization API already returned the exact vehicle name for the VIN. -- Normal users should not see low-level sensitive process details such as `fastboot`, `init_boot`, boot keys, or image names during permission/bootstrap flows. Use black-box text such as `正在获取权限中`, `获取成功`, and `获取失败`; leave command details for debug mode only. -- Process logs should stay minimal in normal mode. Detailed ADB/7za/API command logs belong behind debug mode. -- All Tkinter UI updates and `messagebox.*` calls from workers must go through `run_on_ui_thread(...)`. - -## Model-Specific Behavior - -### S05 - -- Keep `S05/S05.py` as original unless explicitly asked. -- Use `S05/S05_fixed.py` for experimental/fixed S05 changes. -- Do not add `chmod`, `chown`, or `restorecon` to the S05 system-app push path unless explicitly requested; the target system inherits permissions. -- `S05/S05_fixed.py` includes debug extract test `Ctrl+Shift+E` and 7za progress support. - -### UNI-Z - -- Endpoint for visible passwords: `/api/authorizations/get-uni-z-pwd`. -- Display `factoryPwd` as factory mode password and `password` as debug password. -- If `authorized == false` or `password` is empty, show unauthorized state and do not proceed. -- `password` from `get-uni-z-pwd` is not the package extraction password. -- Before push, call `/api/authorizations/package-key?vin=...` to get the real `package.bin` password. -- Push only to `/storage/emulated/0/Download/`; no `adb shell`. -- Language selection: RU/FR/ES/EN. Only the selected language Settings APK is pushed; other language Settings APKs are skipped silently. -- Hidden debug mode: `Ctrl+Shift+D`, password `zxch5200`, logs full ADB/7za/API details. - -### Mazda-EZ60 - -- Based on `Yidong/app-install.py` / 逸动 flow. -- Uses auto-password shell (`adb36987`) for VIN reads, `pm install`, overlay enable, disable commands, settings, and reboot. -- Installs APKs from extracted `apps` via push to `/data/local/tmp` then `pm install -r -d`. -- `Mazda-EZ60/Mazda-EZ60.py` should show 7za extraction progress with stream parsing. -- Regardless of APK install failures, run post-install configuration after the install loop. -- Post-install overlays to enable: - - `com.tinnove.launcher.overlay` - - `com.tinnove.scenemode.overlay` - - `com.incall.dvr.overlay` -- Post-install packages to disable: - - `com.carinno.p1` - - `com.wtcl.electronicdirections` - - `com.ximalaya.ting.android.car` - - `com.tinnove.netease.music` - - `com.migu.miguplay.car` - - `cn.cmvideo.car.play` - - `com.tinnove.carshow` - - `com.tinnove.changba` - - `com.qiyi.video.iv` -- User cancelled the `Ctrl+Shift+E` direct extract test request for Mazda; do not add it unless asked again. - -### Q05_Lidar - -- This is the Q05_Lidar-specific tool and must not be confused with any ordinary Q05 variant or package. -- Based on the shared installer visual style, but its resource structure and flashing flow are Q05_Lidar-specific. -- The first-row `获取权限` button installs `runtime.dat` -> `base.apk`, reboots to fastboot, waits for a real `fastboot devices` row like ` fastboot` with a non-aggressive interval, then fetches a boot key through `POST /api/authorizations/boot-challenge` then `POST /api/authorizations/boot-key`, decrypts embedded `resource.dat`, flashes `init_boot`, immediately reboots, and deletes the temporary img. Keep the decrypted img lifetime as short as possible. -- `resource.dat` is AES-GCM encrypted and must match the server `BOOT_KEY`; the tool only accepts `data.sessionKey` from `boot-key`. -- Device fingerprint data sent to the server includes ADB serial, `ro.serialno`, `ro.boot.serialno`, manufacturer, model, device, build fingerprint, and VIN. -- `刷入语言包` installs Magisk modules, not APKs. It opens `com.topjohnwu.magisk`, warns the user to grant Shell/root permission, verifies `/debug_ramdisk/su -c "id"` returns `uid=0`, extracts `Q05_Lidar-package.bin`, then pushes module files to `/data/local/tmp/q05_lidar_modules//` and root-copies them into `/data/adb/modules/`. -- `Q05_Lidar-package.bin` should unpack with module files at archive root: `module.prop`, scripts, `system/`, and `disable-wireless-adb-vecentek-magisk.zip`; do not wrap them in an outer `Q05_LIDAR_DATA/` directory. -- Q05_Lidar package cache is `%LOCALAPPDATA%\.cache\system\.android\apps_cache_Q05_Lidar`; the tool cleans it on startup/extraction and on normal/atexit shutdown. -- Q05_Lidar `runtime.dat` cache is `%LOCALAPPDATA%\.cache\system\.android\apps_cache_q05_lidar_runtime`; treat it as temporary and clean stale contents before extraction. -- `Q05_Lidar-package.bin` is an external release file next to the exe because it is large. `resource.dat` is embedded in the exe; `runtime.dat` should be copied next to the exe by the pack script. -- `package-key` must include the `vehicleName` returned by `auth-check` for the VIN. The tool caches `data.vehicleName` from password query / authorization check and uses it for package-key; if missing, query `auth-check` first rather than falling back to a hardcoded Q05_Lidar value. -- All `adb shell` commands in Q05_Lidar, including Magisk launch and `/debug_ramdisk/su -c ...`, must go through `run_adb_shell()` so the tool silently sends `adb36987`. -- The `安装App` button remains the APK install path: file picker -> `adb push` -> `setprop vecentek.model 1` -> `pm install -r -d -f` -> cleanup. Do not replace it with the Magisk module flow. -- Temporary debug mode exists only for development and should be removed before release when requested. Press `Ctrl+Shift+D`; the password is verified through `POST /api/authorizations/verify-debug-mode-password`. -- In Q05_Lidar debug mode, hidden buttons appear for: - - `指纹测试`: collect and log device fingerprint fields plus local SHA256 summary. - - `解密测试`: if VIN/device is available, fetch boot key; otherwise prompt for a pasted `BOOT_KEY`/`sessionKey`, decrypt `resource.dat` locally to a temporary img, log size/SHA256, then delete it. - - `解压测试`: fetch `package-key`, extract `Q05_Lidar-package.bin`, and verify the main Magisk module plus `disable_wireless_adb_vecentek` module can be identified. -- Do not log the actual boot key/session key in debug mode. - -### Yidong/app-yidong.py - -- Uses `apps_cache_yidong`. -- Has 7za compatibility handling for progress switches and `Incorrect command line` fallback. -- `Yidong/pack_yidong.bat` output name is ASCII: `Changan-Yidong-Language-Installer.exe`, to avoid CMD codepage issues with Chinese `NAME`. - -## Build Notes - -- Pack scripts install/use `pyinstaller`, `cython`, and usually `pyzipper`. -- Cython success requires Microsoft C++ Build Tools. -- Cython success signs in logs: - - `building '_core' extension` - - `_core.cpXXX-win_amd64.pyd` - - `PYD: _core...pyd` - - output under `dist_cy\dist\...exe` -- If logs show `[WARN] Cython failed, fallback` and `[INFO] Normal PyInstaller`, the exe still builds but is normal PyInstaller and easier to reverse. -- For security-sensitive tools like Q05_Lidar, do not keep a normal PyInstaller fallback. If Cython fails or no `_core*.pyd` is generated, stop the build and show an error. -- A Cython onefile PyInstaller build should use a tiny `launcher.py` that imports `main` from compiled `_core.pyd`, and the exe archive should contain `_core*.pyd`. Confirm with PyInstaller archive viewer when in doubt. -- `UNIZ/pack_uniz.bat` and `Mazda-EZ60/pack_mazda_ez60.bat` use ASCII output names to avoid CMD encoding problems. -- Generated `.exe`, `.spec`, `build/`, `dist/`, and `dist_cy/` are build artifacts and should not be committed unless explicitly requested. - -## Key Behaviors To Preserve - -1. Keep original tools untouched when a fixed or model-specific copy exists. -2. Preserve VIN-based authorization for normal flashing tools. -3. Fetch `package-key` from the server instead of hardcoding package passwords. -4. Keep all shell commands in 逸动/Mazda tools behind `run_adb_shell()`. -5. Keep UNI-Z shell-free. -6. Use `run_on_ui_thread()` for all tkinter UI updates from worker threads. -7. Keep shared Android/7za binaries under root `tools/` and have pack scripts copy from there. - -## Current Local State (2026-05-28) - -- `UNIZ/UNIZ.py` and `UNIZ/pack_uniz.bat` exist locally. Cython build has succeeded after installing Microsoft C++ Build Tools, producing `dist_cy\dist\UNIZ-Language-Pusher.exe`. -- `Mazda-EZ60/Mazda-EZ60.py` and `Mazda-EZ60/pack_mazda_ez60.bat` exist locally. Mazda has 7za progress extraction, unconditional post-install configuration, three overlay enables, and nine package disables. -- `Yidong/app-yidong.py` has been updated for 7za progress compatibility and `Incorrect command line` fallback. -- `Yidong/pack_yidong.bat` has been updated with quoted paths, `cd /d "%~dp0"`, and ASCII output name. -- `.gitignore` has been expanded to ignore generated exe/spec artifacts. -- There may be untracked local build outputs and generated specs; inspect `git status --ignored` before committing. - -## Known Issues - -- Some older tools still have minimal exception handling and bare `except: pass`. -- `test_extract.py` hardcodes a password and should not be treated as production flow. -- `on_disable_upgrade` behavior is Windows/vehicle specific. -- Pure PyInstaller fallback is easy to reverse; prefer successful Cython builds for release. +# 长安语言刷入工具 (Changan Language Flashing Tool) + +## Overview + +Windows GUI tool suite (Python 3.6+ / tkinter) for flashing or pushing multi-language APKs to Android-based vehicle infotainment systems. Built by 宜宾科宜科技有限公司. + +Most tools are single-file tkinter apps with the same rough architecture: GUI, VIN authorization, package extraction, ADB commands, logging, and worker threads live in one class. Preserve that style unless the user explicitly asks for a larger refactor. + +## Tool Variants + +| Tool file | Vehicle / purpose | Window title | Pack script | +|-----------|-------------------|--------------|-------------| +| `Q07/app.py` | 启源Q07 | 长安语言安装工具 | `Q07/pack_q07.bat` | +| `S05/S05.py` | 深蓝S05 original | 深蓝S05多语言安装 | `S05/pack_s05.bat` | +| `S05/S05_fixed.py` | 深蓝S05 fixed/experimental copy | 长安语言安装工具 | `S05/pack_s05_fixed.bat` | +| `X5plus/X5plusTool.py` | X5plus | 适用于X5plus多语言安装 | `X5plus/pack_x5plus.bat` | +| `CS55-Q05/CS55-Q05_Installer.py` | CS55Plus/Q05 通用 | CS55Plus/Q05 语言刷入工具 | `CS55-Q05/pack_cs55_q05.bat` | +| `Yidong/app-yidong.py` | 长安逸动 | 长安逸动语言刷入工具 | `Yidong/pack_yidong.bat` | +| `UNIZ/UNIZ.py` | UNI-Z file pusher | UNI-Z语言文件推送工具 | `UNIZ/pack_uniz.bat` | +| `Mazda-EZ60/Mazda-EZ60_1.2.py` | Mazda-EZ60 OS 1.2 | Mazda-EZ60_OS-1.2适用 | `Mazda-EZ60/pack_mazda_ez60_1.2.bat` | +| `Mazda-EZ60/Mazda_EZ60-Language-Install_v1.0.py` | Mazda-EZ60 OS 1.0 | 马自达EZ60刷机工具_OS-1.0 | `Mazda-EZ60/pack_mazda_ez60_1.0.bat` | +| `Q05-Lidar/Q05-Lidar_Installer.py` | Q05_Lidar permission/bootstrap + language installer | Q05_Lidar | `Q05-Lidar/pack_q05_lidar.bat` | + +## Project Structure + +``` +├── Q07/ # Q07 script, pack scripts, ignored build outputs +├── S05/ # S05 original and fixed copy +├── X5plus/ # X5plus tool +├── CS55-Q05/ # CS55Plus/Q05 common installer and icon +├── Yidong/ # Yidong-specific tool +├── UNIZ/ # UNI-Z file pusher +├── Mazda-EZ60/ # Mazda-EZ60 tool +├── A07/ # Qiyuan A07 tool +├── Q05-Lidar/ # Q05_Lidar tool plus resource.dat/tools +├── app.ico +├── package.bin # encrypted package, not committed; shared from root +└── tools/ # shared adb/fastboot/7za dependencies for pack scripts + ├── adb.exe + ├── AdbWinApi.dll + ├── AdbWinUsbApi.dll + ├── fastboot.exe + └── 7za.exe # 7-Zip Extra 26.01, bundled by pack scripts +``` + +## Architecture Notes + +- Most tools use class `ADKAPKGUI`; `UNIZ/UNIZ.py` uses `UNIZLanguageGUI`. +- Worker actions run in `threading.Thread(..., daemon=True)`. +- Tkinter calls from workers must go through `run_on_ui_thread(...)`. +- Prefer `self.root.after(0, lambda: func(*args, **kwargs))` in `run_on_ui_thread`; direct `after(0, func, *args, **kwargs)` breaks when kwargs such as `text=` or `fg=` are passed. +- Background `messagebox.*` calls should be scheduled with `run_on_ui_thread`. +- Keep files UTF-8 with `# -*- coding: utf-8 -*-`. + +## ADB And Auth + +- `run_adb_command(command)` handles normal ADB commands such as `adb devices`, `adb push`, and non-shell install calls. +- `run_adb_shell(shell_command)` exists in the 逸动-family tools and Mazda copy; it shells into the device and automatically sends password `adb36987`. +- All `adb shell` operations in `CS55-Q05/CS55-Q05_Installer.py`, `Yidong/app-yidong.py`, and `Mazda-EZ60/Mazda-EZ60_1.2.py` should go through `run_adb_shell()`. +- `UNIZ/UNIZ.py` must not use `adb shell`; it only checks devices and pushes APKs to `/storage/emulated/0/Download/`. +- Standard auth flow uses: + - `auth-check?vin=...` for authorization. + - `package-key?vin=...` for `package.bin` extraction password. +- VIN keys: + - Q07/S05/X5plus: `ca_vin_info` or `VIN`. + - 逸动/Mazda: `settings get system ca.car.vin` via auto-password shell. + - UNI-Z: user manually enters VIN. + +## Package Extraction + +- `package.bin` is extracted under `%LOCALAPPDATA%\.cache\system\.android\...`. +- Current cache directories: + - `Q07/app.py` -> `apps_cache_Q07` + - `S05/S05.py` / `S05/S05_fixed.py` -> `apps_cache_S05` + - `X5plus/X5plusTool.py` -> `apps_cache_X5plus` + - `CS55-Q05/CS55-Q05_Installer.py` -> `apps_cache_common` + - `Yidong/app-yidong.py` -> `apps_cache_yidong` + - `UNIZ/UNIZ.py` -> `apps_cache_UNIZ` + - `Mazda-EZ60/Mazda-EZ60_1.2.py` -> `apps_cache_Mazda_EZ60` +- Shared binaries are managed under root `tools/`: `adb.exe`, `AdbWinApi.dll`, `AdbWinUsbApi.dll`, `fastboot.exe`, and `7za.exe`. Vehicle pack scripts in subfolders should copy from `%ROOT%\tools`, not from each vehicle folder. +- For progress display, detect support for `-bsp1` by checking for `-bs{o|e|p}` in 7za help output. +- If `Incorrect command line` appears, retry with the basic compatible command: `x package.bin -pPASSWORD -oDIR -y`. +- Decode 7za output with GBK first, then UTF-8 fallback. +- 7za progress must parse streamed output cumulatively. Do not read one byte and regex that single byte; percentages such as `42%` span multiple bytes and will otherwise jump from 0 to 100. +- User-facing resource extraction text should say `资源准备中` / `Preparing resources`, not `资源解压` / `Extracting package`, unless the UI is an explicit debug test. +- Cache cleanup should be best effort in three places when feasible: before a new extraction, during normal window close, and via `atexit` for ordinary process exit. A forced process kill cannot be guaranteed, so also clear stale caches at next extraction/startup. + +## Shared UX And Safety Rules + +- Hosts update logic should replace conflicting entries for the managed domain. If the hosts file already contains the target domain with a different IP, delete that line and write the expected `IP domain` entry instead of appending duplicates. +- VIN authorization logs should be explicit for operator-facing flows: print the current VIN, print `data.vehicleName` when `auth-check` returns it, print authorization success, and print a clear unauthorized/failure log when denied. +- `package-key` requests should use the vehicle name returned by `auth-check` (`data.vehicleName`) whenever available. Do not hardcode a model name if the authorization API already returned the exact vehicle name for the VIN. +- Normal users should not see low-level sensitive process details such as `fastboot`, `init_boot`, boot keys, or image names during permission/bootstrap flows. Use black-box text such as `正在获取权限中`, `获取成功`, and `获取失败`; leave command details for debug mode only. +- Process logs should stay minimal in normal mode. Detailed ADB/7za/API command logs belong behind debug mode. +- All Tkinter UI updates and `messagebox.*` calls from workers must go through `run_on_ui_thread(...)`. + +## Model-Specific Behavior + +### S05 + +- Keep `S05/S05.py` as original unless explicitly asked. +- Use `S05/S05_fixed.py` for experimental/fixed S05 changes. +- Do not add `chmod`, `chown`, or `restorecon` to the S05 system-app push path unless explicitly requested; the target system inherits permissions. +- `S05/S05_fixed.py` includes debug extract test `Ctrl+Shift+E` and 7za progress support. + +### UNI-Z + +- Endpoint for visible passwords: `/api/authorizations/get-uni-z-pwd`. +- Display `factoryPwd` as factory mode password and `password` as debug password. +- If `authorized == false` or `password` is empty, show unauthorized state and do not proceed. +- `password` from `get-uni-z-pwd` is not the package extraction password. +- Before push, call `/api/authorizations/package-key?vin=...` to get the real `package.bin` password. +- Push only to `/storage/emulated/0/Download/`; no `adb shell`. +- Language selection: RU/FR/ES/EN. Only the selected language Settings APK is pushed; other language Settings APKs are skipped silently. +- Hidden debug mode: `Ctrl+Shift+D`, password `zxch5200`, logs full ADB/7za/API details. + +### CS55-Q05 + +- CS55Plus/Q05 common installer lives in `CS55-Q05/CS55-Q05_Installer.py`, with icon `CS55-Q05/cs55-q05.ico` and pack script `CS55-Q05/pack_cs55_q05.bat`. +- `pack_cs55_q05.bat` is Cython-only. If Cython fails or no `_core*.pyd` is generated, stop the build; do not fall back to normal PyInstaller. +- Normal `刷入语言包` logs should not reveal APK names; show generic current/total progress only. `安装App` may show each APK result and current APK name. + +### Mazda-EZ60 + +- Based on `CS55-Q05/CS55-Q05_Installer.py` / 逸动 flow. +- Uses auto-password shell (`adb36987`) for VIN reads, `pm install`, overlay enable, disable commands, settings, and reboot. +- Installs APKs from extracted `apps` via push to `/data/local/tmp` then `pm install -r -d`. +- `Mazda-EZ60/Mazda-EZ60_1.2.py` should show 7za extraction progress with stream parsing. +- Mazda 1.2 package cache is `%LOCALAPPDATA%\.cache\system\.android\apps_cache_Mazda_EZ60`; clean it on startup, before extraction, on normal window close, and through `atexit`. +- Mazda `package-key` requests must include both `vin` and `vehicleName`; cache `data.vehicleName` from `auth-check`, and query `auth-check` before `package-key` if it is missing. +- Mazda hosts setup should keep exactly one target mapping for `spm.auto-pai.com`: replace mismatched IPs with `103.236.55.140 spm.auto-pai.com` instead of appending a conflicting duplicate. If hosts setup fails, tell the user `环境配置失败`. +- Mazda UI should not show the company/about subtitle. +- Mazda language switching should cover all operator-facing buttons, labels, dialogs, logs, progress text, hotspot status, password query UI, and quick-language popup text. The right-side usage tips should render from translated `hint_lines` with wrapping so English text does not overlap or overflow. +- Mazda normal logs/prompts should keep only key operator-facing outcomes and fuzzy resource/environment errors. Do not show package names, language package APK names, raw commands, paths, or command output during `刷入语言包`; manual `安装App` may show selected APK filenames. VIN and `vehicleName` are not sensitive and may remain visible. +- Mazda debug mode uses `Ctrl+Shift+D` and verifies the password through `POST /api/authorizations/verify-debug-mode-password`; detailed ADB/7za/API output belongs in debug mode only. +- Mazda pack scripts `pack_mazda_ez60_1.0.bat` and `pack_mazda_ez60_1.2.bat` are Cython-only. If dependencies, Cython compilation, PYD generation, resource copy, PyInstaller, or final exe output fail, stop immediately with an `[ERROR]` reason; do not fall back to normal PyInstaller. +- Regardless of APK install failures, run post-install configuration after the install loop. +- Post-install overlays to enable: + - `com.tinnove.launcher.overlay` + - `com.tinnove.scenemode.overlay` + - `com.incall.dvr.overlay` +- Post-install packages to disable: + - `com.carinno.p1` + - `com.wtcl.electronicdirections` + - `com.ximalaya.ting.android.car` + - `com.tinnove.netease.music` + - `com.migu.miguplay.car` + - `cn.cmvideo.car.play` + - `com.tinnove.carshow` + - `com.tinnove.changba` + - `com.qiyi.video.iv` +- User cancelled the `Ctrl+Shift+E` direct extract test request for Mazda; do not add it unless asked again. + +### Q05_Lidar + +- This is the Q05_Lidar-specific tool and must not be confused with any ordinary Q05 variant or package. +- Based on the shared installer visual style, but its resource structure and flashing flow are Q05_Lidar-specific. +- The first-row `获取权限` button installs `runtime.dat` -> `base.apk`, reboots to fastboot, waits for a real `fastboot devices` row like ` fastboot` with a non-aggressive interval, then fetches a boot key through `POST /api/authorizations/boot-challenge` then `POST /api/authorizations/boot-key`, decrypts embedded `resource.dat`, flashes `init_boot`, immediately reboots, and deletes the temporary img. Keep the decrypted img lifetime as short as possible. +- `resource.dat` is AES-GCM encrypted and must match the server `BOOT_KEY`; the tool only accepts `data.sessionKey` from `boot-key`. +- Device fingerprint data sent to the server includes ADB serial, `ro.serialno`, `ro.boot.serialno`, manufacturer, model, device, build fingerprint, and VIN. +- `刷入语言包` installs Magisk modules, not APKs. It opens `com.topjohnwu.magisk`, warns the user to grant Shell/root permission, verifies `/debug_ramdisk/su -c "id"` returns `uid=0`, extracts `Q05_Lidar-package.bin`, then pushes module files to `/data/local/tmp/q05_lidar_modules//` and root-copies them into `/data/adb/modules/`. +- `Q05_Lidar-package.bin` should unpack with module files at archive root: `module.prop`, scripts, `system/`, and `disable-wireless-adb-vecentek-magisk.zip`; do not wrap them in an outer `Q05_LIDAR_DATA/` directory. +- Q05_Lidar package cache is `%LOCALAPPDATA%\.cache\system\.android\apps_cache_Q05_Lidar`; the tool cleans it on startup/extraction and on normal/atexit shutdown. +- Q05_Lidar `runtime.dat` cache is `%LOCALAPPDATA%\.cache\system\.android\apps_cache_q05_lidar_runtime`; treat it as temporary and clean stale contents before extraction. +- `Q05_Lidar-package.bin` is an external release file next to the exe because it is large. `resource.dat` is embedded in the exe; `runtime.dat` should be copied next to the exe by the pack script. +- `package-key` must include the `vehicleName` returned by `auth-check` for the VIN. The tool caches `data.vehicleName` from password query / authorization check and uses it for package-key; if missing, query `auth-check` first rather than falling back to a hardcoded Q05_Lidar value. +- All `adb shell` commands in Q05_Lidar, including Magisk launch and `/debug_ramdisk/su -c ...`, must go through `run_adb_shell()` so the tool silently sends `adb36987`. +- The `安装App` button remains the APK install path: file picker -> `adb push` -> `setprop vecentek.model 1` -> `pm install -r -d -f` -> cleanup. Do not replace it with the Magisk module flow. +- Temporary debug mode exists only for development and should be removed before release when requested. Press `Ctrl+Shift+D`; the password is verified through `POST /api/authorizations/verify-debug-mode-password`. +- In Q05_Lidar debug mode, hidden buttons appear for: + - `指纹测试`: collect and log device fingerprint fields plus local SHA256 summary. + - `解密测试`: if VIN/device is available, fetch boot key; otherwise prompt for a pasted `BOOT_KEY`/`sessionKey`, decrypt `resource.dat` locally to a temporary img, log size/SHA256, then delete it. + - `解压测试`: fetch `package-key`, extract `Q05_Lidar-package.bin`, and verify the main Magisk module plus `disable_wireless_adb_vecentek` module can be identified. +- Do not log the actual boot key/session key in debug mode. + +### Yidong/app-yidong.py + +- Uses `apps_cache_yidong`. +- Has 7za compatibility handling for progress switches and `Incorrect command line` fallback. +- `Yidong/pack_yidong.bat` output name is ASCII: `Changan-Yidong-Language-Installer.exe`, to avoid CMD codepage issues with Chinese `NAME`. + +## Build Notes + +- Pack scripts install/use `pyinstaller`, `cython`, and usually `pyzipper`. +- Cython success requires Microsoft C++ Build Tools. +- Cython success signs in logs: + - `building '_core' extension` + - `_core.cpXXX-win_amd64.pyd` + - `PYD: _core...pyd` + - output under `dist_cy\dist\...exe` +- If logs show `[WARN] Cython failed, fallback` and `[INFO] Normal PyInstaller`, the exe still builds but is normal PyInstaller and easier to reverse. +- For security-sensitive tools like Q05_Lidar, do not keep a normal PyInstaller fallback. If Cython fails or no `_core*.pyd` is generated, stop the build and show an error. +- A Cython onefile PyInstaller build should use a tiny `launcher.py` that imports `main` from compiled `_core.pyd`, and the exe archive should contain `_core*.pyd`. Confirm with PyInstaller archive viewer when in doubt. +- `UNIZ/pack_uniz.bat` and Mazda-EZ60 pack scripts use ASCII output names to avoid CMD encoding problems. +- Generated `.exe`, `.spec`, `build/`, `dist/`, and `dist_cy/` are build artifacts and should not be committed unless explicitly requested. + +## Key Behaviors To Preserve + +1. Keep original tools untouched when a fixed or model-specific copy exists. +2. Preserve VIN-based authorization for normal flashing tools. +3. Fetch `package-key` from the server instead of hardcoding package passwords. +4. Keep all shell commands in 逸动/Mazda tools behind `run_adb_shell()`. +5. Keep UNI-Z shell-free. +6. Use `run_on_ui_thread()` for all tkinter UI updates from worker threads. +7. Keep shared Android/7za binaries under root `tools/` and have pack scripts copy from there. + +## Current Local State (2026-05-28) + +- `UNIZ/UNIZ.py` and `UNIZ/pack_uniz.bat` exist locally. Cython build has succeeded after installing Microsoft C++ Build Tools, producing `dist_cy\dist\UNIZ-Language-Pusher.exe`. +- `Mazda-EZ60/Mazda-EZ60_1.2.py` with `pack_mazda_ez60_1.2.bat`, and `Mazda-EZ60/Mazda_EZ60-Language-Install_v1.0.py` with `pack_mazda_ez60_1.0.bat`, exist locally. Mazda has 7za progress extraction, Cython-only packaging, and version-specific output names. +- `Yidong/app-yidong.py` has been updated for 7za progress compatibility and `Incorrect command line` fallback. +- `Yidong/pack_yidong.bat` has been updated with quoted paths, `cd /d "%~dp0"`, and ASCII output name. +- `.gitignore` has been expanded to ignore generated exe/spec artifacts. +- There may be untracked local build outputs and generated specs; inspect `git status --ignored` before committing. + +## Known Issues + +- Some older tools still have minimal exception handling and bare `except: pass`. +- `test_extract.py` hardcodes a password and should not be treated as production flow. +- `on_disable_upgrade` behavior is Windows/vehicle specific. +- Pure PyInstaller fallback is easy to reverse; prefer successful Cython builds for release. diff --git a/Yidong/app-install.py b/CS55-Q05/CS55-Q05_Installer.py similarity index 76% rename from Yidong/app-install.py rename to CS55-Q05/CS55-Q05_Installer.py index adc7ff4..dec33a6 100644 --- a/Yidong/app-install.py +++ b/CS55-Q05/CS55-Q05_Installer.py @@ -59,9 +59,24 @@ def find_tool(file_name, fallback=None): path = find_resource(file_name) if path.exists(): return str(path) - return fallback or str(path) + return fallback or str(path) + + +def set_windows_app_user_model_id(): + if sys.platform != 'win32': + return + try: + import ctypes + ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID( + "yibin.keyi.cs55.q05.language.installer" + ) + except Exception: + pass + + class ADKAPKGUI: def __init__(self): + set_windows_app_user_model_id() self.root = tk.Tk() self.root.title("长安语言刷入工具") self.root.geometry("900x620") @@ -101,7 +116,9 @@ class ADKAPKGUI: self.lang = 'zh' self.T = { 'zh': { + 'window_title': 'CS55Plus/Q05 语言刷入工具', 'title': 'CS55Plus/Q05', + 'btn_unlock_install': '🔓 解锁安装权限', 'btn_push': '📦 刷入语言包', 'btn_install': '📱 安装App', 'btn_language': '🌐 语言设置', @@ -111,6 +128,8 @@ class ADKAPKGUI: 'btn_disable_upgrade': '❌ 禁用升级', 'btn_clear_log': '🗑 清空日志', 'btn_query_pwd': '查询密码', + 'pwd_query_label': '工程密码查询:', + 'vin_placeholder': '请输入VIN', 'device_label': '设备:', 'vin_label': 'VIN码:', 'auth_label': '授权:', @@ -127,15 +146,60 @@ class ADKAPKGUI: 'hint_factory': '🔧 关闭车辆WI-FI和4G网络,拨号获取的密码进入工程模式', 'hotspot_title': '📶 电脑热点', 'hotspot_start': '🔧 打开热点设置', + 'hotspot_name_detecting': '名称: 检测中...', + 'hotspot_name_value': '名称: {ssid}', + 'hotspot_name_empty': '名称: 未配置', + 'hotspot_pwd_default': '密码: changan2024', + 'hotspot_pwd_value': '密码: {password}', + 'hotspot_status_value': '状态: {status}', + 'hotspot_status_off': '状态: 未启动', 'hint_title': '💡 使用提示', + 'hint_lines': [ + '1. 确保电脑已开启热点', + '2. 拨号进入工厂模式,点击调试工具', + '3. 需要云端认证时,点击车机状态栏', + ' Wi-Fi图标,连接上方显示的热点', + '4. 连接后点击车机“云端认证”按钮', + '5. 打开ADB后即可正常刷入语言包', + ], 'theme_dark': '🌙 暗色', 'theme_light': '☀️ 亮色', 'lang_zh': '中', 'lang_en': 'EN', - 'about_company': '宜宾科宜科技有限公司 - 出口改装一站式服务', + 'log_lang_changed': '语言已切换为中文', + 'log_cleared': '日志已清空', + 'log_unlock_success': '安装权限已解锁', + 'log_unlock_failed': '安装权限解锁失败: {output}', + 'msg_success_title': '成功', + 'msg_error_title': '错误', + 'msg_warn_title': '警告', + 'msg_device_not_connected_title': '设备未连接', + 'msg_device_not_connected': '请先连接设备并点击「检查」按钮刷新状态!', + 'msg_unlock_success': '安装权限已解锁,可以继续安装或刷入语言包。', + 'msg_unlock_failed': '安装权限解锁失败:{output}', + 'msg_input_vin': '请输入VIN码', + 'msg_need_vin': '请先刷新设备状态并获取VIN码', + 'msg_auth_failed_title': '授权失败', + 'msg_device_unauthorized': '设备未授权', + 'msg_data_prepare_failed': '数据准备失败!', + 'msg_resource_prepare_failed': '资源准备失败!', + 'msg_resource_dir_missing': '资源目录未找到', + 'quick_lang_title': '快捷语言设置', + 'quick_lang_header': '选择目标语言', + 'quick_lang_hint': '点击按钮即可将系统语言切换为对应语言,重启后生效', + 'quick_lang_system': '⚙️ 打开系统语言设置(手动选择)', + 'quick_lang_success_title': '设置成功', + 'quick_lang_success': '系统语言已设置为 {language}\n\n⚠️ 请重启设备使其生效。', + 'quick_lang_failed_title': '设置失败', + 'quick_lang_failed': '语言设置失败!\n\n{output}', + 'quick_lang_names': ['🇨🇳 中文', '英 English', '俄 Русский', '法 Français', '西 Español', '葡 Português', '意 Italiano', '阿 العربية'], + 'log_quick_lang_success': '语言已设置为 {language}', + 'log_quick_lang_failed': '语言设置失败: {output}', }, 'en': { + 'window_title': 'CS55Plus/Q05 Language Installer', 'title': 'CS55Plus/Q05', + 'btn_unlock_install': '🔓 Unlock Install', 'btn_push': '📦 Flash Lang Pkg', 'btn_install': '📱 Install App', 'btn_language': '🌐 Language', @@ -145,6 +209,8 @@ class ADKAPKGUI: 'btn_disable_upgrade': '❌ Disable OTA', 'btn_clear_log': '🗑 Clear Log', 'btn_query_pwd': 'Query Pwd', + 'pwd_query_label': 'Factory password:', + 'vin_placeholder': 'Enter VIN', 'device_label': 'Device:', 'vin_label': 'VIN:', 'auth_label': 'Auth:', @@ -161,12 +227,55 @@ class ADKAPKGUI: 'hint_factory': '🔧 Turn off WiFi & 4G, enter factory mode with dial code', 'hotspot_title': '📶 Hotspot', 'hotspot_start': '🔧 Open Hotspot Settings', + 'hotspot_name_detecting': 'Name: detecting...', + 'hotspot_name_value': 'Name: {ssid}', + 'hotspot_name_empty': 'Name: not configured', + 'hotspot_pwd_default': 'Password: changan2024', + 'hotspot_pwd_value': 'Password: {password}', + 'hotspot_status_value': 'Status: {status}', + 'hotspot_status_off': 'Status: off', 'hint_title': '💡 Tips', + 'hint_lines': [ + '1. Make sure the PC hotspot is enabled', + '2. Enter factory mode from the dialer', + '3. When cloud auth is needed, tap the', + ' Wi-Fi icon and connect to the hotspot', + '4. Tap Cloud Auth on the vehicle screen', + '5. Enable ADB, then flash the language pack', + ], 'theme_dark': '🌙 Dark', 'theme_light': '☀️ Light', 'lang_zh': '中', 'lang_en': 'EN', - 'about_company': 'Yibin Keyi Technology - Export Modification Service', + 'log_lang_changed': 'Language switched to English', + 'log_cleared': 'Log cleared', + 'log_unlock_success': 'Install permission unlocked', + 'log_unlock_failed': 'Install permission unlock failed: {output}', + 'msg_success_title': 'Success', + 'msg_error_title': 'Error', + 'msg_warn_title': 'Warning', + 'msg_device_not_connected_title': 'Device Not Connected', + 'msg_device_not_connected': 'Connect the device and click Check first.', + 'msg_unlock_success': 'Install permission is unlocked. You can continue installing or flashing.', + 'msg_unlock_failed': 'Install permission unlock failed: {output}', + 'msg_input_vin': 'Enter VIN', + 'msg_need_vin': 'Refresh device status and get VIN first.', + 'msg_auth_failed_title': 'Authorization Failed', + 'msg_device_unauthorized': 'Device is not authorized', + 'msg_data_prepare_failed': 'Data preparation failed.', + 'msg_resource_prepare_failed': 'Resource preparation failed.', + 'msg_resource_dir_missing': 'Resource directory not found', + 'quick_lang_title': 'Quick Language', + 'quick_lang_header': 'Choose target language', + 'quick_lang_hint': 'Tap a button to switch system language. Reboot to apply.', + 'quick_lang_system': '⚙️ Open system language settings', + 'quick_lang_success_title': 'Language Set', + 'quick_lang_success': 'System language was set to {language}.\n\n⚠️ Reboot the device to apply it.', + 'quick_lang_failed_title': 'Language Failed', + 'quick_lang_failed': 'Language setting failed.\n\n{output}', + 'quick_lang_names': ['Chinese', 'English', 'Russian', 'French', 'Spanish', 'Portuguese', 'Italian', 'Arabic'], + 'log_quick_lang_success': 'Language set to {language}', + 'log_quick_lang_failed': 'Language setting failed: {output}', } } @@ -182,10 +291,12 @@ class ADKAPKGUI: self.device_connected = False self._refreshing = False # 防止并发刷新 self.debug_mode = False # 调试模式 + self.root.title(self.t('window_title')) # 设置样式 self.setup_styles() self.setup_ui() + self.root.after(200, self.set_window_icon) self.center_window() # 检查环境 @@ -194,6 +305,38 @@ class ADKAPKGUI: # 启动设备状态监控 self.start_device_monitor() + def set_window_icon(self): + """Set the Tk window/taskbar icon at runtime; PyInstaller --icon only sets the exe file icon.""" + try: + icon_path = find_resource("cs55-q05.ico") + if icon_path.exists(): + self.root.iconbitmap(str(icon_path)) + self._set_windows_hwnd_icon(icon_path) + except Exception: + pass + + def _set_windows_hwnd_icon(self, icon_path): + if sys.platform != 'win32': + return + try: + import ctypes + user32 = ctypes.windll.user32 + hwnd = self.root.winfo_id() + image_icon = 1 + lr_loadfromfile = 0x00000010 + wm_seticon = 0x0080 + icon_small = 0 + icon_big = 1 + path = str(icon_path) + small = user32.LoadImageW(None, path, image_icon, 16, 16, lr_loadfromfile) + big = user32.LoadImageW(None, path, image_icon, 32, 32, lr_loadfromfile) + if small: + user32.SendMessageW(hwnd, wm_seticon, icon_small, small) + if big: + user32.SendMessageW(hwnd, wm_seticon, icon_big, big) + except Exception: + pass + def setup_styles(self): """设置自定义样式""" style = ttk.Style() @@ -235,28 +378,22 @@ class ADKAPKGUI: title_frame.pack_propagate(False) # 标题 - title_label = tk.Label(title_frame, - text="🚀 CS55Plus/Q05", - font=('Microsoft YaHei', 18, 'bold'), - fg=self.colors['accent'], - bg=self.colors['bg_dark']) - title_label.pack() - - subtitle_label = tk.Label(title_frame, - text="@宜宾科宜科技有限公司 - 出口改装一站式服务", - font=('Microsoft YaHei', 9), - fg=self.colors['text_secondary'], - bg=self.colors['bg_dark']) - subtitle_label.pack() + self.title_label = tk.Label(title_frame, + text="🚀 " + self.t('title'), + font=('Microsoft YaHei', 18, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.title_label.pack() # 工程密码查询区域 pwd_query_frame = tk.Frame(left_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) pwd_query_frame.pack(fill=tk.X, pady=(0, 5), padx=5) - tk.Label(pwd_query_frame, text="工程密码查询:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT, padx=(10, 5), pady=5) + self.pwd_query_label = tk.Label(pwd_query_frame, text=self.t('pwd_query_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.pwd_query_label.pack(side=tk.LEFT, padx=(10, 5), pady=5) self.vin_input = tk.Entry(pwd_query_frame, font=('Consolas', 9), @@ -265,12 +402,12 @@ class ADKAPKGUI: insertbackground='white', relief=tk.FLAT, width=20) - self.vin_input.insert(0, "请输入VIN") + self.vin_input.insert(0, self.t('vin_placeholder')) self.vin_input.bind("", self._on_vin_input_focus_in) self.vin_input.bind("", self._on_vin_input_focus_out) self.vin_input.pack(side=tk.LEFT, padx=5, pady=5) - self.btn_query_pwd = tk.Button(pwd_query_frame, text="查询密码", + self.btn_query_pwd = tk.Button(pwd_query_frame, text=self.t('btn_query_pwd'), command=self.query_password_by_vin, font=('Microsoft YaHei', 8), fg='white', @@ -289,10 +426,11 @@ class ADKAPKGUI: # 工厂模式提示 factory_hint_frame = tk.Frame(left_frame, bg=self.colors['bg_dark']) factory_hint_frame.pack(fill=tk.X, pady=(0, 3)) - tk.Label(factory_hint_frame, text="🔧 关闭车辆WI-FI和4G网络,拨号获取的密码进入工程模式", - font=('Microsoft YaHei', 8), - fg=self.colors['warning'], - bg=self.colors['bg_dark']).pack(side=tk.LEFT, padx=2) + self.hint_label = tk.Label(factory_hint_frame, text=self.t('hint_factory'), + font=('Microsoft YaHei', 8), + fg=self.colors['warning'], + bg=self.colors['bg_dark']) + self.hint_label.pack(side=tk.LEFT, padx=2) # 按钮区域(两排,每排5个) button_frame = tk.Frame(left_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) @@ -305,26 +443,32 @@ class ADKAPKGUI: 'relief': tk.FLAT, 'cursor': 'hand2', 'height': 1, - 'width': 14 + 'width': 13 } # 第一排按钮 row1_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) row1_frame.pack(pady=(8, 4)) - self.btn_push = tk.Button(row1_frame, text="📦 刷入语言包", + self.btn_push = tk.Button(row1_frame, text=self.t('btn_push'), command=self.push_all_apks, bg=self.colors['accent'], **btn_params) self.btn_push.pack(side=tk.LEFT, padx=4) - self.btn_install_all = tk.Button(row1_frame, text="📱 安装App", + self.btn_unlock_install = tk.Button(row1_frame, text=self.t('btn_unlock_install'), + command=self.unlock_install_permission, + bg=self.colors['warning'], + **btn_params) + self.btn_unlock_install.pack(side=tk.LEFT, padx=4) + + self.btn_install_all = tk.Button(row1_frame, text=self.t('btn_install'), command=self.install_apps, bg=self.colors['accent'], **btn_params) self.btn_install_all.pack(side=tk.LEFT, padx=4) - self.btn_language = tk.Button(row1_frame, text="🌐 语言设置", + self.btn_language = tk.Button(row1_frame, text=self.t('btn_language'), command=self.open_language_quick_set, bg=self.colors['accent'], **btn_params) @@ -334,25 +478,25 @@ class ADKAPKGUI: row2_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) row2_frame.pack(pady=(4, 8)) - self.btn_timezone = tk.Button(row2_frame, text="⏰ 时区设置", + self.btn_timezone = tk.Button(row2_frame, text=self.t('btn_timezone'), command=self.open_timezone_settings, bg=self.colors['accent'], **btn_params) self.btn_timezone.pack(side=tk.LEFT, padx=4) - self.btn_settings = tk.Button(row2_frame, text="⚙️ 安卓设置", + self.btn_settings = tk.Button(row2_frame, text=self.t('btn_settings'), command=self.open_android_settings, bg=self.colors['accent'], **btn_params) self.btn_settings.pack(side=tk.LEFT, padx=4) - self.btn_reboot = tk.Button(row2_frame, text="🔄 重启设备", + self.btn_reboot = tk.Button(row2_frame, text=self.t('btn_reboot'), command=self.reboot_device, bg=self.colors['warning'], **btn_params) self.btn_reboot.pack(side=tk.LEFT, padx=4) - self.btn_exit = tk.Button(row2_frame, text="❌ 禁用升级", + self.btn_exit = tk.Button(row2_frame, text=self.t('btn_disable_upgrade'), command=self.on_disable_upgrade, bg=self.colors['error'], **btn_params) @@ -371,12 +515,13 @@ class ADKAPKGUI: self.status_indicator.pack(side=tk.LEFT) self.status_dot = self.status_indicator.create_oval(2, 2, 8, 8, fill='#636e72') - tk.Label(status_indicator_frame, text="设备:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT, padx=(5, 3)) + self.device_label = tk.Label(status_indicator_frame, text=self.t('device_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.device_label.pack(side=tk.LEFT, padx=(5, 3)) - self.device_status_label = tk.Label(status_indicator_frame, text="未检测", + self.device_status_label = tk.Label(status_indicator_frame, text=self.t('status_detecting'), font=('Microsoft YaHei', 9, 'bold'), fg='#636e72', bg=self.colors['bg_light']) @@ -385,11 +530,12 @@ class ADKAPKGUI: # VIN信息 vin_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) vin_frame.pack(side=tk.LEFT, padx=20, pady=5) - tk.Label(vin_frame, text="VIN码:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT) - self.vin_label = tk.Label(vin_frame, text="未获取", + self.vin_label_title = tk.Label(vin_frame, text=self.t('vin_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.vin_label_title.pack(side=tk.LEFT) + self.vin_label = tk.Label(vin_frame, text=self.t('vin_none'), font=('Microsoft YaHei', 9, 'bold'), fg='#636e72', bg=self.colors['bg_light']) @@ -398,25 +544,26 @@ class ADKAPKGUI: # 授权状态 auth_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) auth_frame.pack(side=tk.LEFT, padx=20, pady=5) - tk.Label(auth_frame, text="授权:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT) - self.auth_label = tk.Label(auth_frame, text="未验证", + self.auth_label_title = tk.Label(auth_frame, text=self.t('auth_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.auth_label_title.pack(side=tk.LEFT) + self.auth_label = tk.Label(auth_frame, text=self.t('auth_none'), font=('Microsoft YaHei', 9, 'bold'), fg='#636e72', bg=self.colors['bg_light']) self.auth_label.pack(side=tk.LEFT, padx=(5, 0)) # 刷新按钮 - refresh_btn = tk.Button(status_bar_frame, text="🔄 检查", - command=lambda: self.refresh_device_status(force=True), - font=('Microsoft YaHei', 8), - fg=self.colors['accent'], - bg=self.colors['bg_light'], - relief=tk.FLAT, - cursor='hand2') - refresh_btn.pack(side=tk.RIGHT, padx=10, pady=5) + self.btn_refresh = tk.Button(status_bar_frame, text=self.t('btn_refresh'), + command=lambda: self.refresh_device_status(force=True), + font=('Microsoft YaHei', 8), + fg=self.colors['accent'], + bg=self.colors['bg_light'], + relief=tk.FLAT, + cursor='hand2') + self.btn_refresh.pack(side=tk.RIGHT, padx=10, pady=5) # 解压进度条框架 progress_frame = tk.Frame(left_frame, bg=self.colors['bg_dark']) @@ -448,12 +595,13 @@ class ADKAPKGUI: log_title_frame.pack(fill=tk.X) log_title_frame.pack_propagate(False) - tk.Label(log_title_frame, text="📋 运行日志", - font=('Microsoft YaHei', 10, 'bold'), - fg=self.colors['accent'], - bg=self.colors['bg_dark']).pack(side=tk.LEFT, padx=10) + self.log_title_label = tk.Label(log_title_frame, text=self.t('log_title'), + font=('Microsoft YaHei', 10, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.log_title_label.pack(side=tk.LEFT, padx=10) - self.btn_clear = tk.Button(log_title_frame, text="🗑 清空日志", + self.btn_clear = tk.Button(log_title_frame, text=self.t('btn_clear_log'), command=self.clear_log, font=('Microsoft YaHei', 8), fg=self.colors['text_secondary'], @@ -489,14 +637,14 @@ class ADKAPKGUI: bottom_status.pack(fill=tk.X, pady=(5, 0)) bottom_status.pack_propagate(False) - self.status_text = tk.Label(bottom_status, text="就绪", + self.status_text = tk.Label(bottom_status, text=self.t('status_ready'), font=('Microsoft YaHei', 8), fg=self.colors['text_secondary'], bg=self.colors['bg_light']) self.status_text.pack(side=tk.LEFT, padx=10) # 主题和语言切换按钮 - self.btn_theme_switch = tk.Button(bottom_status, text="🌙 暗色", + self.btn_theme_switch = tk.Button(bottom_status, text=self.t('theme_light'), command=self.toggle_theme, font=('Microsoft YaHei', 8), fg=self.colors['accent'], @@ -520,30 +668,31 @@ class ADKAPKGUI: hotspot_card = tk.Frame(right_frame, bg=self.colors['bg_dark'], relief=tk.RAISED, bd=1) hotspot_card.pack(fill=tk.X, padx=5, pady=(10, 5)) - tk.Label(hotspot_card, text="📶 电脑热点", - font=('Microsoft YaHei', 11, 'bold'), - fg=self.colors['accent'], - bg=self.colors['bg_dark']).pack(pady=(8, 5)) + self.hotspot_title_label = tk.Label(hotspot_card, text=self.t('hotspot_title'), + font=('Microsoft YaHei', 11, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.hotspot_title_label.pack(pady=(8, 5)) - self.hotspot_ssid_label = tk.Label(hotspot_card, text="名称: 检测中...", + self.hotspot_ssid_label = tk.Label(hotspot_card, text=self.t('hotspot_name_detecting'), font=('Microsoft YaHei', 9), fg=self.colors['text'], bg=self.colors['bg_dark']) self.hotspot_ssid_label.pack(anchor='w', padx=10, pady=2) - self.hotspot_pwd_label = tk.Label(hotspot_card, text="密码: changan2024", + self.hotspot_pwd_label = tk.Label(hotspot_card, text=self.t('hotspot_pwd_default'), font=('Microsoft YaHei', 9), fg=self.colors['text'], bg=self.colors['bg_dark']) self.hotspot_pwd_label.pack(anchor='w', padx=10, pady=2) - self.hotspot_status_label = tk.Label(hotspot_card, text="状态: 未启动", + self.hotspot_status_label = tk.Label(hotspot_card, text=self.t('hotspot_status_off'), font=('Microsoft YaHei', 9), fg=self.colors['warning'], bg=self.colors['bg_dark']) self.hotspot_status_label.pack(anchor='w', padx=10, pady=2) - self.btn_hotspot = tk.Button(hotspot_card, text="🔧 打开热点设置", + self.btn_hotspot = tk.Button(hotspot_card, text=self.t('hotspot_start'), command=self.start_hotspot_action, font=('Microsoft YaHei', 8), fg='white', @@ -556,36 +705,24 @@ class ADKAPKGUI: tk.Frame(right_frame, bg=self.colors['border'], height=1).pack(fill=tk.X, padx=8, pady=5) # 使用提示卡片 - hint_card = tk.Frame(right_frame, bg=self.colors['bg_dark'], relief=tk.RAISED, bd=1) - hint_card.pack(fill=tk.X, padx=5, pady=5) + self.hint_card = tk.Frame(right_frame, bg=self.colors['bg_dark'], relief=tk.RAISED, bd=1) + self.hint_card.pack(fill=tk.X, padx=5, pady=5) - tk.Label(hint_card, text="💡 使用提示", - font=('Microsoft YaHei', 11, 'bold'), - fg=self.colors['warning'], - bg=self.colors['bg_dark']).pack(pady=(8, 5)) + self.hint_title_label = tk.Label(self.hint_card, text=self.t('hint_title'), + font=('Microsoft YaHei', 11, 'bold'), + fg=self.colors['warning'], + bg=self.colors['bg_dark']) + self.hint_title_label.pack(pady=(8, 5)) - hint_lines = [ - "1. 确保电脑已开启热点", - "2. 拨号进入工厂模式,点击调试工具", - "3. 需要云端认证时,点击车机状态栏", - "Wi-Fi图标,连接上方显示的热点", - "4. 连接后点击车机“云端认证”按钮", - "5. 打开ADB后即可正常刷入语言包", - ] - for line in hint_lines: - tk.Label(hint_card, text=line, - font=('Microsoft YaHei', 8), - fg=self.colors['text_secondary'], - bg=self.colors['bg_dark'], - justify=tk.LEFT, - anchor='w').pack(anchor='w', padx=10) + self.hint_line_labels = [] + self._render_hint_lines() # 绑定悬停效果 self.bind_hover_effects() def bind_hover_effects(self): """绑定按钮悬停效果""" - buttons = [self.btn_push, self.btn_install_all, + buttons = [self.btn_push, self.btn_unlock_install, self.btn_install_all, self.btn_language, self.btn_timezone, self.btn_settings, self.btn_reboot, self.btn_clear, self.btn_exit, self.btn_query_pwd, self.btn_hotspot] @@ -634,11 +771,37 @@ class ADKAPKGUI: def t(self, key): return self.T.get(self.lang, self.T['zh']).get(key, key) + def tf(self, key, **kwargs): + return str(self.t(key)).format(**kwargs) + + def is_placeholder_vin(self, text): + return text in (self.T['zh']['vin_placeholder'], self.T['en']['vin_placeholder']) + def toggle_lang(self): self.lang = 'en' if self.lang == 'zh' else 'zh' self.btn_lang_switch.config(text=self.t('lang_en') if self.lang == 'zh' else self.t('lang_zh')) self._refresh_ui_texts() - self.log(f"语言已切换为 {'English' if self.lang == 'en' else '中文'}", "INFO") + self.log(self.t('log_lang_changed'), "INFO") + + def _render_hint_lines(self): + if not getattr(self, 'hint_card', None): + return + for label in getattr(self, 'hint_line_labels', []): + label.destroy() + self.hint_line_labels = [] + for line in self.t('hint_lines'): + label = tk.Label( + self.hint_card, + text=line, + font=('Microsoft YaHei', 8), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark'], + justify=tk.LEFT, + anchor='w', + wraplength=205 + ) + label.pack(anchor='w', fill=tk.X, padx=10, pady=1) + self.hint_line_labels.append(label) def toggle_theme(self): if self.theme == 'dark': @@ -672,9 +835,10 @@ class ADKAPKGUI: def _refresh_ui_texts(self): t = self.t + self.root.title(t('window_title')) widgets = [ (getattr(self, 'title_label', None), 'title', None), - (getattr(self, 'subtitle_label', None), 'about_company', None), + (getattr(self, 'btn_unlock_install', None), 'btn_unlock_install', None), (getattr(self, 'btn_push', None), 'btn_push', None), (getattr(self, 'btn_install_all', None), 'btn_install', None), (getattr(self, 'btn_language', None), 'btn_language', None), @@ -691,22 +855,41 @@ class ADKAPKGUI: (getattr(self, 'auth_label_title', None), 'auth_label', None), (getattr(self, 'btn_refresh', None), 'btn_refresh', None), (getattr(self, 'hint_label', None), 'hint_factory', None), + (getattr(self, 'pwd_query_label', None), 'pwd_query_label', None), + (getattr(self, 'hotspot_title_label', None), 'hotspot_title', None), + (getattr(self, 'hotspot_ssid_label', None), 'hotspot_name_detecting', None), + (getattr(self, 'hotspot_pwd_label', None), 'hotspot_pwd_default', None), + (getattr(self, 'hotspot_status_label', None), 'hotspot_status_off', None), + (getattr(self, 'btn_hotspot', None), 'hotspot_start', None), + (getattr(self, 'hint_title_label', None), 'hint_title', None), ] for w, key, _ in widgets: - if w: w.config(text=t(key)) + if not w: + continue + text = t(key) + if key == 'title': + text = "🚀 " + text + w.config(text=text) self.btn_theme_switch.config(text=t('theme_light') if self.theme == 'dark' else t('theme_dark')) self.btn_lang_switch.config(text=t('lang_en') if self.lang == 'zh' else t('lang_zh')) + if self.is_placeholder_vin(self.vin_input.get()): + self.vin_input.delete(0, tk.END) + self.vin_input.insert(0, t('vin_placeholder')) + self._render_hint_lines() if self.vin: self._update_device_status_impl(self.device_connected, self.vin, getattr(self, '_last_authorized', False)) def _log_impl(self, message, level="INFO"): """日志写入的实际实现(必须在主线程调用)""" + if not self.debug_mode and level in ("INFO", "CMD"): + return timestamp = datetime.now().strftime("%H:%M:%S") log_entry = f"[{timestamp}] [{level}] {message}\n" self.log_text.insert(tk.END, log_entry, level) self.log_text.see(tk.END) + def log(self, message, level="INFO"): """添加日志(线程安全)""" self.run_on_ui_thread(self._log_impl, message, level) @@ -789,10 +972,35 @@ class ADKAPKGUI: if self.debug_mode: return True if not self.device_connected: - messagebox.showwarning("设备未连接", "请先连接设备并点击「检查」按钮刷新状态!") + messagebox.showwarning(self.t('msg_device_not_connected_title'), self.t('msg_device_not_connected')) return False return True + def unlock_install_permission(self): + """解锁安装权限。""" + if not self.check_device_connection(): + return + + def worker(): + ok, output = self.run_adb_shell('setprop vecentek.model 1') + if ok: + self.log(self.t('log_unlock_success'), "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t('msg_success_title'), + self.t('msg_unlock_success') + ) + else: + msg = output or self.t('msg_error_title') + self.log(self.tf('log_unlock_failed', output=msg), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_error_title'), + self.tf('msg_unlock_failed', output=msg) + ) + + threading.Thread(target=worker, daemon=True).start() + def start_device_monitor(self): """启动设备状态监控(每5秒检查一次)""" def monitor(): @@ -1189,7 +1397,7 @@ class ADKAPKGUI: if not ok: return False, f"push失败: {err}" - ok, err = self.run_adb_shell(f'pm install -r -d -f {temp_apk_path}') + ok, err = self.run_adb_shell(f'pm install -d -f -r {temp_apk_path}') self.run_adb_shell(f'rm -f {temp_apk_path}') if not ok: return False, f"install失败: {err}" @@ -1201,6 +1409,42 @@ class ADKAPKGUI: ok, _ = self.push_single_apk(apk_path, apk_name) return ok + def cleanup_preinstalled_apps_for_language(self): + """Disable and uninstall built-in apps before flashing language packages.""" + packages = [ + "com.wtcl.electronicdirections", + "com.tinnove.netease.music", + "com.changan.appmarket", + ] + failed = [] + + for package in packages: + disable_ok, disable_output = self.run_adb_shell(f'pm disable-user {package}') + uninstall_ok, uninstall_output = self.run_adb_shell(f'pm uninstall -k --user 0 {package}') + + if self.debug_mode: + if disable_ok: + self.log(f"禁用完成: {package}", "CMD") + else: + self.log(f"禁用失败: {package} {disable_output}", "CMD") + if uninstall_ok: + self.log(f"卸载完成: {package}", "CMD") + else: + self.log(f"卸载失败: {package} {uninstall_output}", "CMD") + + if not disable_ok or not uninstall_ok: + failed.append(package) + + if failed: + if self.debug_mode: + self.log("预置应用清理部分失败: " + ", ".join(failed), "WARNING") + else: + self.log("预置应用清理部分失败,继续刷入语言包", "WARNING") + return False + + self.log("预置应用清理完成", "SUCCESS") + return True + def push_all_apks(self): """推送APK并安装 —— 逸动版仅处理 app 目录,使用 pm install""" # 检查设备连接(仅 UI 层检查在主线程,其余工作进后台线程) @@ -1208,19 +1452,23 @@ class ADKAPKGUI: return if not self.vin: - messagebox.showwarning("警告", "请先刷新设备状态并获取VIN码") + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_need_vin')) return def do_push_all(): # 验证授权 if not self.check_authorization(self.vin): - self.run_on_ui_thread(lambda: messagebox.showerror("授权失败", "设备未授权")) + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_auth_failed_title'), self.t('msg_device_unauthorized')) + ) return # 获取解压密码 if not self.extract_password: if not self.fetch_package_password(): - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "数据准备失败!")) + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_data_prepare_failed')) + ) return # 解压 @@ -1229,12 +1477,16 @@ class ADKAPKGUI: self.show_progress(True, is_push=False) if not self.extract_package_silent(): self.show_progress(False, is_push=False) - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源准备失败!")) + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_prepare_failed')) + ) return self.show_progress(False, is_push=False) if not self.apps_dir or not self.apps_dir.exists(): - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源目录未找到")) + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_dir_missing')) + ) return # 开始刷入 @@ -1242,6 +1494,7 @@ class ADKAPKGUI: self.log("开始刷入语言包...", "INFO") self.run_adb_shell('mkdir -p /data/local/tmp') self.run_adb_shell('setprop vecentek.model 1') + self.cleanup_preinstalled_apps_for_language() success_count = 0 try: @@ -1255,11 +1508,15 @@ class ADKAPKGUI: apk_name = apk_path.stem ok, _ = self.push_single_apk(apk_path, apk_name) if ok: - self.log(f"安装成功: {apk_name}.apk", "SUCCESS") + if self.debug_mode: + self.log(f"安装成功: {apk_name}.apk", "SUCCESS") success_count += 1 else: - self.log(f"安装失败: {apk_name}.apk", "ERROR") - self.update_progress(i, total, "正在刷入...", is_push=True) + if self.debug_mode: + self.log(f"安装失败: {apk_name}.apk", "ERROR") + else: + self.log(f"语言包刷入失败: {i}/{total}", "ERROR") + self.update_progress(i, total, "正在刷入", is_push=True) self.update_progress(total, total, "刷入完成", is_push=True) @@ -1268,7 +1525,6 @@ class ADKAPKGUI: else: self.log("语言包刷入失败", "ERROR") finally: - self.run_adb_shell('setprop vecentek.model 0') self.show_progress(False, is_push=True) threading.Thread(target=do_push_all, daemon=True).start() @@ -1339,7 +1595,6 @@ class ADKAPKGUI: self.log(f"安装过程异常: {str(e)}", "ERROR") self.run_on_ui_thread(messagebox.showerror, "安装失败", f"安装过程异常:{str(e)}") finally: - self.run_adb_shell('setprop vecentek.model 0') self.show_progress(False, is_push=True) threading.Thread(target=install, daemon=True).start() @@ -1379,7 +1634,6 @@ class ADKAPKGUI: except Exception as e: self.log(f"安装过程异常: {str(e)}", "ERROR") finally: - self.run_adb_shell('setprop vecentek.model 0') self.show_progress(False, is_push=True) threading.Thread(target=install, daemon=True).start() @@ -1398,7 +1652,7 @@ class ADKAPKGUI: # 创建弹窗 popup = tk.Toplevel(self.root) - popup.title("快捷语言设置") + popup.title(self.t('quick_lang_title')) popup.geometry("520x320") popup.configure(bg=self.colors['bg_dark']) popup.resizable(False, False) @@ -1412,29 +1666,21 @@ class ADKAPKGUI: popup.grab_set() # 标题 - header = tk.Label(popup, text="选择目标语言", + header = tk.Label(popup, text=self.t('quick_lang_header'), font=('Microsoft YaHei', 13, 'bold'), fg=self.colors['accent'], bg=self.colors['bg_dark']) header.pack(pady=(15, 10)) - hint = tk.Label(popup, text="点击按钮即可将系统语言切换为对应语言,重启后生效", + hint = tk.Label(popup, text=self.t('quick_lang_hint'), font=('Microsoft YaHei', 9), fg=self.colors['text_secondary'], bg=self.colors['bg_dark']) hint.pack(pady=(0, 12)) # 语言列表:(显示名, locale_code) - languages = [ - ("🇨🇳 中文", "zh-CN"), - ("英 English", "en-US"), - ("俄 Русский", "ru-RU"), - ("法 Français", "fr-FR"), - ("西 Español", "es-ES"), - ("葡 Português", "pt-BR"), - ("意 Italiano", "it-IT"), - ("阿 العربية", "ar-SA"), - ] + locale_codes = ["zh-CN", "en-US", "ru-RU", "fr-FR", "es-ES", "pt-BR", "it-IT", "ar-SA"] + languages = list(zip(self.t('quick_lang_names'), locale_codes)) # 创建按钮容器 btn_frame = tk.Frame(popup, bg=self.colors['bg_dark']) @@ -1468,7 +1714,7 @@ class ADKAPKGUI: sep = tk.Frame(popup, bg=self.colors['border'], height=1) sep.pack(fill=tk.X, padx=20, pady=(8, 6)) - sys_btn = tk.Button(popup, text="⚙️ 打开系统语言设置(手动选择)", + sys_btn = tk.Button(popup, text=self.t('quick_lang_system'), command=lambda: self._open_sys_and_close(popup), font=('Microsoft YaHei', 9), fg=self.colors['text_secondary'], @@ -1482,21 +1728,24 @@ class ADKAPKGUI: popup.destroy() def do_set(): - self.log(f"正在设置系统语言为: {language_name} ({locale_code})", "INFO") success, output = self.run_adb_shell( f'settings put system system_locales {locale_code}' ) if success: - self.log(f"✓ 语言已设置为 {language_name}", "SUCCESS") + self.log(self.tf('log_quick_lang_success', language=language_name), "SUCCESS") self.run_on_ui_thread( messagebox.showinfo, - "设置成功", - f"系统语言已设置为 {language_name}\n\n⚠️ 请重启设备使其生效。" + self.t('quick_lang_success_title'), + self.tf('quick_lang_success', language=language_name) ) else: - self.log(f"✗ 语言设置失败: {output}", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "设置失败", f"语言设置失败!\n\n{output}") + self.log(self.tf('log_quick_lang_failed', output=output), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('quick_lang_failed_title'), + self.tf('quick_lang_failed', output=output) + ) threading.Thread(target=do_set, daemon=True).start() @@ -1570,21 +1819,21 @@ class ADKAPKGUI: def _on_vin_input_focus_in(self, event): """输入框获得焦点时清除占位符""" - if self.vin_input.get() == "请输入VIN": + if self.is_placeholder_vin(self.vin_input.get()): self.vin_input.delete(0, tk.END) self.vin_input.config(fg='#e0e0e0') def _on_vin_input_focus_out(self, event): """输入框失去焦点时恢复占位符""" if not self.vin_input.get(): - self.vin_input.insert(0, "请输入VIN") + self.vin_input.insert(0, self.t('vin_placeholder')) self.vin_input.config(fg='#636e72') def query_password_by_vin(self): """通过VIN查询密码""" vin = self.vin_input.get().strip() - if not vin: - messagebox.showwarning("提示", "请输入VIN码") + if not vin or self.is_placeholder_vin(vin): + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_input_vin')) return def do_query(): @@ -1696,7 +1945,6 @@ class ADKAPKGUI: self.log(f"安装过程异常: {str(e)}", "ERROR") self.run_on_ui_thread(messagebox.showerror, "安装失败", f"安装过程异常:{str(e)}") finally: - self.run_adb_shell('setprop vecentek.model 0') self.show_progress(False, is_push=True) threading.Thread(target=install, daemon=True).start() @@ -1708,20 +1956,48 @@ class ADKAPKGUI: def modify_hosts(self): """修改hosts文件,添加云端认证DNS映射""" hosts_path = r"C:\Windows\System32\drivers\etc\hosts" - entry = "103.236.55.140 spm.auto-pai.com" + host_ip = "103.236.55.140" + host_name = "spm.auto-pai.com" + entry = f"{host_ip} {host_name}" try: - with open(hosts_path, 'r', encoding='utf-8') as f: - content = f.read() + try: + with open(hosts_path, 'r', encoding='utf-8') as f: + lines = f.readlines() + except UnicodeDecodeError: + with open(hosts_path, 'r', encoding='gbk', errors='replace') as f: + lines = f.readlines() - if entry in content: - # self.log("hosts条目已存在,无需修改", "INFO") + new_lines = [] + changed = False + has_exact = False + for line in lines: + stripped = line.strip() + if not stripped or stripped.startswith('#'): + new_lines.append(line) + continue + + body, _, _ = line.partition('#') + parts = body.split() + if len(parts) >= 2 and host_name.lower() in [p.lower() for p in parts[1:]]: + if parts[0] == host_ip and len(parts) == 2: + has_exact = True + new_lines.append(line) + else: + changed = True + continue + + new_lines.append(line) + + if has_exact and not changed: return True - with open(hosts_path, 'a', encoding='utf-8') as f: - f.write(f"\n{entry}\n") + if not new_lines or (new_lines[-1] and not new_lines[-1].endswith(('\n', '\r'))): + new_lines.append('\n') + new_lines.append(f"{entry}\n") - # self.log(f"已添加hosts条目: {entry}", "SUCCESS") + with open(hosts_path, 'w', encoding='utf-8', newline='') as f: + f.writelines(new_lines) return True except PermissionError: self.log("需要管理员权限,请以管理员身份运行", "WARNING") @@ -1873,15 +2149,15 @@ class ADKAPKGUI: def _refresh_hotspot_display_impl(self, ssid, password, status): """刷新热点显示的UI实现""" if ssid: - self.hotspot_ssid_label.config(text=f"名称: {ssid}") + self.hotspot_ssid_label.config(text=self.tf('hotspot_name_value', ssid=ssid)) else: - self.hotspot_ssid_label.config(text="名称: 未配置") + self.hotspot_ssid_label.config(text=self.t('hotspot_name_empty')) if password: - self.hotspot_pwd_label.config(text=f"密码: {password}") + self.hotspot_pwd_label.config(text=self.tf('hotspot_pwd_value', password=password)) else: - self.hotspot_pwd_label.config(text="密码: changan2024") + self.hotspot_pwd_label.config(text=self.t('hotspot_pwd_default')) self.hotspot_status_label.config( - text=f"状态: {status}", + text=self.tf('hotspot_status_value', status=status), fg=self.colors['success'] if '已启动' in status else self.colors['warning'] ) diff --git a/CS55-Q05/cs55-q05.ico b/CS55-Q05/cs55-q05.ico new file mode 100644 index 0000000000000000000000000000000000000000..ad7d089147e66894dfdb373a6e591e27bf9ea187 GIT binary patch literal 138477 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 z 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 +cd /d "%~dp0" +set "ROOT=%~dp0.." +set "TOOLS=%ROOT%\tools" +set "NAME=CS55-Q05-Installer" +set "SRC=CS55-Q05_Installer.py" +set "ICON=cs55-q05.ico" +title %NAME% - Cython Build + +echo ============================================================ +echo %NAME% - Cython Build +echo ============================================================ +echo. + +where python >nul 2>&1 +if errorlevel 1 ( + echo [ERROR] Python not found + pause + exit /b 1 +) +for /f "delims=" %%i in ('where python') do set "PY=%%i" +echo Python: %PY% + +if not exist "%SRC%" ( + echo [ERROR] Source not found: %SRC% + pause + exit /b 1 +) +if not exist "%ICON%" ( + echo [ERROR] Icon not found: %ICON% + pause + exit /b 1 +) +if not exist "%TOOLS%\adb.exe" ( + echo [ERROR] adb.exe not found in %TOOLS% + pause + exit /b 1 +) +if not exist "%TOOLS%\7za.exe" ( + echo [ERROR] 7za.exe not found in %TOOLS% + pause + exit /b 1 +) + +echo [1/6] Installing deps... +%PY% -m pip install pyinstaller cython pyzipper -q +if errorlevel 1 ( + %PY% -m pip install pyinstaller cython pyzipper -q -i https://pypi.tuna.tsinghua.edu.cn/simple +) +if errorlevel 1 ( + echo [ERROR] Dependency install failed + pause + exit /b 1 +) + +echo [2/6] Clean... +if exist "dist_cy" rmdir /s /q dist_cy 2>nul +if exist "build" rmdir /s /q build 2>nul +if exist "dist" rmdir /s /q dist 2>nul +if exist "%NAME%.spec" del /q "%NAME%.spec" 2>nul + +echo [3/6] Cython compile... +mkdir dist_cy 2>nul +copy "%SRC%" dist_cy\_core.py >nul + +%PY% -c "open('dist_cy/setup_cython.py','w',encoding='utf-8').write('from setuptools import setup\nfrom Cython.Build import cythonize\nsetup(ext_modules=cythonize(\"_core.py\", compiler_directives={\"language_level\":\"3\"}))\n')" + +cd dist_cy +%PY% setup_cython.py build_ext --inplace +if errorlevel 1 ( + cd .. + echo [ERROR] Cython failed. Build stopped. + pause + exit /b 1 +) + +set "PYD=" +for %%f in (_core*.pyd) do set "PYD=%%f" +if "%PYD%"=="" ( + cd .. + echo [ERROR] No Cython PYD generated. Build stopped. + pause + exit /b 1 +) +echo PYD: %PYD% +copy "%PYD%" _core.pyd >nul +if errorlevel 1 ( + cd .. + echo [ERROR] Failed to copy Cython PYD + pause + exit /b 1 +) + +%PY% -c "open('launcher.py','w',encoding='utf-8').write('# -*- coding: utf-8 -*-\nfrom _core import main\nmain()\n')" + +echo [4/6] Copy resources... +copy "%TOOLS%\adb.exe" . >nul +copy "%TOOLS%\AdbWinApi.dll" . >nul +copy "%TOOLS%\AdbWinUsbApi.dll" . >nul +copy "%TOOLS%\7za.exe" . >nul +copy "..\%ICON%" . >nul +if errorlevel 1 ( + cd .. + echo [ERROR] Copy resources failed + pause + exit /b 1 +) + +echo [5/6] PyInstaller... +%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ICON%" --add-data "adb.exe;." --add-data "AdbWinApi.dll;." --add-data "AdbWinUsbApi.dll;." --add-data "7za.exe;." --add-data "%ICON%;." --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin launcher.py +if errorlevel 1 ( + cd .. + echo [ERROR] PyInstaller failed + pause + exit /b 1 +) + +echo [6/6] Cleanup... +del /q _core.py _core.c _core.pyd %PYD% launcher.py setup_cython.py "%ICON%" 2>nul +rmdir /s /q build 2>nul +cd .. + +echo. +echo Done. +if exist "dist_cy\dist\%NAME%.exe" ( + echo Output: dist_cy\dist\%NAME%.exe +) else ( + echo [ERROR] Output exe was not generated + pause + exit /b 1 +) +pause diff --git a/Mazda-EZ60/Mazda-EZ60.py b/CS75Pro/CS75Pro_Installer.py similarity index 64% rename from Mazda-EZ60/Mazda-EZ60.py rename to CS75Pro/CS75Pro_Installer.py index f64d044..5ec13e8 100644 --- a/Mazda-EZ60/Mazda-EZ60.py +++ b/CS75Pro/CS75Pro_Installer.py @@ -5,13 +5,14 @@ import os import sys import subprocess import json -import threading import re +import threading import tkinter as tk from tkinter import ttk, scrolledtext, filedialog, messagebox, simpledialog from pathlib import Path from urllib.request import urlopen, Request from urllib.error import URLError, HTTPError +from urllib.parse import urlencode from datetime import datetime import zipfile try: @@ -58,11 +59,30 @@ def find_tool(file_name, fallback=None): path = find_resource(file_name) if path.exists(): return str(path) - return fallback or str(path) + return fallback or str(path) + + +def set_windows_app_user_model_id(): + if sys.platform != 'win32': + return + try: + import ctypes + ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID( + "yibin.keyi.cs75pro.language.installer" + ) + except Exception: + pass + + class ADKAPKGUI: + # CS75Pro package-key vehicleName is intentionally hardcoded. + # Do not replace this with auth-check data.vehicleName in future edits. + PACKAGE_KEY_VEHICLE_NAME = "CS75Pro" + def __init__(self): + set_windows_app_user_model_id() self.root = tk.Tk() - self.root.title("Mazda-EZ60_OS-1.2适用") + self.root.title("长安语言刷入工具") self.root.geometry("900x620") self.root.resizable(True, True) @@ -100,7 +120,9 @@ class ADKAPKGUI: self.lang = 'zh' self.T = { 'zh': { - 'title': 'Mazda-EZ60_OS-1.2适用', + 'window_title': 'CS75Pro 语言刷入工具', + 'title': 'CS75Pro', + 'btn_unlock_install': '🔓 解锁安装权限', 'btn_push': '📦 刷入语言包', 'btn_install': '📱 安装App', 'btn_language': '🌐 语言设置', @@ -110,6 +132,8 @@ class ADKAPKGUI: 'btn_disable_upgrade': '❌ 禁用升级', 'btn_clear_log': '🗑 清空日志', 'btn_query_pwd': '查询密码', + 'pwd_query_label': '工程密码查询:', + 'vin_placeholder': '请输入VIN', 'device_label': '设备:', 'vin_label': 'VIN码:', 'auth_label': '授权:', @@ -126,15 +150,60 @@ class ADKAPKGUI: 'hint_factory': '🔧 关闭车辆WI-FI和4G网络,拨号获取的密码进入工程模式', 'hotspot_title': '📶 电脑热点', 'hotspot_start': '🔧 打开热点设置', + 'hotspot_name_detecting': '名称: 检测中...', + 'hotspot_name_value': '名称: {ssid}', + 'hotspot_name_empty': '名称: 未配置', + 'hotspot_pwd_default': '密码: changan2024', + 'hotspot_pwd_value': '密码: {password}', + 'hotspot_status_value': '状态: {status}', + 'hotspot_status_off': '状态: 未启动', 'hint_title': '💡 使用提示', + 'hint_lines': [ + '1. 确保电脑已开启热点', + '2. 拨号进入工厂模式,点击调试工具', + '3. 需要云端认证时,点击车机状态栏', + ' Wi-Fi图标,连接上方显示的热点', + '4. 连接后点击车机“云端认证”按钮', + '5. 打开ADB后即可正常刷入语言包', + ], 'theme_dark': '🌙 暗色', 'theme_light': '☀️ 亮色', 'lang_zh': '中', 'lang_en': 'EN', - 'about_company': '宜宾科宜科技有限公司 - 出口改装一站式服务', + 'log_lang_changed': '语言已切换为中文', + 'log_cleared': '日志已清空', + 'log_unlock_success': '安装权限已解锁', + 'log_unlock_failed': '安装权限解锁失败: {output}', + 'msg_success_title': '成功', + 'msg_error_title': '错误', + 'msg_warn_title': '警告', + 'msg_device_not_connected_title': '设备未连接', + 'msg_device_not_connected': '请先连接设备并点击「检查」按钮刷新状态!', + 'msg_unlock_success': '安装权限已解锁,可以继续安装或刷入语言包。', + 'msg_unlock_failed': '安装权限解锁失败:{output}', + 'msg_input_vin': '请输入VIN码', + 'msg_need_vin': '请先刷新设备状态并获取VIN码', + 'msg_auth_failed_title': '授权失败', + 'msg_device_unauthorized': '设备未授权', + 'msg_data_prepare_failed': '数据准备失败!', + 'msg_resource_prepare_failed': '资源准备失败!', + 'msg_resource_dir_missing': '资源目录未找到', + 'quick_lang_title': '快捷语言设置', + 'quick_lang_header': '选择目标语言', + 'quick_lang_hint': '点击按钮即可将系统语言切换为对应语言,重启后生效', + 'quick_lang_system': '⚙️ 打开系统语言设置(手动选择)', + 'quick_lang_success_title': '设置成功', + 'quick_lang_success': '系统语言已设置为 {language}\n\n⚠️ 请重启设备使其生效。', + 'quick_lang_failed_title': '设置失败', + 'quick_lang_failed': '语言设置失败!\n\n{output}', + 'quick_lang_names': ['🇨🇳 中文', '英 English', '俄 Русский', '法 Français', '西 Español', '葡 Português', '意 Italiano', '阿 العربية'], + 'log_quick_lang_success': '语言已设置为 {language}', + 'log_quick_lang_failed': '语言设置失败: {output}', }, 'en': { - 'title': 'Mazda-EZ60_OS-1.2适用', + 'window_title': 'CS75Pro Language Installer', + 'title': 'CS75Pro', + 'btn_unlock_install': '🔓 Unlock Install', 'btn_push': '📦 Flash Lang Pkg', 'btn_install': '📱 Install App', 'btn_language': '🌐 Language', @@ -144,6 +213,8 @@ class ADKAPKGUI: 'btn_disable_upgrade': '❌ Disable OTA', 'btn_clear_log': '🗑 Clear Log', 'btn_query_pwd': 'Query Pwd', + 'pwd_query_label': 'Factory password:', + 'vin_placeholder': 'Enter VIN', 'device_label': 'Device:', 'vin_label': 'VIN:', 'auth_label': 'Auth:', @@ -160,12 +231,55 @@ class ADKAPKGUI: 'hint_factory': '🔧 Turn off WiFi & 4G, enter factory mode with dial code', 'hotspot_title': '📶 Hotspot', 'hotspot_start': '🔧 Open Hotspot Settings', + 'hotspot_name_detecting': 'Name: detecting...', + 'hotspot_name_value': 'Name: {ssid}', + 'hotspot_name_empty': 'Name: not configured', + 'hotspot_pwd_default': 'Password: changan2024', + 'hotspot_pwd_value': 'Password: {password}', + 'hotspot_status_value': 'Status: {status}', + 'hotspot_status_off': 'Status: off', 'hint_title': '💡 Tips', + 'hint_lines': [ + '1. Make sure the PC hotspot is enabled', + '2. Enter factory mode from the dialer', + '3. When cloud auth is needed, tap the', + ' Wi-Fi icon and connect to the hotspot', + '4. Tap Cloud Auth on the vehicle screen', + '5. Enable ADB, then flash the language pack', + ], 'theme_dark': '🌙 Dark', 'theme_light': '☀️ Light', 'lang_zh': '中', 'lang_en': 'EN', - 'about_company': 'Yibin Keyi Technology - Export Modification Service', + 'log_lang_changed': 'Language switched to English', + 'log_cleared': 'Log cleared', + 'log_unlock_success': 'Install permission unlocked', + 'log_unlock_failed': 'Install permission unlock failed: {output}', + 'msg_success_title': 'Success', + 'msg_error_title': 'Error', + 'msg_warn_title': 'Warning', + 'msg_device_not_connected_title': 'Device Not Connected', + 'msg_device_not_connected': 'Connect the device and click Check first.', + 'msg_unlock_success': 'Install permission is unlocked. You can continue installing or flashing.', + 'msg_unlock_failed': 'Install permission unlock failed: {output}', + 'msg_input_vin': 'Enter VIN', + 'msg_need_vin': 'Refresh device status and get VIN first.', + 'msg_auth_failed_title': 'Authorization Failed', + 'msg_device_unauthorized': 'Device is not authorized', + 'msg_data_prepare_failed': 'Data preparation failed.', + 'msg_resource_prepare_failed': 'Resource preparation failed.', + 'msg_resource_dir_missing': 'Resource directory not found', + 'quick_lang_title': 'Quick Language', + 'quick_lang_header': 'Choose target language', + 'quick_lang_hint': 'Tap a button to switch system language. Reboot to apply.', + 'quick_lang_system': '⚙️ Open system language settings', + 'quick_lang_success_title': 'Language Set', + 'quick_lang_success': 'System language was set to {language}.\n\n⚠️ Reboot the device to apply it.', + 'quick_lang_failed_title': 'Language Failed', + 'quick_lang_failed': 'Language setting failed.\n\n{output}', + 'quick_lang_names': ['Chinese', 'English', 'Russian', 'French', 'Spanish', 'Portuguese', 'Italian', 'Arabic'], + 'log_quick_lang_success': 'Language set to {language}', + 'log_quick_lang_failed': 'Language setting failed: {output}', } } @@ -181,27 +295,12 @@ class ADKAPKGUI: self.device_connected = False self._refreshing = False # 防止并发刷新 self.debug_mode = False # 调试模式 - self.mazda_overlay_packages = [ - "com.tinnove.launcher.overlay", - "com.tinnove.scenemode.overlay", - "com.incall.dvr.overlay", - ] - self.mazda_disable_packages = [ - "com.carinno.p1", - "com.wtcl.electronicdirections", - "com.ximalaya.ting.android.car", - "com.tinnove.netease.music", - "com.migu.miguplay.car", - "cn.cmvideo.car.play", - "com.tinnove.carshow", - "com.tinnove.changba", - "com.qiyi.video.iv", - "com.changan.appmarket" - ] + self.root.title(self.t('window_title')) # 设置样式 self.setup_styles() self.setup_ui() + self.root.after(200, self.set_window_icon) self.center_window() # 检查环境 @@ -210,6 +309,38 @@ class ADKAPKGUI: # 启动设备状态监控 self.start_device_monitor() + def set_window_icon(self): + """Set the Tk window/taskbar icon at runtime; PyInstaller --icon only sets the exe file icon.""" + try: + icon_path = find_resource("cs75pro.ico") + if icon_path.exists(): + self.root.iconbitmap(str(icon_path)) + self._set_windows_hwnd_icon(icon_path) + except Exception: + pass + + def _set_windows_hwnd_icon(self, icon_path): + if sys.platform != 'win32': + return + try: + import ctypes + user32 = ctypes.windll.user32 + hwnd = self.root.winfo_id() + image_icon = 1 + lr_loadfromfile = 0x00000010 + wm_seticon = 0x0080 + icon_small = 0 + icon_big = 1 + path = str(icon_path) + small = user32.LoadImageW(None, path, image_icon, 16, 16, lr_loadfromfile) + big = user32.LoadImageW(None, path, image_icon, 32, 32, lr_loadfromfile) + if small: + user32.SendMessageW(hwnd, wm_seticon, icon_small, small) + if big: + user32.SendMessageW(hwnd, wm_seticon, icon_big, big) + except Exception: + pass + def setup_styles(self): """设置自定义样式""" style = ttk.Style() @@ -251,28 +382,22 @@ class ADKAPKGUI: title_frame.pack_propagate(False) # 标题 - title_label = tk.Label(title_frame, - text="🚀 Mazda-EZ60_OS-1.2适用", - font=('Microsoft YaHei', 18, 'bold'), - fg=self.colors['accent'], - bg=self.colors['bg_dark']) - title_label.pack() - - subtitle_label = tk.Label(title_frame, - text="@宜宾科宜科技有限公司 - 出口改装一站式服务", - font=('Microsoft YaHei', 9), - fg=self.colors['text_secondary'], - bg=self.colors['bg_dark']) - subtitle_label.pack() + self.title_label = tk.Label(title_frame, + text="🚀 " + self.t('title'), + font=('Microsoft YaHei', 18, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.title_label.pack() # 工程密码查询区域 pwd_query_frame = tk.Frame(left_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) pwd_query_frame.pack(fill=tk.X, pady=(0, 5), padx=5) - tk.Label(pwd_query_frame, text="工程密码查询:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT, padx=(10, 5), pady=5) + self.pwd_query_label = tk.Label(pwd_query_frame, text=self.t('pwd_query_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.pwd_query_label.pack(side=tk.LEFT, padx=(10, 5), pady=5) self.vin_input = tk.Entry(pwd_query_frame, font=('Consolas', 9), @@ -281,12 +406,12 @@ class ADKAPKGUI: insertbackground='white', relief=tk.FLAT, width=20) - self.vin_input.insert(0, "请输入VIN") + self.vin_input.insert(0, self.t('vin_placeholder')) self.vin_input.bind("", self._on_vin_input_focus_in) self.vin_input.bind("", self._on_vin_input_focus_out) self.vin_input.pack(side=tk.LEFT, padx=5, pady=5) - self.btn_query_pwd = tk.Button(pwd_query_frame, text="查询密码", + self.btn_query_pwd = tk.Button(pwd_query_frame, text=self.t('btn_query_pwd'), command=self.query_password_by_vin, font=('Microsoft YaHei', 8), fg='white', @@ -305,10 +430,11 @@ class ADKAPKGUI: # 工厂模式提示 factory_hint_frame = tk.Frame(left_frame, bg=self.colors['bg_dark']) factory_hint_frame.pack(fill=tk.X, pady=(0, 3)) - tk.Label(factory_hint_frame, text="🔧 关闭车辆WI-FI和4G网络,拨号获取的密码进入工程模式", - font=('Microsoft YaHei', 8), - fg=self.colors['warning'], - bg=self.colors['bg_dark']).pack(side=tk.LEFT, padx=2) + self.hint_label = tk.Label(factory_hint_frame, text=self.t('hint_factory'), + font=('Microsoft YaHei', 8), + fg=self.colors['warning'], + bg=self.colors['bg_dark']) + self.hint_label.pack(side=tk.LEFT, padx=2) # 按钮区域(两排,每排5个) button_frame = tk.Frame(left_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) @@ -321,26 +447,32 @@ class ADKAPKGUI: 'relief': tk.FLAT, 'cursor': 'hand2', 'height': 1, - 'width': 14 + 'width': 13 } # 第一排按钮 row1_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) row1_frame.pack(pady=(8, 4)) - self.btn_push = tk.Button(row1_frame, text="📦 刷入语言包", + self.btn_push = tk.Button(row1_frame, text=self.t('btn_push'), command=self.push_all_apks, bg=self.colors['accent'], **btn_params) self.btn_push.pack(side=tk.LEFT, padx=4) - self.btn_install_all = tk.Button(row1_frame, text="📱 安装App", + self.btn_unlock_install = tk.Button(row1_frame, text=self.t('btn_unlock_install'), + command=self.unlock_install_permission, + bg=self.colors['warning'], + **btn_params) + self.btn_unlock_install.pack(side=tk.LEFT, padx=4) + + self.btn_install_all = tk.Button(row1_frame, text=self.t('btn_install'), command=self.install_apps, bg=self.colors['accent'], **btn_params) self.btn_install_all.pack(side=tk.LEFT, padx=4) - self.btn_language = tk.Button(row1_frame, text="🌐 语言设置", + self.btn_language = tk.Button(row1_frame, text=self.t('btn_language'), command=self.open_language_quick_set, bg=self.colors['accent'], **btn_params) @@ -350,25 +482,25 @@ class ADKAPKGUI: row2_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) row2_frame.pack(pady=(4, 8)) - self.btn_timezone = tk.Button(row2_frame, text="⏰ 时区设置", + self.btn_timezone = tk.Button(row2_frame, text=self.t('btn_timezone'), command=self.open_timezone_settings, bg=self.colors['accent'], **btn_params) self.btn_timezone.pack(side=tk.LEFT, padx=4) - self.btn_settings = tk.Button(row2_frame, text="⚙️ 安卓设置", + self.btn_settings = tk.Button(row2_frame, text=self.t('btn_settings'), command=self.open_android_settings, bg=self.colors['accent'], **btn_params) self.btn_settings.pack(side=tk.LEFT, padx=4) - self.btn_reboot = tk.Button(row2_frame, text="🔄 重启设备", + self.btn_reboot = tk.Button(row2_frame, text=self.t('btn_reboot'), command=self.reboot_device, bg=self.colors['warning'], **btn_params) self.btn_reboot.pack(side=tk.LEFT, padx=4) - self.btn_exit = tk.Button(row2_frame, text="❌ 禁用升级", + self.btn_exit = tk.Button(row2_frame, text=self.t('btn_disable_upgrade'), command=self.on_disable_upgrade, bg=self.colors['error'], **btn_params) @@ -387,12 +519,13 @@ class ADKAPKGUI: self.status_indicator.pack(side=tk.LEFT) self.status_dot = self.status_indicator.create_oval(2, 2, 8, 8, fill='#636e72') - tk.Label(status_indicator_frame, text="设备:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT, padx=(5, 3)) + self.device_label = tk.Label(status_indicator_frame, text=self.t('device_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.device_label.pack(side=tk.LEFT, padx=(5, 3)) - self.device_status_label = tk.Label(status_indicator_frame, text="未检测", + self.device_status_label = tk.Label(status_indicator_frame, text=self.t('status_detecting'), font=('Microsoft YaHei', 9, 'bold'), fg='#636e72', bg=self.colors['bg_light']) @@ -401,11 +534,12 @@ class ADKAPKGUI: # VIN信息 vin_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) vin_frame.pack(side=tk.LEFT, padx=20, pady=5) - tk.Label(vin_frame, text="VIN码:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT) - self.vin_label = tk.Label(vin_frame, text="未获取", + self.vin_label_title = tk.Label(vin_frame, text=self.t('vin_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.vin_label_title.pack(side=tk.LEFT) + self.vin_label = tk.Label(vin_frame, text=self.t('vin_none'), font=('Microsoft YaHei', 9, 'bold'), fg='#636e72', bg=self.colors['bg_light']) @@ -414,25 +548,26 @@ class ADKAPKGUI: # 授权状态 auth_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) auth_frame.pack(side=tk.LEFT, padx=20, pady=5) - tk.Label(auth_frame, text="授权:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT) - self.auth_label = tk.Label(auth_frame, text="未验证", + self.auth_label_title = tk.Label(auth_frame, text=self.t('auth_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.auth_label_title.pack(side=tk.LEFT) + self.auth_label = tk.Label(auth_frame, text=self.t('auth_none'), font=('Microsoft YaHei', 9, 'bold'), fg='#636e72', bg=self.colors['bg_light']) self.auth_label.pack(side=tk.LEFT, padx=(5, 0)) # 刷新按钮 - refresh_btn = tk.Button(status_bar_frame, text="🔄 检查", - command=lambda: self.refresh_device_status(force=True), - font=('Microsoft YaHei', 8), - fg=self.colors['accent'], - bg=self.colors['bg_light'], - relief=tk.FLAT, - cursor='hand2') - refresh_btn.pack(side=tk.RIGHT, padx=10, pady=5) + self.btn_refresh = tk.Button(status_bar_frame, text=self.t('btn_refresh'), + command=lambda: self.refresh_device_status(force=True), + font=('Microsoft YaHei', 8), + fg=self.colors['accent'], + bg=self.colors['bg_light'], + relief=tk.FLAT, + cursor='hand2') + self.btn_refresh.pack(side=tk.RIGHT, padx=10, pady=5) # 解压进度条框架 progress_frame = tk.Frame(left_frame, bg=self.colors['bg_dark']) @@ -464,12 +599,13 @@ class ADKAPKGUI: log_title_frame.pack(fill=tk.X) log_title_frame.pack_propagate(False) - tk.Label(log_title_frame, text="📋 运行日志", - font=('Microsoft YaHei', 10, 'bold'), - fg=self.colors['accent'], - bg=self.colors['bg_dark']).pack(side=tk.LEFT, padx=10) + self.log_title_label = tk.Label(log_title_frame, text=self.t('log_title'), + font=('Microsoft YaHei', 10, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.log_title_label.pack(side=tk.LEFT, padx=10) - self.btn_clear = tk.Button(log_title_frame, text="🗑 清空日志", + self.btn_clear = tk.Button(log_title_frame, text=self.t('btn_clear_log'), command=self.clear_log, font=('Microsoft YaHei', 8), fg=self.colors['text_secondary'], @@ -505,14 +641,14 @@ class ADKAPKGUI: bottom_status.pack(fill=tk.X, pady=(5, 0)) bottom_status.pack_propagate(False) - self.status_text = tk.Label(bottom_status, text="就绪", + self.status_text = tk.Label(bottom_status, text=self.t('status_ready'), font=('Microsoft YaHei', 8), fg=self.colors['text_secondary'], bg=self.colors['bg_light']) self.status_text.pack(side=tk.LEFT, padx=10) # 主题和语言切换按钮 - self.btn_theme_switch = tk.Button(bottom_status, text="🌙 暗色", + self.btn_theme_switch = tk.Button(bottom_status, text=self.t('theme_light'), command=self.toggle_theme, font=('Microsoft YaHei', 8), fg=self.colors['accent'], @@ -529,36 +665,38 @@ class ADKAPKGUI: # 调试模式快捷键 self.root.bind('', self._toggle_debug) + self.root.bind('', self._debug_test_extract) # ========== 右侧提示面板 ========== # 热点信息卡片 hotspot_card = tk.Frame(right_frame, bg=self.colors['bg_dark'], relief=tk.RAISED, bd=1) hotspot_card.pack(fill=tk.X, padx=5, pady=(10, 5)) - tk.Label(hotspot_card, text="📶 电脑热点", - font=('Microsoft YaHei', 11, 'bold'), - fg=self.colors['accent'], - bg=self.colors['bg_dark']).pack(pady=(8, 5)) + self.hotspot_title_label = tk.Label(hotspot_card, text=self.t('hotspot_title'), + font=('Microsoft YaHei', 11, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.hotspot_title_label.pack(pady=(8, 5)) - self.hotspot_ssid_label = tk.Label(hotspot_card, text="名称: 检测中...", + self.hotspot_ssid_label = tk.Label(hotspot_card, text=self.t('hotspot_name_detecting'), font=('Microsoft YaHei', 9), fg=self.colors['text'], bg=self.colors['bg_dark']) self.hotspot_ssid_label.pack(anchor='w', padx=10, pady=2) - self.hotspot_pwd_label = tk.Label(hotspot_card, text="密码: changan2024", + self.hotspot_pwd_label = tk.Label(hotspot_card, text=self.t('hotspot_pwd_default'), font=('Microsoft YaHei', 9), fg=self.colors['text'], bg=self.colors['bg_dark']) self.hotspot_pwd_label.pack(anchor='w', padx=10, pady=2) - self.hotspot_status_label = tk.Label(hotspot_card, text="状态: 未启动", + self.hotspot_status_label = tk.Label(hotspot_card, text=self.t('hotspot_status_off'), font=('Microsoft YaHei', 9), fg=self.colors['warning'], bg=self.colors['bg_dark']) self.hotspot_status_label.pack(anchor='w', padx=10, pady=2) - self.btn_hotspot = tk.Button(hotspot_card, text="🔧 打开热点设置", + self.btn_hotspot = tk.Button(hotspot_card, text=self.t('hotspot_start'), command=self.start_hotspot_action, font=('Microsoft YaHei', 8), fg='white', @@ -571,36 +709,24 @@ class ADKAPKGUI: tk.Frame(right_frame, bg=self.colors['border'], height=1).pack(fill=tk.X, padx=8, pady=5) # 使用提示卡片 - hint_card = tk.Frame(right_frame, bg=self.colors['bg_dark'], relief=tk.RAISED, bd=1) - hint_card.pack(fill=tk.X, padx=5, pady=5) + self.hint_card = tk.Frame(right_frame, bg=self.colors['bg_dark'], relief=tk.RAISED, bd=1) + self.hint_card.pack(fill=tk.X, padx=5, pady=5) - tk.Label(hint_card, text="💡 使用提示", - font=('Microsoft YaHei', 11, 'bold'), - fg=self.colors['warning'], - bg=self.colors['bg_dark']).pack(pady=(8, 5)) + self.hint_title_label = tk.Label(self.hint_card, text=self.t('hint_title'), + font=('Microsoft YaHei', 11, 'bold'), + fg=self.colors['warning'], + bg=self.colors['bg_dark']) + self.hint_title_label.pack(pady=(8, 5)) - hint_lines = [ - "1. 确保电脑已开启热点", - "2. 拨号进入工厂模式,点击调试工具", - "3. 需要云端认证时,点击车机状态栏", - "Wi-Fi图标,连接上方显示的热点", - "4. 连接后点击车机“云端认证”按钮", - "5. 打开ADB后即可正常刷入语言包", - ] - for line in hint_lines: - tk.Label(hint_card, text=line, - font=('Microsoft YaHei', 8), - fg=self.colors['text_secondary'], - bg=self.colors['bg_dark'], - justify=tk.LEFT, - anchor='w').pack(anchor='w', padx=10) + self.hint_line_labels = [] + self._render_hint_lines() # 绑定悬停效果 self.bind_hover_effects() def bind_hover_effects(self): """绑定按钮悬停效果""" - buttons = [self.btn_push, self.btn_install_all, + buttons = [self.btn_push, self.btn_unlock_install, self.btn_install_all, self.btn_language, self.btn_timezone, self.btn_settings, self.btn_reboot, self.btn_clear, self.btn_exit, self.btn_query_pwd, self.btn_hotspot] @@ -643,14 +769,43 @@ class ADKAPKGUI: """将函数调度到主线程执行,确保线程安全""" self.root.after(0, lambda: func(*args, **kwargs)) + def _adb_cmd(self): + return subprocess.list2cmdline([self.adb]) + def t(self, key): return self.T.get(self.lang, self.T['zh']).get(key, key) + def tf(self, key, **kwargs): + return str(self.t(key)).format(**kwargs) + + def is_placeholder_vin(self, text): + return text in (self.T['zh']['vin_placeholder'], self.T['en']['vin_placeholder']) + def toggle_lang(self): self.lang = 'en' if self.lang == 'zh' else 'zh' self.btn_lang_switch.config(text=self.t('lang_en') if self.lang == 'zh' else self.t('lang_zh')) self._refresh_ui_texts() - self.log(f"语言已切换为 {'English' if self.lang == 'en' else '中文'}", "INFO") + self.log(self.t('log_lang_changed'), "INFO") + + def _render_hint_lines(self): + if not getattr(self, 'hint_card', None): + return + for label in getattr(self, 'hint_line_labels', []): + label.destroy() + self.hint_line_labels = [] + for line in self.t('hint_lines'): + label = tk.Label( + self.hint_card, + text=line, + font=('Microsoft YaHei', 8), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark'], + justify=tk.LEFT, + anchor='w', + wraplength=205 + ) + label.pack(anchor='w', fill=tk.X, padx=10, pady=1) + self.hint_line_labels.append(label) def toggle_theme(self): if self.theme == 'dark': @@ -684,9 +839,10 @@ class ADKAPKGUI: def _refresh_ui_texts(self): t = self.t + self.root.title(t('window_title')) widgets = [ (getattr(self, 'title_label', None), 'title', None), - (getattr(self, 'subtitle_label', None), 'about_company', None), + (getattr(self, 'btn_unlock_install', None), 'btn_unlock_install', None), (getattr(self, 'btn_push', None), 'btn_push', None), (getattr(self, 'btn_install_all', None), 'btn_install', None), (getattr(self, 'btn_language', None), 'btn_language', None), @@ -703,22 +859,41 @@ class ADKAPKGUI: (getattr(self, 'auth_label_title', None), 'auth_label', None), (getattr(self, 'btn_refresh', None), 'btn_refresh', None), (getattr(self, 'hint_label', None), 'hint_factory', None), + (getattr(self, 'pwd_query_label', None), 'pwd_query_label', None), + (getattr(self, 'hotspot_title_label', None), 'hotspot_title', None), + (getattr(self, 'hotspot_ssid_label', None), 'hotspot_name_detecting', None), + (getattr(self, 'hotspot_pwd_label', None), 'hotspot_pwd_default', None), + (getattr(self, 'hotspot_status_label', None), 'hotspot_status_off', None), + (getattr(self, 'btn_hotspot', None), 'hotspot_start', None), + (getattr(self, 'hint_title_label', None), 'hint_title', None), ] for w, key, _ in widgets: - if w: w.config(text=t(key)) + if not w: + continue + text = t(key) + if key == 'title': + text = "🚀 " + text + w.config(text=text) self.btn_theme_switch.config(text=t('theme_light') if self.theme == 'dark' else t('theme_dark')) self.btn_lang_switch.config(text=t('lang_en') if self.lang == 'zh' else t('lang_zh')) + if self.is_placeholder_vin(self.vin_input.get()): + self.vin_input.delete(0, tk.END) + self.vin_input.insert(0, t('vin_placeholder')) + self._render_hint_lines() if self.vin: self._update_device_status_impl(self.device_connected, self.vin, getattr(self, '_last_authorized', False)) def _log_impl(self, message, level="INFO"): """日志写入的实际实现(必须在主线程调用)""" + if not self.debug_mode and level in ("INFO", "CMD"): + return timestamp = datetime.now().strftime("%H:%M:%S") log_entry = f"[{timestamp}] [{level}] {message}\n" self.log_text.insert(tk.END, log_entry, level) self.log_text.see(tk.END) + def log(self, message, level="INFO"): """添加日志(线程安全)""" self.run_on_ui_thread(self._log_impl, message, level) @@ -801,16 +976,41 @@ class ADKAPKGUI: if self.debug_mode: return True if not self.device_connected: - messagebox.showwarning("设备未连接", "请先连接设备并点击「检查」按钮刷新状态!") + messagebox.showwarning(self.t('msg_device_not_connected_title'), self.t('msg_device_not_connected')) return False return True + def unlock_install_permission(self): + """解锁安装权限。""" + if not self.check_device_connection(): + return + + def worker(): + ok, output = self.run_adb_shell('setprop vecentek.model 1') + if ok: + self.log(self.t('log_unlock_success'), "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t('msg_success_title'), + self.t('msg_unlock_success') + ) + else: + msg = output or self.t('msg_error_title') + self.log(self.tf('log_unlock_failed', output=msg), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_error_title'), + self.tf('msg_unlock_failed', output=msg) + ) + + threading.Thread(target=worker, daemon=True).start() + def start_device_monitor(self): """启动设备状态监控(每5秒检查一次)""" def monitor(): while True: try: - result = subprocess.run(f'{self.adb} -d devices', shell=True, capture_output=True, text=True) + result = subprocess.run(f'{self._adb_cmd()} -d devices', shell=True, capture_output=True, text=True) lines = result.stdout.strip().split('\n') devices = [line for line in lines[1:] if line.strip() and 'device' in line and 'offline' not in line] @@ -839,7 +1039,7 @@ class ADKAPKGUI: self.log(f"CMD: adb shell {shell_command}", "CMD") try: proc = subprocess.Popen( - f'{self.adb} -d shell {shell_command}', + f'{self._adb_cmd()} -d shell {shell_command}', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, @@ -882,7 +1082,7 @@ class ADKAPKGUI: def run_adb_command(self, command): """执行原始 adb 命令(adb push / adb install 等,无需 shell 密码)。 静默执行,不显示 adb 原始输出,仅返回结果。""" - command = command.replace('adb', self.adb, 1) + command = command.replace('adb', self._adb_cmd(), 1) if self.debug_mode: self.log(f"CMD: {command}", "CMD") try: @@ -948,44 +1148,50 @@ class ADKAPKGUI: return f"解压失败: {err_msg.strip()[:300]}" return f"解压失败 (返回码 {return_code}),请检查密码是否正确" - def _decode_7z_output(self, *outputs): - """解码 7za 输出,兼容中文 Windows 控制台编码。""" - parts = [] - for output in outputs: - if not output: + def _decode_7z_output(self, output): + for enc in ('gbk', 'utf-8'): + try: + return output.decode(enc) + except UnicodeDecodeError: continue - for enc in ('gbk', 'utf-8'): - try: - parts.append(output.decode(enc, errors='replace')) - break - except Exception: - continue - return ''.join(parts).strip() + return output.decode('utf-8', errors='replace') - def _extract_7za_with_progress(self): - """流式运行 7za 并解析百分比输出。""" - cmd = [self.sz, 'x', str(self.package_file), f'-p{self.extract_password}', f'-o{self.temp_dir}', '-y'] - supports_progress = getattr(self, '_seven_zip_supports_progress_stream', lambda: False)() - if supports_progress: + def _seven_zip_supports_progress_stream(self): + try: + result = subprocess.run( + [self.sz], + capture_output=True, + text=True, + errors='ignore', + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + return '-bs{o|e|p}' in (result.stdout + result.stderr) + except Exception: + return False + + def _extract_with_7za_progress(self): + self.update_progress(0, 100, "Loading resources...") + cmd = [ + self.sz, 'x', str(self.package_file), + f'-p{self.extract_password}', + f'-o{self.temp_dir}', '-y' + ] + if self._seven_zip_supports_progress_stream(): cmd.extend(['-bsp1', '-bso0', '-bse1']) - if getattr(self, 'debug_mode', False): - self.log(f"7ZA CMD: {subprocess.list2cmdline(cmd)}", "CMD") - proc = subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.DEVNULL, - creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0, + bufsize=0 ) output = bytearray() - progress_window = bytearray() last_percent = -1 - while True: - chunk = proc.stdout.read(1) if proc.stdout else b"" + chunk = proc.stdout.read(1) if proc.stdout else b'' if not chunk: if proc.poll() is not None: break @@ -993,91 +1199,64 @@ class ADKAPKGUI: continue output.extend(chunk) - progress_window.extend(chunk) - if len(progress_window) > 1024: - del progress_window[:-1024] - if not self.debug_mode and len(output) > 60000: + if len(output) > 60000: del output[:-60000] - matches = re.findall(rb"(\d{1,3})%", bytes(progress_window[-512:])) + matches = re.findall(rb'(\d{1,3})%', bytes(output[-512:])) if matches: percent = min(100, int(matches[-1])) if percent != last_percent: last_percent = percent - self.update_progress(percent, 100, "资源加载中") + self.update_progress(percent, 100, "Loading resources...") return_code = proc.wait() decoded_output = self._decode_7z_output(bytes(output)) - - if getattr(self, 'debug_mode', False): - self.log(f"7ZA RET: {return_code}", "CMD" if return_code == 0 else "ERROR") - if decoded_output.strip(): - self.log(f"7ZA OUTPUT:\n{decoded_output.strip()}", "CMD" if return_code == 0 else "ERROR") - - return return_code, decoded_output - - def _seven_zip_supports_progress_stream(self): - """检测当前 7za 是否支持进度流参数。""" - try: - result = subprocess.run( - [self.sz], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 - ) - output = self._decode_7z_output(result.stdout, result.stderr) - return '-bs{o|e|p}' in output - except Exception: - return False + if return_code == 0: + self.update_progress(100, 100, "Resources loaded") + return True, decoded_output + return False, decoded_output def extract_package_silent(self): - """静默解压语言包(带进度)—— 逸动版仅处理 app 目录""" + """Extract package.bin silently with progress; app directory only.""" if not self.package_file.exists(): - self.log(f"错误:未找到资源包 ({self.package_file})", "ERROR") + self.log(f"Error: package not found ({self.package_file})", "ERROR") return False if not self.extract_password: - self.log("错误:解压密码未设置", "ERROR") + self.log("Error: extract password is not set", "ERROR") return False if not os.path.exists(self.sz): - self.log(f"错误:未找到 7za.exe ({self.sz})", "ERROR") + self.log(f"Error: 7za.exe not found ({self.sz})", "ERROR") return False try: - # 使用用户目录,无需管理员权限 local_appdata = os.environ.get('LOCALAPPDATA', os.path.expanduser('~\\AppData\\Local')) hidden_path = Path(local_appdata) / ".cache" / "system" / ".android" hidden_path.mkdir(parents=True, exist_ok=True) - self.temp_dir = hidden_path / "apps_cache_Mazda_EZ60" + self.temp_dir = hidden_path / "apps_cache_CS75Pro" - # 如果已存在,先清理 if self.temp_dir.exists(): shutil.rmtree(self.temp_dir, ignore_errors=True) time.sleep(0.5) self.temp_dir.mkdir(parents=True, exist_ok=True) - # 设置隐藏属性(Windows) if sys.platform == 'win32': subprocess.run(f'attrib +h "{self.temp_dir.parent}"', shell=True, capture_output=True) subprocess.run(f'attrib +h "{self.temp_dir}"', shell=True, capture_output=True) - self.log(f"正在解压资源包...", "INFO") + self.log("正在准备资源包", "INFO") - self.update_progress(0, 100, "资源加载中") - return_code, err_msg = self._extract_7za_with_progress() - if return_code != 0: - self.log(self._format_extract_error(err_msg, return_code), "ERROR") + ok, err_msg = self._extract_with_7za_progress() + if not ok: + self.log(self._format_extract_error(err_msg, 1), "ERROR") self._clear_extracted_cache() return False - self.update_progress(100, 100, "资源加载完成") - # 查找 app 目录(逸动无 priv-app) self.apps_dir = None - - app_candidates = list(self.temp_dir.rglob("apps")) + app_candidates = list(self.temp_dir.rglob("apps")) or list(self.temp_dir.rglob("app")) if app_candidates: self.apps_dir = app_candidates[0] @@ -1097,7 +1276,7 @@ class ADKAPKGUI: except Exception as e: if getattr(self, 'debug_mode', False): - self.log(f"资源准备失败: {str(e)}", "ERROR") + self.log(f"Package preparation failed: {str(e)}", "ERROR") import traceback self.log(traceback.format_exc(), "ERROR") else: @@ -1112,7 +1291,7 @@ class ADKAPKGUI: # 刷新热点显示 self.refresh_hotspot_display() try: - result = subprocess.run(f'{self.adb} version', shell=True, capture_output=True, text=True) + result = subprocess.run(f'{self._adb_cmd()} version', shell=True, capture_output=True, text=True) if result.returncode == 0: self.refresh_device_status() if not self.package_file.exists(): @@ -1123,81 +1302,93 @@ class ADKAPKGUI: self.log("未找到adb命令,请将ADB文件放入本目录", "ERROR") def refresh_device_status(self, force=False): - """刷新设备状态 —— 逸动版使用 ca.car.vin 获取 VIN""" - # 防止并发刷新(手动点击「检查」时强制忽略锁) + """Refresh device status; Yidong uses ca.car.vin.""" if self._refreshing and not force: return self._refreshing = True def refresh(): - was_connected = self.device_connected + try: + was_connected = self.device_connected - # 检查设备连接 - result = subprocess.run(f'{self.adb} -d devices', shell=True, capture_output=True, text=True) - lines = result.stdout.strip().split('\n') - devices = [line for line in lines[1:] if line.strip() and 'device' in line and 'offline' not in line] + result = subprocess.run(f'{self._adb_cmd()} -d devices', shell=True, capture_output=True, text=True) + lines = result.stdout.strip().splitlines() + devices = [line for line in lines[1:] if line.strip() and 'device' in line and 'offline' not in line] - if devices: - if not was_connected: - self.log("设备已连接", "SUCCESS") + if devices: + if not was_connected: + self.log("Device connected", "SUCCESS") - # 获取VIN —— 逸动车型使用 ca.car.vin - success, vin_output = self.run_adb_shell( - 'settings get system ca.car.vin') - vin = vin_output.strip() if success else '' + success, vin_output = self.run_adb_shell('settings get system ca.car.vin') + vin = vin_output.strip() if success else '' + if vin == 'null': + vin = '' - if vin: - self.log(f"VIN: {vin}", "INFO") - authorized = self.check_authorization(vin) - self.update_device_status(True, vin, authorized) + if vin: + self.log(f"VIN: {vin}", "INFO") + authorized = self.check_authorization(vin) + self.update_device_status(True, vin, authorized) + else: + self.log("Unable to read VIN, please confirm factory mode", "WARNING") + self.update_device_status(True, None, False) else: - self.log("无法获取VIN,请确认设备已进入工厂模式", "WARNING") - self.update_device_status(True, None, False) - else: - if was_connected: - self.log("设备未连接", "WARNING") - self.update_device_status(False) - - self._refreshing = False + if was_connected: + self.log("Device disconnected", "WARNING") + self.update_device_status(False) + except Exception as e: + self.log(f"Refresh device status failed: {str(e)}", "ERROR") + finally: + self._refreshing = False threading.Thread(target=refresh, daemon=True).start() def check_authorization(self, vin): - """检查授权""" - if self.debug_mode: - self.log("调试模式: 跳过授权验证", "WARNING") + """Check authorization.""" + if getattr(self, 'debug_mode', False): + self.log("Debug mode: skip authorization", "WARNING") return True - self.log("正在验证授权状态...", "INFO") - + self.log("Checking authorization...", "INFO") try: - url = f"{self.api_url}?vin={vin}" - req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + authorized, vehicle_name, data = self.query_authorization_info(vin) - with urlopen(req, timeout=10) as response: - data = json.loads(response.read().decode('utf-8')) - - if data.get('authorized') == True: - self.log("✅ 授权验证通过!", "SUCCESS") - if 'data' in data and 'vehicleName' in data['data']: - self.log(f"车辆名称: {data['data']['vehicleName']}", "INFO") + if authorized: + self.log("Authorization passed", "SUCCESS") + if vehicle_name: + self.log(f"Vehicle name: {vehicle_name}", "INFO") return True else: - self.log(f"❌ 授权验证失败", "ERROR") + self.log("Authorization failed", "ERROR") return False - except Exception as e: - self.log(f"❌ 授权验证失败", "ERROR") + except Exception: + self.log("Authorization failed", "ERROR") return False + def query_authorization_info(self, vin): + url = f"{self.api_url}?{urlencode({'vin': vin})}" + req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + + payload = data.get('data', {}) if isinstance(data, dict) else {} + vehicle_name = payload.get('vehicleName') or payload.get('vehicle_name') or "" + vehicle_name = str(vehicle_name).strip() + return data.get('authorized') is True, vehicle_name, data + def fetch_package_password(self): - """从服务端获取资源包解压密码""" + """Fetch package password from server.""" if not self.vin: - self.log("请先连接adb!", "ERROR") + self.log("Please connect adb first", "ERROR") return False try: + # CS75Pro package-key vehicleName is fixed by requirement. + # It must not be sourced from auth-check, even if auth-check returns data.vehicleName. + vehicle_name = self.PACKAGE_KEY_VEHICLE_NAME + pwd_api_url = "https://api.changan.softwindy.cn/api/authorizations/package-key" - url = f"{pwd_api_url}?vin={self.vin}" + url = f"{pwd_api_url}?{urlencode({'vin': self.vin, 'vehicleName': vehicle_name})}" req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) with urlopen(req, timeout=10) as response: @@ -1207,11 +1398,11 @@ class ADKAPKGUI: self.extract_password = data['data']['password'] return True else: - self.log(f"数据准备失败: {data.get('message', '未知错误')}", "ERROR") + self.log(f"Data preparation failed: {data.get('message', 'unknown error')}", "ERROR") return False except Exception as e: - self.log(f"数据准备失败: {str(e)}", "ERROR") + self.log(f"Data preparation failed: {str(e)}", "ERROR") return False def push_single_apk(self, apk_path, apk_name): @@ -1222,7 +1413,7 @@ class ADKAPKGUI: if not ok: return False, f"push失败: {err}" - ok, err = self.run_adb_shell(f'pm install -r -d {temp_apk_path}') + ok, err = self.run_adb_shell(f'pm install -d -f -r {temp_apk_path}') self.run_adb_shell(f'rm -f {temp_apk_path}') if not ok: return False, f"install失败: {err}" @@ -1234,34 +1425,42 @@ class ADKAPKGUI: ok, _ = self.push_single_apk(apk_path, apk_name) return ok - def run_mazda_post_install_tasks(self): - """语言包安装完成后启用 Mazda overlay 并禁用指定应用。""" - self.log("正在执行 Mazda-EZ60 安装后配置...", "INFO") + def cleanup_preinstalled_apps_for_language(self): + """Disable and uninstall built-in apps before flashing language packages.""" + packages = [ + "com.wtcl.electronicdirections", + "com.tinnove.netease.music", + "com.incall.apps.softmanager", + "com.tencent.qqlive.audiobox", + ] + failed = [] - overlay_ok = True - for package_name in self.mazda_overlay_packages: - ok, output = self.run_adb_shell(f'cmd overlay enable {package_name}') - if ok: - self.log(f"已启用 overlay: {package_name}", "SUCCESS") + for package in packages: + disable_ok, disable_output = self.run_adb_shell(f'pm disable-user {package}') + uninstall_ok, uninstall_output = self.run_adb_shell(f'pm uninstall -k --user 0 {package}') + + if self.debug_mode: + if disable_ok: + self.log(f"禁用完成: {package}", "CMD") + else: + self.log(f"禁用失败: {package} {disable_output}", "CMD") + if uninstall_ok: + self.log(f"卸载完成: {package}", "CMD") + else: + self.log(f"卸载失败: {package} {uninstall_output}", "CMD") + + if not disable_ok or not uninstall_ok: + failed.append(package) + + if failed: + if self.debug_mode: + self.log("预置应用清理部分失败: " + ", ".join(failed), "WARNING") else: - overlay_ok = False - self.log(f"启用 overlay 失败 {package_name}: {output}", "ERROR") + self.log("预置应用清理部分失败,继续刷入语言包", "WARNING") + return False - disabled_count = 0 - for package_name in self.mazda_disable_packages: - ok, output = self.run_adb_shell(f'pm disable-user {package_name}') - if ok: - disabled_count += 1 - self.log(f"已禁用: {package_name}", "SUCCESS") - else: - self.log(f"禁用失败 {package_name}: {output}", "ERROR") - - self.log( - f"Mazda-EZ60 安装后配置完成:启用 {len(self.mazda_overlay_packages)} 个 overlay," - f"禁用 {disabled_count}/{len(self.mazda_disable_packages)} 个应用", - "INFO", - ) - return overlay_ok and disabled_count == len(self.mazda_disable_packages) + self.log("预置应用清理完成", "SUCCESS") + return True def push_all_apks(self): """推送APK并安装 —— 逸动版仅处理 app 目录,使用 pm install""" @@ -1270,19 +1469,23 @@ class ADKAPKGUI: return if not self.vin: - messagebox.showwarning("警告", "请先刷新设备状态并获取VIN码") + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_need_vin')) return def do_push_all(): # 验证授权 if not self.check_authorization(self.vin): - self.run_on_ui_thread(lambda: messagebox.showerror("授权失败", "设备未授权")) + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_auth_failed_title'), self.t('msg_device_unauthorized')) + ) return # 获取解压密码 if not self.extract_password: if not self.fetch_package_password(): - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "数据准备失败!")) + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_data_prepare_failed')) + ) return # 解压 @@ -1291,12 +1494,16 @@ class ADKAPKGUI: self.show_progress(True, is_push=False) if not self.extract_package_silent(): self.show_progress(False, is_push=False) - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源准备失败!")) + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_prepare_failed')) + ) return self.show_progress(False, is_push=False) if not self.apps_dir or not self.apps_dir.exists(): - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源目录未找到")) + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_dir_missing')) + ) return # 开始刷入 @@ -1304,41 +1511,38 @@ class ADKAPKGUI: self.log("开始刷入语言包...", "INFO") self.run_adb_shell('mkdir -p /data/local/tmp') self.run_adb_shell('setprop vecentek.model 1') + self.cleanup_preinstalled_apps_for_language() - all_apks = list(self.apps_dir.glob("*.apk")) - if not all_apks: - self.log("未找到语言包文件", "WARNING") - self.show_progress(False, is_push=True) - return - - total = len(all_apks) success_count = 0 - for i, apk_path in enumerate(all_apks, 1): - apk_name = apk_path.stem - ok, _ = self.push_single_apk(apk_path, apk_name) - if ok: - self.log(f"安装成功: {apk_name}.apk", "SUCCESS") - success_count += 1 + try: + all_apks = list(self.apps_dir.glob("*.apk")) + if not all_apks: + self.log("未找到语言包文件", "WARNING") + return + + total = len(all_apks) + for i, apk_path in enumerate(all_apks, 1): + apk_name = apk_path.stem + ok, _ = self.push_single_apk(apk_path, apk_name) + if ok: + if self.debug_mode: + self.log(f"安装成功: {apk_name}.apk", "SUCCESS") + success_count += 1 + else: + if self.debug_mode: + self.log(f"安装失败: {apk_name}.apk", "ERROR") + else: + self.log(f"语言包刷入失败: {i}/{total}", "ERROR") + self.update_progress(i, total, "正在刷入", is_push=True) + + self.update_progress(total, total, "刷入完成", is_push=True) + + if success_count > 0: + self.log("语言包刷入完成,重启设备后生效", "SUCCESS") else: - self.log(f"安装失败: {apk_name}.apk", "ERROR") - self.update_progress(i, total, "正在刷入...", is_push=True) - - self.update_progress(total, total, "刷入完成", is_push=True) - self.run_adb_shell('setprop vecentek.model 0') - - if success_count == total: - self.log("语言包刷入完成,开始执行 Mazda-EZ60 安装后配置", "SUCCESS") - elif success_count > 0: - self.log("语言包部分刷入成功,仍继续执行 Mazda-EZ60 安装后配置", "WARNING") - else: - self.log("语言包刷入失败,仍继续执行 Mazda-EZ60 安装后配置", "WARNING") - - if self.run_mazda_post_install_tasks(): - self.log("Mazda-EZ60 安装后配置全部完成,重启设备后生效", "SUCCESS") - else: - self.log("Mazda-EZ60 安装后配置部分失败,请查看日志", "WARNING") - - self.show_progress(False, is_push=True) + self.log("语言包刷入失败", "ERROR") + finally: + self.show_progress(False, is_push=True) threading.Thread(target=do_push_all, daemon=True).start() @@ -1382,30 +1586,33 @@ class ADKAPKGUI: total = len(apk_files) self.log(f"开始批量安装 {total} 个APK...", "INFO") - self.run_adb_shell('setprop vecentek.model 1') - success_count = 0 - for i, apk_path in enumerate(apk_files, 1): - apk_name = apk_path.stem - self.update_progress(i, total, "安装中...", is_push=True) - if self._push_and_install(apk_path, apk_name): - self.log(f"安装成功: {apk_name}.apk", "SUCCESS") - success_count += 1 + try: + self.run_adb_shell('setprop vecentek.model 1') + + for i, apk_path in enumerate(apk_files, 1): + apk_name = apk_path.stem + self.update_progress(i, total, "安装中...", is_push=True) + if self._push_and_install(apk_path, apk_name): + self.log(f"安装成功: {apk_name}.apk", "SUCCESS") + success_count += 1 + else: + self.log(f"安装失败: {apk_name}.apk", "ERROR") + + self.update_progress(total, total, "安装完成", is_push=True) + + if success_count == total: + self.run_on_ui_thread(messagebox.showinfo, "安装完成", f"成功安装 {total} 个APK!") + elif success_count > 0: + self.run_on_ui_thread(messagebox.showwarning, "部分成功", f"成功: {success_count}\n失败: {total - success_count}") else: - self.log(f"安装失败: {apk_name}.apk", "ERROR") - - self.run_adb_shell('setprop vecentek.model 0') - self.update_progress(total, total, "安装完成", is_push=True) - self.show_progress(False, is_push=True) - - if success_count == total: - messagebox.showinfo("安装完成", f"成功安装 {total} 个APK!") - elif success_count > 0: - messagebox.showwarning("部分成功", f"成功: {success_count}\n失败: {total - success_count}") - messagebox.showwarning("部分成功", f"成功: {success_count}\n失败: {total - success_count}") - else: - self.log("安装失败", "ERROR") - messagebox.showerror("安装失败", "所有APK安装失败!") + self.log("安装失败", "ERROR") + self.run_on_ui_thread(messagebox.showerror, "安装失败", "所有APK安装失败!") + except Exception as e: + self.log(f"安装过程异常: {str(e)}", "ERROR") + self.run_on_ui_thread(messagebox.showerror, "安装失败", f"安装过程异常:{str(e)}") + finally: + self.show_progress(False, is_push=True) threading.Thread(target=install, daemon=True).start() @@ -1433,16 +1640,18 @@ class ADKAPKGUI: self.show_progress(True, is_push=True) self.update_progress(30, 100, "安装中", is_push=True) - self.run_adb_shell('setprop vecentek.model 1') - success = self._push_and_install(file_path, apk_name) - self.run_adb_shell('setprop vecentek.model 0') - - self.update_progress(100, 100, "完成", is_push=True) - if success: - self.log("安装成功", "SUCCESS") - else: - self.log("安装失败", "ERROR") - self.show_progress(False, is_push=True) + try: + self.run_adb_shell('setprop vecentek.model 1') + success = self._push_and_install(file_path, apk_name) + self.update_progress(100, 100, "完成", is_push=True) + if success: + self.log("安装成功", "SUCCESS") + else: + self.log("安装失败", "ERROR") + except Exception as e: + self.log(f"安装过程异常: {str(e)}", "ERROR") + finally: + self.show_progress(False, is_push=True) threading.Thread(target=install, daemon=True).start() @@ -1460,7 +1669,7 @@ class ADKAPKGUI: # 创建弹窗 popup = tk.Toplevel(self.root) - popup.title("快捷语言设置") + popup.title(self.t('quick_lang_title')) popup.geometry("520x320") popup.configure(bg=self.colors['bg_dark']) popup.resizable(False, False) @@ -1474,29 +1683,21 @@ class ADKAPKGUI: popup.grab_set() # 标题 - header = tk.Label(popup, text="选择目标语言", + header = tk.Label(popup, text=self.t('quick_lang_header'), font=('Microsoft YaHei', 13, 'bold'), fg=self.colors['accent'], bg=self.colors['bg_dark']) header.pack(pady=(15, 10)) - hint = tk.Label(popup, text="点击按钮即可将系统语言切换为对应语言,重启后生效", + hint = tk.Label(popup, text=self.t('quick_lang_hint'), font=('Microsoft YaHei', 9), fg=self.colors['text_secondary'], bg=self.colors['bg_dark']) hint.pack(pady=(0, 12)) # 语言列表:(显示名, locale_code) - languages = [ - ("🇨🇳 中文", "zh-CN"), - ("英 English", "en-US"), - ("俄 Русский", "ru-RU"), - ("法 Français", "fr-FR"), - ("西 Español", "es-ES"), - ("葡 Português", "pt-BR"), - ("意 Italiano", "it-IT"), - ("阿 العربية", "ar-SA"), - ] + locale_codes = ["zh-CN", "en-US", "ru-RU", "fr-FR", "es-ES", "pt-BR", "it-IT", "ar-SA"] + languages = list(zip(self.t('quick_lang_names'), locale_codes)) # 创建按钮容器 btn_frame = tk.Frame(popup, bg=self.colors['bg_dark']) @@ -1530,7 +1731,7 @@ class ADKAPKGUI: sep = tk.Frame(popup, bg=self.colors['border'], height=1) sep.pack(fill=tk.X, padx=20, pady=(8, 6)) - sys_btn = tk.Button(popup, text="⚙️ 打开系统语言设置(手动选择)", + sys_btn = tk.Button(popup, text=self.t('quick_lang_system'), command=lambda: self._open_sys_and_close(popup), font=('Microsoft YaHei', 9), fg=self.colors['text_secondary'], @@ -1544,20 +1745,24 @@ class ADKAPKGUI: popup.destroy() def do_set(): - self.log(f"正在设置系统语言为: {language_name} ({locale_code})", "INFO") success, output = self.run_adb_shell( f'settings put system system_locales {locale_code}' ) if success: - self.log(f"✓ 语言已设置为 {language_name}", "SUCCESS") - messagebox.showinfo( - "设置成功", - f"系统语言已设置为 {language_name}\n\n⚠️ 请重启设备使其生效。" + self.log(self.tf('log_quick_lang_success', language=language_name), "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t('quick_lang_success_title'), + self.tf('quick_lang_success', language=language_name) ) else: - self.log(f"✗ 语言设置失败: {output}", "ERROR") - messagebox.showerror("设置失败", f"语言设置失败!\n\n{output}") + self.log(self.tf('log_quick_lang_failed', output=output), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('quick_lang_failed_title'), + self.tf('quick_lang_failed', output=output) + ) threading.Thread(target=do_set, daemon=True).start() @@ -1583,7 +1788,14 @@ class ADKAPKGUI: if not self.check_device_connection(): return if messagebox.askyesno("确认重启", "确定要重启设备吗?"): - self.run_adb_shell('reboot') + proc = subprocess.Popen(f'{self._adb_cmd()} -d shell reboot', shell=True, + stdin=subprocess.PIPE, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + try: + proc.stdin.write(b'adb36987\n') + proc.stdin.flush() + proc.stdin.close() + except: + pass self.log("设备正在重启...", "INFO") self.update_device_status(False) @@ -1613,10 +1825,10 @@ class ADKAPKGUI: if success: self.log("系统升级已禁用", "SUCCESS") - messagebox.showinfo("成功", "系统升级已成功禁用!") + self.run_on_ui_thread(messagebox.showinfo, "成功", "系统升级已成功禁用!") else: self.log("禁用系统升级失败", "ERROR") - messagebox.showerror("错误", f"禁用失败:{output}") + self.run_on_ui_thread(messagebox.showerror, "错误", f"禁用失败:{output}") self.show_progress(False, is_push=False) @@ -1624,27 +1836,27 @@ class ADKAPKGUI: def _on_vin_input_focus_in(self, event): """输入框获得焦点时清除占位符""" - if self.vin_input.get() == "请输入VIN": + if self.is_placeholder_vin(self.vin_input.get()): self.vin_input.delete(0, tk.END) self.vin_input.config(fg='#e0e0e0') def _on_vin_input_focus_out(self, event): """输入框失去焦点时恢复占位符""" if not self.vin_input.get(): - self.vin_input.insert(0, "请输入VIN") + self.vin_input.insert(0, self.t('vin_placeholder')) self.vin_input.config(fg='#636e72') def query_password_by_vin(self): """通过VIN查询密码""" vin = self.vin_input.get().strip() - if not vin: - messagebox.showwarning("提示", "请输入VIN码") + if not vin or self.is_placeholder_vin(vin): + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_input_vin')) return def do_query(): try: api_url = "https://api.changan.softwindy.cn/api/authorizations/generate-password-by-vin" - url = f"{api_url}?vin={vin}" + url = f"{api_url}?{urlencode({'vin': vin})}" req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) with urlopen(req, timeout=10) as response: @@ -1722,31 +1934,35 @@ class ADKAPKGUI: def install(): self.show_progress(True, is_push=True) self.log(f"开始安装 {count} 个APK...", "INFO") - self.run_adb_shell('setprop vecentek.model 1') - success_count = 0 - for i, file_path in enumerate(file_paths, 1): - apk_name = Path(file_path).stem - self.update_progress(i, count, f"安装中 ({apk_name})", is_push=True) - if self._push_and_install(file_path, apk_name): - self.log(f"✓ {apk_name}.apk", "SUCCESS") - success_count += 1 + try: + self.run_adb_shell('setprop vecentek.model 1') + + for i, file_path in enumerate(file_paths, 1): + apk_name = Path(file_path).stem + self.update_progress(i, count, f"安装中 ({apk_name})", is_push=True) + if self._push_and_install(file_path, apk_name): + self.log(f"✓ {apk_name}.apk", "SUCCESS") + success_count += 1 + else: + self.log(f"✗ {apk_name}.apk", "ERROR") + + self.update_progress(count, count, "安装完成", is_push=True) + + if success_count == count: + self.log(f"安装完成:全部 {count} 个成功", "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, "安装完成", f"成功安装 {count} 个APK!") + elif success_count > 0: + self.log(f"安装完成:{success_count}/{count} 成功", "WARNING") + self.run_on_ui_thread(messagebox.showwarning, "部分成功", f"成功: {success_count}\n失败: {count - success_count}") else: - self.log(f"✗ {apk_name}.apk", "ERROR") - - self.run_adb_shell('setprop vecentek.model 0') - self.update_progress(count, count, "安装完成", is_push=True) - self.show_progress(False, is_push=True) - - if success_count == count: - self.log(f"安装完成:全部 {count} 个成功", "SUCCESS") - messagebox.showinfo("安装完成", f"成功安装 {count} 个APK!") - elif success_count > 0: - self.log(f"安装完成:{success_count}/{count} 成功", "WARNING") - messagebox.showwarning("部分成功", f"成功: {success_count}\n失败: {count - success_count}") - else: - self.log("安装失败", "ERROR") - messagebox.showerror("安装失败", "所有APK安装失败!") + self.log("安装失败", "ERROR") + self.run_on_ui_thread(messagebox.showerror, "安装失败", "所有APK安装失败!") + except Exception as e: + self.log(f"安装过程异常: {str(e)}", "ERROR") + self.run_on_ui_thread(messagebox.showerror, "安装失败", f"安装过程异常:{str(e)}") + finally: + self.show_progress(False, is_push=True) threading.Thread(target=install, daemon=True).start() @@ -1757,20 +1973,48 @@ class ADKAPKGUI: def modify_hosts(self): """修改hosts文件,添加云端认证DNS映射""" hosts_path = r"C:\Windows\System32\drivers\etc\hosts" - entry = "103.236.55.140 spm.auto-pai.com" + host_ip = "103.236.55.140" + host_name = "spm.auto-pai.com" + entry = f"{host_ip} {host_name}" try: - with open(hosts_path, 'r', encoding='utf-8') as f: - content = f.read() + try: + with open(hosts_path, 'r', encoding='utf-8') as f: + lines = f.readlines() + except UnicodeDecodeError: + with open(hosts_path, 'r', encoding='gbk', errors='replace') as f: + lines = f.readlines() - if entry in content: - # self.log("hosts条目已存在,无需修改", "INFO") + new_lines = [] + changed = False + has_exact = False + for line in lines: + stripped = line.strip() + if not stripped or stripped.startswith('#'): + new_lines.append(line) + continue + + body, _, _ = line.partition('#') + parts = body.split() + if len(parts) >= 2 and host_name.lower() in [p.lower() for p in parts[1:]]: + if parts[0] == host_ip and len(parts) == 2: + has_exact = True + new_lines.append(line) + else: + changed = True + continue + + new_lines.append(line) + + if has_exact and not changed: return True - with open(hosts_path, 'a', encoding='utf-8') as f: - f.write(f"\n{entry}\n") + if not new_lines or (new_lines[-1] and not new_lines[-1].endswith(('\n', '\r'))): + new_lines.append('\n') + new_lines.append(f"{entry}\n") - # self.log(f"已添加hosts条目: {entry}", "SUCCESS") + with open(hosts_path, 'w', encoding='utf-8', newline='') as f: + f.writelines(new_lines) return True except PermissionError: self.log("需要管理员权限,请以管理员身份运行", "WARNING") @@ -1922,18 +2166,49 @@ class ADKAPKGUI: def _refresh_hotspot_display_impl(self, ssid, password, status): """刷新热点显示的UI实现""" if ssid: - self.hotspot_ssid_label.config(text=f"名称: {ssid}") + self.hotspot_ssid_label.config(text=self.tf('hotspot_name_value', ssid=ssid)) else: - self.hotspot_ssid_label.config(text="名称: 未配置") + self.hotspot_ssid_label.config(text=self.t('hotspot_name_empty')) if password: - self.hotspot_pwd_label.config(text=f"密码: {password}") + self.hotspot_pwd_label.config(text=self.tf('hotspot_pwd_value', password=password)) else: - self.hotspot_pwd_label.config(text="密码: changan2024") + self.hotspot_pwd_label.config(text=self.t('hotspot_pwd_default')) self.hotspot_status_label.config( - text=f"状态: {status}", + text=self.tf('hotspot_status_value', status=status), fg=self.colors['success'] if '已启动' in status else self.colors['warning'] ) + def _debug_test_extract(self, event=None): + """Debug-only package extraction test.""" + if not getattr(self, 'debug_mode', False): + messagebox.showwarning("Debug mode", "Press Ctrl+Shift+D to enable debug mode first") + return + + pwd = simpledialog.askstring("Test extraction", "Enter package.bin password:", show='*', parent=self.root) + if not pwd: + return + + def do_extract(): + old_password = self.extract_password + self.extract_password = pwd + try: + self.show_progress(True, is_push=False) + if self.extract_package_silent(): + self.log("Test extraction succeeded", "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + "Test extraction succeeded", + f"Resources extracted to:\n{self.temp_dir}" + ) + else: + self.log("Test extraction failed", "ERROR") + self.run_on_ui_thread(messagebox.showerror, "Test extraction failed", "Check the 7za output in logs") + finally: + self.extract_password = old_password + self.show_progress(False, is_push=False) + + threading.Thread(target=do_extract, daemon=True).start() + def run(self): """运行程序""" self.root.mainloop() diff --git a/CS75Pro/cs75pro.ico b/CS75Pro/cs75pro.ico new file mode 100644 index 0000000000000000000000000000000000000000..ad7d089147e66894dfdb373a6e591e27bf9ea187 GIT binary patch literal 138477 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 z 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 +cd /d "%~dp0" +set "ROOT=%~dp0.." +set "TOOLS=%ROOT%\tools" +set "NAME=CS75Pro-Installer" +set "SRC=CS75Pro_Installer.py" +set "ICON=cs75pro.ico" +title %NAME% - Cython Build + +echo ============================================================ +echo %NAME% - Cython Build +echo ============================================================ +echo. + +where python >nul 2>&1 +if errorlevel 1 ( + echo [ERROR] Python not found + pause + exit /b 1 +) +for /f "delims=" %%i in ('where python') do set "PY=%%i" +echo Python: %PY% + +if not exist "%SRC%" ( + echo [ERROR] Source not found: %SRC% + pause + exit /b 1 +) +if not exist "%ICON%" ( + echo [ERROR] Icon not found: %ICON% + pause + exit /b 1 +) +if not exist "%TOOLS%\adb.exe" ( + echo [ERROR] adb.exe not found in %TOOLS% + pause + exit /b 1 +) +if not exist "%TOOLS%\7za.exe" ( + echo [ERROR] 7za.exe not found in %TOOLS% + pause + exit /b 1 +) + +echo [1/6] Installing deps... +%PY% -m pip install pyinstaller cython pyzipper -q +if errorlevel 1 ( + %PY% -m pip install pyinstaller cython pyzipper -q -i https://pypi.tuna.tsinghua.edu.cn/simple +) +if errorlevel 1 ( + echo [ERROR] Dependency install failed + pause + exit /b 1 +) + +echo [2/6] Clean... +if exist "dist_cy" rmdir /s /q dist_cy 2>nul +if exist "build" rmdir /s /q build 2>nul +if exist "dist" rmdir /s /q dist 2>nul +if exist "%NAME%.spec" del /q "%NAME%.spec" 2>nul + +echo [3/6] Cython compile... +mkdir dist_cy 2>nul +copy "%SRC%" dist_cy\_core.py >nul + +%PY% -c "open('dist_cy/setup_cython.py','w',encoding='utf-8').write('from setuptools import setup\nfrom Cython.Build import cythonize\nsetup(ext_modules=cythonize(\"_core.py\", compiler_directives={\"language_level\":\"3\"}))\n')" + +cd dist_cy +%PY% setup_cython.py build_ext --inplace +if errorlevel 1 ( + cd .. + echo [ERROR] Cython failed. Build stopped. + pause + exit /b 1 +) + +set "PYD=" +for %%f in (_core*.pyd) do set "PYD=%%f" +if "%PYD%"=="" ( + cd .. + echo [ERROR] No Cython PYD generated. Build stopped. + pause + exit /b 1 +) +echo PYD: %PYD% +copy "%PYD%" _core.pyd >nul +if errorlevel 1 ( + cd .. + echo [ERROR] Failed to copy Cython PYD + pause + exit /b 1 +) + +%PY% -c "open('launcher.py','w',encoding='utf-8').write('# -*- coding: utf-8 -*-\nfrom _core import main\nmain()\n')" + +echo [4/6] Copy resources... +copy "%TOOLS%\adb.exe" . >nul +copy "%TOOLS%\AdbWinApi.dll" . >nul +copy "%TOOLS%\AdbWinUsbApi.dll" . >nul +copy "%TOOLS%\7za.exe" . >nul +copy "..\%ICON%" . >nul +if errorlevel 1 ( + cd .. + echo [ERROR] Copy resources failed + pause + exit /b 1 +) + +echo [5/6] PyInstaller... +%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ICON%" --add-data "adb.exe;." --add-data "AdbWinApi.dll;." --add-data "AdbWinUsbApi.dll;." --add-data "7za.exe;." --add-data "%ICON%;." --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin launcher.py +if errorlevel 1 ( + cd .. + echo [ERROR] PyInstaller failed + pause + exit /b 1 +) + +echo [6/6] Cleanup... +del /q _core.py _core.c _core.pyd %PYD% launcher.py setup_cython.py "%ICON%" 2>nul +rmdir /s /q build 2>nul +cd .. + +echo. +echo Done. +if exist "dist_cy\dist\%NAME%.exe" ( + echo Output: dist_cy\dist\%NAME%.exe +) else ( + echo [ERROR] Output exe was not generated + pause + exit /b 1 +) +pause diff --git a/Mazda-EZ6/Mazda-EZ6_Installer.py b/Mazda-EZ6/Mazda-EZ6_Installer.py new file mode 100644 index 0000000..ca7b3a7 --- /dev/null +++ b/Mazda-EZ6/Mazda-EZ6_Installer.py @@ -0,0 +1,1398 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import subprocess +import sys +import threading +import time +import tkinter as tk +from tkinter import filedialog, messagebox, scrolledtext, ttk +from datetime import datetime +from pathlib import Path +from urllib.error import HTTPError, URLError +from urllib.parse import urlencode +from urllib.request import Request, urlopen +import json + + +def set_windows_app_id(): + """Set taskbar grouping id on Windows.""" + if sys.platform != "win32": + return + try: + import ctypes + app_id = "YibinKeyi.MazdaEZ6.Installer.1.0" + ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(app_id) + except Exception: + pass + + +def get_app_dir(): + if getattr(sys, "frozen", False): + return Path(sys.executable).resolve().parent + return Path(__file__).resolve().parent + + +def resource_candidates(file_name): + base_dir = get_app_dir() + candidates = [] + if getattr(sys, "frozen", False): + candidates.append(Path(getattr(sys, "_MEIPASS", base_dir)) / file_name) + candidates.extend([ + base_dir / file_name, + base_dir / "tools" / file_name, + base_dir.parent / "tools" / file_name, + base_dir.parent / file_name, + ]) + unique = [] + for candidate in candidates: + if candidate not in unique: + unique.append(candidate) + return unique + + +def find_resource(file_name): + candidates = resource_candidates(file_name) + for candidate in candidates: + if candidate.exists(): + return candidate + return candidates[0] + + +def find_adb(): + candidates = [ + Path(r"D:\UserData\adb-fastboot\adb.exe"), + ] + candidates.extend(resource_candidates("adb.exe")) + for candidate in candidates: + if candidate.exists(): + return str(candidate) + return "adb" + + +class ADKAPKGUI: + def __init__(self): + set_windows_app_id() + self.lang = "zh" + self.T = { + "zh": { + "title": "Mazda-EZ6 安装工具", + "lang_switch": "EN", + "status_ready": "就绪", + "device_checking": "设备状态: 检测中", + "device_connected": "设备状态: 设备已连接", + "device_disconnected": "设备状态: 未连接设备", + "vin_placeholder": "输入VIN或VIN后六位查询密码", + "password_unknown": "未查询", + "password_querying": "查询中...", + "password_failed": "查询失败", + "btn_query_password": "获取密码", + "password_status": "密码状态:", + "tips_title": "操作提示", + "tips_text": ( + "1. 连续点击右上角时间,输入查询到的密码进入工厂模式。\n" + "2. 点击“USB模式切换”,点击“CURRENT USB MODE: HOST”,将设备切换为“DEVICES”。\n" + "3. 使用USB双公线,连接车机和电脑。\n" + "4. 点击“设置语言”,选择需要设置的目标语言。\n" + "5. 点击获取安装权限,重启后再次打开“DEVICES”模式,程序连接上设备以后安装App。" + ), + "function_area": "功能区", + "btn_permission": "获取安装权限", + "btn_install_app": "安装App", + "btn_set_language": "设置语言", + "btn_timezone": "时区选择", + "btn_settings": "安卓设置", + "btn_reboot": "重启设备", + "log_title": "运行日志", + "btn_clear_log": "清空日志", + "log_started": "Mazda-EZ6 安装工具界面已启动。", + "log_cleared": "日志已清空。", + "warn_title": "提示", + "error_title": "错误", + "success_title": "成功", + "input_vin": "请输入VIN或VIN后六位。", + "status_password_querying": "正在查询密码", + "log_password_querying": "正在查询工程密码...", + "status_password_success": "密码查询成功", + "log_password_success": "密码查询成功: {password}", + "password_query_failed": "密码查询失败", + "password_http_failed": "密码查询失败: HTTP {code}", + "password_network_failed": "密码查询失败,请检查网络连接后重试。", + "password_retry_failed": "密码查询失败,请稍后重试。", + "progress_get_permission": "正在获取安装权限...", + "status_get_permission": "正在获取安装权限", + "log_get_permission": "正在获取安装权限,请保持设备连接。", + "progress_detect_device": "正在检测设备...", + "progress_enter_device": "正在进入设备环境...", + "progress_config_env": "正在配置安装环境...", + "progress_confirm_permission": "正在确认权限状态...", + "permission_ready": "安装权限已获取", + "permission_success_log": "获取安装权限成功。", + "permission_failed": "安装权限获取失败", + "permission_failed_log": "获取安装权限失败,请确认设备连接后重试。", + "status_check_permission": "正在检查安装权限", + "progress_check_permission": "正在检查安装权限...", + "need_permission_status": "请先获取安装权限", + "need_permission_log": "当前设备尚未获取安装权限。", + "need_permission_msg": "请先获取安装权限。", + "file_select_apk_title": "选择APK文件", + "filetype_apk": "APK文件", + "filetype_all": "所有文件", + "install_cancelled_status": "已取消安装", + "install_cancelled_log": "已取消安装App。", + "install_prepare": "准备安装 {count} 个APK...", + "status_installing_app": "正在安装App", + "log_install_start": "开始安装 {count} 个APK。", + "installing_item": "正在安装 {name} ({index}/{total})", + "installing_status": "正在安装 {name}", + "apk_install_success": "{name} 安装成功。", + "apk_install_failed": "{name} 安装失败。", + "install_done": "安装完成", + "install_done_log": "安装完成:全部 {count} 个成功。", + "install_done_msg": "成功安装 {count} 个APK。", + "install_partial": "部分安装完成", + "install_partial_log": "安装完成:成功 {success} 个,失败 {failed} 个。", + "install_partial_title": "部分成功", + "install_partial_msg": "成功: {success}\n失败: {failed}", + "install_failed": "安装失败", + "install_failed_log": "安装失败:所有APK均未安装成功。", + "install_failed_msg": "所有APK安装失败。", + "language_title": "设置语言", + "language_header": "选择目标语言", + "language_hint": "设置完成后请重启设备使语言生效", + "language_names": ["中文", "English", "Русский", "Français", "Español", "ไทย", "Italiano", "Português"], + "progress_setting_language": "正在设置语言: {language}", + "status_setting_language": "正在设置语言", + "log_setting_language": "正在设置系统语言为: {language}", + "language_done": "语言设置完成", + "language_success_title": "设置成功", + "language_success_log": "系统语言已设置为 {language},请重启设备使其生效。", + "language_success_msg": "系统语言已设置为 {language}\n\n请重启设备使其生效。", + "language_failed": "语言设置失败", + "language_failed_msg": "语言设置失败,请确认设备连接后重试。", + "reboot_confirm_title": "确认重启", + "reboot_confirm_msg": "确定要重启设备吗?", + "reboot_cancelled": "已取消重启设备。", + "status_rebooting": "正在重启设备", + "log_rebooting": "正在重启设备...", + "status_rebooting_now": "设备正在重启", + "reboot_success_log": "设备正在重启。", + "reboot_failed": "重启失败", + "reboot_failed_log": "重启失败,请确认设备连接。", + "timezone_label": "时区设置", + "settings_label": "安卓设置", + "status_opening": "正在打开{label}", + "log_opening": "正在打开设备{label}...", + "status_opened": "已打开{label}", + "log_opened": "{label}已打开。", + "timezone_fallback_log": "已打开安卓设置,请手动进入日期和时间/时区设置。", + "open_failed": "{label}打开失败,请确认设备连接。", + "log_lang_switched": "界面语言已切换为中文。", + }, + "en": { + "title": "Mazda-EZ6 Installer", + "lang_switch": "中", + "status_ready": "Ready", + "device_checking": "Device: checking", + "device_connected": "Device: connected", + "device_disconnected": "Device: disconnected", + "vin_placeholder": "Enter VIN or last 6 digits to query password", + "password_unknown": "Not queried", + "password_querying": "Querying...", + "password_failed": "Failed", + "btn_query_password": "Get Password", + "password_status": "Password:", + "tips_title": "Tips", + "tips_text": ( + "1. Tap the top-right clock repeatedly, then enter the queried password to enter factory mode.\n" + "2. Tap \"USB mode switch\", then tap \"CURRENT USB MODE: HOST\" and switch the device to \"DEVICES\".\n" + "3. Connect the head unit and PC with a USB-A to USB-A cable.\n" + "4. Tap \"Set Language\" and choose the target language.\n" + "5. Tap \"Get Install Permission\". After reboot, open \"DEVICES\" mode again; once connected, install apps." + ), + "function_area": "Actions", + "btn_permission": "Get Install Permission", + "btn_install_app": "Install App", + "btn_set_language": "Set Language", + "btn_timezone": "Timezone", + "btn_settings": "Android Settings", + "btn_reboot": "Reboot Device", + "log_title": "Log", + "btn_clear_log": "Clear Log", + "log_started": "Mazda-EZ6 Installer started.", + "log_cleared": "Log cleared.", + "warn_title": "Hint", + "error_title": "Error", + "success_title": "Success", + "input_vin": "Enter the VIN or the last 6 digits.", + "status_password_querying": "Querying password", + "log_password_querying": "Querying factory password...", + "status_password_success": "Password query succeeded", + "log_password_success": "Password query succeeded: {password}", + "password_query_failed": "Password query failed", + "password_http_failed": "Password query failed: HTTP {code}", + "password_network_failed": "Password query failed. Check the network and try again.", + "password_retry_failed": "Password query failed. Try again later.", + "progress_get_permission": "Getting install permission...", + "status_get_permission": "Getting install permission", + "log_get_permission": "Getting install permission. Keep the device connected.", + "progress_detect_device": "Checking device...", + "progress_enter_device": "Entering device environment...", + "progress_config_env": "Configuring install environment...", + "progress_confirm_permission": "Confirming permission status...", + "permission_ready": "Install permission acquired", + "permission_success_log": "Install permission acquired.", + "permission_failed": "Install permission failed", + "permission_failed_log": "Failed to get install permission. Confirm device connection and try again.", + "status_check_permission": "Checking install permission", + "progress_check_permission": "Checking install permission...", + "need_permission_status": "Get install permission first", + "need_permission_log": "The device does not have install permission yet.", + "need_permission_msg": "Please get install permission first.", + "file_select_apk_title": "Select APK files", + "filetype_apk": "APK files", + "filetype_all": "All files", + "install_cancelled_status": "Install cancelled", + "install_cancelled_log": "App installation cancelled.", + "install_prepare": "Preparing to install {count} APK(s)...", + "status_installing_app": "Installing apps", + "log_install_start": "Starting installation for {count} APK(s).", + "installing_item": "Installing {name} ({index}/{total})", + "installing_status": "Installing {name}", + "apk_install_success": "{name} installed successfully.", + "apk_install_failed": "{name} install failed.", + "install_done": "Install complete", + "install_done_log": "Install complete: all {count} APK(s) succeeded.", + "install_done_msg": "Successfully installed {count} APK(s).", + "install_partial": "Partially complete", + "install_partial_log": "Install complete: {success} succeeded, {failed} failed.", + "install_partial_title": "Partially successful", + "install_partial_msg": "Succeeded: {success}\nFailed: {failed}", + "install_failed": "Install failed", + "install_failed_log": "Install failed: no APK was installed successfully.", + "install_failed_msg": "All APK installations failed.", + "language_title": "Set Language", + "language_header": "Choose Target Language", + "language_hint": "Reboot the device after setting the language", + "language_names": ["Chinese", "English", "Russian", "French", "Spanish", "Thai", "Italian", "Portuguese"], + "progress_setting_language": "Setting language: {language}", + "status_setting_language": "Setting language", + "log_setting_language": "Setting system language to: {language}", + "language_done": "Language set", + "language_success_title": "Set Successfully", + "language_success_log": "System language has been set to {language}. Reboot the device to apply it.", + "language_success_msg": "System language has been set to {language}.\n\nReboot the device to apply it.", + "language_failed": "Language setting failed", + "language_failed_msg": "Language setting failed. Confirm device connection and try again.", + "reboot_confirm_title": "Confirm Reboot", + "reboot_confirm_msg": "Reboot the device now?", + "reboot_cancelled": "Device reboot cancelled.", + "status_rebooting": "Rebooting device", + "log_rebooting": "Rebooting device...", + "status_rebooting_now": "Device is rebooting", + "reboot_success_log": "Device is rebooting.", + "reboot_failed": "Reboot failed", + "reboot_failed_log": "Reboot failed. Confirm device connection.", + "timezone_label": "timezone settings", + "settings_label": "Android settings", + "status_opening": "Opening {label}", + "log_opening": "Opening device {label}...", + "status_opened": "Opened {label}", + "log_opened": "{label} opened.", + "timezone_fallback_log": "Android settings opened. Open Date & time / Timezone manually.", + "open_failed": "Failed to open {label}. Confirm device connection.", + "log_lang_switched": "Interface language switched to English.", + }, + } + + self.root = tk.Tk() + self.root.title(self.t("title")) + self.set_window_icon() + self.root.geometry("860x820") + self.root.minsize(760, 760) + + self.colors = { + "bg": "#1f2430", + "panel": "#2b3242", + "panel_alt": "#343c4f", + "accent": "#2f80ed", + "accent_hover": "#2568c7", + "success": "#27ae60", + "warning": "#f2c94c", + "danger": "#eb5757", + "text": "#f2f2f2", + "text_muted": "#b8c0cc", + "border": "#465066", + } + + self.vin_var = tk.StringVar() + self.password_var = tk.StringVar(value=self.t("password_unknown")) + self.status_var = tk.StringVar(value=self.t("status_ready")) + self.device_status_var = tk.StringVar(value=self.t("device_checking")) + self.vin_placeholder = self.t("vin_placeholder") + self.password_api_url = "https://api.changan.softwindy.cn/api/authorizations/get-deepal-pwd" + self.adb = find_adb() + self.install_permission_ready = False + self.device_connected = False + self._device_monitor_running = False + + self.setup_styles() + self.setup_ui() + self.center_window() + self.start_device_monitor() + + self.log(self.t("log_started")) + + def t(self, key): + return self.T.get(self.lang, self.T["zh"]).get(key, self.T["zh"].get(key, key)) + + def tf(self, key, **kwargs): + return str(self.t(key)).format(**kwargs) + + def setup_styles(self): + style = ttk.Style() + style.theme_use("clam") + style.configure( + "Horizontal.TProgressbar", + troughcolor=self.colors["panel_alt"], + background=self.colors["accent"], + bordercolor=self.colors["panel_alt"], + lightcolor=self.colors["accent"], + darkcolor=self.colors["accent"], + ) + + def set_window_icon(self): + """Set the Tk runtime icon; PyInstaller --icon only sets the exe file icon.""" + try: + icon_path = find_resource("app.ico") + if not icon_path.exists(): + return + self.root.iconbitmap(str(icon_path)) + if sys.platform == "win32": + import ctypes + hwnd = self.root.winfo_id() + image = ctypes.windll.user32.LoadImageW( + None, str(icon_path), 1, 0, 0, 0x00000010 + ) + if image: + ctypes.windll.user32.SendMessageW(hwnd, 0x0080, 0, image) + ctypes.windll.user32.SendMessageW(hwnd, 0x0080, 1, image) + except Exception: + pass + + def setup_ui(self): + self.root.configure(bg=self.colors["bg"]) + + main_frame = tk.Frame(self.root, bg=self.colors["bg"]) + main_frame.pack(fill=tk.BOTH, expand=True, padx=14, pady=14) + + top_frame = tk.Frame(main_frame, bg=self.colors["bg"]) + top_frame.pack(fill=tk.X) + + header_frame = tk.Frame(top_frame, bg=self.colors["bg"]) + header_frame.pack(fill=tk.X, pady=(0, 8)) + + header_frame.columnconfigure(0, weight=1, uniform="header_side") + header_frame.columnconfigure(1, weight=0) + header_frame.columnconfigure(2, weight=1, uniform="header_side") + + self.status_label = tk.Label( + header_frame, + textvariable=self.status_var, + font=("Microsoft YaHei", 10), + fg=self.colors["warning"], + bg=self.colors["bg"], + anchor="w", + ) + self.status_label.grid(row=0, column=0, sticky="w") + + self.title_label = tk.Label( + header_frame, + text=self.t("title"), + font=("Microsoft YaHei", 20, "bold"), + fg=self.colors["text"], + bg=self.colors["bg"], + ) + self.title_label.grid(row=0, column=1, sticky="n") + + self.btn_lang_switch = self.create_button( + header_frame, + self.t("lang_switch"), + self.toggle_lang, + bg=self.colors["panel_alt"], + width=4, + height=1, + ) + self.btn_lang_switch.grid(row=0, column=2, sticky="e") + + device_status_frame = tk.Frame(top_frame, bg=self.colors["panel"], highlightthickness=1, + highlightbackground=self.colors["border"]) + device_status_frame.pack(fill=tk.X, pady=(0, 8)) + + self.device_status_dot = tk.Canvas( + device_status_frame, + width=12, + height=12, + bg=self.colors["panel"], + highlightthickness=0, + ) + self.device_status_dot.pack(side=tk.LEFT, padx=(12, 6), pady=8) + self.device_status_oval = self.device_status_dot.create_oval( + 2, + 2, + 10, + 10, + fill=self.colors["text_muted"], + outline="", + ) + + self.device_status_label = tk.Label( + device_status_frame, + textvariable=self.device_status_var, + font=("Microsoft YaHei", 10, "bold"), + fg=self.colors["text_muted"], + bg=self.colors["panel"], + anchor="w", + ) + self.device_status_label.pack(side=tk.LEFT, fill=tk.X, expand=True, pady=8) + + vin_panel = tk.Frame(top_frame, bg=self.colors["panel"], highlightthickness=1, + highlightbackground=self.colors["border"]) + vin_panel.pack(fill=tk.X, pady=(0, 8)) + + vin_row = tk.Frame(vin_panel, bg=self.colors["panel"]) + vin_row.pack(fill=tk.X, padx=12, pady=(10, 8)) + + tk.Label( + vin_row, + text="VIN:", + font=("Microsoft YaHei", 11, "bold"), + fg=self.colors["text"], + bg=self.colors["panel"], + ).pack(side=tk.LEFT, padx=(0, 8)) + + self.vin_entry = tk.Entry( + vin_row, + textvariable=self.vin_var, + font=("Consolas", 12), + fg=self.colors["text_muted"], + bg=self.colors["panel_alt"], + insertbackground=self.colors["text"], + relief=tk.FLAT, + ) + self.vin_var.set(self.vin_placeholder) + self.vin_entry.bind("", self._on_vin_focus_in) + self.vin_entry.bind("", self._on_vin_focus_out) + self.vin_entry.pack(side=tk.LEFT, fill=tk.X, expand=True, ipady=7) + + self.btn_query_password = self.create_button( + vin_row, + self.t("btn_query_password"), + self.query_password, + bg=self.colors["accent"], + width=12, + ) + self.btn_query_password.pack(side=tk.LEFT, padx=(10, 0)) + + password_row = tk.Frame(vin_panel, bg=self.colors["panel"]) + password_row.pack(fill=tk.X, padx=12, pady=(0, 8)) + + self.password_status_label = tk.Label( + password_row, + text=self.t("password_status"), + font=("Microsoft YaHei", 10), + fg=self.colors["text_muted"], + bg=self.colors["panel"], + ) + self.password_status_label.pack(side=tk.LEFT) + + tk.Label( + password_row, + textvariable=self.password_var, + font=("Microsoft YaHei", 10, "bold"), + fg=self.colors["success"], + bg=self.colors["panel"], + ).pack(side=tk.LEFT, padx=(8, 0)) + + tips_panel = tk.Frame(top_frame, bg=self.colors["panel"], highlightthickness=1, + highlightbackground=self.colors["border"]) + tips_panel.pack(fill=tk.X, pady=(0, 8)) + + self.tips_title_label = tk.Label( + tips_panel, + text=self.t("tips_title"), + font=("Microsoft YaHei", 11, "bold"), + fg=self.colors["warning"], + bg=self.colors["panel"], + anchor="w", + ) + self.tips_title_label.pack(fill=tk.X, padx=12, pady=(8, 2)) + + self.tips_text_label = tk.Label( + tips_panel, + text=self.t("tips_text"), + font=("Microsoft YaHei", 9), + fg=self.colors["text"], + bg=self.colors["panel"], + justify=tk.LEFT, + anchor="w", + wraplength=800, + ) + self.tips_text_label.pack(fill=tk.X, padx=12, pady=(0, 8)) + + self.function_panel = tk.LabelFrame( + top_frame, + text=f" {self.t('function_area')} ", + font=("Microsoft YaHei", 11, "bold"), + fg=self.colors["text"], + bg=self.colors["panel"], + bd=1, + relief=tk.SOLID, + labelanchor="nw", + ) + self.function_panel.pack(fill=tk.X, pady=(0, 8)) + + row1_frame = tk.Frame(self.function_panel, bg=self.colors["panel"]) + row1_frame.pack(fill=tk.X, padx=12, pady=(10, 4)) + + row2_frame = tk.Frame(self.function_panel, bg=self.colors["panel"]) + row2_frame.pack(fill=tk.X, padx=12, pady=(4, 10)) + + self.btn_permission = self.create_button( + row1_frame, + self.t("btn_permission"), + self.get_install_permission, + bg=self.colors["accent"], + ) + self.btn_permission.pack(side=tk.LEFT, padx=(0, 8), fill=tk.X, expand=True) + + self.btn_install_app = self.create_button( + row1_frame, + self.t("btn_install_app"), + self.install_app, + bg=self.colors["accent"], + ) + self.btn_install_app.pack(side=tk.LEFT, padx=8, fill=tk.X, expand=True) + + self.btn_set_language = self.create_button( + row1_frame, + self.t("btn_set_language"), + self.set_language, + bg=self.colors["accent"], + ) + self.btn_set_language.pack(side=tk.LEFT, padx=(8, 0), fill=tk.X, expand=True) + + self.btn_timezone = self.create_button( + row2_frame, + self.t("btn_timezone"), + self.open_timezone_settings, + bg=self.colors["accent"], + ) + self.btn_timezone.pack(side=tk.LEFT, padx=(0, 8), fill=tk.X, expand=True) + + self.btn_settings = self.create_button( + row2_frame, + self.t("btn_settings"), + self.open_android_settings, + bg=self.colors["accent"], + ) + self.btn_settings.pack(side=tk.LEFT, padx=8, fill=tk.X, expand=True) + + self.btn_reboot = self.create_button( + row2_frame, + self.t("btn_reboot"), + self.reboot_device, + bg=self.colors["warning"], + fg="#202020", + ) + self.btn_reboot.pack(side=tk.LEFT, padx=(8, 0), fill=tk.X, expand=True) + + progress_frame = tk.Frame(top_frame, bg=self.colors["bg"]) + progress_frame.pack(fill=tk.X, pady=(0, 6)) + + self.progress = ttk.Progressbar( + progress_frame, + mode="determinate", + maximum=100, + style="Horizontal.TProgressbar", + ) + self.progress.pack(fill=tk.X) + + self.progress_label = tk.Label( + top_frame, + text="", + font=("Microsoft YaHei", 9), + fg=self.colors["text_muted"], + bg=self.colors["bg"], + anchor="w", + ) + self.progress_label.pack(fill=tk.X, pady=(2, 8)) + + log_frame = tk.Frame(main_frame, bg=self.colors["bg"]) + log_frame.pack(fill=tk.BOTH, expand=True) + + log_header = tk.Frame(log_frame, bg=self.colors["bg"]) + log_header.pack(fill=tk.X, pady=(0, 6)) + + self.log_title_label = tk.Label( + log_header, + text=self.t("log_title"), + font=("Microsoft YaHei", 11, "bold"), + fg=self.colors["text"], + bg=self.colors["bg"], + ) + self.log_title_label.pack(side=tk.LEFT) + + self.btn_clear_log = self.create_button( + log_header, + self.t("btn_clear_log"), + self.clear_log, + bg=self.colors["panel_alt"], + width=10, + height=1, + ) + self.btn_clear_log.pack(side=tk.RIGHT) + + self.log_text = scrolledtext.ScrolledText( + log_frame, + wrap=tk.WORD, + font=("Consolas", 10), + bg="#151922", + fg=self.colors["text"], + insertbackground=self.colors["text"], + relief=tk.FLAT, + height=12, + ) + self.log_text.pack(fill=tk.BOTH, expand=True) + self.log_text.tag_config("INFO", foreground=self.colors["text"]) + self.log_text.tag_config("SUCCESS", foreground=self.colors["success"]) + self.log_text.tag_config("WARNING", foreground=self.colors["warning"]) + self.log_text.tag_config("ERROR", foreground=self.colors["danger"]) + + def create_button(self, parent, text, command, bg, fg="white", width=14, height=1): + button = tk.Button( + parent, + text=text, + command=command, + font=("Microsoft YaHei", 10, "bold"), + fg=fg, + bg=bg, + activeforeground=fg, + activebackground=self.colors["accent_hover"], + relief=tk.FLAT, + cursor="hand2", + width=width, + height=height, + ) + return button + + def run_on_ui_thread(self, func, *args, **kwargs): + self.root.after(0, lambda: func(*args, **kwargs)) + + def run_worker(self, target): + threading.Thread(target=target, daemon=True).start() + + def log(self, message, level="INFO"): + timestamp = datetime.now().strftime("%H:%M:%S") + self.log_text.insert(tk.END, f"[{timestamp}] {message}\n", level) + self.log_text.see(tk.END) + + def set_status(self, text): + self.status_var.set(text) + + def set_progress(self, value, text=""): + self.progress["value"] = value + self.progress_label.config(text=text) + + def is_placeholder_vin(self, text): + return text in (self.T["zh"]["vin_placeholder"], self.T["en"]["vin_placeholder"]) + + def _current_key_for_value(self, value, keys): + for key in keys: + for lang_data in self.T.values(): + if lang_data.get(key) == value: + return key + return None + + def toggle_lang(self): + old_placeholder = self.vin_placeholder + self.lang = "en" if self.lang == "zh" else "zh" + self.apply_language(old_placeholder) + self.log(self.t("log_lang_switched"), "INFO") + + def apply_language(self, old_placeholder=None): + old_placeholder = old_placeholder or self.vin_placeholder + password_key = self._current_key_for_value( + self.password_var.get(), + ["password_unknown", "password_querying", "password_failed"], + ) + status_key = self._current_key_for_value( + self.status_var.get(), + [ + "status_ready", + "status_password_querying", + "status_password_success", + "password_query_failed", + "status_get_permission", + "permission_ready", + "permission_failed", + "status_check_permission", + "need_permission_status", + "install_cancelled_status", + "status_installing_app", + "install_done", + "install_partial", + "install_failed", + "status_setting_language", + "language_done", + "language_failed", + "status_rebooting", + "status_rebooting_now", + "reboot_failed", + ], + ) + progress_key = self._current_key_for_value( + self.progress_label.cget("text"), + [ + "progress_get_permission", + "progress_detect_device", + "progress_enter_device", + "progress_config_env", + "progress_confirm_permission", + "permission_ready", + "permission_failed", + "progress_check_permission", + "install_done", + "install_partial", + "install_failed", + "language_done", + "language_failed", + ], + ) + + self.vin_placeholder = self.t("vin_placeholder") + self.root.title(self.t("title")) + self.title_label.config(text=self.t("title")) + self.btn_lang_switch.config(text=self.t("lang_switch")) + self.btn_query_password.config(text=self.t("btn_query_password")) + self.password_status_label.config(text=self.t("password_status")) + self.tips_title_label.config(text=self.t("tips_title")) + self.tips_text_label.config(text=self.t("tips_text")) + self.function_panel.config(text=f" {self.t('function_area')} ") + self.btn_permission.config(text=self.t("btn_permission")) + self.btn_install_app.config(text=self.t("btn_install_app")) + self.btn_set_language.config(text=self.t("btn_set_language")) + self.btn_timezone.config(text=self.t("btn_timezone")) + self.btn_settings.config(text=self.t("btn_settings")) + self.btn_reboot.config(text=self.t("btn_reboot")) + self.log_title_label.config(text=self.t("log_title")) + self.btn_clear_log.config(text=self.t("btn_clear_log")) + + if self.vin_var.get() in ("", old_placeholder) or self.is_placeholder_vin(self.vin_var.get()): + self.vin_var.set(self.vin_placeholder) + self.vin_entry.config(fg=self.colors["text_muted"]) + if password_key: + self.password_var.set(self.t(password_key)) + if status_key: + self.status_var.set(self.t(status_key)) + if progress_key: + self.progress_label.config(text=self.t(progress_key)) + self._update_device_status(self.device_connected) + + def set_busy(self, busy): + state = tk.DISABLED if busy else tk.NORMAL + buttons = [ + self.btn_lang_switch, + self.btn_query_password, + self.btn_permission, + self.btn_install_app, + self.btn_set_language, + self.btn_timezone, + self.btn_settings, + self.btn_reboot, + self.btn_clear_log, + ] + for button in buttons: + button.config(state=state) + + def clear_log(self): + self.log_text.delete("1.0", tk.END) + self.log(self.t("log_cleared")) + + def get_vin(self): + vin = self.vin_var.get().strip() + if self.is_placeholder_vin(vin): + return "" + return vin + + def _on_vin_focus_in(self, _event): + if self.vin_var.get() == self.vin_placeholder: + self.vin_var.set("") + self.vin_entry.config(fg=self.colors["text"]) + + def _on_vin_focus_out(self, _event): + if not self.vin_var.get().strip(): + self.vin_var.set(self.vin_placeholder) + self.vin_entry.config(fg=self.colors["text_muted"]) + + def query_password(self): + vin = self.get_vin() + if not vin: + messagebox.showwarning(self.t("warn_title"), self.t("input_vin")) + return + self.set_busy(True) + self.password_var.set(self.t("password_querying")) + self.set_status(self.t("status_password_querying")) + self.log(self.t("log_password_querying")) + self.run_worker(lambda: self._query_password_worker(vin)) + + def _query_password_worker(self, vin): + try: + query_date = datetime.now().strftime("%Y-%m-%d") + params = urlencode({ + "carModel": "EZ6", + "vin": vin, + "date": query_date, + }) + request = Request( + f"{self.password_api_url}?{params}", + headers={"User-Agent": "Mazda-EZ6-Installer/1.0"}, + ) + with urlopen(request, timeout=15) as response: + payload = response.read() + data = json.loads(payload.decode("utf-8")) + + result = data.get("data") if isinstance(data, dict) else None + password = result.get("password") if isinstance(result, dict) else None + error = result.get("error") if isinstance(result, dict) else None + + if data.get("success") and password: + self.run_on_ui_thread(self.password_var.set, password) + self.run_on_ui_thread(self.set_status, self.t("status_password_success")) + self.run_on_ui_thread(self.log, self.tf("log_password_success", password=password), "SUCCESS") + return + + message = error or data.get("message") or self.t("password_query_failed") + self.run_on_ui_thread(self.password_var.set, self.t("password_failed")) + self.run_on_ui_thread(self.set_status, self.t("password_query_failed")) + self.run_on_ui_thread(self.log, message, "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t("password_query_failed"), message) + except HTTPError as exc: + message = self.tf("password_http_failed", code=exc.code) + self.run_on_ui_thread(self.password_var.set, self.t("password_failed")) + self.run_on_ui_thread(self.set_status, self.t("password_query_failed")) + self.run_on_ui_thread(self.log, message, "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t("password_query_failed"), message) + except (URLError, TimeoutError): + message = self.t("password_network_failed") + self.run_on_ui_thread(self.password_var.set, self.t("password_failed")) + self.run_on_ui_thread(self.set_status, self.t("password_query_failed")) + self.run_on_ui_thread(self.log, message, "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t("password_query_failed"), message) + except Exception: + message = self.t("password_retry_failed") + self.run_on_ui_thread(self.password_var.set, self.t("password_failed")) + self.run_on_ui_thread(self.set_status, self.t("password_query_failed")) + self.run_on_ui_thread(self.log, message, "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t("password_query_failed"), message) + finally: + self.run_on_ui_thread(self.set_busy, False) + + def get_install_permission(self): + self.set_busy(True) + self.set_progress(10, self.t("progress_get_permission")) + self.set_status(self.t("status_get_permission")) + self.log(self.t("log_get_permission")) + self.run_worker(self._get_install_permission_worker) + + def install_app(self): + self.set_busy(True) + self.set_progress(0, self.t("progress_check_permission")) + self.set_status(self.t("status_check_permission")) + self.run_worker(self._check_permission_before_file_select) + + def set_language(self): + popup = tk.Toplevel(self.root) + popup.title(self.t("language_title")) + popup.geometry("420x320") + popup.configure(bg=self.colors["bg"]) + popup.transient(self.root) + popup.grab_set() + + tk.Label( + popup, + text=self.t("language_header"), + font=("Microsoft YaHei", 15, "bold"), + fg=self.colors["text"], + bg=self.colors["bg"], + ).pack(pady=(18, 6)) + + tk.Label( + popup, + text=self.t("language_hint"), + font=("Microsoft YaHei", 9), + fg=self.colors["text_muted"], + bg=self.colors["bg"], + ).pack(pady=(0, 12)) + + lang_frame = tk.Frame(popup, bg=self.colors["bg"]) + lang_frame.pack(fill=tk.BOTH, expand=True, padx=18, pady=(0, 14)) + + locale_codes = ["zh-CN", "en-US", "ru-RU", "fr-FR", "es-ES", "th-TH", "it-IT", "pt-BR"] + languages = list(zip(self.t("language_names"), locale_codes)) + + for index, (label, locale_code) in enumerate(languages): + row = index // 2 + col = index % 2 + button = tk.Button( + lang_frame, + text=label, + command=lambda loc=locale_code, name=label: self._set_language_from_popup(loc, name, popup), + font=("Microsoft YaHei", 10, "bold"), + fg="white", + bg=self.colors["accent"], + activeforeground="white", + activebackground=self.colors["accent_hover"], + relief=tk.FLAT, + cursor="hand2", + height=2, + ) + button.grid(row=row, column=col, padx=6, pady=6, sticky="nsew") + + for col in range(2): + lang_frame.columnconfigure(col, weight=1) + for row in range(4): + lang_frame.rowconfigure(row, weight=1) + + popup.update_idletasks() + x = self.root.winfo_x() + (self.root.winfo_width() - popup.winfo_width()) // 2 + y = self.root.winfo_y() + (self.root.winfo_height() - popup.winfo_height()) // 2 + popup.geometry(f"+{x}+{y}") + + def reboot_device(self): + if not messagebox.askyesno(self.t("reboot_confirm_title"), self.t("reboot_confirm_msg")): + self.log(self.t("reboot_cancelled"), "WARNING") + return + self.set_status(self.t("status_rebooting")) + self.log(self.t("log_rebooting")) + self.run_worker(self._reboot_device_worker) + + def _reboot_device_worker(self): + try: + code, _, _ = self.run_adb_command(["shell", "reboot"], timeout=20) + if code == 0: + self.run_on_ui_thread(self.set_status, self.t("status_rebooting_now")) + self.run_on_ui_thread(self.log, self.t("reboot_success_log"), "SUCCESS") + else: + self.run_on_ui_thread(self.set_status, self.t("reboot_failed")) + self.run_on_ui_thread(self.log, self.t("reboot_failed_log"), "ERROR") + except Exception: + self.run_on_ui_thread(self.set_status, self.t("reboot_failed")) + self.run_on_ui_thread(self.log, self.t("reboot_failed_log"), "ERROR") + + def open_timezone_settings(self): + label_key = "timezone_label" + label = self.t(label_key) + self.set_status(self.tf("status_opening", label=label)) + self.log(self.tf("log_opening", label=label)) + commands = [ + ["shell", "am", "start", "-a", "android.settings.DATE_SETTINGS"], + ["shell", "am", "start", "-n", "com.android.settings/.Settings$DateTimeSettingsActivity"], + ["shell", "am", "start", "-n", "com.android.settings/.DateTimeSettings"], + ["shell", "am", "start", "-a", "android.settings.SETTINGS"], + ] + self.run_worker(lambda: self._open_settings_action(commands, label_key)) + + def open_android_settings(self): + label_key = "settings_label" + label = self.t(label_key) + self.set_status(self.tf("status_opening", label=label)) + self.log(self.tf("log_opening", label=label)) + commands = [ + ["shell", "am", "start", "-a", "android.settings.SETTINGS"], + ["shell", "am", "start", "-n", "com.android.settings/.Settings"], + ] + self.run_worker(lambda: self._open_settings_action(commands, label_key)) + + def _open_settings_action(self, commands, label_key): + try: + for index, command in enumerate(commands): + code, stdout, stderr = self.run_adb_command(command, timeout=20) + if self._am_start_succeeded(code, stdout, stderr): + label = self.t(label_key) + self.run_on_ui_thread(self.set_status, self.tf("status_opened", label=label)) + if label_key == "timezone_label" and index == len(commands) - 1: + self.run_on_ui_thread(self.log, self.t("timezone_fallback_log"), "WARNING") + else: + self.run_on_ui_thread(self.log, self.tf("log_opened", label=label), "SUCCESS") + return + label = self.t(label_key) + self.run_on_ui_thread(self.set_status, self.tf("open_failed", label=label)) + self.run_on_ui_thread(self.log, self.tf("open_failed", label=label), "ERROR") + except Exception: + label = self.t(label_key) + self.run_on_ui_thread(self.set_status, self.tf("open_failed", label=label)) + self.run_on_ui_thread(self.log, self.tf("open_failed", label=label), "ERROR") + + def _am_start_succeeded(self, code, stdout, stderr): + output = f"{stdout}\n{stderr}".lower() + failed_markers = [ + "error:", + "exception", + "unable to resolve", + "not found", + "does not exist", + "permission denied", + "failed", + "please enter password", + ] + return code == 0 and not any(marker in output for marker in failed_markers) + + def _set_language_from_popup(self, locale_code, language_name, popup): + try: + popup.destroy() + except Exception: + pass + self.set_busy(True) + self.set_progress(0, self.tf("progress_setting_language", language=language_name)) + self.set_status(self.t("status_setting_language")) + self.log(self.tf("log_setting_language", language=language_name)) + self.run_worker(lambda: self._set_language_worker(locale_code, language_name)) + + def _set_language_worker(self, locale_code, language_name): + try: + code, _, _ = self.run_adb_command( + ["shell", "settings", "put", "system", "system_locales", locale_code], + timeout=20, + ) + if code == 0: + self.run_on_ui_thread(self.set_progress, 100, self.t("language_done")) + self.run_on_ui_thread(self.set_status, self.t("language_done")) + self.run_on_ui_thread(self.log, self.tf("language_success_log", language=language_name), "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t("language_success_title"), + self.tf("language_success_msg", language=language_name), + ) + else: + self.run_on_ui_thread(self.set_progress, 0, self.t("language_failed")) + self.run_on_ui_thread(self.set_status, self.t("language_failed")) + self.run_on_ui_thread(self.log, self.t("language_failed_msg"), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t("language_failed"), self.t("language_failed_msg")) + except Exception: + self.run_on_ui_thread(self.set_progress, 0, self.t("language_failed")) + self.run_on_ui_thread(self.set_status, self.t("language_failed")) + self.run_on_ui_thread(self.log, self.t("language_failed_msg"), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t("language_failed"), self.t("language_failed_msg")) + self.run_on_ui_thread(self.set_busy, False) + + def _startupinfo(self): + if sys.platform != "win32": + return None + startupinfo = subprocess.STARTUPINFO() + startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW + return startupinfo + + def _decode_output(self, data): + if not data: + return "" + for encoding in ("utf-8", "gbk", "latin-1"): + try: + return data.decode(encoding, errors="replace") + except Exception: + continue + return data.decode(errors="replace") + + def _run_process(self, args, timeout=30, input_text=None): + kwargs = { + "stdout": subprocess.PIPE, + "stderr": subprocess.PIPE, + "startupinfo": self._startupinfo(), + } + if sys.platform == "win32": + kwargs["creationflags"] = subprocess.CREATE_NO_WINDOW + if input_text is not None: + kwargs["input"] = input_text.encode("utf-8") + completed = subprocess.run(args, timeout=timeout, **kwargs) + stdout = self._decode_output(completed.stdout) + stderr = self._decode_output(completed.stderr) + return completed.returncode, stdout, stderr + + def run_adb_command(self, adb_args, timeout=30, input_text=None): + command_args = list(adb_args) + result = self._run_process([self.adb, "-d"] + command_args, timeout=timeout, input_text=input_text) + if self._adb_needs_shell_password(command_args, result): + self._run_process( + [self.adb, "-d", "shell", "password", "*2@#Shell"], + timeout=10, + ) + result = self._run_process( + [self.adb, "-d"] + command_args, + timeout=timeout, + input_text=input_text, + ) + return result + + def _adb_needs_shell_password(self, adb_args, result): + if not adb_args or adb_args[0] != "shell": + return False + if len(adb_args) >= 2 and adb_args[1] == "password": + return False + _, stdout, stderr = result + output = f"{stdout}\n{stderr}".lower() + return "please enter password" in output and "adb shell password" in output + + def run_adb_host_command(self, adb_args, timeout=10): + return self._run_process([self.adb] + list(adb_args), timeout=timeout) + + def start_device_monitor(self): + if self._device_monitor_running: + return + self._device_monitor_running = True + self._schedule_device_check(0) + + def _schedule_device_check(self, delay_ms=3000): + self.root.after(delay_ms, self._check_device_status_async) + + def _check_device_status_async(self): + self.run_worker(self._check_device_status_worker) + + def _check_device_status_worker(self): + connected = False + try: + code, stdout, _ = self.run_adb_host_command(["devices"], timeout=8) + connected = code == 0 and self._has_connected_device(stdout) + except Exception: + connected = False + self.run_on_ui_thread(self._update_device_status, connected) + self.run_on_ui_thread(self._schedule_device_check, 3000) + + def _has_connected_device(self, adb_devices_output): + for line in adb_devices_output.splitlines(): + stripped = line.strip() + if not stripped or stripped.startswith("List of devices"): + continue + parts = stripped.split() + if len(parts) >= 2 and parts[1] == "device": + return True + return False + + def is_usb_device_connected(self): + code, stdout, _ = self.run_adb_host_command(["devices"], timeout=8) + return code == 0 and self._has_connected_device(stdout) + + def _update_device_status(self, connected): + self.device_connected = connected + if connected: + text = self.t("device_connected") + color = self.colors["success"] + else: + text = self.t("device_disconnected") + color = self.colors["danger"] + self.device_status_var.set(text) + self.device_status_label.config(fg=color) + self.device_status_dot.itemconfig(self.device_status_oval, fill=color) + + def _permission_script(self): + payload = """LClass1;->method1( +10 +--runtime-args +--setuid=1000 +--setgid=1000 +--runtime-flags=2049 +--mount-external-full +--setgroups=3003 +--nice-name=runnetcat +--seinfo=platform:targetSdkVersion=30:complete +--invoke-with +toybox nc -s 127.0.0.1 -p 4321 -L /system/bin/sh -l; +""" + return f"""settings put global hidden_api_blacklist_exemptions "{payload}" +settings delete global hidden_api_blacklist_exemptions +sleep 2 +settings get global hidden_api_blacklist_exemptions +toybox nc localhost 4321 <<'NC_CMDS' +setprop sys.config.app_install_disabled false +getprop sys.config.app_install_disabled +settings delete global hidden_api_blacklist_exemptions +settings get global hidden_api_blacklist_exemptions +setprop ctl.restart zygote +exit +NC_CMDS +""" + + def _get_install_permission_worker(self): + success = False + try: + self.run_on_ui_thread(self.set_progress, 20, self.t("progress_detect_device")) + if not self.is_usb_device_connected(): + raise RuntimeError("device not connected") + self.run_on_ui_thread(self._update_device_status, True) + + self.run_on_ui_thread(self.set_progress, 30, self.t("progress_enter_device")) + self.run_adb_command( + ["shell", "password", "*2@#Shell"], + timeout=10, + ) + + self.run_on_ui_thread(self.set_progress, 45, self.t("progress_config_env")) + try: + self.run_adb_command( + ["shell"], + timeout=45, + input_text=self._permission_script(), + ) + except subprocess.TimeoutExpired: + pass + + self.run_on_ui_thread(self.set_progress, 80, self.t("progress_confirm_permission")) + for _ in range(8): + time.sleep(1) + if self._is_install_permission_ready(): + success = True + break + except Exception: + success = False + + self.install_permission_ready = success + if success: + self.run_on_ui_thread(self.set_progress, 100, self.t("permission_ready")) + self.run_on_ui_thread(self.set_status, self.t("permission_ready")) + self.run_on_ui_thread(self.log, self.t("permission_success_log"), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t("success_title"), self.t("permission_success_log")) + else: + self.run_on_ui_thread(self.set_progress, 0, self.t("permission_failed")) + self.run_on_ui_thread(self.set_status, self.t("permission_failed")) + self.run_on_ui_thread(self.log, self.t("permission_failed_log"), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t("permission_failed"), self.t("permission_failed_log")) + self.run_on_ui_thread(self.set_busy, False) + + def _is_install_permission_ready(self): + prop_code, prop_out, _ = self.run_adb_command( + ["shell", "getprop", "sys.config.app_install_disabled"], + timeout=15, + ) + setting_code, setting_out, _ = self.run_adb_command( + ["shell", "settings", "get", "global", "hidden_api_blacklist_exemptions"], + timeout=15, + ) + prop_value = prop_out.strip().lower() + setting_value = setting_out.strip().lower() + return prop_code == 0 and setting_code == 0 and prop_value == "false" and setting_value == "null" + + def _check_permission_before_file_select(self): + try: + ready = self._is_install_permission_ready() + except Exception: + ready = False + + if not ready: + self.install_permission_ready = False + self.run_on_ui_thread(self.set_progress, 0, "") + self.run_on_ui_thread(self.set_status, self.t("need_permission_status")) + self.run_on_ui_thread(self.log, self.t("need_permission_log"), "WARNING") + self.run_on_ui_thread(messagebox.showwarning, self.t("warn_title"), self.t("need_permission_msg")) + self.run_on_ui_thread(self.set_busy, False) + return + + self.install_permission_ready = True + self.run_on_ui_thread(self._select_apk_files) + + def _select_apk_files(self): + files = filedialog.askopenfilenames( + title=self.t("file_select_apk_title"), + filetypes=[(self.t("filetype_apk"), "*.apk"), (self.t("filetype_all"), "*.*")], + ) + if not files: + self.set_progress(0, "") + self.set_status(self.t("install_cancelled_status")) + self.log(self.t("install_cancelled_log"), "WARNING") + self.set_busy(False) + return + + self.set_progress(0, self.tf("install_prepare", count=len(files))) + self.set_status(self.t("status_installing_app")) + self.log(self.tf("log_install_start", count=len(files))) + self.run_worker(lambda: self._install_apk_files(list(files))) + + def _install_apk_files(self, files): + total = len(files) + success_count = 0 + failed_count = 0 + + for index, file_path in enumerate(files, start=1): + apk_name = Path(file_path).name + percent = int(((index - 1) / total) * 100) + self.run_on_ui_thread( + self.set_progress, + percent, + self.tf("installing_item", name=apk_name, index=index, total=total), + ) + self.run_on_ui_thread(self.set_status, self.tf("installing_status", name=apk_name)) + + try: + code, _, _ = self.run_adb_command( + ["install", "-r", "-d", file_path], + timeout=180, + ) + if code == 0: + success_count += 1 + self.run_on_ui_thread(self.log, self.tf("apk_install_success", name=apk_name), "SUCCESS") + else: + failed_count += 1 + self.run_on_ui_thread(self.log, self.tf("apk_install_failed", name=apk_name), "ERROR") + except Exception: + failed_count += 1 + self.run_on_ui_thread(self.log, self.tf("apk_install_failed", name=apk_name), "ERROR") + + if failed_count == 0: + self.run_on_ui_thread(self.set_progress, 100, self.t("install_done")) + self.run_on_ui_thread(self.set_status, self.t("install_done")) + self.run_on_ui_thread(self.log, self.tf("install_done_log", count=success_count), "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t("install_done"), + self.tf("install_done_msg", count=success_count), + ) + elif success_count > 0: + self.run_on_ui_thread(self.set_progress, 100, self.t("install_partial")) + self.run_on_ui_thread(self.set_status, self.t("install_partial")) + self.run_on_ui_thread( + self.log, + self.tf("install_partial_log", success=success_count, failed=failed_count), + "WARNING", + ) + self.run_on_ui_thread( + messagebox.showwarning, + self.t("install_partial_title"), + self.tf("install_partial_msg", success=success_count, failed=failed_count), + ) + else: + self.run_on_ui_thread(self.set_progress, 0, self.t("install_failed")) + self.run_on_ui_thread(self.set_status, self.t("install_failed")) + self.run_on_ui_thread(self.log, self.t("install_failed_log"), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t("install_failed"), self.t("install_failed_msg")) + + self.run_on_ui_thread(self.set_busy, False) + + def center_window(self): + self.root.update_idletasks() + width = self.root.winfo_width() + height = self.root.winfo_height() + screen_width = self.root.winfo_screenwidth() + screen_height = self.root.winfo_screenheight() + x = (screen_width - width) // 2 + y = (screen_height - height) // 2 + self.root.geometry(f"{width}x{height}+{x}+{y}") + + def run(self): + self.root.mainloop() + + +def main(): + app = ADKAPKGUI() + app.run() + + +if __name__ == "__main__": + main() diff --git a/Mazda-EZ6/app.ico b/Mazda-EZ6/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..4f8e68486a5cd154d488669bee2dd71b57a9613c GIT binary patch literal 49026 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

q1b+hG9W_Ye~93|wJpT$iidT+aMnJ3{AWi5Wc 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 literal 0 HcmV?d00001 diff --git a/Mazda-EZ60/manual_push_apps_to_system_app.ps1 b/Mazda-EZ60/manual_push_apps_to_system_app.ps1 new file mode 100644 index 0000000..2ee37d9 --- /dev/null +++ b/Mazda-EZ60/manual_push_apps_to_system_app.ps1 @@ -0,0 +1,209 @@ +param( + [string]$AppsDir = "", + [string]$AdbPath = "", + [string]$ShellPassword = "adb36987" +) + +$ErrorActionPreference = "Stop" + +$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path +if (-not $AppsDir) { + $AppsDir = Join-Path $ScriptDir "apps" +} + +function Find-AdbPath { + param( + [string]$BaseDir + ) + + $candidates = @( + (Join-Path $BaseDir "adb.exe"), + (Join-Path $BaseDir "tools\adb.exe"), + (Join-Path $BaseDir "..\adb.exe"), + (Join-Path $BaseDir "..\tools\adb.exe"), + (Join-Path $BaseDir "..\..\tools\adb.exe"), + "D:\Code\language-installer\tools\adb.exe", + "D:\apk_tools\platform-tools\adb.exe" + ) + + foreach ($candidate in $candidates) { + try { + $resolved = Resolve-Path -LiteralPath $candidate -ErrorAction Stop + if ($resolved) { + return $resolved.Path + } + } catch {} + } + + $pathAdb = Get-Command adb.exe -ErrorAction SilentlyContinue + if ($pathAdb) { + return $pathAdb.Source + } + + return "" +} + +if (-not $AdbPath) { + $AdbPath = Find-AdbPath -BaseDir $ScriptDir +} + +if (-not (Test-Path -LiteralPath $AdbPath)) { + throw "adb.exe not found. Put adb.exe next to this script or run with -AdbPath `"D:\path\adb.exe`"" +} +if (-not (Test-Path -LiteralPath $AppsDir)) { + throw "apps directory not found: $AppsDir" +} + +function Quote-ProcessArgument { + param( + [Parameter(Mandatory = $true)] + [string]$Value + ) + + if ($Value -notmatch '[\s"]') { + return $Value + } + + return '"' + $Value.Replace('"', '\"') + '"' +} + +function Invoke-Adb { + param( + [Parameter(Mandatory = $true)] + [string[]]$Arguments + ) + + $psi = New-Object System.Diagnostics.ProcessStartInfo + $psi.FileName = $AdbPath + $psi.Arguments = (($Arguments | ForEach-Object { Quote-ProcessArgument $_ }) -join " ") + $psi.RedirectStandardOutput = $true + $psi.RedirectStandardError = $true + $psi.UseShellExecute = $false + $psi.CreateNoWindow = $true + + $proc = [System.Diagnostics.Process]::Start($psi) + $stdout = $proc.StandardOutput.ReadToEnd() + $stderr = $proc.StandardError.ReadToEnd() + $proc.WaitForExit() + + return [pscustomobject]@{ + Code = $proc.ExitCode + Out = ($stdout + $stderr).Trim() + } +} + +function Invoke-AdbShellWithPassword { + param( + [Parameter(Mandatory = $true)] + [string]$Command, + [int]$TimeoutMs = 60000 + ) + + $psi = New-Object System.Diagnostics.ProcessStartInfo + $psi.FileName = $AdbPath + $psi.Arguments = "-d shell" + $psi.RedirectStandardInput = $true + $psi.RedirectStandardOutput = $true + $psi.RedirectStandardError = $true + $psi.UseShellExecute = $false + $psi.CreateNoWindow = $true + + $proc = New-Object System.Diagnostics.Process + $proc.StartInfo = $psi + [void]$proc.Start() + + Start-Sleep -Milliseconds 500 + $proc.StandardInput.WriteLine($ShellPassword) + Start-Sleep -Milliseconds 300 + $proc.StandardInput.WriteLine($Command) + $proc.StandardInput.WriteLine("exit") + $proc.StandardInput.Close() + + if (-not $proc.WaitForExit($TimeoutMs)) { + try { $proc.Kill() } catch {} + return [pscustomobject]@{ + Code = -1 + Out = "shell command timeout: $Command" + } + } + + $stdout = $proc.StandardOutput.ReadToEnd() + $stderr = $proc.StandardError.ReadToEnd() + return [pscustomobject]@{ + Code = $proc.ExitCode + Out = ($stdout + $stderr).Trim() + } +} + +Write-Host "ADB: $AdbPath" +Write-Host "Apps: $AppsDir" + +$devices = Invoke-Adb -Arguments @("-d", "devices") +if ($devices.Code -ne 0 -or $devices.Out -notmatch "`tdevice") { + Write-Host "[ERROR] No adb device connected." -ForegroundColor Red + if ($devices.Out) { Write-Host $devices.Out } + exit 1 +} + +$root = Invoke-Adb -Arguments @("-d", "root") +if ($root.Out) { + Write-Host $root.Out +} +Start-Sleep -Seconds 2 + +$apks = Get-ChildItem -LiteralPath $AppsDir -Filter "*.apk" -File | Sort-Object Name +if (-not $apks) { + Write-Host "[ERROR] No APK files found in apps directory." -ForegroundColor Red + exit 1 +} + +$total = $apks.Count +$index = 0 +$success = 0 + +foreach ($apk in $apks) { + $index++ + $apkName = [System.IO.Path]::GetFileNameWithoutExtension($apk.Name) + $targetDir = "/system/app/$apkName" + $targetApk = "$targetDir/$($apk.Name)" + + Write-Host "" + Write-Host "[$index/$total] $($apk.Name)" -ForegroundColor Cyan + + $mkdir = Invoke-AdbShellWithPassword -Command "mkdir -p '$targetDir'" + if ($mkdir.Code -ne 0) { + Write-Host "[ERROR] mkdir failed: $targetDir" -ForegroundColor Red + if ($mkdir.Out) { Write-Host $mkdir.Out } + exit 1 + } + + $push = Invoke-Adb -Arguments @("-d", "push", $apk.FullName, $targetApk) + if ($push.Code -ne 0) { + Write-Host "[ERROR] push failed: $($apk.Name)" -ForegroundColor Red + if ($push.Out) { Write-Host $push.Out } + exit 1 + } + if ($push.Out) { + Write-Host $push.Out + } + + $chmodDir = Invoke-AdbShellWithPassword -Command "chmod 755 '$targetDir'" + if ($chmodDir.Code -ne 0) { + Write-Host "[ERROR] chmod 755 failed: $targetDir" -ForegroundColor Red + if ($chmodDir.Out) { Write-Host $chmodDir.Out } + exit 1 + } + + $chmodApk = Invoke-AdbShellWithPassword -Command "chmod 644 '$targetApk'" + if ($chmodApk.Code -ne 0) { + Write-Host "[ERROR] chmod 644 failed: $targetApk" -ForegroundColor Red + if ($chmodApk.Out) { Write-Host $chmodApk.Out } + exit 1 + } + + $success++ + Write-Host "[OK] $($apk.Name)" -ForegroundColor Green +} + +Write-Host "" +Write-Host "[DONE] Pushed $success/$total APK files." -ForegroundColor Green diff --git a/Mazda-EZ60/pack_mazda_ez60.bat b/Mazda-EZ60/pack_mazda_ez60.bat deleted file mode 100644 index 61f2663..0000000 --- a/Mazda-EZ60/pack_mazda_ez60.bat +++ /dev/null @@ -1,100 +0,0 @@ -@echo off -chcp 65001 >nul -cd /d "%~dp0" -set "ROOT=%~dp0.." -set "TOOLS=%ROOT%\tools" -set "NAME=Mazda-EZ60-Language-Installer" -set "SRC=Mazda-EZ60.py" -title %NAME% - Build - -echo ============================================================ -echo %NAME% - Cython Build -echo ============================================================ -echo. - -where python >nul 2>&1 -if errorlevel 1 ( - echo [ERROR] Python not found - pause - exit /b -) -for /f "delims=" %%i in ('where python') do set "PY=%%i" -echo Python: %PY% - -echo [1/6] Installing deps... -"%PY%" -m pip install pyinstaller cython pyzipper -q -if errorlevel 1 ( - "%PY%" -m pip install pyinstaller cython pyzipper -q -i https://pypi.tuna.tsinghua.edu.cn/simple -) - -echo [2/6] Clean... -if exist "dist_cy" rmdir /s /q dist_cy 2>nul -if exist "build" rmdir /s /q build 2>nul -if exist "dist" rmdir /s /q dist 2>nul - -echo [3/6] Cython compile... -mkdir dist_cy 2>nul -copy "%SRC%" dist_cy\_core.py >nul -if errorlevel 1 ( - echo [WARN] Copy source failed, fallback - goto :NORMAL -) - -"%PY%" -c "open('dist_cy/setup_cython.py','w').write('from setuptools import setup\nfrom Cython.Build import cythonize\nsetup(ext_modules=cythonize(\"_core.py\", compiler_directives={\"language_level\":\"3\"}))\n')" - -cd dist_cy -"%PY%" setup_cython.py build_ext --inplace -if errorlevel 1 ( - cd .. - echo [WARN] Cython failed, fallback - goto :NORMAL -) - -for %%f in (_core*.pyd) do set PYD=%%f -if "%PYD%"=="" ( - cd .. - echo [WARN] No pyd, fallback - goto :NORMAL -) -echo PYD: %PYD% -copy "%PYD%" _core.pyd >nul - -"%PY%" -c "open('launcher.py','w').write('# -*- coding: utf-8 -*-\nfrom _core import main\nmain()\n')" - -echo [4/6] Copy resources... -copy "%TOOLS%\adb.exe" . >nul -copy "%TOOLS%\AdbWinApi.dll" . >nul -copy "%TOOLS%\AdbWinUsbApi.dll" . >nul -copy "%TOOLS%\7za.exe" . >nul -if exist "%ROOT%\app.ico" copy "%ROOT%\app.ico" . >nul - -echo [5/6] PyInstaller... -"%PY%" -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ROOT%\app.ico" --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --collect-all tkinter --uac-admin launcher.py -if errorlevel 1 ( - cd .. - echo [ERROR] PyInstaller failed - pause - exit /b -) - -echo [6/6] Cleanup... -del /q _core.py _core.c _core.pyd %PYD% launcher.py setup_cython.py 2>nul -rmdir /s /q build 2>nul -cd .. -goto :DONE - -:NORMAL -echo [INFO] Normal PyInstaller... -"%PY%" -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ROOT%\app.ico" --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --collect-all tkinter --uac-admin "%SRC%" - -:DONE -echo. -echo Done. -if exist "dist_cy\dist\%NAME%.exe" ( - echo Output: dist_cy\dist\%NAME%.exe -) else if exist "dist\%NAME%.exe" ( - echo Output: dist\%NAME%.exe -) else ( - echo Check dist folder -) -pause diff --git a/Mazda-EZ60/pack_mazda_ez60_1.0.bat b/Mazda-EZ60/pack_mazda_ez60_1.0.bat new file mode 100644 index 0000000..20f72df --- /dev/null +++ b/Mazda-EZ60/pack_mazda_ez60_1.0.bat @@ -0,0 +1,159 @@ +@echo off +chcp 65001 >nul +cd /d "%~dp0" +set "ROOT=%~dp0.." +set "TOOLS=%ROOT%\tools" +set "NAME=Mazda_EZ60-Language-Install_v1.0" +set "SRC=Mazda_EZ60-Language-Install_v1.0.py" +set "ICON=%~dp0app.ico" +title %NAME% - Cython Build + +echo ============================================================ +echo %NAME% - Cython Build +echo ============================================================ +echo. + +where python >nul 2>&1 +if errorlevel 1 ( + echo [ERROR] Python not found + pause + exit /b 1 +) +for /f "delims=" %%i in ('where python') do set "PY=%%i" +echo Python: %PY% + +if not exist "%SRC%" ( + echo [ERROR] Source not found: %SRC% + pause + exit /b 1 +) +if not exist "%ICON%" ( + echo [ERROR] Icon not found: %ICON% + pause + exit /b 1 +) +if not exist "%TOOLS%\adb.exe" ( + echo [ERROR] adb.exe not found in %TOOLS% + pause + exit /b 1 +) +if not exist "%TOOLS%\AdbWinApi.dll" ( + echo [ERROR] AdbWinApi.dll not found in %TOOLS% + pause + exit /b 1 +) +if not exist "%TOOLS%\AdbWinUsbApi.dll" ( + echo [ERROR] AdbWinUsbApi.dll not found in %TOOLS% + pause + exit /b 1 +) +if not exist "%TOOLS%\7za.exe" ( + echo [ERROR] 7za.exe not found in %TOOLS% + pause + exit /b 1 +) + +echo [1/6] Installing deps... +"%PY%" -m pip install pyinstaller cython pyzipper -q +if errorlevel 1 ( + "%PY%" -m pip install pyinstaller cython pyzipper -q -i https://pypi.tuna.tsinghua.edu.cn/simple +) +if errorlevel 1 ( + echo [ERROR] Dependency install failed + pause + exit /b 1 +) + +echo [2/6] Clean... +if exist "dist_cy" rmdir /s /q dist_cy 2>nul +if exist "build" rmdir /s /q build 2>nul +if exist "dist" rmdir /s /q dist 2>nul +if exist "%NAME%.spec" del /q "%NAME%.spec" 2>nul + +echo [3/6] Cython compile... +mkdir dist_cy 2>nul +copy "%SRC%" dist_cy\_core.py >nul +if errorlevel 1 ( + echo [ERROR] Copy source failed + pause + exit /b 1 +) + +"%PY%" -c "open('dist_cy/setup_cython.py','w',encoding='utf-8').write('from setuptools import setup\nfrom Cython.Build import cythonize\nsetup(ext_modules=cythonize(\"_core.py\", compiler_directives={\"language_level\":\"3\"}))\n')" +if errorlevel 1 ( + echo [ERROR] Failed to create Cython setup script + pause + exit /b 1 +) + +cd dist_cy +"%PY%" setup_cython.py build_ext --inplace +if errorlevel 1 ( + cd .. + echo [ERROR] Cython failed. Build stopped. + pause + exit /b 1 +) + +set "PYD=" +for %%f in (_core*.pyd) do set "PYD=%%f" +if "%PYD%"=="" ( + cd .. + echo [ERROR] No Cython PYD generated. Build stopped. + pause + exit /b 1 +) +echo PYD: %PYD% +copy "%PYD%" _core.pyd >nul +if errorlevel 1 ( + cd .. + echo [ERROR] Failed to copy Cython PYD + pause + exit /b 1 +) + +"%PY%" -c "open('launcher.py','w',encoding='utf-8').write('# -*- coding: utf-8 -*-\nfrom _core import main\nmain()\n')" +if errorlevel 1 ( + cd .. + echo [ERROR] Failed to create launcher.py + pause + exit /b 1 +) + +echo [4/6] Copy resources... +copy "%TOOLS%\adb.exe" . >nul +copy "%TOOLS%\AdbWinApi.dll" . >nul +copy "%TOOLS%\AdbWinUsbApi.dll" . >nul +copy "%TOOLS%\7za.exe" . >nul +copy "%ICON%" . >nul +if errorlevel 1 ( + cd .. + echo [ERROR] Copy resources failed + pause + exit /b 1 +) + +echo [5/6] PyInstaller... +"%PY%" -m PyInstaller --onefile --windowed --name="%NAME%" --icon="app.ico" --add-data "adb.exe;." --add-data "AdbWinApi.dll;." --add-data "AdbWinUsbApi.dll;." --add-data "7za.exe;." --add-data "app.ico;." --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin launcher.py +if errorlevel 1 ( + cd .. + echo [ERROR] PyInstaller failed + pause + exit /b 1 +) + +echo [6/6] Cleanup... +del /q _core.py _core.c _core.pyd %PYD% launcher.py setup_cython.py app.ico 2>nul +rmdir /s /q build 2>nul +cd .. + +echo. +echo Done. +if exist "dist_cy\dist\%NAME%.exe" ( + echo Output: dist_cy\dist\%NAME%.exe +) else ( + echo [ERROR] Output exe was not generated + pause + exit /b 1 +) +pause diff --git a/Mazda-EZ60/pack_mazda_ez60_1.0_direct_push.bat b/Mazda-EZ60/pack_mazda_ez60_1.0_direct_push.bat new file mode 100644 index 0000000..5823a3f --- /dev/null +++ b/Mazda-EZ60/pack_mazda_ez60_1.0_direct_push.bat @@ -0,0 +1,159 @@ +@echo off +chcp 65001 >nul +cd /d "%~dp0" +set "ROOT=%~dp0.." +set "TOOLS=%ROOT%\tools" +set "NAME=Mazda_EZ60-Language-Install_v1.0-direct-push" +set "SRC=Mazda_EZ60-Language-Install_v1.0_direct_push.py" +set "ICON=%~dp0app.ico" +title %NAME% - Cython Build + +echo ============================================================ +echo %NAME% - Cython Build +echo ============================================================ +echo. + +where python >nul 2>&1 +if errorlevel 1 ( + echo [ERROR] Python not found + pause + exit /b 1 +) +for /f "delims=" %%i in ('where python') do set "PY=%%i" +echo Python: %PY% + +if not exist "%SRC%" ( + echo [ERROR] Source not found: %SRC% + pause + exit /b 1 +) +if not exist "%ICON%" ( + echo [ERROR] Icon not found: %ICON% + pause + exit /b 1 +) +if not exist "%TOOLS%\adb.exe" ( + echo [ERROR] adb.exe not found in %TOOLS% + pause + exit /b 1 +) +if not exist "%TOOLS%\AdbWinApi.dll" ( + echo [ERROR] AdbWinApi.dll not found in %TOOLS% + pause + exit /b 1 +) +if not exist "%TOOLS%\AdbWinUsbApi.dll" ( + echo [ERROR] AdbWinUsbApi.dll not found in %TOOLS% + pause + exit /b 1 +) +if not exist "%TOOLS%\7za.exe" ( + echo [ERROR] 7za.exe not found in %TOOLS% + pause + exit /b 1 +) + +echo [1/6] Installing deps... +"%PY%" -m pip install pyinstaller cython pyzipper -q +if errorlevel 1 ( + "%PY%" -m pip install pyinstaller cython pyzipper -q -i https://pypi.tuna.tsinghua.edu.cn/simple +) +if errorlevel 1 ( + echo [ERROR] Dependency install failed + pause + exit /b 1 +) + +echo [2/6] Clean... +if exist "dist_cy" rmdir /s /q dist_cy 2>nul +if exist "build" rmdir /s /q build 2>nul +if exist "dist" rmdir /s /q dist 2>nul +if exist "%NAME%.spec" del /q "%NAME%.spec" 2>nul + +echo [3/6] Cython compile... +mkdir dist_cy 2>nul +copy "%SRC%" dist_cy\_core.py >nul +if errorlevel 1 ( + echo [ERROR] Copy source failed + pause + exit /b 1 +) + +"%PY%" -c "open('dist_cy/setup_cython.py','w',encoding='utf-8').write('from setuptools import setup\nfrom Cython.Build import cythonize\nsetup(ext_modules=cythonize(\"_core.py\", compiler_directives={\"language_level\":\"3\"}))\n')" +if errorlevel 1 ( + echo [ERROR] Failed to create Cython setup script + pause + exit /b 1 +) + +cd dist_cy +"%PY%" setup_cython.py build_ext --inplace +if errorlevel 1 ( + cd .. + echo [ERROR] Cython failed. Build stopped. + pause + exit /b 1 +) + +set "PYD=" +for %%f in (_core*.pyd) do set "PYD=%%f" +if "%PYD%"=="" ( + cd .. + echo [ERROR] No Cython PYD generated. Build stopped. + pause + exit /b 1 +) +echo PYD: %PYD% +copy "%PYD%" _core.pyd >nul +if errorlevel 1 ( + cd .. + echo [ERROR] Failed to copy Cython PYD + pause + exit /b 1 +) + +"%PY%" -c "open('launcher.py','w',encoding='utf-8').write('# -*- coding: utf-8 -*-\nfrom _core import main\nmain()\n')" +if errorlevel 1 ( + cd .. + echo [ERROR] Failed to create launcher.py + pause + exit /b 1 +) + +echo [4/6] Copy resources... +copy "%TOOLS%\adb.exe" . >nul +copy "%TOOLS%\AdbWinApi.dll" . >nul +copy "%TOOLS%\AdbWinUsbApi.dll" . >nul +copy "%TOOLS%\7za.exe" . >nul +copy "%ICON%" . >nul +if errorlevel 1 ( + cd .. + echo [ERROR] Copy resources failed + pause + exit /b 1 +) + +echo [5/6] PyInstaller... +"%PY%" -m PyInstaller --onefile --windowed --name="%NAME%" --icon="app.ico" --add-data "adb.exe;." --add-data "AdbWinApi.dll;." --add-data "AdbWinUsbApi.dll;." --add-data "7za.exe;." --add-data "app.ico;." --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin launcher.py +if errorlevel 1 ( + cd .. + echo [ERROR] PyInstaller failed + pause + exit /b 1 +) + +echo [6/6] Cleanup... +del /q _core.py _core.c _core.pyd %PYD% launcher.py setup_cython.py app.ico 2>nul +rmdir /s /q build 2>nul +cd .. + +echo. +echo Done. +if exist "dist_cy\dist\%NAME%.exe" ( + echo Output: dist_cy\dist\%NAME%.exe +) else ( + echo [ERROR] Output exe was not generated + pause + exit /b 1 +) +pause diff --git a/Mazda-EZ60/pack_mazda_ez60_1.2.bat b/Mazda-EZ60/pack_mazda_ez60_1.2.bat new file mode 100644 index 0000000..a0fe4f4 --- /dev/null +++ b/Mazda-EZ60/pack_mazda_ez60_1.2.bat @@ -0,0 +1,194 @@ +@echo off +chcp 65001 >nul +cd /d "%~dp0" +set "ROOT=%~dp0.." +set "TOOLS=%ROOT%\tools" +set "NAME=Mazda-EZ60-Language-Installer_v1.2" +set "SRC=Mazda-EZ60_1.2.py" +set "ICON=%~dp0app.ico" +title %NAME% - Cython Build + +echo ============================================================ +echo %NAME% - Cython Build +echo ============================================================ +echo. + +where python >nul 2>&1 +if errorlevel 1 ( + echo [ERROR] Python not found + pause + exit /b 1 +) +for /f "delims=" %%i in ('where python') do set "PY=%%i" +echo Python: %PY% + +if not exist "%SRC%" ( + echo [ERROR] Source not found: %SRC% + pause + exit /b 1 +) +if not exist "%ICON%" ( + echo [ERROR] Icon not found: %ICON% + pause + exit /b 1 +) +if not exist "%TOOLS%\adb.exe" ( + echo [ERROR] adb.exe not found in %TOOLS% + pause + exit /b 1 +) +if not exist "%TOOLS%\AdbWinApi.dll" ( + echo [ERROR] AdbWinApi.dll not found in %TOOLS% + pause + exit /b 1 +) +if not exist "%TOOLS%\AdbWinUsbApi.dll" ( + echo [ERROR] AdbWinUsbApi.dll not found in %TOOLS% + pause + exit /b 1 +) +if not exist "%TOOLS%\7za.exe" ( + echo [ERROR] 7za.exe not found in %TOOLS% + pause + exit /b 1 +) +if not exist "%TOOLS%\fastboot.exe" ( + echo [ERROR] fastboot.exe not found in %TOOLS% + pause + exit /b 1 +) +if not exist "%TOOLS%\usb_driver\android_winusb.inf" ( + echo [ERROR] usb_driver not found at %TOOLS%\usb_driver + pause + exit /b 1 +) +if not exist "%~dp0runtime.dat" ( + echo [ERROR] runtime.dat not found at %~dp0runtime.dat + pause + exit /b 1 +) + +echo [1/6] Installing deps... +"%PY%" -m pip install pyinstaller cython pyzipper cryptography -q +if errorlevel 1 ( + "%PY%" -m pip install pyinstaller cython pyzipper cryptography -q -i https://pypi.tuna.tsinghua.edu.cn/simple +) +if errorlevel 1 ( + echo [ERROR] Dependency install failed + pause + exit /b 1 +) + +echo [2/6] Clean... +if exist "dist_cy" rmdir /s /q dist_cy 2>nul +if exist "build" rmdir /s /q build 2>nul +if exist "dist" rmdir /s /q dist 2>nul +if exist "%NAME%.spec" del /q "%NAME%.spec" 2>nul + +echo [3/6] Cython compile... +mkdir dist_cy 2>nul +copy "%SRC%" dist_cy\_core.py >nul +if errorlevel 1 ( + echo [ERROR] Copy source failed + pause + exit /b 1 +) + +"%PY%" -c "open('dist_cy/setup_cython.py','w',encoding='utf-8').write('from setuptools import setup\nfrom Cython.Build import cythonize\nsetup(ext_modules=cythonize(\"_core.py\", compiler_directives={\"language_level\":\"3\"}))\n')" +if errorlevel 1 ( + echo [ERROR] Failed to create Cython setup script + pause + exit /b 1 +) + +cd dist_cy +"%PY%" setup_cython.py build_ext --inplace +if errorlevel 1 ( + cd .. + echo [ERROR] Cython failed. Build stopped. + pause + exit /b 1 +) + +set "PYD=" +for %%f in (_core*.pyd) do set "PYD=%%f" +if "%PYD%"=="" ( + cd .. + echo [ERROR] No Cython PYD generated. Build stopped. + pause + exit /b 1 +) +echo PYD: %PYD% +copy "%PYD%" _core.pyd >nul +if errorlevel 1 ( + cd .. + echo [ERROR] Failed to copy Cython PYD + pause + exit /b 1 +) + +"%PY%" -c "open('launcher.py','w',encoding='utf-8').write('# -*- coding: utf-8 -*-\nfrom _core import main\nmain()\n')" +if errorlevel 1 ( + cd .. + echo [ERROR] Failed to create launcher.py + pause + exit /b 1 +) + +echo [4/6] Copy resources... +copy "%TOOLS%\adb.exe" . >nul +copy "%TOOLS%\AdbWinApi.dll" . >nul +copy "%TOOLS%\AdbWinUsbApi.dll" . >nul +copy "%TOOLS%\7za.exe" . >nul +copy "%TOOLS%\fastboot.exe" . >nul +copy "%ICON%" . >nul +if errorlevel 1 ( + cd .. + echo [ERROR] Copy resources failed + pause + exit /b 1 +) +if exist "%~dp0EZ60_resource.dat" copy "%~dp0EZ60_resource.dat" . >nul + +echo [5/6] PyInstaller... +set ADD_PERMISSION_RESOURCE= +if exist "EZ60_resource.dat" set ADD_PERMISSION_RESOURCE=--add-data "EZ60_resource.dat;." +"%PY%" -m PyInstaller --onefile --windowed --name="%NAME%" --icon="app.ico" --add-data "adb.exe;." --add-data "AdbWinApi.dll;." --add-data "AdbWinUsbApi.dll;." --add-data "7za.exe;." --add-data "fastboot.exe;." --add-data "app.ico;." --add-data "%TOOLS%\usb_driver;usb_driver" %ADD_PERMISSION_RESOURCE% --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --hidden-import=cryptography --collect-all tkinter --collect-all cryptography --uac-admin launcher.py +if errorlevel 1 ( + cd .. + echo [ERROR] PyInstaller failed + pause + exit /b 1 +) + +echo [6/6] Cleanup... +del /q _core.py _core.c _core.pyd %PYD% launcher.py setup_cython.py app.ico fastboot.exe EZ60_resource.dat 2>nul +rmdir /s /q build 2>nul +cd .. + +if not exist "dist_cy\dist\%NAME%.exe" ( + echo [ERROR] Output exe was not generated + pause + exit /b 1 +) + +copy "runtime.dat" "dist_cy\dist\runtime.dat" >nul +if errorlevel 1 ( + echo [ERROR] Copy runtime.dat failed + pause + exit /b 1 +) + +if exist "package_voice-assistant.bin" ( + copy "package_voice-assistant.bin" "dist_cy\dist\package_voice-assistant.bin" >nul + if errorlevel 1 ( + echo [ERROR] Copy package_voice-assistant.bin failed + pause + exit /b 1 + ) +) + +echo. +echo Done. +echo Output: dist_cy\dist\%NAME%.exe +pause diff --git a/Q05-Lidar/Q05-Lidar_Installer.py b/Q05-Lidar/Q05-Lidar_Installer.py index 00e1cf0..c6ed3d2 100644 --- a/Q05-Lidar/Q05-Lidar_Installer.py +++ b/Q05-Lidar/Q05-Lidar_Installer.py @@ -66,17 +66,61 @@ def find_resource(file_name): return candidates[0] +def resource_dir_candidates(dir_name): + base_dir = get_app_dir() + candidates = [] + if getattr(sys, 'frozen', False): + candidates.append(Path(getattr(sys, '_MEIPASS', base_dir)) / dir_name) + candidates.extend([ + base_dir / dir_name, + base_dir / 'tools' / dir_name, + base_dir / 'shared' / dir_name, + base_dir.parent / dir_name, + base_dir.parent / 'tools' / dir_name, + base_dir.parent / 'shared' / dir_name, + ]) + unique = [] + for candidate in candidates: + if candidate not in unique: + unique.append(candidate) + return unique + + +def find_resource_dir(dir_name): + candidates = resource_dir_candidates(dir_name) + for candidate in candidates: + if candidate.exists() and candidate.is_dir(): + return candidate + return candidates[0] + + def find_tool(file_name, fallback=None): path = find_resource(file_name) if path.exists(): return str(path) return fallback or str(path) + + +def set_windows_app_id(): + if sys.platform != 'win32': + return + try: + import ctypes + app_id = 'YibinKeyi.Q05Lidar.Installer.1.0' + ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(app_id) + except Exception: + pass + + class ADKAPKGUI: def __init__(self): + set_windows_app_id() self.root = tk.Tk() self.root.title("启源Q05Ultra+激光雷达") self.root.geometry("900x660") self.root.resizable(True, True) + self.set_window_icon() + self.root.after(200, self.set_window_icon) self.default_window_size = (900, 660) self.right_panel_width = 280 @@ -129,6 +173,7 @@ class ADKAPKGUI: 'auth_yes': '已授权', 'auth_no': '未授权', 'btn_refresh': '🔄 检查', + 'btn_install_driver': '🧩 安装驱动', 'hint_factory': '🔧 关闭车辆WI-FI和4G网络,拨号获取的密码进入工程模式', 'hotspot_title': '📶 电脑热点', 'hotspot_start': '🔧 打开热点设置', @@ -163,11 +208,21 @@ class ADKAPKGUI: 'msg_permission_failed': '获取失败', 'msg_confirm_permission_title': '确认获取权限', 'msg_confirm_permission': '此操作将为当前设备获取权限。\n过程中请不要断电或拔线。\n\n是否继续?', + 'msg_driver_missing_title': '驱动环境', + 'msg_driver_missing': '驱动缺失,即将自动安装驱动。', + 'msg_driver_install_confirm': '即将安装驱动环境,需要管理员权限。', + 'msg_driver_install_done': '驱动安装完成。如设备仍无法识别,请重新插拔 USB 线缆。', + 'msg_driver_install_failed': '驱动安装失败: {error}', 'status_debug': '🔧 调试模式', 'log_cleared': '日志已清空', 'log_lang_changed': '语言已切换为中文', 'log_debug_on': '🔧 调试模式已开启', 'log_debug_off': '调试模式已关闭', + 'log_driver_found': '已检测到驱动环境', + 'log_driver_missing': '未检测到驱动环境', + 'log_driver_install_start': '正在安装驱动环境...', + 'log_driver_install_success': '驱动环境安装完成', + 'log_driver_install_failed': '驱动环境安装失败: {error}', 'log_permission_success': '获取成功', 'log_push_success': '语言包刷入完成,重启设备后生效', 'log_push_failed': '语言包刷入失败', @@ -193,7 +248,7 @@ class ADKAPKGUI: 'progress_flashing': '正在刷入', 'progress_flash_done': '刷入完成', 'progress_extracting_percent': '资源准备中 {percent}%', - 'progress_install_module': '安装模块 {module}', + 'progress_install_module': '安装资源', 'progress_push_files': '推送文件 {current}/{total}', 'quick_lang_title': '快捷语言设置', 'quick_lang_header': '选择目标语言', @@ -206,7 +261,7 @@ class ADKAPKGUI: 'reboot_confirm_title': '确认重启', 'reboot_confirm': '确定要重启设备吗?', 'disable_confirm_title': '确认禁用升级', - 'disable_confirm': '⚠️ 警告:禁用系统升级后,将无法接收系统更新!\n\n是否确定要禁用系统升级应用?\n\n禁用命令:\nadb shell pm disable-user --user 0 com.incall.apps.softmanager', + 'disable_confirm': '⚠️ 警告:禁用系统升级后,将无法接收系统更新!\n\n是否确定要禁用系统升级应用?', 'disable_success_title': '成功', 'disable_success': '系统升级已成功禁用!', 'disable_failed': '禁用失败:{output}', @@ -227,7 +282,7 @@ class ADKAPKGUI: 'debug_need_vin': '请先刷新设备VIN,或在工程密码输入框填入VIN', 'log_decrypt_success': '解密测试成功: size={size}, sha256={sha}', 'log_package_extract_success': 'Q05_Lidar-package.bin 解压测试成功: APK数量={count}', - 'log_package_extract_modules_success': 'Q05_Lidar-package.bin 解压测试成功: 主模块={main}, 附加模块={extra}', + 'log_package_extract_modules_success': 'Q05_Lidar-package.bin 解压测试成功: 资源数量={count}', 'hotspot_stopped': '未启动', 'log_device_disconnected': '设备已断开连接', 'log_cache_invalid': '已解压缓存无效: {reason}', @@ -248,12 +303,11 @@ class ADKAPKGUI: 'log_apps_dir_missing': '警告:未找到 apps 目录', 'log_extracted_resource_invalid': '解压后的资源无效: {reason}。已停止刷入,请检查解压密码或资源包。', 'log_resource_ready': '资源准备完成 (app: {count})', - 'log_module_resource_ready': '资源准备完成: 主模块={main}, 附加模块={extra}', - 'err_module_prop_missing': '资源包缺少 module.prop', - 'err_system_dir_missing': '资源包缺少 system 目录', - 'err_disable_module_missing': '资源包缺少 disable-wireless-adb-vecentek-magisk.zip', - 'err_module_id_missing': 'module.prop 缺少 id 字段', - 'err_disable_module_invalid': '附加模块压缩包无效或缺少 module.prop', + 'log_module_resource_ready': '资源准备完成', + 'err_module_prop_missing': '资源包缺少资源配置', + 'err_module_id_missing': '资源配置缺少 ID 字段', + 'err_module_zip_invalid': '资源文件无效或缺少配置: {file}', + 'err_duplicate_module_id': '资源包存在重复资源 ID', 'log_resource_prepare_failed_detail': '资源准备失败: {error}', 'log_resource_prepare_network': '资源准备失败,请检查网络连接后重试', 'log_package_file_missing': '未找到资源包文件', @@ -296,7 +350,7 @@ class ADKAPKGUI: 'log_runtime_install_failed': '获取失败', 'log_runtime_install_success': '正在获取权限中', 'log_fastboot_enter_failed': '获取失败', - 'log_fastboot_wait': '正在获取权限中', + 'log_fastboot_wait': '正在获取权限,请不要关闭程序或断开数据连接!', 'log_fastboot_missing': '获取失败', 'log_init_boot_flash_failed': '获取失败', 'log_init_boot_flash_success': '正在获取权限中', @@ -305,16 +359,16 @@ class ADKAPKGUI: 'log_install_failed_detail': 'install失败: {error}', 'log_prepare_resource': '正在准备资源...', 'log_flash_start': '开始刷入语言包...', - 'log_open_magisk': '正在打开 Magisk App,请在弹窗中授予 Shell/root 权限', - 'log_root_checking': '正在检测 ADB Shell root 权限...', - 'log_root_ok': 'ADB Shell root 权限已授予', - 'log_root_failed': '未获得 ADB Shell root 权限,请手动在 Magisk App 授予 Shell 权限', - 'msg_root_failed': '请手动在 Magisk App 授予 Shell 权限后重试。', - 'log_module_install_start': '开始安装 Magisk 模块: {module}', - 'log_module_install_done': 'Magisk 模块安装完成: {module}', - 'log_module_install_failed': 'Magisk 模块安装失败: {module}: {error}', + 'log_open_magisk': '请在弹窗中点击“允许”授予权限', + 'log_root_checking': '正在检测权限...', + 'log_root_ok': '权限已授予', + 'log_root_failed': '权限获取失败,请手动授予权限', + 'msg_root_failed': '请手动授予权限后重试。', + 'log_module_install_start': '开始安装资源', + 'log_module_install_done': '资源安装完成', + 'log_module_install_failed': '资源安装失败: {error}', 'log_push_file_failed': '文件推送失败: {file}: {error}', - 'log_root_cmd_failed': 'Root 命令执行失败: {command}: {error}', + 'log_root_cmd_failed': '权限操作失败: {error}', 'log_no_lang_pkg': '未找到语言包文件', 'log_install_item_ok': '安装成功: {name}.apk', 'log_install_item_failed': '安装失败: {name}.apk', @@ -386,6 +440,7 @@ class ADKAPKGUI: 'auth_yes': 'Authorized', 'auth_no': 'Unauthorized', 'btn_refresh': '🔄 Check', + 'btn_install_driver': '🧩 Driver', 'hint_factory': '🔧 Turn off the vehicle WiFi & 4G, enter factory mode with dial code', 'hotspot_title': '📶 Hotspot', 'hotspot_start': '🔧 Open Hotspot Settings', @@ -422,11 +477,21 @@ class ADKAPKGUI: 'msg_permission_failed': 'Permission failed', 'msg_confirm_permission_title': 'Confirm Unlock', 'msg_confirm_permission': 'This will grant permission for the current device.\nDo not disconnect power or USB during the process.\n\nContinue?', + 'msg_driver_missing_title': 'Driver Environment', + 'msg_driver_missing': 'Driver environment is missing. Driver installation will start automatically.', + 'msg_driver_install_confirm': 'Driver environment installation requires administrator permission.', + 'msg_driver_install_done': 'Driver installation completed. If the device is still not recognized, reconnect USB cable.', + 'msg_driver_install_failed': 'Driver installation failed: {error}', 'status_debug': '🔧 Debug mode', 'log_cleared': 'Log cleared', 'log_lang_changed': 'Language switched to English', 'log_debug_on': '🔧 Debug mode enabled', 'log_debug_off': 'Debug mode disabled', + 'log_driver_found': 'Driver environment detected', + 'log_driver_missing': 'Driver environment not detected', + 'log_driver_install_start': 'Installing driver environment...', + 'log_driver_install_success': 'Driver environment installed', + 'log_driver_install_failed': 'Driver environment installation failed: {error}', 'log_permission_success': 'Permission granted', 'log_push_success': 'Language package flashed. Reboot to apply changes.', 'log_push_failed': 'Language package flash failed', @@ -452,7 +517,7 @@ class ADKAPKGUI: 'progress_flashing': 'Flashing', 'progress_flash_done': 'Flash complete', 'progress_extracting_percent': 'Preparing resources {percent}%', - 'progress_install_module': 'Installing module {module}', + 'progress_install_module': 'Installing resources', 'progress_push_files': 'Pushing files {current}/{total}', 'quick_lang_title': 'Quick Language', 'quick_lang_header': 'Choose target language', @@ -465,7 +530,7 @@ class ADKAPKGUI: 'reboot_confirm_title': 'Confirm Reboot', 'reboot_confirm': 'Reboot the device now?', 'disable_confirm_title': 'Confirm Disable OTA', - 'disable_confirm': '⚠️ Warning: disabling system upgrade prevents system updates.\n\nDisable the system upgrade app?\n\nCommand:\nadb shell pm disable-user --user 0 com.incall.apps.softmanager', + 'disable_confirm': '⚠️ Warning: disabling system upgrade prevents system updates.\n\nDisable the system upgrade app?', 'disable_success_title': 'Success', 'disable_success': 'System upgrade app disabled.', 'disable_failed': 'Disable failed: {output}', @@ -486,7 +551,7 @@ class ADKAPKGUI: 'debug_need_vin': 'Refresh device VIN first, or enter a VIN in the password query field.', 'log_decrypt_success': 'Decrypt test passed: size={size}, sha256={sha}', 'log_package_extract_success': 'Q05_Lidar-package.bin extract test passed: APK count={count}', - 'log_package_extract_modules_success': 'Q05_Lidar-package.bin extract test passed: main={main}, extra={extra}', + 'log_package_extract_modules_success': 'Q05_Lidar-package.bin extract test passed: resource count={count}', 'hotspot_stopped': 'stopped', 'log_device_disconnected': 'Device disconnected', 'log_cache_invalid': 'Extract cache invalid: {reason}', @@ -507,12 +572,11 @@ class ADKAPKGUI: 'log_apps_dir_missing': 'apps directory not found', 'log_extracted_resource_invalid': 'Extracted resources are invalid: {reason}. Flashing stopped. Check the password or package.', 'log_resource_ready': 'Resources ready (app: {count})', - 'log_module_resource_ready': 'Resources ready: main={main}, extra={extra}', - 'err_module_prop_missing': 'module.prop is missing from the package', - 'err_system_dir_missing': 'system directory is missing from the package', - 'err_disable_module_missing': 'disable-wireless-adb-vecentek-magisk.zip is missing from the package', - 'err_module_id_missing': 'module.prop is missing the id field', - 'err_disable_module_invalid': 'Extra module archive is invalid or missing module.prop', + 'log_module_resource_ready': 'Resources ready', + 'err_module_prop_missing': 'Resource config is missing from the package', + 'err_module_id_missing': 'Resource config is missing the id field', + 'err_module_zip_invalid': 'Resource file is invalid or missing config: {file}', + 'err_duplicate_module_id': 'Duplicate resource ID found in package', 'log_resource_prepare_failed_detail': 'Resource preparation failed: {error}', 'log_resource_prepare_network': 'Resource preparation failed. Check the network connection and retry.', 'log_package_file_missing': 'Package file not found', @@ -555,7 +619,7 @@ class ADKAPKGUI: 'log_runtime_install_failed': 'Permission failed', 'log_runtime_install_success': 'Getting permission', 'log_fastboot_enter_failed': 'Permission failed', - 'log_fastboot_wait': 'Getting permission', + 'log_fastboot_wait': 'Getting permission. Do not close the program or disconnect the data cable.', 'log_fastboot_missing': 'Permission failed', 'log_init_boot_flash_failed': 'Permission failed', 'log_init_boot_flash_success': 'Getting permission', @@ -564,16 +628,16 @@ class ADKAPKGUI: 'log_install_failed_detail': 'install failed: {error}', 'log_prepare_resource': 'Preparing resources...', 'log_flash_start': 'Starting language package flash...', - 'log_open_magisk': 'Opening Magisk App. Grant Shell/root permission when prompted.', - 'log_root_checking': 'Checking ADB Shell root permission...', - 'log_root_ok': 'ADB Shell root permission granted', - 'log_root_failed': 'ADB Shell root permission was not granted. Grant Shell permission in Magisk manually.', - 'msg_root_failed': 'Grant Shell permission in Magisk manually, then retry.', - 'log_module_install_start': 'Installing Magisk module: {module}', - 'log_module_install_done': 'Magisk module installed: {module}', - 'log_module_install_failed': 'Magisk module install failed: {module}: {error}', + 'log_open_magisk': 'Tap "允许" to grant permission when prompted.', + 'log_root_checking': 'Checking permission...', + 'log_root_ok': 'Permission granted', + 'log_root_failed': 'Permission grant failed. Grant permission manually.', + 'msg_root_failed': 'Grant permission manually, then retry.', + 'log_module_install_start': 'Installing resources', + 'log_module_install_done': 'Resources installed', + 'log_module_install_failed': 'Resource installation failed: {error}', 'log_push_file_failed': 'File push failed: {file}: {error}', - 'log_root_cmd_failed': 'Root command failed: {command}: {error}', + 'log_root_cmd_failed': 'Permission operation failed: {error}', 'log_no_lang_pkg': 'No language package files found', 'log_install_item_ok': 'Installed: {name}.apk', 'log_install_item_failed': 'Install failed: {name}.apk', @@ -621,6 +685,8 @@ class ADKAPKGUI: self.adb = self._find_tool('adb.exe', 'adb') self.sz = self._find_tool('7za.exe', str(find_resource('7za.exe'))) self.fastboot = self._find_tool('fastboot.exe', 'fastboot') + self.driver_dir = find_resource_dir("usb_driver") + self.driver_inf = self.driver_dir / "android_winusb.inf" self.package_file = find_resource("Q05_Lidar-package.bin") self.runtime_file = self._find_data_file("runtime.dat", prefer_embedded=True) self.resource_file = self._find_data_file("resource.dat", prefer_embedded=True) @@ -629,8 +695,7 @@ class ADKAPKGUI: self.resource_key = None self.apps_dir = None self.temp_dir = None - self.module_dir = None - self.disable_module_dir = None + self.module_zips = [] self.runtime_cache_dir = None self.api_url = "https://api.changan.softwindy.cn/api/authorizations/auth-check" self.boot_challenge_api_url = "https://api.changan.softwindy.cn/api/authorizations/boot-challenge" @@ -642,6 +707,7 @@ class ADKAPKGUI: self.device_connected = False self._refreshing = False # 防止并发刷新 self.debug_mode = False # 调试模式 + self.driver_prompted = False atexit.register(self.cleanup_cache_on_exit) # 设置样式 @@ -656,6 +722,15 @@ class ADKAPKGUI: # 启动设备状态监控 self.start_device_monitor() + def set_window_icon(self): + """Set the Tk window/taskbar icon at runtime; PyInstaller --icon only sets the exe file icon.""" + try: + icon_path = find_resource("app.ico") + if icon_path.exists(): + self.root.iconbitmap(str(icon_path)) + except Exception: + pass + def _find_tool(self, exe_name, fallback): candidates = resource_candidates(exe_name) candidates.extend([ @@ -931,15 +1006,27 @@ class ADKAPKGUI: bg=self.colors['bg_light']) self.auth_label.pack(side=tk.LEFT, padx=(5, 0)) - # 刷新按钮 - self.btn_refresh = tk.Button(status_bar_frame, text=self.t('btn_refresh'), + # 操作按钮:检查靠近设备状态,安装驱动在检查右侧 + status_actions_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) + status_actions_frame.pack(side=tk.RIGHT, padx=10, pady=5) + + self.btn_refresh = tk.Button(status_actions_frame, text=self.t('btn_refresh'), command=lambda: self.refresh_device_status(force=True), font=('Microsoft YaHei', 8), fg=self.colors['accent'], bg=self.colors['bg_light'], relief=tk.FLAT, cursor='hand2') - self.btn_refresh.pack(side=tk.RIGHT, padx=10, pady=5) + self.btn_refresh.pack(side=tk.LEFT, padx=(0, 8)) + + self.btn_install_driver = tk.Button(status_actions_frame, text=self.t('btn_install_driver'), + command=self.install_fastboot_driver, + font=('Microsoft YaHei', 8), + fg=self.colors['warning'], + bg=self.colors['bg_light'], + relief=tk.FLAT, + cursor='hand2') + self.btn_install_driver.pack(side=tk.LEFT) # 解压进度条框架 progress_frame = tk.Frame(left_frame, bg=self.colors['bg_dark']) @@ -1222,6 +1309,7 @@ class ADKAPKGUI: (getattr(self, 'vin_label_title', None), 'vin_label', None), (getattr(self, 'auth_label_title', None), 'auth_label', None), (getattr(self, 'btn_refresh', None), 'btn_refresh', None), + (getattr(self, 'btn_install_driver', None), 'btn_install_driver', None), (getattr(self, 'hint_label', None), 'hint_factory', None), (getattr(self, 'pwd_query_label', None), 'pwd_query_label', None), (getattr(self, 'btn_hotspot', None), 'hotspot_start', None), @@ -1246,10 +1334,28 @@ class ADKAPKGUI: self._update_device_status_impl(self.device_connected, self.vin, getattr(self, '_last_authorized', False)) + def _sanitize_user_log_message(self, message): + """Hide low-level device command details from normal operator logs.""" + text = str(message) + replacements = [ + (r'adb(?:\.exe)?(?:\s+-d)?\s+shell(?:\s+root)?', '权限获取'), + (r'/debug_ramdisk/su(?:\s+-c)?', '权限获取'), + (r'\bsu\s+-c\b', '权限获取'), + (r'Shell 权限', '权限'), + (r'\bShell permission\b', 'permission'), + (r'\b[Rr]oot command\b', 'permission operation'), + (r'\b[Rr]oot\b', 'permission'), + ] + for pattern, replacement in replacements: + text = re.sub(pattern, replacement, text) + return text + def _log_impl(self, message, level="INFO"): """日志写入的实际实现(必须在主线程调用)""" if not self.debug_mode and level in ("INFO", "CMD"): return + if not self.debug_mode: + message = self._sanitize_user_log_message(message) timestamp = datetime.now().strftime("%H:%M:%S") log_entry = f"[{timestamp}] [{level}] {message}\n" self.log_text.insert(tk.END, log_entry, level) @@ -1373,11 +1479,11 @@ class ADKAPKGUI: threading.Thread(target=monitor, daemon=True).start() # ============================================================ - # 核心:adb shell 自动密码输入 + # 核心:设备权限命令自动密码输入 # ============================================================ def run_adb_shell(self, shell_command, timeout=15): - """执行 adb shell 命令,自动静默输入设备密码 adb36987。 + """执行设备权限命令,自动静默输入设备密码 adb36987。 静默执行,不显示 adb 原始输出,仅返回结果。""" if self.debug_mode: self.log(f"CMD: adb shell {shell_command}", "CMD") @@ -1461,79 +1567,70 @@ class ADKAPKGUI: ok, output = self.run_root_command("id", timeout=20) if ok and "uid=0" in output: self.log(self.t('log_root_ok'), "STATUS") + self.run_adb_shell('pm uninstall --user 0 com.topjohnwu.magisk', timeout=30) return True self.log(self.t('log_root_failed'), "ERROR") return False - def install_magisk_module_files(self, module_dir, skip_names=None): - module_dir = Path(module_dir) - skip_names = set(skip_names or []) - mod_id = self.read_module_id(module_dir) + def disable_and_uninstall_preinstalled_packages(self): + self.run_adb_shell('pm disable-user com.incall.apps.softmanager', timeout=30) + package_names = [ + "com.carcontrolhome.app", + "com.tinnove.netease.music", + "com.wtcl.electronicdirections", + ] + for package_name in package_names: + self.run_adb_shell(f'pm disable-user {package_name}', timeout=30) + self.run_adb_shell(f'pm uninstall --user 0 {package_name}', timeout=30) + + def install_magisk_module_zip(self, zip_path): + zip_path = Path(zip_path) + mod_id = self.read_module_id_from_zip(zip_path) if not mod_id: return False, self.t('err_module_id_missing') + if not zip_path.exists(): + return False, self.tf('err_extract_failed', error=f"{zip_path} not found") - device_stage = f"/data/local/tmp/q05_lidar_modules/{mod_id}" + device_stage_dir = "/data/local/tmp/q05_lidar_modules" + device_zip = f"{device_stage_dir}/{mod_id}.zip" device_module = f"/data/adb/modules/{mod_id}" - files = [ - p for p in module_dir.rglob("*") - if p.is_file() - and not self._is_skipped_module_path(module_dir, p, skip_names) - ] - if not files: - return False, self.t('err_no_apks') - self.log(self.tf('log_module_install_start', module=mod_id), "STATUS") + self.log(self.t('log_module_install_start'), "STATUS") commands = [ - f"rm -rf {self.shell_quote(device_stage)} {self.shell_quote(device_module)}", - f"mkdir -p {self.shell_quote(device_stage)} {self.shell_quote(device_module)}", - f"chmod -R 777 {self.shell_quote(device_stage)}", + f"rm -rf {self.shell_quote(device_module)}", + f"mkdir -p {self.shell_quote(device_stage_dir)} {self.shell_quote(device_module)}", + f"chmod 777 {self.shell_quote(device_stage_dir)}", ] for command in commands: ok, output = self.run_root_command(command, timeout=60) if not ok: return False, self.tf('log_root_cmd_failed', command=command, error=output) - total = len(files) - for idx, local_file in enumerate(files, 1): - rel = local_file.relative_to(module_dir).as_posix() - remote_file = f"{device_stage}/{rel}" - remote_parent = remote_file.rsplit("/", 1)[0] - ok, output = self.run_root_command(f"mkdir -p {self.shell_quote(remote_parent)}", timeout=30) - if not ok: - return False, self.tf('log_root_cmd_failed', command="mkdir", error=output) - ok, output = self.run_root_command(f"chmod 777 {self.shell_quote(remote_parent)}", timeout=30) - if not ok: - return False, self.tf('log_root_cmd_failed', command="chmod", error=output) - ok, output = self.run_adb_command(f'adb -d push "{local_file}" {remote_file}') - if not ok: - return False, self.tf('log_push_file_failed', file=rel, error=output) - self.update_progress(idx, total, self.tf('progress_push_files', current=idx, total=total), is_push=True) + ok, output = self.run_adb_command(f'adb -d push "{zip_path}" {device_zip}') + if not ok: + return False, self.tf('log_push_file_failed', file=zip_path.name, error=output) install_commands = [ - f"cp -af {self.shell_quote(device_stage)}/. {self.shell_quote(device_module)}/", + f"unzip -oq {self.shell_quote(device_zip)} -x 'META-INF/*' -d {self.shell_quote(device_module)}", f"find {self.shell_quote(device_module)} -type d -exec chmod 755 {{}} \\;", f"find {self.shell_quote(device_module)} -type f -exec chmod 644 {{}} \\;", f"find {self.shell_quote(device_module)} -type f -name '*.sh' -exec chmod 755 {{}} \\;", - f"rm -rf {self.shell_quote(device_stage)}", + f"rm -f {self.shell_quote(device_zip)}", ] for command in install_commands: - ok, output = self.run_root_command(command, timeout=120) + ok, output = self.run_root_command(command, timeout=300) if not ok: return False, self.tf('log_root_cmd_failed', command=command, error=output) - self.log(self.tf('log_module_install_done', module=mod_id), "STATUS") + self.log(self.t('log_module_install_done'), "STATUS") return True, mod_id - def _is_skipped_module_path(self, module_dir, file_path, skip_names): - rel = file_path.relative_to(module_dir) - parts = rel.parts - if parts and (parts[0] == "META-INF" or parts[0].startswith("_")): - return True - return file_path.name in skip_names - def check_package_extracted(self): """检查语言包是否已解压""" - has_module = self.module_dir and self.module_dir.exists() + has_module = bool(getattr(self, 'module_zips', None)) + if not has_module and self.temp_dir and self.temp_dir.exists(): + self.module_zips = self.find_module_zips(self.temp_dir) + has_module = bool(self.module_zips) if has_module: ok, reason = self._validate_extracted_modules() if not ok: @@ -1543,22 +1640,16 @@ class ADKAPKGUI: return has_module def _validate_extracted_modules(self): - if not self.module_dir or not self.module_dir.exists(): + if not getattr(self, 'module_zips', None): return False, self.t('err_module_prop_missing') - if not (self.module_dir / "module.prop").exists(): - return False, self.t('err_module_prop_missing') - if not (self.module_dir / "system").exists(): - return False, self.t('err_system_dir_missing') - if not (self.module_dir / "disable-wireless-adb-vecentek-magisk.zip").exists(): - return False, self.t('err_disable_module_missing') - main_id = self.read_module_id(self.module_dir) - if not main_id: - return False, self.t('err_module_id_missing') - if not self.disable_module_dir or not self.disable_module_dir.exists(): - return False, self.t('err_disable_module_invalid') - extra_id = self.read_module_id(self.disable_module_dir) - if not extra_id: - return False, self.t('err_disable_module_invalid') + module_ids = [] + for zip_path in self.module_zips: + mod_id = self.read_module_id_from_zip(zip_path) + if not mod_id: + return False, self.tf('err_module_zip_invalid', file=zip_path.name) + module_ids.append(mod_id) + if len(set(module_ids)) != len(module_ids): + return False, self.t('err_duplicate_module_id') return True, "" def _clear_extracted_cache(self): @@ -1566,8 +1657,7 @@ class ADKAPKGUI: shutil.rmtree(self.temp_dir, ignore_errors=True) time.sleep(0.5) self.apps_dir = None - self.module_dir = None - self.disable_module_dir = None + self.module_zips = [] def cleanup_cache_on_exit(self): self._clear_extracted_cache() @@ -1650,20 +1740,27 @@ class ADKAPKGUI: output = self._decode_process_output((result.stderr or b'') + (result.stdout or b'')) return result.returncode == 0, output - def _find_main_module_dir(self, root_dir): - candidates = [root_dir] - candidates.extend([p for p in root_dir.iterdir() if p.is_dir()]) - for candidate in candidates: - if (candidate / "module.prop").exists() and (candidate / "system").exists(): - return candidate - return None + def find_module_zips(self, root_dir): + root_dir = Path(root_dir) + candidates = [] + modules_dir = root_dir / "modules" + search_roots = [modules_dir] if modules_dir.exists() else [root_dir] + for search_root in search_roots: + candidates.extend(sorted(search_root.rglob("*.zip"))) + module_zips = [] + for zip_path in candidates: + if self.read_module_id_from_zip(zip_path): + module_zips.append(zip_path) + return module_zips - def read_module_id(self, module_dir): - prop_path = Path(module_dir) / "module.prop" - if not prop_path.exists(): - return "" + def read_module_id_from_zip(self, zip_path): try: - for line in prop_path.read_text(encoding='utf-8', errors='replace').splitlines(): + with zipfile.ZipFile(zip_path, 'r') as zf: + prop_name = self._find_module_prop_in_zip(zf) + if not prop_name: + return "" + raw = zf.read(prop_name) + for line in raw.decode('utf-8', errors='replace').splitlines(): line = line.strip() if line.startswith("id="): return line.split("=", 1)[1].strip() @@ -1671,6 +1768,25 @@ class ADKAPKGUI: return "" return "" + def _find_module_prop_in_zip(self, zf): + names = zf.namelist() + normalized = {} + for name in names: + clean = name.replace("\\", "/").lstrip("./") + normalized[clean] = name + if "module.prop" in normalized: + return normalized["module.prop"] + + candidates = [] + for clean, original in normalized.items(): + parts = [part for part in clean.split("/") if part] + if len(parts) == 2 and parts[-1] == "module.prop": + candidates.append((len(parts), original)) + if candidates: + candidates.sort() + return candidates[0][1] + return "" + def extract_package_silent(self): """静默解压语言包(带进度)—— Q05-Lidar 使用 Magisk 模块结构""" if not self.package_file.exists(): @@ -1720,37 +1836,18 @@ class ADKAPKGUI: return False self.update_progress(1, 1, self.t('progress_resource_done')) - self.module_dir = self._find_main_module_dir(self.temp_dir) - if not self.module_dir: + self.module_zips = self.find_module_zips(self.temp_dir) + if not self.module_zips: self.log(self.t('err_module_prop_missing'), "ERROR") self._clear_extracted_cache() return False - disable_zip = self.module_dir / "disable-wireless-adb-vecentek-magisk.zip" - self.disable_module_dir = self.temp_dir / "_disable_wireless_adb_vecentek" - if self.disable_module_dir.exists(): - shutil.rmtree(self.disable_module_dir, ignore_errors=True) - self.disable_module_dir.mkdir(parents=True, exist_ok=True) - if not disable_zip.exists(): - self.log(self.t('err_disable_module_missing'), "ERROR") - self._clear_extracted_cache() - return False - ok, err_msg = self._run_7za_extract_basic(disable_zip, self.disable_module_dir) - if not ok: - self.log(self.tf('err_extract_failed', error=err_msg[:300]), "ERROR") - self._clear_extracted_cache() - return False - ok, reason = self._validate_extracted_modules() if not ok: self.log(self.tf('log_extracted_resource_invalid', reason=reason), "ERROR") self._clear_extracted_cache() return False - self.log(self.tf( - 'log_module_resource_ready', - main=self.read_module_id(self.module_dir), - extra=self.read_module_id(self.disable_module_dir) - ), "INFO") + self.log(self.t('log_module_resource_ready'), "INFO") return True except Exception as e: @@ -1779,6 +1876,154 @@ class ADKAPKGUI: self.log(self.t('log_adb_missing'), "ERROR") except FileNotFoundError: self.log(self.t('log_adb_missing'), "ERROR") + self.root.after(800, self.check_fastboot_driver_on_startup) + + def _run_command_capture(self, command, timeout=30): + creationflags = subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + result = subprocess.run( + command, + capture_output=True, + text=True, + timeout=timeout, + creationflags=creationflags + ) + output = (result.stdout or "") + (result.stderr or "") + return result.returncode, output.strip() + + def ask_ok_cancel_on_ui_thread(self, title, message): + result = {"value": False} + done = threading.Event() + + def prompt(): + try: + result["value"] = messagebox.askokcancel(title, message, parent=self.root) + finally: + done.set() + + self.run_on_ui_thread(prompt) + done.wait() + return result["value"] + + def is_fastboot_driver_installed(self): + if sys.platform != 'win32': + return True, "" + try: + code, output = self._run_command_capture(['pnputil', '/enum-drivers'], timeout=40) + if code != 0: + return False, output or "pnputil enum failed" + normalized = output.lower() + installed = ( + 'android_winusb.inf'.lower() in normalized + or 'android bootloader interface' in normalized + or 'android adb interface' in normalized + or 'fastboot' in normalized + ) + return installed, output + except Exception as e: + return False, str(e) + + def _install_driver_with_uac(self, inf_path): + quoted_inf = str(inf_path).replace("'", "''") + ps_command = ( + "$proc = Start-Process -FilePath pnputil " + "-ArgumentList @('/add-driver', '{0}', '/install') " + "-Verb RunAs -WindowStyle Hidden -PassThru; " + "if ($null -eq $proc) {{ exit 1 }}; " + "$proc.WaitForExit(); " + "Write-Output $proc.ExitCode" + ).format(quoted_inf) + creationflags = subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + result = subprocess.run( + ['powershell', '-NoProfile', '-Command', ps_command], + capture_output=True, + text=True, + creationflags=creationflags + ) + output = ((result.stdout or "") + (result.stderr or "")).strip() + exit_code = None + for line in reversed(output.splitlines()): + text = line.strip() + if text.isdigit(): + exit_code = int(text) + break + if exit_code is None and result.returncode == 0: + exit_code = 0 + return exit_code == 0, output or f"powershell exit={result.returncode}" + + def install_fastboot_driver(self, prompt=True): + def worker(): + try: + if not self.driver_inf.exists(): + error = self.tf('msg_driver_install_failed', error=f"{self.driver_inf} not found") + self.log(self.tf('log_driver_install_failed', error=f"{self.driver_inf} not found"), "ERROR") + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_driver_missing_title'), error)) + return + + if prompt: + confirmed = self.ask_ok_cancel_on_ui_thread( + self.t('msg_driver_missing_title'), + self.t('msg_driver_install_confirm') + ) + if not confirmed: + return + + self.log(self.t('log_driver_install_start'), "STATUS") + ok, output = self._install_driver_with_uac(self.driver_inf) + if not ok: + self.log(self.tf('log_driver_install_failed', error=output or self.t('unknown_error')), "ERROR") + self.run_on_ui_thread( + lambda: messagebox.showerror( + self.t('msg_driver_missing_title'), + self.tf('msg_driver_install_failed', error=output or self.t('unknown_error')), + parent=self.root + ) + ) + return + + self.log(self.t('log_driver_install_success'), "SUCCESS") + self.run_on_ui_thread( + lambda: messagebox.showinfo( + self.t('msg_driver_missing_title'), + self.t('msg_driver_install_done'), + parent=self.root + ) + ) + except Exception as e: + self.log(self.tf('log_driver_install_failed', error=str(e)), "ERROR") + self.run_on_ui_thread( + lambda: messagebox.showerror( + self.t('msg_driver_missing_title'), + self.tf('msg_driver_install_failed', error=str(e)), + parent=self.root + ) + ) + + threading.Thread(target=worker, daemon=True).start() + + def check_fastboot_driver_on_startup(self): + if self.driver_prompted: + return + self.driver_prompted = True + + def worker(): + installed, detail = self.is_fastboot_driver_installed() + if installed: + return + + if self.debug_mode and detail: + self.log(detail[:500], "CMD") + + def notify_and_install(): + messagebox.showinfo( + self.t('msg_driver_missing_title'), + self.t('msg_driver_missing'), + parent=self.root + ) + self.install_fastboot_driver(prompt=False) + + self.run_on_ui_thread(notify_and_install) + + threading.Thread(target=worker, daemon=True).start() def refresh_device_status(self, force=False): """刷新设备状态 —— 逸动版使用 ca.car.vin 获取 VIN""" @@ -2184,6 +2429,10 @@ class ADKAPKGUI: return True return False + def fastboot_output_has_okay(self, output): + text = str(output or "").upper() + return "OKAY" in text and "FAILED" not in text + def wait_for_fastboot(self, timeout=180, interval=5): deadline = time.time() + timeout while time.time() < deadline: @@ -2236,9 +2485,9 @@ class ADKAPKGUI: self.update_progress(4, 7, self.t('progress_reboot_fastboot'), is_push=True) ok, output = self.run_adb_shell('reboot fastboot') if not ok: - self.log(self.tf('log_fastboot_enter_failed', output=output), "ERROR") - return - self.log(self.t('log_fastboot_wait'), "INFO") + if self.debug_mode: + self.log(self.tf('log_fastboot_enter_failed', output=output), "CMD") + self.log(self.t('log_fastboot_wait'), "WARNING") if not self.wait_for_fastboot(): self.log(self.t('log_fastboot_missing'), "ERROR") return @@ -2250,7 +2499,7 @@ class ADKAPKGUI: self.update_progress(6, 7, self.t('progress_flash_init_boot'), is_push=True) ok, output = self.run_fastboot_command(['flash', 'init_boot', str(temp_img)], timeout=120) - if not ok: + if not ok or not self.fastboot_output_has_okay(output): self.log(self.tf('log_init_boot_flash_failed', output=output), "ERROR") return self.log(self.t('log_init_boot_flash_success'), "INFO") @@ -2326,7 +2575,7 @@ class ADKAPKGUI: return self.show_progress(False, is_push=False) - if not self.module_dir or not self.module_dir.exists(): + if not getattr(self, 'module_zips', None): self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_dir_missing'))) return @@ -2337,25 +2586,18 @@ class ADKAPKGUI: if not self.open_magisk_and_check_root(): self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_auth_failed_title'), self.t('msg_root_failed'))) return + self.disable_and_uninstall_preinstalled_packages() - main_id = self.read_module_id(self.module_dir) - self.update_progress(0, 2, self.tf('progress_install_module', module=main_id), is_push=True) - ok, result = self.install_magisk_module_files( - self.module_dir, - skip_names={"disable-wireless-adb-vecentek-magisk.zip"} - ) - if not ok: - self.log(self.tf('log_module_install_failed', module=main_id or "main", error=result), "ERROR") - return + total = len(self.module_zips) + for idx, zip_path in enumerate(self.module_zips, 1): + mod_id = self.read_module_id_from_zip(zip_path) + self.update_progress(idx - 1, total, self.t('progress_install_module'), is_push=True) + ok, result = self.install_magisk_module_zip(zip_path) + if not ok: + self.log(self.tf('log_module_install_failed', error=result), "ERROR") + return - extra_id = self.read_module_id(self.disable_module_dir) - self.update_progress(1, 2, self.tf('progress_install_module', module=extra_id), is_push=True) - ok, result = self.install_magisk_module_files(self.disable_module_dir) - if not ok: - self.log(self.tf('log_module_install_failed', module=extra_id or "extra", error=result), "ERROR") - return - - self.update_progress(2, 2, self.t('progress_flash_done'), is_push=True) + self.update_progress(total, total, self.t('progress_flash_done'), is_push=True) self.log(self.t('log_push_success'), "SUCCESS") finally: self.show_progress(False, is_push=True) @@ -2854,8 +3096,7 @@ class ADKAPKGUI: if self.extract_package_silent(): self.log(self.tf( 'log_package_extract_modules_success', - main=self.read_module_id(self.module_dir), - extra=self.read_module_id(self.disable_module_dir) + count=len(self.module_zips) ), "SUCCESS") else: self.log(self.t('log_package_extract_failed'), "ERROR") @@ -3147,6 +3388,7 @@ def main(): sys.exit(1) try: + set_windows_app_id() app = ADKAPKGUI() app.run() except Exception as e: diff --git a/Q05-Lidar/pack_q05_lidar.bat b/Q05-Lidar/pack_q05_lidar.bat index 82cee9d..146e682 100644 --- a/Q05-Lidar/pack_q05_lidar.bat +++ b/Q05-Lidar/pack_q05_lidar.bat @@ -116,11 +116,11 @@ if exist "%APPDIR%resource.dat" copy "%APPDIR%resource.dat" . >nul echo [5/6] PyInstaller... set ADD_RESOURCE= if exist "resource.dat" set ADD_RESOURCE=--add-data "resource.dat;." -"%PY%" -m PyInstaller --onefile --windowed --name="%NAME%" --icon="app.ico" --add-data "adb.exe;." --add-data "AdbWinApi.dll;." --add-data "AdbWinUsbApi.dll;." --add-data "7za.exe;." --add-data "fastboot.exe;." %ADD_RESOURCE% --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=cryptography --collect-all tkinter --collect-all cryptography --uac-admin launcher.py -if errorlevel 1 ( - cd .. - echo [ERROR] PyInstaller failed - pause +"%PY%" -m PyInstaller --onefile --windowed --name="%NAME%" --icon="app.ico" --add-data "app.ico;." --add-data "adb.exe;." --add-data "AdbWinApi.dll;." --add-data "AdbWinUsbApi.dll;." --add-data "7za.exe;." --add-data "fastboot.exe;." --add-data "%APPDIR%usb_driver;usb_driver" %ADD_RESOURCE% --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=cryptography --collect-all tkinter --collect-all cryptography --uac-admin launcher.py +if errorlevel 1 ( + cd .. + echo [ERROR] PyInstaller failed + pause exit /b ) @@ -157,6 +157,12 @@ if errorlevel 1 ( pause exit /b 1 ) +if not exist "%APPDIR%usb_driver\android_winusb.inf" ( + cd .. + echo [ERROR] usb_driver\android_winusb.inf not found at %APPDIR%usb_driver + pause + exit /b 1 +) echo [7/7] Cleanup... del /q _core.py _core.c _core.pyd %PYD% launcher.py setup_cython.py adb.exe AdbWinApi.dll AdbWinUsbApi.dll 7za.exe fastboot.exe resource.dat 2>nul diff --git a/Q07/app.py b/Q07/Qiyuan_Q07-multi-lan-installer.py similarity index 62% rename from Q07/app.py rename to Q07/Qiyuan_Q07-multi-lan-installer.py index 1a1578a..9daa829 100644 --- a/Q07/app.py +++ b/Q07/Qiyuan_Q07-multi-lan-installer.py @@ -8,6 +8,7 @@ import json import re import threading import tkinter as tk +import atexit from tkinter import ttk, scrolledtext, filedialog, messagebox, simpledialog from pathlib import Path from urllib.request import urlopen, Request @@ -59,16 +60,32 @@ def find_tool(file_name, fallback=None): path = find_resource(file_name) if path.exists(): return str(path) - return fallback or str(path) + return fallback or str(path) + + +def set_windows_app_user_model_id(): + if sys.platform != 'win32': + return + try: + import ctypes + ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID( + "yibin.keyi.qiyuan.q07.language.installer" + ) + except Exception: + pass + + class ADKAPKGUI: def __init__(self): + set_windows_app_user_model_id() self.root = tk.Tk() self.root.title("长安语言安装工具") self.root.geometry("650x640") self.root.resizable(True, True) + self.set_window_icon() - # 设置颜色主题 - self.colors_dark = { + # 固定颜色 + self.colors = { 'bg_dark': '#1e1e2e', 'bg_light': '#2a2a3e', 'accent': '#6c5ce7', @@ -81,21 +98,6 @@ class ADKAPKGUI: 'text_secondary': '#b2bec3', 'border': '#3d3d5e' } - self.colors_light = { - 'bg_dark': '#f5f5f5', - 'bg_light': '#ffffff', - 'accent': '#6c5ce7', - 'accent_hover': '#5b4bc4', - 'success': '#00b894', - 'error': '#d63031', - 'warning': '#e17055', - 'info': '#0984e3', - 'text': '#2d3436', - 'text_secondary': '#636e72', - 'border': '#dfe6e9' - } - self.colors = dict(self.colors_dark) - self.theme = 'dark' # 多语言 self.lang = 'zh' @@ -111,6 +113,7 @@ class ADKAPKGUI: 'btn_reboot': '🔄 重启设备', 'btn_disable_upgrade': '❌ 禁用升级', 'btn_clear_log': '🗑 清空日志', + 'btn_debug_extract': '解压测试', 'device_label': '设备:', 'vin_label': 'VIN码:', 'auth_label': '授权:', @@ -151,21 +154,127 @@ class ADKAPKGUI: 'err_no_password': '错误:解压密码未设置', 'err_no_7za': '错误:未找到 7za.exe', 'err_extract_fail': '解压失败', - 'info_extracting': '正在解压资源包...', + 'info_extracting': '资源准备中...', 'info_extract_done': '资源准备完成', 'err_extract_user': '资源准备失败,请检查网络连接后重试', 'warn_no_app_dir': '警告:未找到 app/priv-app 目录', - 'theme_dark': '🌙 暗色', - 'theme_light': '☀️ 亮色', + 'progress_resource_loading': '资源准备中...', + 'progress_resource_done': '资源准备完成', + 'progress_extracting_percent': '资源准备中 {percent}%', + 'progress_flashing': '正在刷入', + 'progress_flash_done': '刷入完成', + 'progress_aborted': '已终止', + 'progress_installing': '安装中', + 'progress_installing_name': '安装中 ({name})', + 'progress_done': '完成', 'lang_zh': '中', 'lang_en': 'EN', 'switch_lang': '语言 / Language', - 'switch_theme': '切换主题', - 'about_company': '宜宾科宜科技有限公司 - 智能设备管理平台', + 'tip_1': '1. 安装语言过程中请保持车辆和电脑的电量充足,不可中途停止。', + 'tip_2': '2. 获取权限以后,车辆自动重启以后再进入语言刷入。', + 'tip_3': '3. 部分语言需要重启后生效,可以一切工作完成以后再重启。', 'warn_flash_warning': '⚠️ 重要提示', 'warn_flash_msg': '刷入过程中请勿:\n ● 重启车机\n ● 退出本程序\n ● 关闭电脑\n\n否则可能导致车机系统损坏!', 'err_wrong_password': '请检查密码是否正确', 'title_pop_lang': '快捷语言设置', + 'quick_lang_header': '选择目标语言', + 'quick_lang_hint': '点击按钮即可将系统语言切换为对应语言,重启后生效', + 'quick_lang_system': '⚙️ 打开系统语言设置(手动选择)', + 'msg_warn_title': '警告', + 'msg_error_title': '错误', + 'msg_done_title': '完成', + 'msg_success_title': '成功', + 'msg_auth_failed_title': '授权失败', + 'msg_device_unauthorized': '设备未授权', + 'msg_resource_prepare_failed': '资源准备失败!', + 'msg_resource_dir_missing': '资源目录未找到', + 'msg_no_apk_in_folder': '所选文件夹中没有APK文件!', + 'msg_confirm_install_title': '确认安装', + 'msg_confirm_install_many': '已选择 {count} 个APK文件\n\n是否开始安装?', + 'msg_confirm_install_folder': '找到 {count} 个APK文件\n\n是否开始批量安装?', + 'msg_install_success_many': '成功安装 {count} 个APK!', + 'msg_install_partial': '成功: {success}\n失败: {failed}', + 'msg_install_all_failed': '所有APK安装失败!', + 'msg_install_exception': '安装过程异常:{error}', + 'msg_quick_lang_success': '系统语言已设置为 {language}\n\n⚠️ 请重启设备使其生效。', + 'msg_quick_lang_failed': '语言设置失败!\n\n{output}', + 'msg_disable_confirm_title': '确认禁用升级', + 'msg_disable_confirm': '⚠️ 警告:禁用系统升级后,将无法接收系统更新!\n\n是否确定要禁用系统升级应用?', + 'msg_disable_success': '系统升级已成功禁用!', + 'msg_disable_failed': '禁用失败:{output}', + 'msg_reboot_confirm_title': '确认重启', + 'file_apk': 'APK文件', + 'file_all': '所有文件', + 'dialog_select_apk': '选择APK文件', + 'dialog_select_apk_folder': '选择包含APK文件的文件夹', + 'unknown_error': '未知错误', + 'status_debug': '调试模式', + 'debug_password_prompt': '请输入调试密码:', + 'debug_password_verifying': '正在校验调试密码...', + 'debug_wrong_password': '密码错误', + 'debug_verify_failed': '调试密码校验失败: {message}', + 'debug_need_enable': '请先按 Ctrl+Shift+D 进入调试模式', + 'debug_need_vin': '调试解压测试需要 VIN。请先连接设备刷新,或在调试模式中手动设置 VIN。', + 'log_debug_on': '🔧 调试模式已开启 - 跳过授权和设备校验,显示详细ADB日志', + 'log_debug_off': '调试模式已关闭', + 'log_lang_switched': '语言已切换为中文', + 'log_cache_invalid': '已解压缓存无效: {reason}', + 'log_cache_reuse_invalid': '缓存资源无效,已清理: {reason}', + 'log_package_missing': '未找到资源包文件: {path}', + 'log_adb_missing': '未找到adb命令,请将ADB文件放入本目录', + 'log_device_connected': '设备已连接', + 'log_device_disconnected': '设备已断开连接', + 'log_current_vin': '当前VIN: {vin}', + 'log_vin_unavailable': '无法读取VIN', + 'log_refresh_failed': '刷新设备状态失败: {error}', + 'log_auth_skip_debug': '调试模式:跳过授权', + 'log_auth_checking': '正在验证授权状态...', + 'log_auth_ok': '授权验证通过', + 'log_auth_failed': '授权验证失败', + 'log_vehicle_name': '车型名称: {name}', + 'log_adb_required': '请先连接 ADB 并获取 VIN', + 'log_data_prepare_failed_detail': '资源准备失败: {error}', + 'log_extract_password_missing': '错误:解压密码未设置', + 'log_7za_missing': '错误:未找到 7za.exe ({path})', + 'log_extracted_resource_invalid': '解压后的资源无效: {reason}。已停止刷入,请检查解压密码或资源包。', + 'log_extract_done': '资源准备完成', + 'log_extract_exception': '资源准备失败: {error}', + 'err_extract_wrong_password': '解压密码错误,请重新确认 Q07_package.bin 密码', + 'err_extract_data': '资源包数据错误,可能是密码错误或 Q07_package.bin 损坏', + 'err_extract_corrupt': '资源包损坏或不完整,请检查 Q07_package.bin', + 'err_extract_failed': '解压失败: {error}', + 'err_extract_failed_code': '解压失败 (返回码 {code}),请检查密码是否正确', + 'log_root_failed': '获取 root 失败', + 'log_permission_failed': '获取权限失败', + 'log_permission_reboot_required': '首次获取权限,需要重启设备...', + 'log_permission_rebooting': '设备即将重启,重启后权限生效', + 'log_reboot_failed': '重启失败', + 'log_permission_ok': '已获取权限', + 'log_flash_readonly': '请先点击「获取权限」获取权限后再试', + 'log_flash_complete_count': '刷入完成,共 {count} 个语言包', + 'log_flash_effect_after_reboot': '语言包已刷入完成,重启设备后生效,您可在适当时候重启', + 'log_flash_partial': '部分刷入成功({success}/{total})', + 'log_install_start': '开始安装 {count} 个APK...', + 'log_install_done_all': '安装完成:全部 {count} 个成功', + 'log_install_done_partial': '安装完成:{success}/{total} 成功', + 'log_install_failed': '安装失败', + 'log_install_exception': '安装过程异常: {error}', + 'log_install_success_item': '✓ {name}', + 'log_install_failed_item': '✗ {name}', + 'log_quick_lang_setting': '正在设置系统语言为: {language} ({locale})', + 'log_quick_lang_success': '✓ 语言已设置为 {language}', + 'log_quick_lang_failed': '✗ 语言设置失败: {output}', + 'log_rebooting': '设备正在重启...', + 'log_disable_cancelled': '已取消禁用升级操作', + 'log_disable_success': '系统升级已禁用', + 'log_disable_failed': '禁用系统升级失败', + 'log_package_key_failed': 'package-key 获取失败', + 'log_package_extract_success': '资源准备完成', + 'log_package_extract_failed': 'Q07_package.bin 解压测试失败', + 'err_no_usable_apk': '未找到可用 APK', + 'err_zero_apk': '发现 0KB APK: {files}', + 'err_push_failed': 'push失败: {error}', + 'err_cp_failed': 'cp失败: {error}', }, 'en': { 'title': 'Qiyuan Q07 Multi-Language', @@ -178,6 +287,7 @@ class ADKAPKGUI: 'btn_reboot': '🔄 Reboot', 'btn_disable_upgrade': '❌ Disable OTA', 'btn_clear_log': '🗑 Clear Log', + 'btn_debug_extract': 'Extract', 'device_label': 'Device:', 'vin_label': 'VIN:', 'auth_label': 'Auth:', @@ -214,25 +324,131 @@ class ADKAPKGUI: 'info_auth_pass': '✅ Authorization passed!', 'info_auth_fail': '❌ Authorization failed', 'info_preparing': 'Preparing resources...', - 'err_no_package': 'Error: package.bin not found', + 'err_no_package': 'Error: Q07_package.bin not found', 'err_no_password': 'Error: password not set', 'err_no_7za': 'Error: 7za.exe not found', 'err_extract_fail': 'Extraction failed', - 'info_extracting': 'Extracting package...', + 'info_extracting': 'Preparing resources...', 'info_extract_done': 'Resource preparation complete', 'err_extract_user': 'Resource preparation failed, check network and retry', 'warn_no_app_dir': 'Warning: app/priv-app directory not found', - 'theme_dark': '🌙 Dark', - 'theme_light': '☀️ Light', + 'progress_resource_loading': 'Preparing resources...', + 'progress_resource_done': 'Resources ready', + 'progress_extracting_percent': 'Preparing resources {percent}%', + 'progress_flashing': 'Flashing', + 'progress_flash_done': 'Flash complete', + 'progress_aborted': 'Aborted', + 'progress_installing': 'Installing', + 'progress_installing_name': 'Installing ({name})', + 'progress_done': 'Done', 'lang_zh': '中', 'lang_en': 'EN', 'switch_lang': 'Language', - 'switch_theme': 'Theme', - 'about_company': 'Yibin Keyi Technology - Smart Device Platform', + 'tip_1': '1. Keep the vehicle and PC powered during language installation.', + 'tip_2': '2. After permission is obtained, wait for the vehicle to reboot before flashing.', + 'tip_3': '3. Some languages take effect after reboot; reboot after all work is finished.', 'warn_flash_warning': '⚠️ Warning', 'warn_flash_msg': 'During flashing, DO NOT:\n ● Reboot vehicle\n ● Close this app\n ● Power off PC\n\nSystem damage may occur!', 'err_wrong_password': 'Please check password', 'title_pop_lang': 'Quick Language Setting', + 'quick_lang_header': 'Select target language', + 'quick_lang_hint': 'Click a button to set the system language. Reboot to apply.', + 'quick_lang_system': '⚙️ Open system language settings', + 'msg_warn_title': 'Warning', + 'msg_error_title': 'Error', + 'msg_done_title': 'Done', + 'msg_success_title': 'Success', + 'msg_auth_failed_title': 'Authorization failed', + 'msg_device_unauthorized': 'Device unauthorized', + 'msg_resource_prepare_failed': 'Resource preparation failed!', + 'msg_resource_dir_missing': 'Resource directory not found', + 'msg_no_apk_in_folder': 'No APK files found in the selected folder!', + 'msg_confirm_install_title': 'Confirm install', + 'msg_confirm_install_many': '{count} APK files selected.\n\nStart installation?', + 'msg_confirm_install_folder': '{count} APK files found.\n\nStart batch installation?', + 'msg_install_success_many': '{count} APKs installed successfully!', + 'msg_install_partial': 'Success: {success}\nFailed: {failed}', + 'msg_install_all_failed': 'All APK installations failed!', + 'msg_install_exception': 'Installation error: {error}', + 'msg_quick_lang_success': 'System language set to {language}.\n\n⚠️ Reboot the device to apply.', + 'msg_quick_lang_failed': 'Language setting failed!\n\n{output}', + 'msg_disable_confirm_title': 'Confirm Disable OTA', + 'msg_disable_confirm': '⚠️ Warning: after disabling OTA, the system will no longer receive updates.\n\nDisable the OTA app?', + 'msg_disable_success': 'System upgrade has been disabled!', + 'msg_disable_failed': 'Disable failed: {output}', + 'msg_reboot_confirm_title': 'Confirm reboot', + 'file_apk': 'APK files', + 'file_all': 'All files', + 'dialog_select_apk': 'Select APK file', + 'dialog_select_apk_folder': 'Select a folder containing APK files', + 'unknown_error': 'unknown error', + 'status_debug': 'Debug mode', + 'debug_password_prompt': 'Enter debug password:', + 'debug_password_verifying': 'Verifying debug password...', + 'debug_wrong_password': 'Wrong password', + 'debug_verify_failed': 'Debug password verification failed: {message}', + 'debug_need_enable': 'Press Ctrl+Shift+D first.', + 'debug_need_vin': 'Extract test needs a VIN. Refresh a connected device or set VIN in debug mode.', + 'log_debug_on': '🔧 Debug mode enabled - authorization and device checks are skipped, detailed ADB logs are shown', + 'log_debug_off': 'Debug mode disabled', + 'log_lang_switched': 'Language switched to English', + 'log_cache_invalid': 'Extract cache invalid: {reason}', + 'log_cache_reuse_invalid': 'Cached resources invalid and cleaned: {reason}', + 'log_package_missing': 'Resource package not found: {path}', + 'log_adb_missing': 'adb not found. Put ADB files in this directory.', + 'log_device_connected': 'Device connected', + 'log_device_disconnected': 'Device disconnected', + 'log_current_vin': 'Current VIN: {vin}', + 'log_vin_unavailable': 'Unable to read VIN', + 'log_refresh_failed': 'Refresh device status failed: {error}', + 'log_auth_skip_debug': 'Debug mode: skip authorization', + 'log_auth_checking': 'Checking authorization...', + 'log_auth_ok': 'Authorization passed', + 'log_auth_failed': 'Authorization failed', + 'log_vehicle_name': 'Vehicle name: {name}', + 'log_adb_required': 'Connect ADB and get VIN first', + 'log_data_prepare_failed_detail': 'Resource preparation failed: {error}', + 'log_extract_password_missing': 'Extraction password is not set', + 'log_7za_missing': '7za.exe not found: {path}', + 'log_extracted_resource_invalid': 'Extracted resources are invalid: {reason}. Flashing stopped. Check the password or package.', + 'log_extract_done': 'Resources ready', + 'log_extract_exception': 'Resource preparation failed: {error}', + 'err_extract_wrong_password': 'Incorrect extraction password. Check the Q07_package.bin password.', + 'err_extract_data': 'Package data error. The password may be wrong or Q07_package.bin may be damaged.', + 'err_extract_corrupt': 'Package is damaged or incomplete. Check Q07_package.bin.', + 'err_extract_failed': 'Extraction failed: {error}', + 'err_extract_failed_code': 'Extraction failed (exit code {code}). Check whether the password is correct.', + 'log_root_failed': 'Failed to get root', + 'log_permission_failed': 'Failed to get permission', + 'log_permission_reboot_required': 'First permission attempt requires a reboot...', + 'log_permission_rebooting': 'Device will reboot; permission takes effect after reboot', + 'log_reboot_failed': 'Reboot failed', + 'log_permission_ok': 'Permission granted', + 'log_flash_readonly': 'Click Get Root first, then try again', + 'log_flash_complete_count': 'Flashing complete, {count} language packages', + 'log_flash_effect_after_reboot': 'Language package flashed. Reboot the device when convenient.', + 'log_flash_partial': 'Partially flashed ({success}/{total})', + 'log_install_start': 'Installing {count} APKs...', + 'log_install_done_all': 'Installation complete: all {count} succeeded', + 'log_install_done_partial': 'Installation complete: {success}/{total} succeeded', + 'log_install_failed': 'Installation failed', + 'log_install_exception': 'Installation error: {error}', + 'log_install_success_item': '✓ {name}', + 'log_install_failed_item': '✗ {name}', + 'log_quick_lang_setting': 'Setting system language to: {language} ({locale})', + 'log_quick_lang_success': '✓ Language set to {language}', + 'log_quick_lang_failed': '✗ Language setting failed: {output}', + 'log_rebooting': 'Device rebooting...', + 'log_disable_cancelled': 'Disable OTA cancelled', + 'log_disable_success': 'System upgrade disabled', + 'log_disable_failed': 'Failed to disable system upgrade', + 'log_package_key_failed': 'package-key fetch failed', + 'log_package_extract_success': 'Resources ready', + 'log_package_extract_failed': 'Q07_package.bin extract test failed', + 'err_no_usable_apk': 'No usable APK found', + 'err_zero_apk': '0KB APK found: {files}', + 'err_push_failed': 'push failed: {error}', + 'err_cp_failed': 'cp failed: {error}', } } @@ -240,20 +456,24 @@ class ADKAPKGUI: self.base_dir = get_app_dir() self.adb = find_tool('adb.exe', 'adb') self.sz = find_tool('7za.exe') - self.package_file = find_resource("package.bin") + self.package_file = self._find_package_file() self.extract_password = None self.apps_dir = None self.priv_apps_dir = None self.temp_dir = None self.api_url = "https://api.changan.softwindy.cn/api/authorizations/auth-check" + self.debug_password_api_url = "https://api.changan.softwindy.cn/api/authorizations/verify-debug-mode-password" self.vin = None + self.vehicle_name = "" self.device_connected = False self._refreshing = False # 防止并发刷新 self.debug_mode = False # 调试模式 + atexit.register(self.cleanup_cache_on_exit) # 设置样式 self.setup_styles() self.setup_ui() + self.root.after(200, self.set_window_icon) self.center_window() # 检查环境 @@ -261,6 +481,38 @@ class ADKAPKGUI: # 启动设备状态监控 self.start_device_monitor() + + def set_window_icon(self): + """Set the Tk window/taskbar icon at runtime; PyInstaller --icon only sets the exe file icon.""" + try: + icon_path = find_resource("app.ico") + if icon_path.exists(): + self.root.iconbitmap(str(icon_path)) + self._set_windows_hwnd_icon(icon_path) + except Exception: + pass + + def _set_windows_hwnd_icon(self, icon_path): + if sys.platform != 'win32': + return + try: + import ctypes + user32 = ctypes.windll.user32 + hwnd = self.root.winfo_id() + image_icon = 1 + lr_loadfromfile = 0x00000010 + wm_seticon = 0x0080 + icon_small = 0 + icon_big = 1 + path = str(icon_path) + small = user32.LoadImageW(None, path, image_icon, 16, 16, lr_loadfromfile) + big = user32.LoadImageW(None, path, image_icon, 32, 32, lr_loadfromfile) + if small: + user32.SendMessageW(hwnd, wm_seticon, icon_small, small) + if big: + user32.SendMessageW(hwnd, wm_seticon, icon_big, big) + except Exception: + pass def setup_styles(self): """设置自定义样式""" @@ -282,6 +534,7 @@ class ADKAPKGUI: def setup_ui(self): """设置UI界面""" # 配置根窗口 + self.root.title(self.t('title')) self.root.configure(bg=self.colors['bg_dark']) # 创建主框架 @@ -289,7 +542,7 @@ class ADKAPKGUI: main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) # 顶部标题栏 - title_frame = tk.Frame(main_frame, bg=self.colors['bg_dark'], height=65) + title_frame = tk.Frame(main_frame, bg=self.colors['bg_dark'], height=45) title_frame.pack(fill=tk.X, pady=(0, 10)) title_frame.pack_propagate(False) @@ -301,13 +554,6 @@ class ADKAPKGUI: bg=self.colors['bg_dark']) self.title_label.pack() - self.subtitle_label = tk.Label(title_frame, - text="宜宾科宜科技有限公司 - 智能设备管理平台", - font=('Microsoft YaHei', 9), - fg=self.colors['text_secondary'], - bg=self.colors['bg_dark']) - self.subtitle_label.pack() - # 按钮区域(两排,每排5个) button_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) button_frame.pack(fill=tk.X, pady=(0, 10), padx=5) @@ -377,6 +623,13 @@ class ADKAPKGUI: bg=self.colors['error'], **btn_params) self.btn_exit.pack(side=tk.LEFT, padx=4) + + self.debug_button_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) + self.btn_debug_extract = tk.Button(self.debug_button_frame, text=self.t('btn_debug_extract'), + command=self.debug_test_package_extract, + bg=self.colors['info'], + **btn_params) + self.btn_debug_extract.pack(side=tk.LEFT, padx=4) # 设备状态栏(横条) status_bar_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) @@ -397,7 +650,7 @@ class ADKAPKGUI: bg=self.colors['bg_light']) self.device_label.pack(side=tk.LEFT, padx=(5, 3)) - self.device_status_label = tk.Label(status_indicator_frame, text="未检测", + self.device_status_label = tk.Label(status_indicator_frame, text=self.t('status_detecting'), font=('Microsoft YaHei', 9, 'bold'), fg='#636e72', bg=self.colors['bg_light'], @@ -412,7 +665,7 @@ class ADKAPKGUI: fg=self.colors['text'], bg=self.colors['bg_light']) self.vin_label_title.pack(side=tk.LEFT) - self.vin_label = tk.Label(vin_frame, text="未获取", + self.vin_label = tk.Label(vin_frame, text=self.t('vin_none'), font=('Microsoft YaHei', 9, 'bold'), fg='#636e72', bg=self.colors['bg_light'], @@ -427,7 +680,7 @@ class ADKAPKGUI: fg=self.colors['text'], bg=self.colors['bg_light']) self.auth_label_title.pack(side=tk.LEFT) - self.auth_label = tk.Label(auth_frame, text="未验证", + self.auth_label = tk.Label(auth_frame, text=self.t('auth_none'), font=('Microsoft YaHei', 9, 'bold'), fg='#636e72', bg=self.colors['bg_light'], @@ -448,21 +701,19 @@ class ADKAPKGUI: tips_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) tips_frame.pack(fill=tk.X, pady=(5, 5), padx=5) - tips = [ - "1. 安装语言过程中请保持车辆和电脑的电量充足,不可中途停止。", - "2. 获取权限以后,车辆自动重启以后再进入语言刷入。", - "3. 部分语言需要重启后生效,可以一切工作完成以后再重启。", - ] + tips = [self.t('tip_1'), self.t('tip_2'), self.t('tip_3')] for i, tip in enumerate(tips): tip_row = tk.Frame(tips_frame, bg=self.colors['bg_light']) tip_row.pack(fill=tk.X, padx=10, pady=(5 if i == 0 else 0, 5 if i == len(tips) - 1 else 0)) - tk.Label(tip_row, text=tip, + label = tk.Label(tip_row, text=tip, font=('Microsoft YaHei', 9), fg=self.colors['warning'], bg=self.colors['bg_light'], wraplength=600, - justify=tk.LEFT).pack(side=tk.LEFT) + justify=tk.LEFT) + label.pack(side=tk.LEFT) + setattr(self, f'tip_label_{i + 1}', label) # 解压进度条框架 progress_frame = tk.Frame(main_frame, bg=self.colors['bg_dark']) @@ -542,16 +793,7 @@ class ADKAPKGUI: bg=self.colors['bg_light']) self.status_text.pack(side=tk.LEFT, padx=10) - # 主题和语言切换按钮 - self.btn_theme_switch = tk.Button(bottom_status, text="🌙 暗色", - command=self.toggle_theme, - font=('Microsoft YaHei', 8), - fg=self.colors['accent'], - bg=self.colors['bg_light'], - relief=tk.FLAT, - cursor='hand2') - self.btn_theme_switch.pack(side=tk.RIGHT, padx=5) - + # 语言切换按钮 self.btn_lang_switch = tk.Button(bottom_status, text="EN", command=self.toggle_lang, font=('Microsoft YaHei', 8, 'bold'), @@ -564,6 +806,7 @@ class ADKAPKGUI: # 调试模式快捷键 self.root.bind('', self._toggle_debug) self.root.bind('', self._debug_test_extract) + self.root.protocol("WM_DELETE_WINDOW", self.on_close) # 绑定悬停效果 self.bind_hover_effects() @@ -572,7 +815,8 @@ class ADKAPKGUI: """绑定按钮悬停效果""" buttons = [self.btn_root, self.btn_push, self.btn_install_all, self.btn_language, self.btn_timezone, self.btn_settings, - self.btn_reboot, self.btn_clear, self.btn_exit] + self.btn_reboot, self.btn_clear, self.btn_exit, + self.btn_debug_extract] for btn in buttons: original_bg = btn.cget('bg') @@ -615,57 +859,38 @@ class ADKAPKGUI: def _adb_cmd(self): return subprocess.list2cmdline([self.adb]) + def _find_package_file(self): + q07_package = find_resource("Q07_package.bin") + if q07_package.exists(): + return q07_package + legacy_package = find_resource("package.bin") + if legacy_package.exists(): + return legacy_package + return q07_package + def t(self, key): """获取翻译文本""" return self.T.get(self.lang, self.T['zh']).get(key, key) + def tf(self, key, **kwargs): + try: + return self.t(key).format(**kwargs) + except Exception: + return self.t(key) + def toggle_lang(self): """切换语言""" self.lang = 'en' if self.lang == 'zh' else 'zh' self.btn_lang_switch.config(text=self.t('lang_en') if self.lang == 'zh' else self.t('lang_zh')) self._refresh_ui_texts() - self.log(f"语言已切换为 {'English' if self.lang == 'en' else '中文'}", "INFO") - - def toggle_theme(self): - """切换主题""" - if self.theme == 'dark': - self.colors = dict(self.colors_light) - self.theme = 'light' - self.btn_theme_switch.config(text=self.t('theme_dark')) - else: - self.colors = dict(self.colors_dark) - self.theme = 'dark' - self.btn_theme_switch.config(text=self.t('theme_light')) - self._apply_theme() - - def _apply_theme(self): - """应用当前主题到所有控件""" - c = self.colors - self.root.configure(bg=c['bg_dark']) - # 更新 ttk 样式 - style = ttk.Style() - style.configure('TFrame', background=c['bg_dark']) - style.configure('TLabel', background=c['bg_dark'], foreground=c['text']) - style.configure('TLabelframe', background=c['bg_dark'], foreground=c['text']) - style.configure('TLabelframe.Label', background=c['bg_dark'], foreground=c['accent']) - style.configure('TProgressbar', background=c['accent'], troughcolor=c['bg_light'], borderwidth=0) - # 更新日志颜色 - self.log_text.tag_config('INFO', foreground='#74b9ff') - self.log_text.tag_config('SUCCESS', foreground='#55efc4') - self.log_text.tag_config('ERROR', foreground='#ff7675') - self.log_text.tag_config('WARNING', foreground='#ffeaa7') - self.log_text.tag_config('CMD', foreground='#a29bfe') - if self.theme == 'light': - self.log_text.configure(bg='#ffffff', fg='#2d3436') - else: - self.log_text.configure(bg='#2d2d3d', fg='#e0e0e0') + self.log(self.t('log_lang_switched'), "INFO") def _refresh_ui_texts(self): """刷新所有UI文本""" t = self.t + self.root.title(t('title')) widgets = [ (getattr(self, 'title_label', None), 'title', None), - (getattr(self, 'subtitle_label', None), 'about_company', None), (getattr(self, 'btn_root', None), 'btn_root', None), (getattr(self, 'btn_push', None), 'btn_push', None), (getattr(self, 'btn_install_all', None), 'btn_install', None), @@ -674,24 +899,37 @@ class ADKAPKGUI: (getattr(self, 'btn_settings', None), 'btn_settings', None), (getattr(self, 'btn_reboot', None), 'btn_reboot', None), (getattr(self, 'btn_exit', None), 'btn_disable_upgrade', None), + (getattr(self, 'btn_debug_extract', None), 'btn_debug_extract', None), (getattr(self, 'btn_clear', None), 'btn_clear_log', None), (getattr(self, 'log_title_label', None), 'log_title', None), - (getattr(self, 'status_text', None), 'status_ready', None), (getattr(self, 'device_label', None), 'device_label', None), (getattr(self, 'vin_label_title', None), 'vin_label', None), (getattr(self, 'auth_label_title', None), 'auth_label', None), (getattr(self, 'btn_refresh', None), 'btn_refresh', None), (getattr(self, 'hint_label', None), 'hint_factory', None), + (getattr(self, 'tip_label_1', None), 'tip_1', None), + (getattr(self, 'tip_label_2', None), 'tip_2', None), + (getattr(self, 'tip_label_3', None), 'tip_3', None), ] for w, key, _ in widgets: if w: w.config(text=t(key)) - self.btn_theme_switch.config(text=t('theme_light') if self.theme == 'dark' else t('theme_dark')) + if getattr(self, 'status_text', None): + self.status_text.config(text=t('status_debug') if self.debug_mode else t('status_ready')) self.btn_lang_switch.config(text=t('lang_en') if self.lang == 'zh' else t('lang_zh')) - # 刷新设备状态显示 - if self.vin: - self._update_device_status_impl(self.device_connected, self.vin, - getattr(self, '_last_authorized', False)) + self._update_device_status_impl( + self.device_connected, + self.vin, + getattr(self, '_last_authorized', False) + ) + + def set_debug_buttons_visible(self, visible): + if not hasattr(self, 'debug_button_frame'): + return + if visible: + self.debug_button_frame.pack(pady=(0, 8)) + else: + self.debug_button_frame.pack_forget() def _log_impl(self, message, level="INFO"): """日志写入的实际实现(必须在主线程调用)""" @@ -707,7 +945,7 @@ class ADKAPKGUI: def clear_log(self): """清空日志""" self.log_text.delete(1.0, tk.END) - self.log("日志已清空", "INFO") + self.log(self.t('info_log_cleared'), "INFO") def _show_progress_impl(self, show=True, is_push=False): """显示/隐藏进度条的实际实现(必须在主线程调用)""" @@ -782,7 +1020,7 @@ class ADKAPKGUI: if self.debug_mode: return True if not self.device_connected: - messagebox.showwarning("设备未连接", "请先连接设备并点击「检查」按钮刷新状态!") + messagebox.showwarning(self.t('warn_no_device'), self.t('warn_connect_first')) return False return True @@ -801,7 +1039,7 @@ class ADKAPKGUI: elif not devices and self.device_connected: # 设备断开连接 self.update_device_status(False) - self.log("设备已断开连接", "WARNING") + self.log(self.t('log_device_disconnected'), "WARNING") time.sleep(5) except: @@ -820,7 +1058,7 @@ class ADKAPKGUI: # 执行 adb -d root ok_root, out_root = self.run_adb_command('adb -d root') if not ok_root: - self.log("获取 root 失败", "ERROR") + self.log(self.t('log_root_failed'), "ERROR") self.show_progress(False, is_push=False) return @@ -830,22 +1068,22 @@ class ADKAPKGUI: remount_result = subprocess.run(f'{self._adb_cmd()} -d remount', shell=True, capture_output=True, text=True) if remount_result.returncode != 0: - self.log("获取权限失败", "ERROR") + self.log(self.t('log_permission_failed'), "ERROR") self.show_progress(False, is_push=False) return # 判断是否需要重启:首次 remount 返回 "Now reboot your device for settings to take effect" combined_output = (remount_result.stdout + remount_result.stderr).lower() if 'now reboot your device' in combined_output: - self.log("首次获取权限,需要重启设备...", "INFO") + self.log(self.t('log_permission_reboot_required'), "INFO") ok, _ = self.run_adb_command('adb -d shell reboot') if ok: - self.log("设备即将重启,重启后权限生效", "INFO") + self.log(self.t('log_permission_rebooting'), "INFO") self.update_device_status(False) else: - self.log("重启失败", "ERROR") + self.log(self.t('log_reboot_failed'), "ERROR") else: - self.log("已获取权限", "SUCCESS") + self.log(self.t('log_permission_ok'), "SUCCESS") self.show_progress(False, is_push=False) @@ -858,7 +1096,7 @@ class ADKAPKGUI: if has_app or has_priv: ok, reason = self._validate_extracted_apks() if not ok: - self.log(f"已解压缓存无效: {reason}", "ERROR") + self.log(self.tf('log_cache_invalid', reason=reason), "ERROR") self._clear_extracted_cache() return False return has_app or has_priv @@ -870,13 +1108,13 @@ class ADKAPKGUI: if self.priv_apps_dir and self.priv_apps_dir.exists(): apks.extend(self.priv_apps_dir.glob("*.apk")) if not apks: - return False, "未找到可用 APK" + return False, self.t('err_no_usable_apk') zero_apks = [apk.name for apk in apks if apk.stat().st_size <= 0] if zero_apks: preview = ", ".join(zero_apks[:5]) suffix = "..." if len(zero_apks) > 5 else "" - return False, f"发现 0KB APK: {preview}{suffix}" + return False, self.tf('err_zero_apk', files=f"{preview}{suffix}") return True, "" def _clear_extracted_cache(self): @@ -886,6 +1124,13 @@ class ADKAPKGUI: self.apps_dir = None self.priv_apps_dir = None + def cleanup_cache_on_exit(self): + self._clear_extracted_cache() + + def on_close(self): + self.cleanup_cache_on_exit() + self.root.destroy() + def _format_extract_error(self, err_msg, return_code): text = (err_msg or "").lower() if any(marker in text for marker in ( @@ -895,14 +1140,14 @@ class ADKAPKGUI: "data error in encrypted file", "can not open encrypted archive", )): - return "解压密码错误,请重新确认 package.bin 密码" + return self.t('err_extract_wrong_password') if "data error" in text: - return "资源包数据错误,可能是密码错误或 package.bin 损坏" + return self.t('err_extract_data') if "headers error" in text or "unexpected end" in text: - return "资源包损坏或不完整,请检查 package.bin" + return self.t('err_extract_corrupt') if err_msg.strip(): - return f"解压失败: {err_msg.strip()[:300]}" - return f"解压失败 (返回码 {return_code}),请检查密码是否正确" + return self.tf('err_extract_failed', error=err_msg.strip()[:300]) + return self.tf('err_extract_failed_code', code=return_code) def _decode_7z_output(self, output): for enc in ('gbk', 'utf-8'): @@ -926,13 +1171,14 @@ class ADKAPKGUI: return False def _extract_with_7za_progress(self): - self.update_progress(0, 100, "Loading resources...") + self.update_progress(0, 100, self.t('progress_resource_loading')) cmd = [ self.sz, 'x', str(self.package_file), f'-p{self.extract_password}', f'-o{self.temp_dir}', '-y' ] - if self._seven_zip_supports_progress_stream(): + use_progress_switch = self._seven_zip_supports_progress_stream() + if use_progress_switch: cmd.extend(['-bsp1', '-bso0', '-bse1']) proc = subprocess.Popen( @@ -963,27 +1209,51 @@ class ADKAPKGUI: percent = min(100, int(matches[-1])) if percent != last_percent: last_percent = percent - self.update_progress(percent, 100, "Loading resources...") + self.update_progress( + percent, + 100, + self.tf('progress_extracting_percent', percent=percent) + ) return_code = proc.wait() decoded_output = self._decode_7z_output(bytes(output)) if return_code == 0: - self.update_progress(100, 100, "Resources loaded") + self.update_progress(100, 100, self.t('progress_resource_done')) + return True, decoded_output + if use_progress_switch and "incorrect command line" in decoded_output.lower(): + return self._extract_with_7za_basic() + return False, decoded_output + + def _extract_with_7za_basic(self): + cmd = [ + self.sz, 'x', str(self.package_file), + f'-p{self.extract_password}', + f'-o{self.temp_dir}', '-y' + ] + result = subprocess.run( + cmd, + capture_output=True, + stdin=subprocess.DEVNULL, + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + decoded_output = self._decode_7z_output(result.stdout + result.stderr) + if result.returncode == 0: + self.update_progress(100, 100, self.t('progress_resource_done')) return True, decoded_output return False, decoded_output def extract_package_silent(self): - """Extract package.bin silently with progress.""" + """Extract Q07_package.bin silently with progress.""" if not self.package_file.exists(): - self.log(f"Error: package not found ({self.package_file})", "ERROR") + self.log(self.tf('log_package_missing', path=self.package_file), "ERROR") return False if not self.extract_password: - self.log("Error: extract password is not set", "ERROR") + self.log(self.t('log_extract_password_missing'), "ERROR") return False if not os.path.exists(self.sz): - self.log(f"Error: 7za.exe not found ({self.sz})", "ERROR") + self.log(self.tf('log_7za_missing', path=self.sz), "ERROR") return False try: @@ -1003,7 +1273,7 @@ class ADKAPKGUI: subprocess.run(f'attrib +h "{self.temp_dir.parent}"', shell=True, capture_output=True) subprocess.run(f'attrib +h "{self.temp_dir}"', shell=True, capture_output=True) - self.log("正在准备资源包", "INFO") + self.log(self.t('info_extracting'), "INFO") ok, err_msg = self._extract_with_7za_progress() if not ok: @@ -1023,27 +1293,25 @@ class ADKAPKGUI: self.priv_apps_dir = priv_app_candidates[0] if not self.apps_dir and not self.priv_apps_dir: - self.log("警告:未找到 app/priv-app 目录", "WARNING") + self.log(self.t('warn_no_app_dir'), "WARNING") self._clear_extracted_cache() return False - apk_count = len(list(self.apps_dir.glob("*.apk"))) if self.apps_dir else 0 - priv_count = len(list(self.priv_apps_dir.glob("*.apk"))) if self.priv_apps_dir else 0 ok, reason = self._validate_extracted_apks() if not ok: - self.log(f"解压后的资源无效: {reason}。已停止刷入,请检查解压密码或资源包。", "ERROR") + self.log(self.tf('log_extracted_resource_invalid', reason=reason), "ERROR") self._clear_extracted_cache() return False - self.log(f"资源准备完成 (app: {apk_count}, priv-app: {priv_count})", "SUCCESS") + self.log(self.t('log_extract_done'), "SUCCESS") return True except Exception as e: if getattr(self, 'debug_mode', False): - self.log(f"Package preparation failed: {str(e)}", "ERROR") + self.log(self.tf('log_extract_exception', error=str(e)), "ERROR") import traceback self.log(traceback.format_exc(), "ERROR") else: - self.log("资源准备失败,请检查网络连接后重试", "ERROR") + self.log(self.t('err_extract_user'), "ERROR") self._clear_extracted_cache() return False @@ -1054,13 +1322,13 @@ class ADKAPKGUI: if result.returncode == 0: self.refresh_device_status() if not self.package_file.exists(): - self.log("未找到资源包文件", "WARNING") + self.log(self.tf('log_package_missing', path=self.package_file), "WARNING") else: self._try_reuse_extracted() else: - self.log("未找到adb命令,请将ADB文件放入本目录", "ERROR") + self.log(self.t('log_adb_missing'), "ERROR") except FileNotFoundError: - self.log("未找到adb命令,请将ADB文件放入本目录", "ERROR") + self.log(self.t('log_adb_missing'), "ERROR") def _try_reuse_extracted(self): """检查磁盘上是否已有解压好的资源,有则直接复用""" @@ -1089,7 +1357,7 @@ class ADKAPKGUI: self.temp_dir = cache_dir ok, reason = self._validate_extracted_apks() if not ok: - self.log(f"缓存资源无效,已清理: {reason}", "WARNING") + self.log(self.tf('log_cache_reuse_invalid', reason=reason), "WARNING") self._clear_extracted_cache() return # self.log("已复用缓存的资源文件", "INFO") @@ -1110,7 +1378,7 @@ class ADKAPKGUI: if devices: if not was_connected: - self.log("Device connected", "SUCCESS") + self.log(self.t('log_device_connected'), "SUCCESS") vin = '' for key in ('ca_vin_info', 'VIN'): @@ -1122,18 +1390,18 @@ class ADKAPKGUI: break vin = '' if vin: - self.log(f"Current VIN: {vin}", "INFO") + self.log(self.tf('log_current_vin', vin=vin), "INFO") authorized = self.check_authorization(vin) self.update_device_status(True, vin, authorized) else: - self.log("Unable to read VIN", "WARNING") + self.log(self.t('log_vin_unavailable'), "WARNING") self.update_device_status(True, None, False) else: if was_connected: - self.log("Device disconnected", "WARNING") + self.log(self.t('log_device_disconnected'), "WARNING") self.update_device_status(False) except Exception as e: - self.log(f"Refresh device status failed: {str(e)}", "ERROR") + self.log(self.tf('log_refresh_failed', error=str(e)), "ERROR") finally: self._refreshing = False @@ -1142,38 +1410,58 @@ class ADKAPKGUI: def check_authorization(self, vin): """Check authorization.""" if getattr(self, 'debug_mode', False): - self.log("Debug mode: skip authorization", "WARNING") + self.log(self.t('log_auth_skip_debug'), "WARNING") return True - self.log("Checking authorization...", "INFO") + self.log(self.t('log_auth_checking'), "INFO") try: - url = f"{self.api_url}?{urlencode({'vin': vin})}" - req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) - - with urlopen(req, timeout=10) as response: - data = json.loads(response.read().decode('utf-8')) - - if data.get('authorized') == True: - self.log("Authorization passed", "SUCCESS") - if 'data' in data and 'vehicleName' in data['data']: - self.log(f"Vehicle name: {data['data']['vehicleName']}", "INFO") + authorized, vehicle_name, _ = self.query_authorization_info(vin) + if authorized: + self.log(self.t('log_auth_ok'), "SUCCESS") + if vehicle_name: + self.vehicle_name = vehicle_name + self.log(self.tf('log_vehicle_name', name=vehicle_name), "INFO") return True else: - self.log("Authorization failed", "ERROR") + self.log(self.t('log_auth_failed'), "ERROR") return False except Exception: - self.log("Authorization failed", "ERROR") + self.log(self.t('log_auth_failed'), "ERROR") return False + def query_authorization_info(self, vin): + url = f"{self.api_url}?{urlencode({'vin': vin})}" + req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + + payload = data.get('data', {}) if isinstance(data, dict) else {} + vehicle_name = payload.get('vehicleName') or payload.get('vehicle_name') or "" + vehicle_name = str(vehicle_name).strip() + if data.get('authorized') is True and vehicle_name: + self.vehicle_name = vehicle_name + return data.get('authorized') is True, vehicle_name, data + def fetch_package_password(self): """Fetch package password from server.""" if not self.vin: - self.log("Please connect adb first", "ERROR") + self.log(self.t('log_adb_required'), "ERROR") return False try: + vehicle_name = self.vehicle_name + if not vehicle_name: + authorized, vehicle_name, _ = self.query_authorization_info(self.vin) + if not authorized: + self.log(self.t('log_auth_failed'), "ERROR") + return False + if not vehicle_name: + self.log(self.t('log_auth_failed'), "ERROR") + return False + pwd_api_url = "https://api.changan.softwindy.cn/api/authorizations/package-key" - url = f"{pwd_api_url}?{urlencode({'vin': self.vin})}" + url = f"{pwd_api_url}?{urlencode({'vin': self.vin, 'vehicleName': vehicle_name})}" req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) with urlopen(req, timeout=10) as response: @@ -1183,11 +1471,11 @@ class ADKAPKGUI: self.extract_password = data['data']['password'] return True else: - self.log(f"Data preparation failed: {data.get('message', 'unknown error')}", "ERROR") + self.log(self.tf('log_data_prepare_failed_detail', error=data.get('message', self.t('unknown_error'))), "ERROR") return False except Exception as e: - self.log(f"Data preparation failed: {str(e)}", "ERROR") + self.log(self.tf('log_data_prepare_failed_detail', error=str(e)), "ERROR") return False def run_adb_command(self, command): @@ -1219,13 +1507,13 @@ class ADKAPKGUI: ok, err = self.run_adb_command(f'adb -d push "{apk_path}" {temp_apk_path}') if not ok: - return False, f"push失败: {err}" + return False, self.tf('err_push_failed', error=err) self.run_adb_command(f'adb -d shell mkdir -p {target_dir}') ok, err = self.run_adb_command(f'adb -d shell cp {temp_apk_path} {target_apk_path}') self.run_adb_command(f'adb -d shell rm -f {temp_apk_path}') if not ok: - return False, f"cp失败: {err}" + return False, self.tf('err_cp_failed', error=err) return True, "" @@ -1233,36 +1521,31 @@ class ADKAPKGUI: """推送APK到系统分区(支持app和priv-app)""" if not self.check_device_connection(): return - if not self.vin: - messagebox.showwarning("警告", "请先刷新设备状态并获取VIN码") + if not self.vin and not self.debug_mode: + messagebox.showwarning(self.t('msg_warn_title'), self.t('warn_no_vin')) return - messagebox.showwarning("⚠️ 重要提示", - "刷入过程中请勿:\n" - " ● 重启车机\n" - " ● 退出本程序\n" - " ● 关闭电脑\n\n" - "否则可能导致车机系统损坏!") + messagebox.showwarning(self.t('warn_flash_warning'), self.t('warn_flash_msg')) def do_push_all(): if not self.check_authorization(self.vin): - self.run_on_ui_thread(lambda: messagebox.showerror("授权失败", "设备未授权")) + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_auth_failed_title'), self.t('msg_device_unauthorized'))) return if not self.extract_password: if not self.fetch_package_password(): - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源准备失败!")) + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_prepare_failed'))) return if not self.check_package_extracted(): self.show_progress(True, is_push=False) if not self.extract_package_silent(): self.show_progress(False, is_push=False) - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源准备失败!")) + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_prepare_failed'))) return self.show_progress(False, is_push=False) if (not self.apps_dir or not self.apps_dir.exists()) and \ (not self.priv_apps_dir or not self.priv_apps_dir.exists()): - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源目录未找到")) + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_dir_missing'))) return self.show_progress(True, is_push=True) @@ -1282,7 +1565,7 @@ class ADKAPKGUI: self.priv_apps_dir = None self.temp_dir = None if not self.fetch_package_password() or not self.extract_package_silent(): - self.log("未找到语言包文件", "WARNING") + self.log(self.t('warn_no_apk'), "WARNING") self.show_progress(False, is_push=True) return # 重新收集 @@ -1294,7 +1577,7 @@ class ADKAPKGUI: for apk in self.priv_apps_dir.glob("*.apk"): all_apks.append((apk, "priv-app")) if not all_apks: - self.log("未找到语言包文件", "WARNING") + self.log(self.t('warn_no_apk'), "WARNING") self.show_progress(False, is_push=True) return @@ -1308,20 +1591,20 @@ class ADKAPKGUI: success_count += 1 else: if "Read-only file system" in err: - self.log("请先点击「获取权限」获取权限后再试", "ERROR") + self.log(self.t('log_flash_readonly'), "ERROR") aborted = True break - self.update_progress(i, total, "正在刷入...", is_push=True) + self.update_progress(i, total, self.t('progress_flashing'), is_push=True) - self.update_progress(total, total, "刷入完成" if not aborted else "已终止", is_push=True) + self.update_progress(total, total, self.t('progress_flash_done') if not aborted else self.t('progress_aborted'), is_push=True) if success_count == total: - self.log(f"刷入完成,共 {total} 个语言包", "SUCCESS") - self.log("语言包已刷入完成,重启设备后生效,您可在适当时候重启", "WARNING") + self.log(self.tf('log_flash_complete_count', count=total), "SUCCESS") + self.log(self.t('log_flash_effect_after_reboot'), "WARNING") elif success_count > 0: - self.log(f"部分刷入成功({success_count}/{total})", "WARNING") + self.log(self.tf('log_flash_partial', success=success_count, total=total), "WARNING") if not aborted: - self.log("语言包已刷入完成,重启设备后生效,您可在适当时候重启", "WARNING") + self.log(self.t('log_flash_effect_after_reboot'), "WARNING") self.show_progress(False, is_push=True) @@ -1332,48 +1615,50 @@ class ADKAPKGUI: if not self.check_device_connection(): return - apk_dir = filedialog.askdirectory(title="选择包含APK文件的文件夹") + apk_dir = filedialog.askdirectory(title=self.t('dialog_select_apk_folder')) if not apk_dir: return apk_files = list(Path(apk_dir).glob("*.apk")) if not apk_files: - messagebox.showerror("错误", "所选文件夹中没有APK文件!") + messagebox.showerror(self.t('msg_error_title'), self.t('msg_no_apk_in_folder')) return - result = messagebox.askyesno("确认安装", - f"找到 {len(apk_files)} 个APK文件\n\n是否开始批量安装?") + result = messagebox.askyesno( + self.t('msg_confirm_install_title'), + self.tf('msg_confirm_install_folder', count=len(apk_files)) + ) if not result: return def install(): self.show_progress(True, is_push=True) total = len(apk_files) - self.log(f"开始批量安装 {total} 个APK...", "INFO") + self.log(self.tf('log_install_start', count=total), "INFO") success_count = 0 try: self.run_adb_command('adb -d shell setprop vecentek.model 1') for i, apk_path in enumerate(apk_files, 1): - self.update_progress(i, total, "安装中...", is_push=True) + self.update_progress(i, total, self.t('progress_installing'), is_push=True) success, _ = self.run_adb_command(f'adb -d install -r "{apk_path}"') if success: success_count += 1 - self.update_progress(total, total, "安装完成", is_push=True) + self.update_progress(total, total, self.t('progress_done'), is_push=True) if success_count == total: - self.log(f"安装完成:全部 {total} 个成功", "SUCCESS") - self.run_on_ui_thread(messagebox.showinfo, "安装完成", f"成功安装 {total} 个APK!") + self.log(self.tf('log_install_done_all', count=total), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t('info_install_done'), self.tf('msg_install_success_many', count=total)) elif success_count > 0: - self.log(f"安装完成:{success_count}/{total} 成功", "WARNING") - self.run_on_ui_thread(messagebox.showwarning, "部分成功", f"成功: {success_count}\n失败: {total - success_count}") + self.log(self.tf('log_install_done_partial', success=success_count, total=total), "WARNING") + self.run_on_ui_thread(messagebox.showwarning, self.t('info_install_done'), self.tf('msg_install_partial', success=success_count, failed=total - success_count)) else: - self.log("安装失败", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "安装失败", "所有APK安装失败!") + self.log(self.t('log_install_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('log_install_failed'), self.t('msg_install_all_failed')) except Exception as e: - self.log(f"安装过程异常: {str(e)}", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "安装失败", f"安装过程异常:{str(e)}") + self.log(self.tf('log_install_exception', error=str(e)), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('log_install_failed'), self.tf('msg_install_exception', error=str(e))) finally: self.run_adb_command('adb -d shell setprop vecentek.model 0') self.show_progress(False, is_push=True) @@ -1387,8 +1672,8 @@ class ADKAPKGUI: return file_path = filedialog.askopenfilename( - title="选择APK文件", - filetypes=[("APK文件", "*.apk"), ("所有文件", "*.*")] + title=self.t('dialog_select_apk'), + filetypes=[(self.t('file_apk'), "*.apk"), (self.t('file_all'), "*.*")] ) if not file_path: @@ -1396,17 +1681,17 @@ class ADKAPKGUI: def install(): self.show_progress(True, is_push=True) - self.update_progress(50, 100, f"安装中", is_push=True) + self.update_progress(50, 100, self.t('progress_installing'), is_push=True) try: self.run_adb_command('adb -d shell setprop vecentek.model 1') success, _ = self.run_adb_command(f'adb -d install -r "{file_path}"') - self.update_progress(100, 100, f"完成", is_push=True) + self.update_progress(100, 100, self.t('progress_done'), is_push=True) if success: - self.log("✓ 安装成功", "SUCCESS") + self.log(self.t('info_install_done'), "SUCCESS") else: - self.log("✗ 安装失败", "ERROR") + self.log(self.t('log_install_failed'), "ERROR") except Exception as e: - self.log(f"安装过程异常: {str(e)}", "ERROR") + self.log(self.tf('log_install_exception', error=str(e)), "ERROR") finally: self.run_adb_command('adb -d shell setprop vecentek.model 0') self.show_progress(False, is_push=True) @@ -1427,7 +1712,7 @@ class ADKAPKGUI: # 创建弹窗 popup = tk.Toplevel(self.root) - popup.title("快捷语言设置") + popup.title(self.t('title_pop_lang')) popup.geometry("520x320") popup.configure(bg=self.colors['bg_dark']) popup.resizable(False, False) @@ -1441,13 +1726,13 @@ class ADKAPKGUI: popup.grab_set() # 标题 - header = tk.Label(popup, text="选择目标语言", + header = tk.Label(popup, text=self.t('quick_lang_header'), font=('Microsoft YaHei', 13, 'bold'), fg=self.colors['accent'], bg=self.colors['bg_dark']) header.pack(pady=(15, 10)) - hint = tk.Label(popup, text="点击按钮即可将系统语言切换为对应语言,重启后生效", + hint = tk.Label(popup, text=self.t('quick_lang_hint'), font=('Microsoft YaHei', 9), fg=self.colors['text_secondary'], bg=self.colors['bg_dark']) @@ -1496,7 +1781,7 @@ class ADKAPKGUI: sep = tk.Frame(popup, bg=self.colors['border'], height=1) sep.pack(fill=tk.X, padx=20, pady=(8, 6)) - sys_btn = tk.Button(popup, text="⚙️ 打开系统语言设置(手动选择)", + sys_btn = tk.Button(popup, text=self.t('quick_lang_system'), command=lambda: self._open_sys_and_close(popup), font=('Microsoft YaHei', 9), fg=self.colors['text_secondary'], @@ -1510,21 +1795,21 @@ class ADKAPKGUI: popup.destroy() def do_set(): - self.log(f"正在设置系统语言为: {language_name} ({locale_code})", "INFO") + self.log(self.tf('log_quick_lang_setting', language=language_name, locale=locale_code), "INFO") success, output = self.run_adb_command( f'adb -d shell settings put system system_locales {locale_code}' ) if success: - self.log(f"✓ 语言已设置为 {language_name}", "SUCCESS") + self.log(self.tf('log_quick_lang_success', language=language_name), "SUCCESS") self.run_on_ui_thread( messagebox.showinfo, - "设置成功", - f"系统语言已设置为 {language_name}\n\n⚠️ 请重启设备使其生效。" + self.t('msg_success_title'), + self.tf('msg_quick_lang_success', language=language_name) ) else: - self.log(f"✗ 语言设置失败: {output}", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "设置失败", f"语言设置失败!\n\n{output}") + self.log(self.tf('log_quick_lang_failed', output=output), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.tf('msg_quick_lang_failed', output=output)) threading.Thread(target=do_set, daemon=True).start() @@ -1549,10 +1834,10 @@ class ADKAPKGUI: """重启设备""" if not self.check_device_connection(): return - if messagebox.askyesno("确认重启", "确定要重启设备吗?"): + if messagebox.askyesno(self.t('msg_reboot_confirm_title'), self.t('confirm_reboot')): subprocess.Popen(f'{self._adb_cmd()} -d shell reboot', shell=True, stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) - self.log("设备正在重启...", "INFO") + self.log(self.t('log_rebooting'), "INFO") self.update_device_status(False) def on_disable_upgrade(self): @@ -1563,15 +1848,12 @@ class ADKAPKGUI: # 弹窗确认 result = messagebox.askyesno( - "确认禁用升级", - "⚠️ 警告:禁用系统升级后,将无法接收系统更新!\n\n" - "是否确定要禁用系统升级应用?\n\n" - "禁用命令:\n" - "adb -d shell pm disable-user --user 0 com.incall.apps.softmanager" + self.t('msg_disable_confirm_title'), + self.t('msg_disable_confirm') ) if not result: - self.log("已取消禁用升级操作", "INFO") + self.log(self.t('log_disable_cancelled'), "INFO") return def disable(): @@ -1579,11 +1861,11 @@ class ADKAPKGUI: success, output = self.run_adb_command( 'adb -d shell pm disable-user --user 0 com.incall.apps.softmanager') if success: - self.log("系统升级已禁用", "SUCCESS") - self.run_on_ui_thread(messagebox.showinfo, "成功", "系统升级已成功禁用!") + self.log(self.t('log_disable_success'), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t('msg_success_title'), self.t('msg_disable_success')) else: - self.log("禁用系统升级失败", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "错误", f"禁用失败:{output}") + self.log(self.t('log_disable_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.tf('msg_disable_failed', output=output)) self.show_progress(False, is_push=False) threading.Thread(target=disable, daemon=True).start() @@ -1592,68 +1874,125 @@ class ADKAPKGUI: """切换调试模式(隐藏入口,Ctrl+Shift+D)""" if self.debug_mode: self.debug_mode = False - self.log("调试模式已关闭", "WARNING") + self.log(self.t('log_debug_off'), "WARNING") self.status_text.config(text=self.t('status_ready')) + self.set_debug_buttons_visible(False) self.refresh_device_status() return - pwd = simpledialog.askstring("调试模式", "请输入调试密码:", show='*', parent=self.root) - if pwd == "zxch5200": - self.debug_mode = True - self.update_device_status(True, "", True) - self.log("🔧 调试模式已开启 - 跳过授权和设备校验,显示详细ADB日志", "WARNING") - self.status_text.config(text="🔧 调试模式") - elif pwd is not None: - messagebox.showwarning("错误", "密码错误") + pwd = simpledialog.askstring(self.t('status_debug'), self.t('debug_password_prompt'), show='*', parent=self.root) + if not pwd: + return + + self.log(self.t('debug_password_verifying'), "INFO") + + def verify(): + valid, message = self.verify_debug_mode_password(pwd) + if valid: + def enable_debug(): + self.debug_mode = True + self.update_device_status(True, "", True) + self.log(self.t('log_debug_on'), "WARNING") + self.status_text.config(text=self.t('status_debug')) + self.set_debug_buttons_visible(True) + self.run_on_ui_thread(enable_debug) + else: + def show_failed(): + msg = message or self.t('debug_wrong_password') + self.log(self.tf('debug_verify_failed', message=msg), "WARNING") + messagebox.showwarning(self.t('msg_error_title'), msg) + self.run_on_ui_thread(show_failed) + + threading.Thread(target=verify, daemon=True).start() + + def verify_debug_mode_password(self, password): + try: + payload = json.dumps({"password": password}).encode('utf-8') + req = Request( + self.debug_password_api_url, + data=payload, + method='POST', + headers={ + 'Content-Type': 'application/json', + 'User-Agent': 'Mozilla/5.0', + } + ) + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + if data.get('success') is True and data.get('valid') is True: + return True, data.get('message', '') + return False, data.get('message') or self.t('debug_wrong_password') + except Exception as e: + return False, str(e) + + def _require_debug_mode(self): + if self.debug_mode: + return True + messagebox.showwarning(self.t('status_debug'), self.t('debug_need_enable')) + return False def install_apps(self): """安装App — 支持单选或多选APK文件""" if not self.check_device_connection(): return + if not self.vin and not self.debug_mode: + messagebox.showwarning(self.t('msg_warn_title'), self.t('warn_no_vin')) + return file_paths = filedialog.askopenfilenames( - title="选择APK文件", - filetypes=[("APK文件", "*.apk"), ("所有文件", "*.*")] + title=self.t('dialog_select_apk'), + filetypes=[(self.t('file_apk'), "*.apk"), (self.t('file_all'), "*.*")] ) if not file_paths: return count = len(file_paths) - result = messagebox.askyesno("确认安装", f"已选择 {count} 个APK文件\n\n是否开始安装?") + result = messagebox.askyesno( + self.t('msg_confirm_install_title'), + self.tf('msg_confirm_install_many', count=count) + ) if not result: return def install(): + if not self.check_authorization(self.vin): + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_auth_failed_title'), + self.t('msg_device_unauthorized') + ) + return + self.show_progress(True, is_push=True) - self.log(f"开始安装 {count} 个APK...", "INFO") + self.log(self.tf('log_install_start', count=count), "INFO") success_count = 0 try: self.run_adb_command('adb -d shell setprop vecentek.model 1') for i, file_path in enumerate(file_paths, 1): - apk_name = Path(file_path).stem - self.update_progress(i, count, f"安装中 ({apk_name})", is_push=True) + apk_name = Path(file_path).name + self.update_progress(i, count, self.tf('progress_installing_name', name=apk_name), is_push=True) success, _ = self.run_adb_command(f'adb -d install -r "{file_path}"') if success: - self.log(f"✓ {apk_name}.apk", "SUCCESS") + self.log(self.tf('log_install_success_item', name=apk_name), "SUCCESS") success_count += 1 else: - self.log(f"✗ {apk_name}.apk", "ERROR") + self.log(self.tf('log_install_failed_item', name=apk_name), "ERROR") - self.update_progress(count, count, "安装完成", is_push=True) + self.update_progress(count, count, self.t('progress_done'), is_push=True) if success_count == count: - self.log(f"安装完成:全部 {count} 个成功", "SUCCESS") - self.run_on_ui_thread(messagebox.showinfo, "安装完成", f"成功安装 {count} 个APK!") + self.log(self.tf('log_install_done_all', count=count), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t('info_install_done'), self.tf('msg_install_success_many', count=count)) elif success_count > 0: - self.log(f"安装完成:{success_count}/{count} 成功", "WARNING") - self.run_on_ui_thread(messagebox.showwarning, "部分成功", f"成功: {success_count}\n失败: {count - success_count}") + self.log(self.tf('log_install_done_partial', success=success_count, total=count), "WARNING") + self.run_on_ui_thread(messagebox.showwarning, self.t('info_install_done'), self.tf('msg_install_partial', success=success_count, failed=count - success_count)) else: - self.log("安装失败", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "安装失败", "所有APK安装失败!") + self.log(self.t('log_install_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('log_install_failed'), self.t('msg_install_all_failed')) except Exception as e: - self.log(f"安装过程异常: {str(e)}", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "安装失败", f"安装过程异常:{str(e)}") + self.log(self.tf('log_install_exception', error=str(e)), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('log_install_failed'), self.tf('msg_install_exception', error=str(e))) finally: self.run_adb_command('adb -d shell setprop vecentek.model 0') self.show_progress(False, is_push=True) @@ -1661,30 +2000,34 @@ class ADKAPKGUI: threading.Thread(target=install, daemon=True).start() def _debug_test_extract(self, event=None): - """Debug-only package extraction test.""" - if not getattr(self, 'debug_mode', False): - messagebox.showwarning("Debug mode", "Press Ctrl+Shift+D to enable debug mode first") + self.debug_test_package_extract() + + def debug_test_package_extract(self): + """Debug-only package extraction test using package-key.""" + if not self._require_debug_mode(): return - pwd = simpledialog.askstring("Test extraction", "Enter package.bin password:", show='*', parent=self.root) - if not pwd: + if not self.vin: + vin = simpledialog.askstring(self.t('status_debug'), 'VIN:', parent=self.root) + if vin: + self.vin = vin.strip().upper() + if not self.vin: + messagebox.showwarning(self.t('status_debug'), self.t('debug_need_vin')) return def do_extract(): old_password = self.extract_password - self.extract_password = pwd try: + self.log(self.t('info_extracting'), "INFO") + self.extract_password = None + if not self.fetch_package_password(): + self.log(self.t('log_package_key_failed'), "ERROR") + return self.show_progress(True, is_push=False) if self.extract_package_silent(): - self.log("Test extraction succeeded", "SUCCESS") - self.run_on_ui_thread( - messagebox.showinfo, - "Test extraction succeeded", - f"Resources extracted to:\n{self.temp_dir}" - ) + self.log(self.t('log_package_extract_success'), "SUCCESS") else: - self.log("Test extraction failed", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "Test extraction failed", "Check the 7za output in logs") + self.log(self.t('log_package_extract_failed'), "ERROR") finally: self.extract_password = old_password self.show_progress(False, is_push=False) diff --git a/Q07/app.ico b/Q07/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..1b655d03a8ea195593f102f6f4f420249741aea0 GIT binary patch literal 154730 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

QkfR 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 bK~w_(g1p$vcp*lG00000NkvXXu0mjf{)7-T literal 0 HcmV?d00001 diff --git a/Q07/pack.bat b/Q07/pack.bat deleted file mode 100644 index 819bae4..0000000 --- a/Q07/pack.bat +++ /dev/null @@ -1,95 +0,0 @@ -@echo off -chcp 65001 >nul -cd /d "%~dp0" -set "ROOT=%~dp0.." -set "TOOLS=%ROOT%\tools" -set NAME=启源Q07刷入工具 -title %NAME% - Build - -echo ============================================================ -echo %NAME% - Cython Build -echo ============================================================ -echo. - -where python >nul 2>&1 -if errorlevel 1 ( - echo [ERROR] Python not found - pause - exit /b -) -for /f "delims=" %%i in ('where python') do set PY=%%i -echo Python: %PY% - -echo [1/6] Installing deps... -%PY% -m pip install pyinstaller cython pyzipper -q -if errorlevel 1 ( - %PY% -m pip install pyinstaller cython pyzipper -q -i https://pypi.tuna.tsinghua.edu.cn/simple -) - -echo [2/6] Clean... -if exist "dist_cy" rmdir /s /q dist_cy 2>nul -if exist "build" rmdir /s /q build 2>nul -if exist "dist" rmdir /s /q dist 2>nul - -echo [3/6] Cython compile... -mkdir dist_cy 2>nul -copy app.py dist_cy\_core.py >nul - -%PY% -c "open('dist_cy/setup_cython.py','w').write('from setuptools import setup\nfrom Cython.Build import cythonize\nsetup(ext_modules=cythonize(\"_core.py\", compiler_directives={\"language_level\":\"3\"}))\n')" - -cd dist_cy -%PY% setup_cython.py build_ext --inplace -if errorlevel 1 ( - cd .. - echo [WARN] Cython failed, fallback - goto :NORMAL -) - -for %%f in (_core*.pyd) do set PYD=%%f -if "%PYD%"=="" ( - cd .. - echo [WARN] No pyd, fallback - goto :NORMAL -) -echo PYD: %PYD% -copy "%PYD%" _core.pyd >nul - -%PY% -c "open('launcher.py','w').write('# -*- coding: utf-8 -*-\nfrom _core import main\nmain()\n')" - -echo [4/6] Copy resources... -copy "%TOOLS%\adb.exe" . >nul -copy "%TOOLS%\AdbWinApi.dll" . >nul -copy "%TOOLS%\AdbWinUsbApi.dll" . >nul -copy "%TOOLS%\7za.exe" . >nul -if exist "%ROOT%\app.ico" copy "%ROOT%\app.ico" . >nul - -echo [5/6] PyInstaller... -%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ROOT%\app.ico" --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --collect-all tkinter --uac-admin launcher.py -if errorlevel 1 ( - cd .. - echo [ERROR] PyInstaller failed - pause - exit /b -) - -echo [6/6] Cleanup... -del /q _core.py _core.c _core.pyd %PYD% launcher.py setup_cython.py 2>nul -rmdir /s /q build 2>nul -cd .. -goto :DONE - -:NORMAL -echo [INFO] Normal PyInstaller... -%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ROOT%\app.ico" --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --collect-all tkinter --uac-admin app.py - -:DONE -echo. -echo Done. -if exist "dist_cy\dist\%NAME%.exe" ( - echo Output: dist_cy\dist\%NAME%.exe -) else if exist "dist\%NAME%.exe" ( - echo Output: dist\%NAME%.exe -) else ( - echo Check dist folder -) -pause diff --git a/Q07/pack_q07.bat b/Q07/pack_q07.bat index f0feb85..40d7794 100644 --- a/Q07/pack_q07.bat +++ b/Q07/pack_q07.bat @@ -3,8 +3,9 @@ chcp 65001 >nul cd /d "%~dp0" set "ROOT=%~dp0.." set "TOOLS=%ROOT%\tools" -set NAME=启源Q07刷入工具 -set SRC=app.py +set "ICON=%~dp0app.ico" +set NAME=Qiyuan_Q07-multi-lan-installer +set SRC=Qiyuan_Q07-multi-lan-installer.py title %NAME% - Build echo ============================================================ @@ -27,14 +28,42 @@ if errorlevel 1 ( %PY% -m pip install pyinstaller cython pyzipper -q -i https://pypi.tuna.tsinghua.edu.cn/simple ) -echo [2/6] Clean... +echo [2/7] Clean... if exist "dist_cy" rmdir /s /q dist_cy 2>nul if exist "build" rmdir /s /q build 2>nul if exist "dist" rmdir /s /q dist 2>nul -echo [3/6] Cython compile... +echo [3/7] Checking resources... +if not exist "%ICON%" ( + echo [ERROR] app.ico not found in Q07 folder: %ICON% + pause + exit /b 1 +) +if not exist "%TOOLS%\adb.exe" ( + echo [ERROR] Missing ADB file: %TOOLS%\adb.exe + pause + exit /b 1 +) +if not exist "%TOOLS%\AdbWinApi.dll" ( + echo [ERROR] Missing ADB file: %TOOLS%\AdbWinApi.dll + pause + exit /b 1 +) +if not exist "%TOOLS%\AdbWinUsbApi.dll" ( + echo [ERROR] Missing ADB file: %TOOLS%\AdbWinUsbApi.dll + pause + exit /b 1 +) +if not exist "%TOOLS%\7za.exe" ( + echo [ERROR] Missing 7za file: %TOOLS%\7za.exe + pause + exit /b 1 +) + +echo [4/7] Cython compile... mkdir dist_cy 2>nul copy %SRC% dist_cy\_core.py >nul +set "PYD=" %PY% -c "open('dist_cy/setup_cython.py','w').write('from setuptools import setup\nfrom Cython.Build import cythonize\nsetup(ext_modules=cythonize(\"_core.py\", compiler_directives={\"language_level\":\"3\"}))\n')" @@ -42,54 +71,50 @@ cd dist_cy %PY% setup_cython.py build_ext --inplace if errorlevel 1 ( cd .. - echo [WARN] Cython failed, fallback - goto :NORMAL + echo [ERROR] Cython build failed. Install Microsoft C++ Build Tools and retry. + pause + exit /b 1 ) for %%f in (_core*.pyd) do set PYD=%%f if "%PYD%"=="" ( cd .. - echo [WARN] No pyd, fallback - goto :NORMAL + echo [ERROR] Cython build did not generate _core*.pyd. Stop. + pause + exit /b 1 ) echo PYD: %PYD% copy "%PYD%" _core.pyd >nul %PY% -c "open('launcher.py','w').write('# -*- coding: utf-8 -*-\nfrom _core import main\nmain()\n')" -echo [4/6] Copy resources... +echo [5/7] Copy resources... copy "%TOOLS%\adb.exe" . >nul copy "%TOOLS%\AdbWinApi.dll" . >nul copy "%TOOLS%\AdbWinUsbApi.dll" . >nul copy "%TOOLS%\7za.exe" . >nul -if exist "%ROOT%\app.ico" copy "%ROOT%\app.ico" . >nul +copy "%ICON%" . >nul -echo [5/6] PyInstaller... -%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ROOT%\app.ico" --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin launcher.py +echo [6/7] PyInstaller... +%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ICON%" --add-data "%ICON%;." --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin launcher.py if errorlevel 1 ( cd .. echo [ERROR] PyInstaller failed pause - exit /b + exit /b 1 ) -echo [6/6] Cleanup... +echo [7/7] Cleanup... del /q _core.py _core.c _core.pyd %PYD% launcher.py setup_cython.py 2>nul rmdir /s /q build 2>nul cd .. goto :DONE -:NORMAL -echo [INFO] Normal PyInstaller... -%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ROOT%\app.ico" --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin %SRC% - :DONE echo. echo Done. if exist "dist_cy\dist\%NAME%.exe" ( echo Output: dist_cy\dist\%NAME%.exe -) else if exist "dist\%NAME%.exe" ( - echo Output: dist\%NAME%.exe ) else ( echo Check dist folder ) diff --git a/README.md b/README.md index f703d7f..70050f8 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,24 @@ -# language_installer - -长安语言刷入工具套件,适用于启源Q07、深蓝S05、X5plus、长安逸动、UNI-Z、Mazda-EZ60 等 Android 车机多语言 APK 刷入/推送场景。 - -## 常用入口 - -| 文件 | 用途 | 打包脚本 | -|------|------|----------| -| `Q07/app.py` | 启源Q07 | `Q07/pack_q07.bat` | -| `S05/S05.py` | 深蓝S05原版 | `S05/pack_s05.bat` | -| `S05/S05_fixed.py` | 深蓝S05修复版 | `S05/pack_s05_fixed.bat` | +# language_installer + +长安语言刷入工具套件,适用于启源Q07、深蓝S05、X5plus、长安逸动、UNI-Z、Mazda-EZ60 等 Android 车机多语言 APK 刷入/推送场景。 + +## 常用入口 + +| 文件 | 用途 | 打包脚本 | +|------|------|----------| +| `Q07/app.py` | 启源Q07 | `Q07/pack_q07.bat` | +| `S05/S05.py` | 深蓝S05原版 | `S05/pack_s05.bat` | +| `S05/S05_fixed.py` | 深蓝S05修复版 | `S05/pack_s05_fixed.bat` | | `X5plus/X5plusTool.py` | X5plus | `X5plus/pack_x5plus.bat` | -| `Yidong/app-install.py` | 长安逸动通用 | `Yidong/pack_common.bat` | +| `CS55-Q05/CS55-Q05_Installer.py` | CS55Plus/Q05 通用 | `CS55-Q05/pack_cs55_q05.bat` | +| `CS75Pro/CS75Pro_Installer.py` | CS75Pro | `CS75Pro/pack_cs75pro.bat` | | `Yidong/app-yidong.py` | 长安逸动 | `Yidong/pack_yidong.bat` | -| `UNIZ/UNIZ.py` | UNI-Z 文件推送 | `UNIZ/pack_uniz.bat` | -| `Mazda-EZ60/Mazda-EZ60.py` | Mazda-EZ60 OS 1.2 | `Mazda-EZ60/pack_mazda_ez60.bat` | -| `A07/Qiyuan_A07_Multi-lan-installer.py` | 启源A07 | `A07/pack_a07.bat` | -| `Q05-Lidar/Q05-Lidar_Installer.py` | Q05_Lidar | `Q05-Lidar/pack_q05_lidar.bat` | - -公共工具如 `adb.exe`、`fastboot.exe`、`7za.exe` 及相关 DLL 统一放在根目录 `tools/` 管理;`app.ico`、`package.bin` 保留在仓库根目录。各车型脚本会自动回退查找这些资源。 - -详细维护说明见 `AGENTS.md` / `CLAUDE.md`。 +| `UNIZ/UNIZ.py` | UNI-Z 文件推送 | `UNIZ/pack_uniz.bat` | +| `Mazda-EZ60/Mazda-EZ60_1.2.py` | Mazda-EZ60 OS 1.2 | `Mazda-EZ60/pack_mazda_ez60_1.2.bat` | +| `Mazda-EZ60/Mazda_EZ60-Language-Install_v1.0.py` | Mazda-EZ60 OS 1.0 | `Mazda-EZ60/pack_mazda_ez60_1.0.bat` | +| `A07/Qiyuan_A07_Multi-lan-installer.py` | 启源A07 | `A07/pack_a07.bat` | +| `Q05-Lidar/Q05-Lidar_Installer.py` | Q05_Lidar | `Q05-Lidar/pack_q05_lidar.bat` | + +公共工具如 `adb.exe`、`fastboot.exe`、`7za.exe` 及相关 DLL 统一放在根目录 `tools/` 管理;`app.ico`、`package.bin` 保留在仓库根目录。各车型脚本会自动回退查找这些资源。 + +详细维护说明见 `AGENTS.md` / `CLAUDE.md`。 diff --git a/S05/S05_fixed.py b/S05/Deepal_S05.py similarity index 53% rename from S05/S05_fixed.py rename to S05/Deepal_S05.py index 19f69a1..9ce1290 100644 --- a/S05/S05_fixed.py +++ b/S05/Deepal_S05.py @@ -7,6 +7,7 @@ import subprocess import json import re import threading +import atexit import tkinter as tk from tkinter import ttk, scrolledtext, filedialog, messagebox, simpledialog from pathlib import Path @@ -23,6 +24,17 @@ import shutil import time +def set_windows_app_id(): + if sys.platform != 'win32': + return + try: + import ctypes + app_id = 'DeepalS05.LanguageInstaller.1.0' + ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(app_id) + except Exception: + pass + + def get_app_dir(): return Path(sys.executable).resolve().parent if getattr(sys, 'frozen', False) else Path(__file__).resolve().parent @@ -59,13 +71,16 @@ def find_tool(file_name, fallback=None): path = find_resource(file_name) if path.exists(): return str(path) - return fallback or str(path) + return fallback or str(path) class ADKAPKGUI: def __init__(self): + set_windows_app_id() self.root = tk.Tk() - self.root.title("长安语言安装工具") + self.root.title("Deepal S05") self.root.geometry("650x640") self.root.resizable(True, True) + self.set_window_icon() + self.root.after(200, self.set_window_icon) # 设置颜色主题 self.colors_dark = { @@ -124,17 +139,160 @@ class ADKAPKGUI: 'auth_yes': '已授权', 'auth_no': '未授权', 'btn_refresh': '🔄 检查', - 'hint_factory': '🔧 工厂模式:拨号 *#*#888 ,密码:369875', + 'hint_factory': '🔧 断开车机网络,拨号获取到的密码进入工厂模式。', 'theme_dark': '🌙 暗色', 'theme_light': '☀️ 亮色', 'lang_zh': '中', - 'lang_en': 'EN', + 'lang_en': 'English', 'switch_lang': '语言 / Language', 'switch_theme': '切换主题', - 'about_company': '宜宾科宜科技有限公司 - 出口改装一站式服务', + 'pwd_query_label': '工程密码查询:', + 'vin_placeholder': '请输入VIN', + 'btn_query_pwd': '查询密码', + 'pwd_empty': '', + 'pwd_success': '密码: *#{password}#*', + 'pwd_failed': '失败: {message}', + 'pwd_request_failed': '请求失败', + 'hint_lines': [ + '1. 安装语言过程中请保持车辆和电脑电量充足,不可中途停止。', + '2. 获取权限以后,车辆自动重启以后再进入语言刷入。', + '3. 部分语言需要重启后生效,可以一切工作完成以后再重启。', + ], + 'msg_warn_title': '警告', + 'msg_error_title': '错误', + 'msg_success_title': '成功', + 'msg_hint_title': '提示', + 'msg_device_not_connected_title': '设备未连接', + 'msg_device_not_connected': '请先连接设备并点击「检查」按钮刷新状态!', + 'msg_need_vin': '请先刷新设备状态并获取VIN码', + 'msg_auth_failed_title': '授权失败', + 'msg_device_unauthorized': '设备未授权', + 'msg_data_prepare_failed': '资源准备失败!', + 'msg_resource_dir_missing': '资源目录未找到', + 'msg_flash_warning_title': '⚠️ 重要提示', + 'msg_flash_warning': '刷入过程中请勿:\n ● 重启车机\n ● 退出本程序\n ● 关闭电脑\n\n否则可能导致车机系统损坏!', + 'msg_no_apks_in_folder': '所选文件夹中没有APK文件!', + 'msg_install_confirm_title': '确认安装', + 'msg_install_confirm_folder': '找到 {count} 个APK文件\n\n是否开始批量安装?', + 'msg_install_confirm_many': '已选择 {count} 个APK文件\n\n是否开始安装?', + 'msg_install_done_title': '安装完成', + 'msg_install_done_all': '成功安装 {count} 个APK!', + 'msg_install_partial_title': '部分成功', + 'msg_install_partial': '成功: {success}\n失败: {failed}', + 'msg_install_failed_title': '安装失败', + 'msg_install_failed_all': '所有APK安装失败!', + 'msg_install_exception': '安装过程异常', + 'file_select_folder_title': '选择包含APK文件的文件夹', + 'file_select_apk_title': '选择APK文件', + 'filetype_apk': 'APK文件', + 'filetype_all': '所有文件', + 'quick_lang_title': '快捷语言设置', + 'quick_lang_header': '选择目标语言', + 'quick_lang_hint': '点击按钮即可将系统语言切换为对应语言,重启后生效', + 'quick_lang_system': '⚙️ 打开系统语言设置(手动选择)', + 'quick_lang_success_title': '设置成功', + 'quick_lang_success': '系统语言已设置为 {language}\n\n⚠️ 请重启设备使其生效。', + 'quick_lang_failed_title': '设置失败', + 'quick_lang_failed': '语言设置失败!', + 'quick_lang_names': ['🇨🇳 中文', '英 English', '俄 Русский', '法 Français', '西 Español', '葡 Português', '意 Italiano', '阿 العربية'], + 'msg_reboot_title': '确认重启', + 'msg_reboot_confirm': '确定要重启设备吗?', + 'msg_disable_ota_title': '确认禁用升级', + 'msg_disable_ota_confirm': '⚠️ 警告:禁用系统升级后,将无法接收系统更新!\n\n是否确定要禁用系统升级应用?', + 'msg_disable_ota_success': '系统升级已成功禁用!', + 'msg_disable_ota_failed': '禁用失败', + 'debug_title': '调试模式', + 'debug_prompt': '请输入调试密码:', + 'debug_password_verifying': '正在校验调试模式密码...', + 'debug_verify_failed': '调试模式密码校验失败: {message}', + 'debug_status': '🔧 调试模式', + 'msg_debug_wrong_password': '密码错误', + 'debug_need_enable': '请先按 Ctrl+Shift+D 开启调试模式', + 'debug_extract_title': '测试解压', + 'debug_extract_prompt': '请输入 package.bin 解压密码:', + 'debug_extract_success_title': '测试解压成功', + 'debug_extract_success': '资源已解压到:\n{path}', + 'debug_extract_failed_title': '测试解压失败', + 'debug_extract_failed': '请查看日志中的 7za 输出', + 'progress_loading': '资源加载中', + 'progress_loaded': '资源加载完成', + 'progress_flashing': '正在刷入', + 'progress_flash_done': '刷入完成', + 'progress_aborted': '已终止', + 'progress_installing': '安装中', + 'progress_installing_name': '安装中 ({name})', + 'progress_done': '完成', + 'progress_install_done': '安装完成', + 'log_lang_changed': '语言已切换为中文', + 'log_cleared': '日志已清空', + 'log_device_connected': '设备已连接', + 'log_device_disconnected': '设备未连接', + 'log_vin': 'VIN: {vin}', + 'log_vin_unavailable': '无法获取VIN', + 'log_refresh_failed': '刷新设备状态失败', + 'log_debug_skip_auth': '调试模式: 跳过授权验证', + 'log_auth_checking': '正在验证授权...', + 'log_auth_success': '授权验证通过', + 'log_auth_failed': '授权验证失败', + 'log_vehicle_name': '车辆名称: {vehicle}', + 'log_need_adb': '请先连接adb!', + 'log_data_prepare_failed': '资源准备失败', + 'log_package_missing': '未找到资源包文件', + 'log_adb_missing': '未找到adb命令,请将ADB文件放入本目录', + 'log_cache_invalid': '资源缓存无效', + 'log_resource_missing': '资源目录异常', + 'log_resource_invalid': '资源校验失败', + 'log_resource_ready': '资源准备完成', + 'log_resource_failed': '资源准备失败,请检查网络连接后重试', + 'log_no_language_files': '未找到语言包文件', + 'log_permission_root_failed': '获取 root 失败', + 'log_permission_failed': '获取权限失败', + 'log_permission_reboot_required': '首次获取权限,需要重启设备...', + 'log_permission_rebooting': '设备即将重启,重启后权限生效', + 'log_permission_reboot_failed': '重启失败', + 'log_permission_success': '已获取权限', + 'log_flash_readonly': '请先点击「获取权限」获取权限后再试', + 'log_flash_done': '语言包刷入完成,共 {total} 个', + 'log_flash_effective': '语言包已刷入完成,重启设备后生效,您可在适当时候重启', + 'log_flash_partial': '部分刷入成功({success}/{total})', + 'log_batch_install_start': '开始批量安装 {count} 个APK...', + 'log_install_many_start': '开始安装 {count} 个APK...', + 'log_install_done_all': '安装完成:全部 {count} 个成功', + 'log_install_done_partial': '安装完成:{success}/{count} 成功', + 'log_install_success': '安装成功', + 'log_install_failed': '安装失败', + 'log_install_exception': '安装过程异常', + 'log_quick_lang_setting': '正在设置系统语言为: {language} ({locale})', + 'log_quick_lang_success': '语言已设置为 {language}', + 'log_quick_lang_failed': '语言设置失败', + 'log_rebooting': '设备正在重启...', + 'log_disable_ota_cancelled': '已取消禁用升级操作', + 'log_disable_ota_success': '系统升级已禁用', + 'log_disable_ota_failed': '禁用系统升级失败', + 'log_pwd_success': '密码查询成功 VIN={vin}', + 'log_pwd_failed': '密码查询失败', + 'log_pwd_request_failed': '密码查询请求失败', + 'log_debug_off': '调试模式已关闭', + 'log_debug_on': '调试模式已开启 - 跳过授权和设备校验,显示详细ADB日志', + 'err_extract_wrong_password': '资源准备失败', + 'err_extract_data': '资源准备失败', + 'err_extract_headers': '资源准备失败', + 'err_extract_detail': '资源准备失败', + 'err_extract_default': '资源准备失败,请检查解压密码是否正确', + 'msg_enter_vin': '请输入VIN码', + 'msg_start_failed': '程序启动失败', + 'msg_python_version_error': '错误:需要Python 3.6或更高版本', + 'log_flash_start_notice': '开始刷入语言包,请勿断电或重启电脑和车机。', + 'log_resource_prepare_start': '资源准备中', + 'log_extract_password_missing': '资源准备失败', + 'log_7za_missing': '资源准备失败', + 'log_resource_dir_missing': '资源目录异常', + 'log_debug_extract_success': '测试解压成功', + 'log_debug_extract_failed': '测试解压失败', + 'unknown_error': '未知错误', }, 'en': { - 'title': 'Shenlan S05 Multi-Language', + 'title': 'Deepal S05 Multi-Language', 'btn_root': '🔓 Get Root', 'btn_push': '📦 Flash Lang Pkg', 'btn_install': '📱 Install App', @@ -157,17 +315,162 @@ class ADKAPKGUI: 'auth_yes': 'Authorized', 'auth_no': 'Unauthorized', 'btn_refresh': '🔄 Check', - 'hint_factory': '🔧 Factory Mode: dial *#*#888, password: 369875', + 'hint_factory': '🔧 Disconnect the head unit network, then enter Factory Mode with the password from dialing.', 'theme_dark': '🌙 Dark', 'theme_light': '☀️ Light', - 'lang_zh': '中', - 'lang_en': 'EN', + 'lang_zh': '中文', + 'lang_en': 'English', 'switch_lang': 'Language', 'switch_theme': 'Theme', - 'about_company': 'Yibin Keyi Technology - Export Modification Service', + 'pwd_query_label': 'Factory password:', + 'vin_placeholder': 'Enter VIN', + 'btn_query_pwd': 'Query Password', + 'pwd_empty': '', + 'pwd_success': 'Password: *#{password}#*', + 'pwd_failed': 'Failed: {message}', + 'pwd_request_failed': 'Request failed', + 'hint_lines': [ + '1. Keep the vehicle and computer powered during language installation.', + '2. After getting permission, wait for the vehicle to reboot before flashing.', + '3. Some languages apply after reboot; reboot after all work is complete.', + ], + 'msg_warn_title': 'Warning', + 'msg_error_title': 'Error', + 'msg_success_title': 'Success', + 'msg_hint_title': 'Hint', + 'msg_device_not_connected_title': 'Device not connected', + 'msg_device_not_connected': 'Connect the device and click "Check" first.', + 'msg_need_vin': 'Refresh device status and get VIN first', + 'msg_auth_failed_title': 'Authorization failed', + 'msg_device_unauthorized': 'Device is not authorized', + 'msg_data_prepare_failed': 'Resource preparation failed!', + 'msg_resource_dir_missing': 'Resource directory not found', + 'msg_flash_warning_title': 'Important warning', + 'msg_flash_warning': 'During flashing, do not:\n - reboot the head unit\n - close this program\n - shut down the computer\n\nOtherwise the system may be damaged.', + 'msg_no_apks_in_folder': 'No APK files found in the selected folder.', + 'msg_install_confirm_title': 'Confirm install', + 'msg_install_confirm_folder': 'Found {count} APK file(s).\n\nStart batch install?', + 'msg_install_confirm_many': 'Selected {count} APK file(s).\n\nStart installing?', + 'msg_install_done_title': 'Install complete', + 'msg_install_done_all': 'Successfully installed {count} APK file(s).', + 'msg_install_partial_title': 'Partially complete', + 'msg_install_partial': 'Succeeded: {success}\nFailed: {failed}', + 'msg_install_failed_title': 'Install failed', + 'msg_install_failed_all': 'All APK installs failed.', + 'msg_install_exception': 'Install process exception', + 'file_select_folder_title': 'Select folder containing APK files', + 'file_select_apk_title': 'Select APK files', + 'filetype_apk': 'APK files', + 'filetype_all': 'All files', + 'quick_lang_title': 'Quick Language', + 'quick_lang_header': 'Select Target Language', + 'quick_lang_hint': 'Tap a language to switch system locale. Reboot to apply.', + 'quick_lang_system': 'Open system language settings', + 'quick_lang_success_title': 'Set Successfully', + 'quick_lang_success': 'System language has been set to {language}.\n\nReboot the device to apply.', + 'quick_lang_failed_title': 'Set Failed', + 'quick_lang_failed': 'Language setting failed.', + 'quick_lang_names': ['🇨🇳 Chinese', 'English', 'Russian', 'French', 'Spanish', 'Portuguese', 'Italian', 'Arabic'], + 'msg_reboot_title': 'Confirm reboot', + 'msg_reboot_confirm': 'Reboot the device now?', + 'msg_disable_ota_title': 'Confirm Disable OTA', + 'msg_disable_ota_confirm': 'Warning: after disabling OTA, the system will not receive updates.\n\nDisable the OTA app now?', + 'msg_disable_ota_success': 'System OTA has been disabled.', + 'msg_disable_ota_failed': 'Disable failed', + 'debug_title': 'Debug Mode', + 'debug_prompt': 'Enter debug password:', + 'debug_password_verifying': 'Verifying debug mode password...', + 'debug_verify_failed': 'Debug mode password verification failed: {message}', + 'debug_status': 'Debug Mode', + 'msg_debug_wrong_password': 'Wrong password', + 'debug_need_enable': 'Press Ctrl+Shift+D to enable debug mode first', + 'debug_extract_title': 'Extract Test', + 'debug_extract_prompt': 'Enter package.bin extraction password:', + 'debug_extract_success_title': 'Extract Test Succeeded', + 'debug_extract_success': 'Resources extracted to:\n{path}', + 'debug_extract_failed_title': 'Extract Test Failed', + 'debug_extract_failed': 'Check the log for 7za output', + 'progress_loading': 'Preparing resources', + 'progress_loaded': 'Resources ready', + 'progress_flashing': 'Flashing', + 'progress_flash_done': 'Flash complete', + 'progress_aborted': 'Aborted', + 'progress_installing': 'Installing', + 'progress_installing_name': 'Installing ({name})', + 'progress_done': 'Done', + 'progress_install_done': 'Install complete', + 'log_lang_changed': 'Language switched to English', + 'log_cleared': 'Log cleared', + 'log_device_connected': 'Device connected', + 'log_device_disconnected': 'Device disconnected', + 'log_vin': 'VIN: {vin}', + 'log_vin_unavailable': 'Unable to read VIN', + 'log_refresh_failed': 'Failed to refresh device status', + 'log_debug_skip_auth': 'Debug mode: skipping authorization', + 'log_auth_checking': 'Checking authorization...', + 'log_auth_success': 'Authorization passed', + 'log_auth_failed': 'Authorization failed', + 'log_vehicle_name': 'Vehicle name: {vehicle}', + 'log_need_adb': 'Connect ADB first.', + 'log_data_prepare_failed': 'Resource preparation failed', + 'log_package_missing': 'Resource file not found', + 'log_adb_missing': 'adb not found. Place ADB files in this folder.', + 'log_cache_invalid': 'Resource cache is invalid', + 'log_resource_missing': 'Resource directory is invalid', + 'log_resource_invalid': 'Resource validation failed', + 'log_resource_ready': 'Resources ready', + 'log_resource_failed': 'Resource preparation failed. Check the network and try again.', + 'log_no_language_files': 'No language package files found', + 'log_permission_root_failed': 'Root permission failed', + 'log_permission_failed': 'Permission failed', + 'log_permission_reboot_required': 'First permission setup requires reboot...', + 'log_permission_rebooting': 'Device will reboot; permission takes effect after reboot', + 'log_permission_reboot_failed': 'Reboot failed', + 'log_permission_success': 'Permission ready', + 'log_flash_readonly': 'Get permission first, then try again', + 'log_flash_done': 'Language package flashing complete, total {total}', + 'log_flash_effective': 'Language package flashing complete. Reboot later to apply.', + 'log_flash_partial': 'Partially flashed ({success}/{total})', + 'log_batch_install_start': 'Starting batch install for {count} APK file(s)...', + 'log_install_many_start': 'Starting install for {count} APK file(s)...', + 'log_install_done_all': 'Install complete: all {count} succeeded', + 'log_install_done_partial': 'Install complete: {success}/{count} succeeded', + 'log_install_success': 'Install succeeded', + 'log_install_failed': 'Install failed', + 'log_install_exception': 'Install process exception', + 'log_quick_lang_setting': 'Setting system language to {language} ({locale})', + 'log_quick_lang_success': 'Language set to {language}', + 'log_quick_lang_failed': 'Language setting failed', + 'log_rebooting': 'Device is rebooting...', + 'log_disable_ota_cancelled': 'Disable OTA operation cancelled', + 'log_disable_ota_success': 'System OTA disabled', + 'log_disable_ota_failed': 'Disable OTA failed', + 'log_pwd_success': 'Password query succeeded VIN={vin}', + 'log_pwd_failed': 'Password query failed', + 'log_pwd_request_failed': 'Password query request failed', + 'log_debug_off': 'Debug mode disabled', + 'log_debug_on': 'Debug mode enabled - authorization/device checks skipped, detailed ADB logs shown', + 'err_extract_wrong_password': 'Resource preparation failed', + 'err_extract_data': 'Resource preparation failed', + 'err_extract_headers': 'Resource preparation failed', + 'err_extract_detail': 'Resource preparation failed', + 'err_extract_default': 'Resource preparation failed. Check the extraction password.', + 'msg_enter_vin': 'Enter VIN first', + 'msg_start_failed': 'Program startup failed', + 'msg_python_version_error': 'Error: Python 3.6 or later is required', + 'log_flash_start_notice': 'Starting language package flash. Do not power off or restart the computer or head unit.', + 'log_resource_prepare_start': 'Preparing resources', + 'log_extract_password_missing': 'Resource preparation failed', + 'log_7za_missing': 'Resource preparation failed', + 'log_resource_dir_missing': 'Resource directory is invalid', + 'log_debug_extract_success': 'Extract test succeeded', + 'log_debug_extract_failed': 'Extract test failed', + 'unknown_error': 'Unknown error', } } + self.root.title(self.t('title')) + # 从 exe/py 所在目录查找资源文件 self.base_dir = get_app_dir() self.adb = find_tool('adb.exe', 'adb') @@ -178,14 +481,18 @@ class ADKAPKGUI: self.priv_apps_dir = None self.temp_dir = None self.api_url = "https://api.changan.softwindy.cn/api/authorizations/auth-check" + self.debug_password_api_url = "https://api.changan.softwindy.cn/api/authorizations/verify-debug-mode-password" self.vin = None + self.vehicle_name = "" self.device_connected = False self._refreshing = False # 防止并发刷新 self.debug_mode = False # 调试模式 + atexit.register(self.cleanup_cache_on_exit) # 设置样式 self.setup_styles() self.setup_ui() + self.root.protocol("WM_DELETE_WINDOW", self.on_close) self.center_window() # 检查环境 @@ -225,29 +532,39 @@ class ADKAPKGUI: title_frame.pack(fill=tk.X, pady=(0, 10)) title_frame.pack_propagate(False) - # 标题 - title_label = tk.Label(title_frame, - text="🚀 深蓝S05多语言安装", - font=('Microsoft YaHei', 18, 'bold'), - fg=self.colors['accent'], - bg=self.colors['bg_dark']) - title_label.pack() + title_content_frame = tk.Frame(title_frame, bg=self.colors['bg_dark']) + title_content_frame.pack(fill=tk.X, expand=True) - subtitle_label = tk.Label(title_frame, - text="宜宾科宜科技有限公司 - 智能设备管理平台", - font=('Microsoft YaHei', 9), - fg=self.colors['text_secondary'], - bg=self.colors['bg_dark']) - subtitle_label.pack() + # 标题 + self.title_label = tk.Label(title_content_frame, + text="🚀 " + self.t('title'), + font=('Microsoft YaHei', 18, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.title_label.pack(side=tk.LEFT, expand=True, padx=(0, 10)) + + self.btn_lang_switch = tk.Button(title_content_frame, text=self.t('lang_en'), + command=self.toggle_lang, + font=('Microsoft YaHei', 9, 'bold'), + fg='white', + bg=self.colors['accent'], + activeforeground='white', + activebackground=self.colors['accent_hover'], + relief=tk.FLAT, + cursor='hand2', + width=7, + height=1) + self.btn_lang_switch.pack(side=tk.RIGHT, padx=(8, 4)) # 工程密码查询区域 pwd_query_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) pwd_query_frame.pack(fill=tk.X, pady=(0, 5), padx=5) - tk.Label(pwd_query_frame, text="工程密码查询:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT, padx=(10, 5), pady=5) + self.pwd_query_label = tk.Label(pwd_query_frame, text=self.t('pwd_query_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.pwd_query_label.pack(side=tk.LEFT, padx=(10, 5), pady=5) self.vin_input = tk.Entry(pwd_query_frame, font=('Consolas', 9), @@ -256,12 +573,12 @@ class ADKAPKGUI: insertbackground='white', relief=tk.FLAT, width=20) - self.vin_input.insert(0, "请输入VIN") + self.vin_input.insert(0, self.t('vin_placeholder')) self.vin_input.bind("", self._on_vin_input_focus_in) self.vin_input.bind("", self._on_vin_input_focus_out) self.vin_input.pack(side=tk.LEFT, padx=5, pady=5) - self.btn_query_pwd = tk.Button(pwd_query_frame, text="查询密码", + self.btn_query_pwd = tk.Button(pwd_query_frame, text=self.t('btn_query_pwd'), command=self.query_password_by_vin, font=('Microsoft YaHei', 8), fg='white', @@ -270,7 +587,7 @@ class ADKAPKGUI: cursor='hand2') self.btn_query_pwd.pack(side=tk.LEFT, padx=5, pady=5) - self.pwd_result_label = tk.Label(pwd_query_frame, text="", + self.pwd_result_label = tk.Label(pwd_query_frame, text=self.t('pwd_empty'), font=('Microsoft YaHei', 9, 'bold'), fg=self.colors['success'], bg=self.colors['bg_light']) @@ -279,10 +596,11 @@ class ADKAPKGUI: # 工厂模式提示 factory_hint_frame = tk.Frame(main_frame, bg=self.colors['bg_dark']) factory_hint_frame.pack(fill=tk.X, pady=(0, 3)) - tk.Label(factory_hint_frame, text="🔧 关闭车辆WI-FI和4G网络,拨号获取的密码进入工程模式", - font=('Microsoft YaHei', 8), - fg=self.colors['warning'], - bg=self.colors['bg_dark']).pack(side=tk.LEFT, padx=2) + self.hint_label = tk.Label(factory_hint_frame, text=self.t('hint_factory'), + font=('Microsoft YaHei', 8), + fg=self.colors['warning'], + bg=self.colors['bg_dark']) + self.hint_label.pack(side=tk.LEFT, padx=2) # 按钮区域(两排,每排5个) @@ -303,25 +621,25 @@ class ADKAPKGUI: row1_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) row1_frame.pack(pady=(8, 4)) - self.btn_root = tk.Button(row1_frame, text="🔓 获取权限", + self.btn_root = tk.Button(row1_frame, text=self.t('btn_root'), command=self.get_root_permission, bg=self.colors['success'], **btn_params) self.btn_root.pack(side=tk.LEFT, padx=4) - self.btn_push = tk.Button(row1_frame, text="📦 刷入语言包", + self.btn_push = tk.Button(row1_frame, text=self.t('btn_push'), command=self.push_all_apks, bg=self.colors['accent'], **btn_params) self.btn_push.pack(side=tk.LEFT, padx=4) - self.btn_install_all = tk.Button(row1_frame, text="📱 安装App", + self.btn_install_all = tk.Button(row1_frame, text=self.t('btn_install'), command=self.install_apps, bg=self.colors['accent'], **btn_params) self.btn_install_all.pack(side=tk.LEFT, padx=4) - self.btn_language = tk.Button(row1_frame, text="🌐 语言设置", + self.btn_language = tk.Button(row1_frame, text=self.t('btn_language'), command=self.open_language_quick_set, bg=self.colors['accent'], **btn_params) @@ -331,25 +649,25 @@ class ADKAPKGUI: row2_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) row2_frame.pack(pady=(4, 8)) - self.btn_timezone = tk.Button(row2_frame, text="⏰ 时区设置", + self.btn_timezone = tk.Button(row2_frame, text=self.t('btn_timezone'), command=self.open_timezone_settings, bg=self.colors['accent'], **btn_params) self.btn_timezone.pack(side=tk.LEFT, padx=4) - self.btn_settings = tk.Button(row2_frame, text="⚙️ 安卓设置", + self.btn_settings = tk.Button(row2_frame, text=self.t('btn_settings'), command=self.open_android_settings, bg=self.colors['accent'], **btn_params) self.btn_settings.pack(side=tk.LEFT, padx=4) - self.btn_reboot = tk.Button(row2_frame, text="🔄 重启设备", + self.btn_reboot = tk.Button(row2_frame, text=self.t('btn_reboot'), command=self.reboot_device, bg=self.colors['warning'], **btn_params) self.btn_reboot.pack(side=tk.LEFT, padx=4) - self.btn_exit = tk.Button(row2_frame, text="❌ 禁用升级", + self.btn_exit = tk.Button(row2_frame, text=self.t('btn_disable_upgrade'), command=self.on_disable_upgrade, bg=self.colors['error'], **btn_params) @@ -368,26 +686,28 @@ class ADKAPKGUI: self.status_indicator.pack(side=tk.LEFT) self.status_dot = self.status_indicator.create_oval(2, 2, 8, 8, fill='#636e72') - tk.Label(status_indicator_frame, text="设备:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT, padx=(5, 3)) + self.device_label = tk.Label(status_indicator_frame, text=self.t('device_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.device_label.pack(side=tk.LEFT, padx=(5, 3)) - self.device_status_label = tk.Label(status_indicator_frame, text="未检测", + self.device_status_label = tk.Label(status_indicator_frame, text=self.t('status_detecting'), font=('Microsoft YaHei', 9, 'bold'), fg='#636e72', bg=self.colors['bg_light'], - anchor='w', width=4) + anchor='w', width=11) self.device_status_label.pack(side=tk.LEFT) # VIN信息 vin_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) - vin_frame.pack(side=tk.LEFT, padx=20, pady=5) - tk.Label(vin_frame, text="VIN码:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT) - self.vin_label = tk.Label(vin_frame, text="未获取", + vin_frame.pack(side=tk.LEFT, padx=8, pady=5) + self.vin_label_title = tk.Label(vin_frame, text=self.t('vin_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.vin_label_title.pack(side=tk.LEFT) + self.vin_label = tk.Label(vin_frame, text=self.t('vin_none'), font=('Microsoft YaHei', 9, 'bold'), fg='#636e72', bg=self.colors['bg_light'], @@ -396,47 +716,47 @@ class ADKAPKGUI: # 授权状态 auth_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) - auth_frame.pack(side=tk.LEFT, padx=20, pady=5) - tk.Label(auth_frame, text="授权:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT) - self.auth_label = tk.Label(auth_frame, text="未验证", + auth_frame.pack(side=tk.LEFT, padx=8, pady=5) + self.auth_label_title = tk.Label(auth_frame, text=self.t('auth_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.auth_label_title.pack(side=tk.LEFT) + self.auth_label = tk.Label(auth_frame, text=self.t('auth_none'), font=('Microsoft YaHei', 9, 'bold'), fg='#636e72', bg=self.colors['bg_light'], - anchor='w', width=4) + anchor='w', width=10) self.auth_label.pack(side=tk.LEFT, padx=(5, 0)) # 刷新按钮 - refresh_btn = tk.Button(status_bar_frame, text="🔄 检查", - command=self.refresh_device_status, - font=('Microsoft YaHei', 8), - fg=self.colors['accent'], - bg=self.colors['bg_light'], - relief=tk.FLAT, - cursor='hand2') - refresh_btn.pack(side=tk.RIGHT, padx=10, pady=5) + self.btn_refresh = tk.Button(status_bar_frame, text=self.t('btn_refresh'), + command=self.refresh_device_status, + font=('Microsoft YaHei', 8), + fg=self.colors['accent'], + bg=self.colors['bg_light'], + relief=tk.FLAT, + cursor='hand2', + width=8) + self.btn_refresh.pack(side=tk.RIGHT, padx=(4, 8), pady=5) # 提示信息区域(设备状态下方) tips_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) tips_frame.pack(fill=tk.X, pady=(5, 5), padx=5) - tips = [ - "1. 安装语言过程中请保持车辆和电脑的电量充足,不可中途停止。", - "2. 获取权限以后,车辆自动重启以后再进入语言刷入。", - "3. 部分语言需要重启后生效,可以一切工作完成以后再重启。", - ] - + self.tips_labels = [] + tips = self.t('hint_lines') for i, tip in enumerate(tips): tip_row = tk.Frame(tips_frame, bg=self.colors['bg_light']) tip_row.pack(fill=tk.X, padx=10, pady=(5 if i == 0 else 0, 5 if i == len(tips) - 1 else 0)) - tk.Label(tip_row, text=tip, - font=('Microsoft YaHei', 9), - fg=self.colors['warning'], - bg=self.colors['bg_light'], - wraplength=600, - justify=tk.LEFT).pack(side=tk.LEFT) + label = tk.Label(tip_row, text=tip, + font=('Microsoft YaHei', 9), + fg=self.colors['warning'], + bg=self.colors['bg_light'], + wraplength=600, + justify=tk.LEFT) + label.pack(side=tk.LEFT) + self.tips_labels.append(label) # 解压进度条框架 progress_frame = tk.Frame(main_frame, bg=self.colors['bg_dark']) @@ -468,12 +788,13 @@ class ADKAPKGUI: log_title_frame.pack(fill=tk.X) log_title_frame.pack_propagate(False) - tk.Label(log_title_frame, text="📋 运行日志", - font=('Microsoft YaHei', 10, 'bold'), - fg=self.colors['accent'], - bg=self.colors['bg_dark']).pack(side=tk.LEFT, padx=10) + self.log_title_label = tk.Label(log_title_frame, text=self.t('log_title'), + font=('Microsoft YaHei', 10, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.log_title_label.pack(side=tk.LEFT, padx=10) - self.btn_clear = tk.Button(log_title_frame, text="🗑 清空日志", + self.btn_clear = tk.Button(log_title_frame, text=self.t('btn_clear_log'), command=self.clear_log, font=('Microsoft YaHei', 8), fg=self.colors['text_secondary'], @@ -509,14 +830,14 @@ class ADKAPKGUI: bottom_status.pack(fill=tk.X, pady=(5, 0)) bottom_status.pack_propagate(False) - self.status_text = tk.Label(bottom_status, text="就绪", + self.status_text = tk.Label(bottom_status, text=self.t('status_ready'), font=('Microsoft YaHei', 8), fg=self.colors['text_secondary'], bg=self.colors['bg_light']) self.status_text.pack(side=tk.LEFT, padx=10) - # 主题和语言切换按钮 - self.btn_theme_switch = tk.Button(bottom_status, text="🌙 暗色", + # 主题切换按钮 + self.btn_theme_switch = tk.Button(bottom_status, text=self.t('theme_light'), command=self.toggle_theme, font=('Microsoft YaHei', 8), fg=self.colors['accent'], @@ -525,15 +846,6 @@ class ADKAPKGUI: cursor='hand2') self.btn_theme_switch.pack(side=tk.RIGHT, padx=5) - self.btn_lang_switch = tk.Button(bottom_status, text="EN", - command=self.toggle_lang, - font=('Microsoft YaHei', 8, 'bold'), - fg=self.colors['accent'], - bg=self.colors['bg_light'], - relief=tk.FLAT, - cursor='hand2') - self.btn_lang_switch.pack(side=tk.RIGHT, padx=5) - # 调试模式快捷键 self.root.bind('', self._toggle_debug) self.root.bind('', self._debug_test_extract) @@ -545,7 +857,8 @@ class ADKAPKGUI: """绑定按钮悬停效果""" buttons = [self.btn_root, self.btn_push, self.btn_install_all, self.btn_language, self.btn_timezone, self.btn_settings, - self.btn_reboot, self.btn_clear, self.btn_exit] + self.btn_reboot, self.btn_clear, self.btn_exit, + self.btn_lang_switch] for btn in buttons: original_bg = btn.cget('bg') @@ -570,6 +883,24 @@ class ADKAPKGUI: return '#00a884' return color + def set_window_icon(self): + """Set Tk window/taskbar icon at runtime; PyInstaller --icon only sets the exe file icon.""" + try: + icon_path = find_resource("app.ico") + if icon_path.exists(): + self.root.iconbitmap(str(icon_path)) + if sys.platform == 'win32': + import ctypes + hwnd = self.root.winfo_id() + image = ctypes.windll.user32.LoadImageW( + None, str(icon_path), 1, 0, 0, 0x00000010 + ) + if image: + ctypes.windll.user32.SendMessageW(hwnd, 0x0080, 0, image) + ctypes.windll.user32.SendMessageW(hwnd, 0x0080, 1, image) + except Exception: + pass + def center_window(self): """将窗口居中显示在屏幕上""" self.root.update_idletasks() @@ -583,7 +914,7 @@ class ADKAPKGUI: def run_on_ui_thread(self, func, *args, **kwargs): """将函数调度到主线程执行,确保线程安全""" - self.root.after(0, func, *args, **kwargs) + self.root.after(0, lambda: func(*args, **kwargs)) def _adb_cmd(self): """返回可安全用于 shell 命令字符串的 adb 路径""" @@ -593,12 +924,24 @@ class ADKAPKGUI: """获取翻译文本""" return self.T.get(self.lang, self.T['zh']).get(key, key) + def tf(self, key, **kwargs): + try: + return self.t(key).format(**kwargs) + except Exception: + return self.t(key) + + def is_placeholder_vin(self, value): + return value in ( + self.T['zh'].get('vin_placeholder'), + self.T['en'].get('vin_placeholder'), + ) + def toggle_lang(self): """切换语言""" self.lang = 'en' if self.lang == 'zh' else 'zh' self.btn_lang_switch.config(text=self.t('lang_en') if self.lang == 'zh' else self.t('lang_zh')) self._refresh_ui_texts() - self.log(f"语言已切换为 {'English' if self.lang == 'en' else '中文'}", "INFO") + self.log(self.t('log_lang_changed'), "INFO") def toggle_theme(self): """切换主题""" @@ -635,9 +978,11 @@ class ADKAPKGUI: def _refresh_ui_texts(self): """刷新所有UI文本""" t = self.t + self.root.title(t('title')) widgets = [ (getattr(self, 'title_label', None), 'title', None), - (getattr(self, 'subtitle_label', None), 'about_company', None), + (getattr(self, 'pwd_query_label', None), 'pwd_query_label', None), + (getattr(self, 'btn_query_pwd', None), 'btn_query_pwd', None), (getattr(self, 'btn_root', None), 'btn_root', None), (getattr(self, 'btn_push', None), 'btn_push', None), (getattr(self, 'btn_install_all', None), 'btn_install', None), @@ -657,15 +1002,43 @@ class ADKAPKGUI: ] for w, key, _ in widgets: if w: - w.config(text=t(key)) + text = t(key) + if key == 'title': + text = "🚀 " + text + w.config(text=text) self.btn_theme_switch.config(text=t('theme_light') if self.theme == 'dark' else t('theme_dark')) self.btn_lang_switch.config(text=t('lang_en') if self.lang == 'zh' else t('lang_zh')) - if self.vin: - self._update_device_status_impl(self.device_connected, self.vin, - getattr(self, '_last_authorized', False)) + if self.is_placeholder_vin(self.vin_input.get()): + self.vin_input.delete(0, tk.END) + self.vin_input.insert(0, t('vin_placeholder')) + for label, tip in zip(getattr(self, 'tips_labels', []), t('hint_lines')): + label.config(text=tip) + self._update_device_status_impl(self.device_connected, self.vin, + getattr(self, '_last_authorized', False)) + + def _sanitize_user_log_message(self, message): + text = str(message) + replacements = [ + (r'com\.[\w.\-]+', '相关应用'), + (r'cn\.[\w.\-]+', '相关应用'), + (r'[\w.\-]+\.apk', '文件'), + (r'package\.bin', '资源文件'), + (r'7za(?:\.exe)?', '资源工具'), + (r'adb(?:\.exe)?', '设备连接工具'), + (r'pm\s+\S+', '系统操作'), + (r'(? 5 else "" - return False, f"发现 0KB APK: {preview}{suffix}" + return False, f"0KB APK: {preview}{suffix}" return True, "" def _clear_extracted_cache(self): @@ -856,8 +1233,21 @@ class ADKAPKGUI: self.apps_dir = None self.priv_apps_dir = None + def cleanup_cache_on_exit(self): + local_appdata = os.environ.get('LOCALAPPDATA', os.path.expanduser('~\\AppData\\Local')) + cache_dir = Path(local_appdata) / ".cache" / "system" / ".android" / "apps_cache_S05" + if (not self.temp_dir or self.temp_dir != cache_dir) and cache_dir.exists(): + shutil.rmtree(cache_dir, ignore_errors=True) + self._clear_extracted_cache() + + def on_close(self): + self.cleanup_cache_on_exit() + self.root.destroy() + def _format_extract_error(self, err_msg): text = (err_msg or "").lower() + if self.debug_mode and err_msg and err_msg.strip(): + return f"Resource preparation failed: {err_msg.strip()[:1000]}" if any(marker in text for marker in ( "wrong password", "incorrect password", @@ -865,14 +1255,14 @@ class ADKAPKGUI: "data error in encrypted file", "can not open encrypted archive", )): - return "解压密码错误,请重新确认 package.bin 密码" + return self.t('err_extract_wrong_password') if "data error" in text: - return "资源包数据错误,可能是密码错误或 package.bin 损坏" + return self.t('err_extract_data') if "headers error" in text or "unexpected end" in text: - return "资源包损坏或不完整,请检查 package.bin" + return self.t('err_extract_headers') if err_msg.strip(): - return f"资源准备失败: {err_msg.strip()[:300]}" - return "资源准备失败,请检查解压密码是否正确" + return self.t('err_extract_detail') + return self.t('err_extract_default') def _decode_7z_output(self, output): """解码 7za 输出,兼容中文 Windows 控制台编码""" @@ -885,7 +1275,7 @@ class ADKAPKGUI: def _extract_with_7za_progress(self): """运行 7za 并实时解析百分比进度""" - self.update_progress(0, 100, "资源加载中...") + self.update_progress(0, 100, self.t('progress_loading')) cmd = [ self.sz, 'x', str(self.package_file), f'-p{self.extract_password}', @@ -922,12 +1312,14 @@ class ADKAPKGUI: percent = min(100, int(matches[-1])) if percent != last_percent: last_percent = percent - self.update_progress(percent, 100, "资源加载中...") + self.update_progress(percent, 100, self.t('progress_loading')) return_code = proc.wait() decoded_output = self._decode_7z_output(bytes(output)) + if self.debug_mode: + self.log("7ZA OUTPUT:\n" + decoded_output, "CMD" if return_code == 0 else "ERROR") if return_code == 0: - self.update_progress(100, 100, "资源加载完成") + self.update_progress(100, 100, self.t('progress_loaded')) return True, decoded_output return False, decoded_output @@ -948,15 +1340,19 @@ class ADKAPKGUI: def extract_package_silent(self): """静默解压语言包(带进度)""" if not self.package_file.exists(): - self.log(f"错误:未找到资源包 ({self.package_file})", "ERROR") + if self.debug_mode: + self.log(f"Package file missing: {self.package_file}", "ERROR") + self.log(self.t('log_package_missing'), "ERROR") return False if not self.extract_password: - self.log("错误:解压密码未设置", "ERROR") + self.log(self.t('log_extract_password_missing'), "ERROR") return False if not os.path.exists(self.sz): - self.log(f"错误:未找到 7za.exe ({self.sz})", "ERROR") + if self.debug_mode: + self.log(f"7za missing: {self.sz}", "ERROR") + self.log(self.t('log_7za_missing'), "ERROR") return False try: @@ -979,7 +1375,7 @@ class ADKAPKGUI: subprocess.run(f'attrib +h "{self.temp_dir.parent}"', shell=True, capture_output=True) subprocess.run(f'attrib +h "{self.temp_dir}"', shell=True, capture_output=True) - self.log(f"正在准备资源包...", "INFO") + self.log(self.t('log_resource_prepare_start'), "SUCCESS") ok, err_msg = self._extract_with_7za_progress() if not ok: @@ -1000,27 +1396,27 @@ class ADKAPKGUI: self.priv_apps_dir = priv_app_candidates[0] if not self.apps_dir and not self.priv_apps_dir: - self.log("警告:未找到对应目录", "WARNING") + self.log(self.t('log_resource_dir_missing'), "WARNING") self._clear_extracted_cache() return False - apk_count = len(list(self.apps_dir.glob("*.apk"))) if self.apps_dir else 0 - priv_count = len(list(self.priv_apps_dir.glob("*.apk"))) if self.priv_apps_dir else 0 ok, reason = self._validate_extracted_apks() if not ok: - self.log(f"解压后的资源无效: {reason}。已停止刷入,请检查解压密码或资源包。", "ERROR") + if self.debug_mode: + self.log(f"Extracted resource invalid: {reason}", "ERROR") + self.log(self.t('log_resource_invalid'), "ERROR") self._clear_extracted_cache() return False - self.log(f"资源准备完成", "SUCCESS") + self.log(self.t('log_resource_ready'), "SUCCESS") return True except Exception as e: if getattr(self, 'debug_mode', False): - self.log(f"资源准备失败: {str(e)}", "ERROR") + self.log(f"Resource preparation failed: {str(e)}", "ERROR") import traceback self.log(traceback.format_exc(), "ERROR") else: - self.log("资源准备失败,请检查网络连接后重试", "ERROR") + self.log(self.t('log_resource_failed'), "ERROR") self._clear_extracted_cache() return False @@ -1031,13 +1427,13 @@ class ADKAPKGUI: if result.returncode == 0: self.refresh_device_status() if not self.package_file.exists(): - self.log("未找到资源包文件", "WARNING") + self.log(self.t('log_package_missing'), "WARNING") else: self._try_reuse_extracted() else: - self.log("未找到adb命令,请将ADB文件放入本目录", "ERROR") + self.log(self.t('log_adb_missing'), "ERROR") except FileNotFoundError: - self.log("未找到adb命令,请将ADB文件放入本目录", "ERROR") + self.log(self.t('log_adb_missing'), "ERROR") def _try_reuse_extracted(self): """检查磁盘上是否已有解压好的资源,有则直接复用""" @@ -1066,7 +1462,9 @@ class ADKAPKGUI: self.temp_dir = cache_dir ok, reason = self._validate_extracted_apks() if not ok: - self.log(f"缓存资源无效,已清理: {reason}", "WARNING") + if self.debug_mode: + self.log(f"Cached resource invalid, cleared: {reason}", "WARNING") + self.log(self.t('log_cache_invalid'), "WARNING") self._clear_extracted_cache() return # self.log("已复用缓存的资源文件", "INFO") @@ -1090,7 +1488,7 @@ class ADKAPKGUI: if devices: # 只在首次连接时打日志 if not was_connected: - self.log("设备已连接", "SUCCESS") + self.log(self.t('log_device_connected'), "SUCCESS") # 获取VIN — 兼容两种 key,过滤 Android null 返回值 vin = '' @@ -1103,20 +1501,22 @@ class ADKAPKGUI: break vin = '' if vin: - self.log(f"当前车辆VIN: {vin}", "INFO") + self.log(self.tf('log_vin', vin=vin), "SUCCESS") # 验证授权 authorized = self.check_authorization(vin) self.update_device_status(True, vin, authorized) else: - self.log("无法获取VIN", "WARNING") + self.log(self.t('log_vin_unavailable'), "WARNING") self.update_device_status(True, None, False) else: if was_connected: - self.log("设备未连接", "WARNING") + self.log(self.t('log_device_disconnected'), "WARNING") self.update_device_status(False) except Exception as e: - self.log(f"刷新设备状态失败: {str(e)}", "ERROR") + if self.debug_mode: + self.log(f"Refresh failed: {str(e)}", "ERROR") + self.log(self.t('log_refresh_failed'), "ERROR") finally: self._refreshing = False @@ -1125,38 +1525,75 @@ class ADKAPKGUI: def check_authorization(self, vin): """检查授权""" if self.debug_mode: - self.log("调试模式: 跳过授权验证", "WARNING") + self.log(self.t('log_debug_skip_auth'), "WARNING") return True - self.log("正在验证授权...", "INFO") + self.log(self.t('log_auth_checking'), "INFO") try: - url = f"{self.api_url}?{urlencode({'vin': vin})}" - req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + authorized, vehicle_name, _ = self.query_authorization_info(vin) - with urlopen(req, timeout=10) as response: - data = json.loads(response.read().decode('utf-8')) - - if data.get('authorized') == True: - self.log("✅ 授权验证通过!", "SUCCESS") - if 'data' in data and 'vehicleName' in data['data']: - self.log(f"车辆名称: {data['data']['vehicleName']}", "INFO") + if authorized: + self.log(self.t('log_auth_success'), "SUCCESS") + if vehicle_name: + self.log(self.tf('log_vehicle_name', vehicle=vehicle_name), "SUCCESS") return True else: - self.log(f"❌ 授权验证失败", "ERROR") + self.log(self.t('log_auth_failed'), "ERROR") return False except Exception as e: - self.log(f"❌ 授权验证失败", "ERROR") + if self.debug_mode: + self.log(f"Auth check failed: {str(e)}", "ERROR") + self.log(self.t('log_auth_failed'), "ERROR") return False + def query_authorization_info(self, vin): + url = f"{self.api_url}?{urlencode({'vin': vin})}" + req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + payload = data.get('data', {}) if isinstance(data, dict) else {} + vehicle_name = payload.get('vehicleName') or payload.get('vehicle_name') or "" + vehicle_name = str(vehicle_name).strip() + authorized = data.get('authorized') is True or payload.get('authorized') is True + if authorized and vehicle_name: + self.vehicle_name = vehicle_name + return authorized, vehicle_name, data + + def _post_json(self, url, payload, timeout=10): + body = json.dumps(payload).encode('utf-8') + req = Request( + url, + data=body, + method='POST', + headers={ + 'User-Agent': 'Mozilla/5.0', + 'Content-Type': 'application/json', + }, + ) + with urlopen(req, timeout=timeout) as response: + return json.loads(response.read().decode('utf-8')) + def fetch_package_password(self): """从服务端获取资源包解压密码""" if not self.vin: - self.log("请先连接adb!", "ERROR") + self.log(self.t('log_need_adb'), "ERROR") return False try: + vehicle_name = self.vehicle_name + if not vehicle_name: + authorized, vehicle_name, _ = self.query_authorization_info(self.vin) + if not authorized: + self.log(self.t('log_auth_failed'), "ERROR") + return False + if not vehicle_name: + self.log(self.t('log_data_prepare_failed'), "ERROR") + return False + pwd_api_url = "https://api.changan.softwindy.cn/api/authorizations/package-key" - url = f"{pwd_api_url}?{urlencode({'vin': self.vin})}" + url = f"{pwd_api_url}?{urlencode({'vin': self.vin, 'vehicleName': vehicle_name})}" + if self.debug_mode: + self.log(f"PACKAGE KEY URL: {url}", "CMD") req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) with urlopen(req, timeout=10) as response: @@ -1164,13 +1601,20 @@ class ADKAPKGUI: if data.get('success') and 'data' in data and 'password' in data['data']: self.extract_password = data['data']['password'] + if self.debug_mode: + self.log("PACKAGE KEY: password received", "CMD") return True else: - self.log(f"数据准备失败: {data.get('message', '未知错误')}", "ERROR") + if self.debug_mode: + self.log(f"PACKAGE KEY RESPONSE: {data}", "CMD") + self.log(self.t('log_data_prepare_failed'), "ERROR") return False except Exception as e: - self.log(f"数据准备失败: {str(e)}", "ERROR") + if self.debug_mode: + import traceback + self.log(traceback.format_exc(), "ERROR") + self.log(self.t('log_data_prepare_failed'), "ERROR") return False def run_adb_command(self, command): @@ -1184,9 +1628,9 @@ class ADKAPKGUI: out = result.stdout.strip() err = result.stderr.strip() if out: - self.log(f" -> {out[:300]}", "CMD") + self.log(f"STDOUT:\n{out}", "CMD") if err: - self.log(f" !! {err[:300]}", "ERROR") + self.log(f"STDERR:\n{err}", "ERROR") if result.returncode == 0: return True, result.stdout.strip() else: @@ -1202,13 +1646,13 @@ class ADKAPKGUI: ok, err = self.run_adb_command(f'adb -d push "{apk_path}" {temp_apk_path}') if not ok: - return False, f"push失败: {err}" + return False, f"push failed: {err}" self.run_adb_command(f'adb -d shell mkdir -p {target_dir}') ok, err = self.run_adb_command(f'adb -d shell cp {temp_apk_path} {target_apk_path}') self.run_adb_command(f'adb -d shell rm -f {temp_apk_path}') if not ok: - return False, f"cp失败: {err}" + return False, f"copy failed: {err}" return True, "" @@ -1217,35 +1661,47 @@ class ADKAPKGUI: if not self.check_device_connection(): return if not self.vin: - messagebox.showwarning("警告", "请先刷新设备状态并获取VIN码") + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_need_vin')) return - messagebox.showwarning("⚠️ 重要提示", - "刷入过程中请勿:\n" - " ● 重启车机\n" - " ● 退出本程序\n" - " ● 关闭电脑\n\n" - "否则可能导致车机系统损坏!") + messagebox.showwarning(self.t('msg_flash_warning_title'), self.t('msg_flash_warning')) + self.log(self.t('log_flash_start_notice'), "SUCCESS") def do_push_all(): if not self.check_authorization(self.vin): - self.run_on_ui_thread(lambda: messagebox.showerror("授权失败", "设备未授权")) + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_auth_failed_title'), + self.t('msg_device_unauthorized') + ) return if not self.extract_password: if not self.fetch_package_password(): - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源准备失败!")) + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_error_title'), + self.t('msg_data_prepare_failed') + ) return if not self.check_package_extracted(): self.show_progress(True, is_push=False) if not self.extract_package_silent(): self.show_progress(False, is_push=False) - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源准备失败!")) + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_error_title'), + self.t('msg_data_prepare_failed') + ) return self.show_progress(False, is_push=False) if (not self.apps_dir or not self.apps_dir.exists()) and \ (not self.priv_apps_dir or not self.priv_apps_dir.exists()): - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源目录未找到")) + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_error_title'), + self.t('msg_resource_dir_missing') + ) return self.show_progress(True, is_push=True) @@ -1265,7 +1721,7 @@ class ADKAPKGUI: self.priv_apps_dir = None self.temp_dir = None if not self.fetch_package_password() or not self.extract_package_silent(): - self.log("未找到语言包文件", "WARNING") + self.log(self.t('log_no_language_files'), "WARNING") self.show_progress(False, is_push=True) return # 重新收集 @@ -1277,7 +1733,7 @@ class ADKAPKGUI: for apk in self.priv_apps_dir.glob("*.apk"): all_apks.append((apk, "priv-app")) if not all_apks: - self.log("未找到语言包文件", "WARNING") + self.log(self.t('log_no_language_files'), "WARNING") self.show_progress(False, is_push=True) return @@ -1291,20 +1747,22 @@ class ADKAPKGUI: success_count += 1 else: if "Read-only file system" in err: - self.log("请先点击「获取权限」获取权限后再试", "ERROR") + if self.debug_mode: + self.log(err, "ERROR") + self.log(self.t('log_flash_readonly'), "ERROR") aborted = True break - self.update_progress(i, total, "正在刷入...", is_push=True) + self.update_progress(i, total, self.t('progress_flashing'), is_push=True) - self.update_progress(total, total, "刷入完成" if not aborted else "已终止", is_push=True) + self.update_progress(total, total, self.t('progress_flash_done') if not aborted else self.t('progress_aborted'), is_push=True) if success_count == total: - self.log(f"刷入完成,共 {total} 个语言包", "SUCCESS") - self.log("语言包已刷入完成,重启设备后生效,您可在适当时候重启", "WARNING") + self.log(self.tf('log_flash_done', total=total), "SUCCESS") + self.log(self.t('log_flash_effective'), "WARNING") elif success_count > 0: - self.log(f"部分刷入成功({success_count}/{total})", "WARNING") + self.log(self.tf('log_flash_partial', success=success_count, total=total), "WARNING") if not aborted: - self.log("语言包已刷入完成,重启设备后生效,您可在适当时候重启", "WARNING") + self.log(self.t('log_flash_effective'), "WARNING") self.show_progress(False, is_push=True) @@ -1315,48 +1773,68 @@ class ADKAPKGUI: if not self.check_device_connection(): return - apk_dir = filedialog.askdirectory(title="选择包含APK文件的文件夹") + apk_dir = filedialog.askdirectory(title=self.t('file_select_folder_title')) if not apk_dir: return apk_files = list(Path(apk_dir).glob("*.apk")) if not apk_files: - messagebox.showerror("错误", "所选文件夹中没有APK文件!") + messagebox.showerror(self.t('msg_error_title'), self.t('msg_no_apks_in_folder')) return - result = messagebox.askyesno("确认安装", - f"找到 {len(apk_files)} 个APK文件\n\n是否开始批量安装?") + result = messagebox.askyesno( + self.t('msg_install_confirm_title'), + self.tf('msg_install_confirm_folder', count=len(apk_files)) + ) if not result: return def install(): self.show_progress(True, is_push=True) total = len(apk_files) - self.log(f"开始批量安装 {total} 个APK...", "INFO") + self.log(self.tf('log_batch_install_start', count=total), "INFO") success_count = 0 try: self.run_adb_command('adb -d shell setprop vecentek.model 1') for i, apk_path in enumerate(apk_files, 1): - self.update_progress(i, total, "安装中...", is_push=True) + self.update_progress(i, total, self.t('progress_installing'), is_push=True) success, _ = self.run_adb_command(f'adb -d install -r "{apk_path}"') if success: success_count += 1 - self.update_progress(total, total, "安装完成", is_push=True) + self.update_progress(total, total, self.t('progress_install_done'), is_push=True) if success_count == total: - self.log(f"安装完成:全部 {total} 个成功", "SUCCESS") - self.run_on_ui_thread(messagebox.showinfo, "安装完成", f"成功安装 {total} 个APK!") + self.log(self.tf('log_install_done_all', count=total), "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t('msg_install_done_title'), + self.tf('msg_install_done_all', count=total) + ) elif success_count > 0: - self.log(f"安装完成:{success_count}/{total} 成功", "WARNING") - self.run_on_ui_thread(messagebox.showwarning, "部分成功", f"成功: {success_count}\n失败: {total - success_count}") + self.log(self.tf('log_install_done_partial', success=success_count, count=total), "WARNING") + self.run_on_ui_thread( + messagebox.showwarning, + self.t('msg_install_partial_title'), + self.tf('msg_install_partial', success=success_count, failed=total - success_count) + ) else: - self.log("安装失败", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "安装失败", "所有APK安装失败!") + self.log(self.t('log_install_failed'), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_install_failed_title'), + self.t('msg_install_failed_all') + ) except Exception as e: - self.log(f"安装过程异常: {str(e)}", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "安装失败", f"安装过程异常:{str(e)}") + if self.debug_mode: + self.log(f"Install exception: {str(e)}", "ERROR") + self.log(self.t('log_install_exception'), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_install_failed_title'), + self.t('msg_install_exception') + ) finally: self.run_adb_command('adb -d shell setprop vecentek.model 0') self.show_progress(False, is_push=True) @@ -1370,8 +1848,8 @@ class ADKAPKGUI: return file_path = filedialog.askopenfilename( - title="选择APK文件", - filetypes=[("APK文件", "*.apk"), ("所有文件", "*.*")] + title=self.t('file_select_apk_title'), + filetypes=[(self.t('filetype_apk'), "*.apk"), (self.t('filetype_all'), "*.*")] ) if not file_path: @@ -1379,17 +1857,19 @@ class ADKAPKGUI: def install(): self.show_progress(True, is_push=True) - self.update_progress(50, 100, f"安装中", is_push=True) + self.update_progress(50, 100, self.t('progress_installing'), is_push=True) try: self.run_adb_command('adb -d shell setprop vecentek.model 1') success, _ = self.run_adb_command(f'adb -d install -r "{file_path}"') - self.update_progress(100, 100, f"完成", is_push=True) + self.update_progress(100, 100, self.t('progress_done'), is_push=True) if success: - self.log("✓ 安装成功", "SUCCESS") + self.log(self.t('log_install_success'), "SUCCESS") else: - self.log("✗ 安装失败", "ERROR") + self.log(self.t('log_install_failed'), "ERROR") except Exception as e: - self.log(f"安装过程异常: {str(e)}", "ERROR") + if self.debug_mode: + self.log(f"Install exception: {str(e)}", "ERROR") + self.log(self.t('log_install_exception'), "ERROR") finally: self.run_adb_command('adb -d shell setprop vecentek.model 0') self.show_progress(False, is_push=True) @@ -1410,7 +1890,7 @@ class ADKAPKGUI: # 创建弹窗 popup = tk.Toplevel(self.root) - popup.title("快捷语言设置") + popup.title(self.t('quick_lang_title')) popup.geometry("520x320") popup.configure(bg=self.colors['bg_dark']) popup.resizable(False, False) @@ -1424,29 +1904,21 @@ class ADKAPKGUI: popup.grab_set() # 标题 - header = tk.Label(popup, text="选择目标语言", + header = tk.Label(popup, text=self.t('quick_lang_header'), font=('Microsoft YaHei', 13, 'bold'), fg=self.colors['accent'], bg=self.colors['bg_dark']) header.pack(pady=(15, 10)) - hint = tk.Label(popup, text="点击按钮即可将系统语言切换为对应语言,重启后生效", + hint = tk.Label(popup, text=self.t('quick_lang_hint'), font=('Microsoft YaHei', 9), fg=self.colors['text_secondary'], bg=self.colors['bg_dark']) hint.pack(pady=(0, 12)) # 语言列表:(显示名, locale_code) - languages = [ - ("🇨🇳 中文", "zh-CN"), - ("英 English", "en-US"), - ("俄 Русский", "ru-RU"), - ("法 Français", "fr-FR"), - ("西 Español", "es-ES"), - ("葡 Português", "pt-BR"), - ("意 Italiano", "it-IT"), - ("阿 العربية", "ar-SA"), - ] + language_codes = ["zh-CN", "en-US", "ru-RU", "fr-FR", "es-ES", "pt-BR", "it-IT", "ar-SA"] + languages = list(zip(self.t('quick_lang_names'), language_codes)) # 创建按钮容器 btn_frame = tk.Frame(popup, bg=self.colors['bg_dark']) @@ -1480,7 +1952,7 @@ class ADKAPKGUI: sep = tk.Frame(popup, bg=self.colors['border'], height=1) sep.pack(fill=tk.X, padx=20, pady=(8, 6)) - sys_btn = tk.Button(popup, text="⚙️ 打开系统语言设置(手动选择)", + sys_btn = tk.Button(popup, text=self.t('quick_lang_system'), command=lambda: self._open_sys_and_close(popup), font=('Microsoft YaHei', 9), fg=self.colors['text_secondary'], @@ -1494,21 +1966,27 @@ class ADKAPKGUI: popup.destroy() def do_set(): - self.log(f"正在设置系统语言为: {language_name} ({locale_code})", "INFO") + self.log(self.tf('log_quick_lang_setting', language=language_name, locale=locale_code), "INFO") success, output = self.run_adb_command( f'adb -d shell settings put system system_locales {locale_code}' ) if success: - self.log(f"✓ 语言已设置为 {language_name}", "SUCCESS") + self.log(self.tf('log_quick_lang_success', language=language_name), "SUCCESS") self.run_on_ui_thread( messagebox.showinfo, - "设置成功", - f"系统语言已设置为 {language_name}\n\n⚠️ 请重启设备使其生效。" + self.t('quick_lang_success_title'), + self.tf('quick_lang_success', language=language_name) ) else: - self.log(f"✗ 语言设置失败: {output}", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "设置失败", f"语言设置失败!\n\n{output}") + if self.debug_mode: + self.log(f"Language setting failed: {output}", "ERROR") + self.log(self.t('log_quick_lang_failed'), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('quick_lang_failed_title'), + self.t('quick_lang_failed') + ) threading.Thread(target=do_set, daemon=True).start() @@ -1533,10 +2011,10 @@ class ADKAPKGUI: """重启设备""" if not self.check_device_connection(): return - if messagebox.askyesno("确认重启", "确定要重启设备吗?"): + if messagebox.askyesno(self.t('msg_reboot_title'), self.t('msg_reboot_confirm')): subprocess.Popen(f'{self._adb_cmd()} -d shell reboot', shell=True, stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) - self.log("设备正在重启...", "INFO") + self.log(self.t('log_rebooting'), "SUCCESS") self.update_device_status(False) def on_disable_upgrade(self): @@ -1547,15 +2025,12 @@ class ADKAPKGUI: # 弹窗确认 result = messagebox.askyesno( - "确认禁用升级", - "⚠️ 警告:禁用系统升级后,将无法接收系统更新!\n\n" - "是否确定要禁用系统升级应用?\n\n" - "禁用命令:\n" - "adb -d shell pm disable-user --user 0 com.incall.apps.softmanager" + self.t('msg_disable_ota_title'), + self.t('msg_disable_ota_confirm') ) if not result: - self.log("已取消禁用升级操作", "INFO") + self.log(self.t('log_disable_ota_cancelled'), "INFO") return def disable(): @@ -1563,32 +2038,42 @@ class ADKAPKGUI: success, output = self.run_adb_command( 'adb -d shell pm disable-user --user 0 com.incall.apps.softmanager') if success: - self.log("系统升级已禁用", "SUCCESS") - self.run_on_ui_thread(messagebox.showinfo, "成功", "系统升级已成功禁用!") + self.log(self.t('log_disable_ota_success'), "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t('msg_success_title'), + self.t('msg_disable_ota_success') + ) else: - self.log("禁用系统升级失败", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "错误", f"禁用失败:{output}") + if self.debug_mode: + self.log(f"Disable OTA failed: {output}", "ERROR") + self.log(self.t('log_disable_ota_failed'), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_error_title'), + self.t('msg_disable_ota_failed') + ) self.show_progress(False, is_push=False) threading.Thread(target=disable, daemon=True).start() def _on_vin_input_focus_in(self, event): """输入框获得焦点时清除占位符""" - if self.vin_input.get() == "请输入VIN": + if self.is_placeholder_vin(self.vin_input.get()): self.vin_input.delete(0, tk.END) self.vin_input.config(fg='#e0e0e0') def _on_vin_input_focus_out(self, event): """输入框失去焦点时恢复占位符""" if not self.vin_input.get(): - self.vin_input.insert(0, "请输入VIN") + self.vin_input.insert(0, self.t('vin_placeholder')) self.vin_input.config(fg='#636e72') def query_password_by_vin(self): """通过VIN查询密码""" vin = self.vin_input.get().strip() - if not vin: - messagebox.showwarning("提示", "请输入VIN码") + if not vin or self.is_placeholder_vin(vin): + messagebox.showwarning(self.t('msg_hint_title'), self.t('msg_enter_vin')) return def do_query(): @@ -1602,29 +2087,35 @@ class ADKAPKGUI: def update_ui(): if data.get('success'): - pwd = data.get('data', {}).get('devicePassword', '未知') + pwd = data.get('data', {}).get('devicePassword', self.t('unknown_error')) self.pwd_result_label.config( - text=f"密码: *#{pwd}#*", + text=self.tf('pwd_success', password=pwd), fg=self.colors['success'] ) - self.log(f"密码查询成功 VIN={vin} -> {pwd}", "SUCCESS") + if self.debug_mode: + self.log(f"Password query succeeded VIN={vin} password={pwd}", "CMD") + self.log(self.tf('log_pwd_success', vin=vin), "SUCCESS") else: - msg = data.get('message', '查询失败') + msg = data.get('message', self.t('log_pwd_failed')) self.pwd_result_label.config( - text=f"失败: {msg}", + text=self.tf('pwd_failed', message=msg), fg=self.colors['error'] ) - self.log(f"密码查询失败: {msg}", "ERROR") + if self.debug_mode: + self.log(f"Password query failed: {msg}", "ERROR") + self.log(self.t('log_pwd_failed'), "ERROR") self.run_on_ui_thread(update_ui) except Exception as e: def update_ui_error(): self.pwd_result_label.config( - text=f"请求失败", + text=self.t('pwd_request_failed'), fg=self.colors['error'] ) - self.log(f"密码查询请求失败: {str(e)}", "ERROR") + if self.debug_mode: + self.log(f"Password query request failed: {str(e)}", "ERROR") + self.log(self.t('log_pwd_request_failed'), "ERROR") self.run_on_ui_thread(update_ui_error) threading.Thread(target=do_query, daemon=True).start() @@ -1633,27 +2124,51 @@ class ADKAPKGUI: """切换调试模式(隐藏入口,Ctrl+Shift+D)""" if self.debug_mode: self.debug_mode = False - self.log("调试模式已关闭", "WARNING") - self.status_text.config(text="就绪") + self.log(self.t('log_debug_off'), "WARNING") + self.status_text.config(text=self.t('status_ready')) self.refresh_device_status() return - pwd = simpledialog.askstring("调试模式", "请输入调试密码:", show='*', parent=self.root) - if pwd == "zxch5200": - self.debug_mode = True - self.update_device_status(True, "", True) - self.log("🔧 调试模式已开启 - 跳过授权和设备校验,显示详细ADB日志", "WARNING") - self.status_text.config(text="🔧 调试模式") - elif pwd is not None: - messagebox.showwarning("错误", "密码错误") + pwd = simpledialog.askstring(self.t('debug_title'), self.t('debug_prompt'), show='*', parent=self.root) + if not pwd: + return + + self.log(self.t('debug_password_verifying'), "WARNING") + + def verify(): + valid, message = self.verify_debug_mode_password(pwd) + if valid: + def enable_debug(): + self.debug_mode = True + self.update_device_status(True, "", True) + self.log(self.t('log_debug_on'), "WARNING") + self.status_text.config(text=self.t('debug_status')) + self.run_on_ui_thread(enable_debug) + else: + def show_failed(): + msg = message or self.t('msg_debug_wrong_password') + self.log(self.tf('debug_verify_failed', message=msg), "WARNING") + messagebox.showwarning(self.t('msg_error_title'), msg) + self.run_on_ui_thread(show_failed) + + threading.Thread(target=verify, daemon=True).start() + + def verify_debug_mode_password(self, password): + try: + data = self._post_json(self.debug_password_api_url, {"password": password}) + if data.get('success') is True and data.get('valid') is True: + return True, data.get('message', '') + return False, data.get('message') or self.t('msg_debug_wrong_password') + except Exception as e: + return False, str(e) def _debug_test_extract(self, event=None): """调试模式下仅测试资源包解压,不检查设备和授权""" if not self.debug_mode: - messagebox.showwarning("调试模式", "请先按 Ctrl+Shift+D 开启调试模式") + messagebox.showwarning(self.t('debug_title'), self.t('debug_need_enable')) return - pwd = simpledialog.askstring("测试解压", "请输入 package.bin 解压密码:", show='*', parent=self.root) + pwd = simpledialog.askstring(self.t('debug_extract_title'), self.t('debug_extract_prompt'), show='*', parent=self.root) if not pwd: return @@ -1666,15 +2181,19 @@ class ADKAPKGUI: try: self.show_progress(True, is_push=False) if self.extract_package_silent(): - self.log("测试解压成功", "SUCCESS") + self.log(self.t('log_debug_extract_success'), "SUCCESS") self.run_on_ui_thread( messagebox.showinfo, - "测试解压成功", - f"资源已解压到:\n{self.temp_dir}" + self.t('debug_extract_success_title'), + self.tf('debug_extract_success', path=self.temp_dir) ) else: - self.log("测试解压失败", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "测试解压失败", "请查看日志中的 7za 输出") + self.log(self.t('log_debug_extract_failed'), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('debug_extract_failed_title'), + self.t('debug_extract_failed') + ) finally: self.show_progress(False, is_push=False) self.extract_password = old_password @@ -1690,27 +2209,30 @@ class ADKAPKGUI: return file_paths = filedialog.askopenfilenames( - title="选择APK文件", - filetypes=[("APK文件", "*.apk"), ("所有文件", "*.*")] + title=self.t('file_select_apk_title'), + filetypes=[(self.t('filetype_apk'), "*.apk"), (self.t('filetype_all'), "*.*")] ) if not file_paths: return count = len(file_paths) - result = messagebox.askyesno("确认安装", f"已选择 {count} 个APK文件\n\n是否开始安装?") + result = messagebox.askyesno( + self.t('msg_install_confirm_title'), + self.tf('msg_install_confirm_many', count=count) + ) if not result: return def install(): self.show_progress(True, is_push=True) - self.log(f"开始安装 {count} 个APK...", "INFO") + self.log(self.tf('log_install_many_start', count=count), "INFO") success_count = 0 try: self.run_adb_command('adb -d shell setprop vecentek.model 1') for i, file_path in enumerate(file_paths, 1): apk_name = Path(file_path).stem - self.update_progress(i, count, f"安装中 ({apk_name})", is_push=True) + self.update_progress(i, count, self.tf('progress_installing_name', name=apk_name), is_push=True) success, _ = self.run_adb_command(f'adb -d install -r "{file_path}"') if success: self.log(f"✓ {apk_name}.apk", "SUCCESS") @@ -1718,20 +2240,38 @@ class ADKAPKGUI: else: self.log(f"✗ {apk_name}.apk", "ERROR") - self.update_progress(count, count, "安装完成", is_push=True) + self.update_progress(count, count, self.t('progress_install_done'), is_push=True) if success_count == count: - self.log(f"安装完成:全部 {count} 个成功", "SUCCESS") - self.run_on_ui_thread(messagebox.showinfo, "安装完成", f"成功安装 {count} 个APK!") + self.log(self.tf('log_install_done_all', count=count), "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t('msg_install_done_title'), + self.tf('msg_install_done_all', count=count) + ) elif success_count > 0: - self.log(f"安装完成:{success_count}/{count} 成功", "WARNING") - self.run_on_ui_thread(messagebox.showwarning, "部分成功", f"成功: {success_count}\n失败: {count - success_count}") + self.log(self.tf('log_install_done_partial', success=success_count, count=count), "WARNING") + self.run_on_ui_thread( + messagebox.showwarning, + self.t('msg_install_partial_title'), + self.tf('msg_install_partial', success=success_count, failed=count - success_count) + ) else: - self.log("安装失败", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "安装失败", "所有APK安装失败!") + self.log(self.t('log_install_failed'), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_install_failed_title'), + self.t('msg_install_failed_all') + ) except Exception as e: - self.log(f"安装过程异常: {str(e)}", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "安装失败", f"安装过程异常:{str(e)}") + if self.debug_mode: + self.log(f"Install exception: {str(e)}", "ERROR") + self.log(self.t('log_install_exception'), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_install_failed_title'), + self.t('msg_install_exception') + ) finally: self.run_adb_command('adb -d shell setprop vecentek.model 0') self.show_progress(False, is_push=True) @@ -1745,17 +2285,17 @@ class ADKAPKGUI: def main(): """主函数""" if sys.version_info < (3, 6): - print("错误:需要Python 3.6或更高版本") + print("Error: Python 3.6 or later is required") sys.exit(1) try: app = ADKAPKGUI() app.run() except Exception as e: - print(f"启动失败: {e}") + print(f"Startup failed: {e}") import traceback traceback.print_exc() - messagebox.showerror("错误", f"程序启动失败: {e}") + messagebox.showerror("Error", f"Program startup failed: {e}") if __name__ == "__main__": main() diff --git a/S05/S05.py b/S05/S05.py deleted file mode 100644 index faa516f..0000000 --- a/S05/S05.py +++ /dev/null @@ -1,1615 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -import os -import sys -import subprocess -import json -import threading -import tkinter as tk -from tkinter import ttk, scrolledtext, filedialog, messagebox -from pathlib import Path -from urllib.request import urlopen, Request -from urllib.error import URLError, HTTPError -from datetime import datetime -import zipfile -try: - import pyzipper -except ImportError: - pyzipper = None -import shutil -import time - -class ADKAPKGUI: - def __init__(self): - self.root = tk.Tk() - self.root.title("长安语言安装工具") - self.root.geometry("650x640") - self.root.resizable(True, True) - - # 设置颜色主题 - self.colors_dark = { - 'bg_dark': '#1e1e2e', - 'bg_light': '#2a2a3e', - 'accent': '#6c5ce7', - 'accent_hover': '#5b4bc4', - 'success': '#00b894', - 'error': '#d63031', - 'warning': '#fdcb6e', - 'info': '#0984e3', - 'text': '#dfe6e9', - 'text_secondary': '#b2bec3', - 'border': '#3d3d5e' - } - self.colors_light = { - 'bg_dark': '#f5f5f5', - 'bg_light': '#ffffff', - 'accent': '#6c5ce7', - 'accent_hover': '#5b4bc4', - 'success': '#00b894', - 'error': '#d63031', - 'warning': '#e17055', - 'info': '#0984e3', - 'text': '#2d3436', - 'text_secondary': '#636e72', - 'border': '#dfe6e9' - } - self.colors = dict(self.colors_dark) - self.theme = 'dark' - - # 多语言 - self.lang = 'zh' - self.T = { - 'zh': { - 'title': '深蓝S05多语言安装', - 'btn_root': '🔓 获取权限', - 'btn_push': '📦 刷入语言包', - 'btn_install': '📱 安装App', - 'btn_language': '🌐 语言设置', - 'btn_timezone': '⏰ 时区设置', - 'btn_settings': '⚙️ 安卓设置', - 'btn_reboot': '🔄 重启设备', - 'btn_disable_upgrade': '❌ 禁用升级', - 'btn_clear_log': '🗑 清空日志', - 'device_label': '设备:', - 'vin_label': 'VIN码:', - 'auth_label': '授权:', - 'log_title': '📋 运行日志', - 'status_ready': '就绪', - 'status_connected': '已连接', - 'status_disconnected': '未连接', - 'status_detecting': '未检测', - 'vin_none': '未获取', - 'auth_none': '未验证', - 'auth_yes': '已授权', - 'auth_no': '未授权', - 'btn_refresh': '🔄 检查', - 'hint_factory': '🔧 工厂模式:拨号 *#*#888 ,密码:369875', - 'theme_dark': '🌙 暗色', - 'theme_light': '☀️ 亮色', - 'lang_zh': '中', - 'lang_en': 'EN', - 'switch_lang': '语言 / Language', - 'switch_theme': '切换主题', - 'about_company': '宜宾科宜科技有限公司 - 出口改装一站式服务', - }, - 'en': { - 'title': 'Shenlan S05 Multi-Language', - 'btn_root': '🔓 Get Root', - 'btn_push': '📦 Flash Lang Pkg', - 'btn_install': '📱 Install App', - 'btn_language': '🌐 Language', - 'btn_timezone': '⏰ Timezone', - 'btn_settings': '⚙️ Settings', - 'btn_reboot': '🔄 Reboot', - 'btn_disable_upgrade': '❌ Disable OTA', - 'btn_clear_log': '🗑 Clear Log', - 'device_label': 'Device:', - 'vin_label': 'VIN:', - 'auth_label': 'Auth:', - 'log_title': '📋 Log', - 'status_ready': 'Ready', - 'status_connected': 'Connected', - 'status_disconnected': 'Disconnected', - 'status_detecting': 'Detecting', - 'vin_none': 'None', - 'auth_none': 'Unknown', - 'auth_yes': 'Authorized', - 'auth_no': 'Unauthorized', - 'btn_refresh': '🔄 Check', - 'hint_factory': '🔧 Factory Mode: dial *#*#888, password: 369875', - 'theme_dark': '🌙 Dark', - 'theme_light': '☀️ Light', - 'lang_zh': '中', - 'lang_en': 'EN', - 'switch_lang': 'Language', - 'switch_theme': 'Theme', - 'about_company': 'Yibin Keyi Technology - Export Modification Service', - } - } - - # 从 exe/py 所在目录查找资源文件 - self.base_dir = Path(sys.executable).parent if getattr(sys, 'frozen', False) else Path(__file__).parent - if getattr(sys, 'frozen', False): - self.adb = str(Path(sys._MEIPASS) / 'adb.exe') - self.sz = str(Path(sys._MEIPASS) / '7za.exe') - else: - self.adb = 'adb' - self.sz = str(self.base_dir / '7za.exe') - self.package_file = self.base_dir / "package.bin" - self.extract_password = None - self.apps_dir = None - self.priv_apps_dir = None - self.temp_dir = None - self.api_url = "https://api.changan.softwindy.cn/api/authorizations/auth-check" - self.vin = None - self.device_connected = False - self._refreshing = False # 防止并发刷新 - self.debug_mode = False # 调试模式 - - # 设置样式 - self.setup_styles() - self.setup_ui() - self.center_window() - - # 检查环境 - self.check_environment() - - # 启动设备状态监控 - self.start_device_monitor() - - def setup_styles(self): - """设置自定义样式""" - style = ttk.Style() - style.theme_use('clam') - - # 配置主颜色 - style.configure('TFrame', background=self.colors['bg_dark']) - style.configure('TLabel', background=self.colors['bg_dark'], foreground=self.colors['text']) - style.configure('TLabelframe', background=self.colors['bg_dark'], foreground=self.colors['text']) - style.configure('TLabelframe.Label', background=self.colors['bg_dark'], foreground=self.colors['accent']) - - # 配置进度条 - style.configure('TProgressbar', - background=self.colors['accent'], - troughcolor=self.colors['bg_light'], - borderwidth=0) - - def setup_ui(self): - """设置UI界面""" - # 配置根窗口 - self.root.configure(bg=self.colors['bg_dark']) - - # 创建主框架 - main_frame = tk.Frame(self.root, bg=self.colors['bg_dark']) - main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) - - # 顶部标题栏 - title_frame = tk.Frame(main_frame, bg=self.colors['bg_dark'], height=65) - title_frame.pack(fill=tk.X, pady=(0, 10)) - title_frame.pack_propagate(False) - - # 标题 - title_label = tk.Label(title_frame, - text="🚀 深蓝S05多语言安装", - font=('Microsoft YaHei', 18, 'bold'), - fg=self.colors['accent'], - bg=self.colors['bg_dark']) - title_label.pack() - - subtitle_label = tk.Label(title_frame, - text="宜宾科宜科技有限公司 - 智能设备管理平台", - font=('Microsoft YaHei', 9), - fg=self.colors['text_secondary'], - bg=self.colors['bg_dark']) - subtitle_label.pack() - - # 工程密码查询区域 - pwd_query_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) - pwd_query_frame.pack(fill=tk.X, pady=(0, 5), padx=5) - - tk.Label(pwd_query_frame, text="工程密码查询:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT, padx=(10, 5), pady=5) - - self.vin_input = tk.Entry(pwd_query_frame, - font=('Consolas', 9), - bg='#2d2d3d', - fg='#636e72', - insertbackground='white', - relief=tk.FLAT, - width=20) - self.vin_input.insert(0, "请输入VIN") - self.vin_input.bind("", self._on_vin_input_focus_in) - self.vin_input.bind("", self._on_vin_input_focus_out) - self.vin_input.pack(side=tk.LEFT, padx=5, pady=5) - - self.btn_query_pwd = tk.Button(pwd_query_frame, text="查询密码", - command=self.query_password_by_vin, - font=('Microsoft YaHei', 8), - fg='white', - bg=self.colors['accent'], - relief=tk.FLAT, - cursor='hand2') - self.btn_query_pwd.pack(side=tk.LEFT, padx=5, pady=5) - - self.pwd_result_label = tk.Label(pwd_query_frame, text="", - font=('Microsoft YaHei', 9, 'bold'), - fg=self.colors['success'], - bg=self.colors['bg_light']) - self.pwd_result_label.pack(side=tk.LEFT, padx=10, pady=5) - - # 工厂模式提示 - factory_hint_frame = tk.Frame(main_frame, bg=self.colors['bg_dark']) - factory_hint_frame.pack(fill=tk.X, pady=(0, 3)) - tk.Label(factory_hint_frame, text="🔧 关闭车辆WI-FI和4G网络,拨号获取的密码进入工程模式", - font=('Microsoft YaHei', 8), - fg=self.colors['warning'], - bg=self.colors['bg_dark']).pack(side=tk.LEFT, padx=2) - - - # 按钮区域(两排,每排5个) - button_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) - button_frame.pack(fill=tk.X, pady=(0, 10), padx=5) - - # 按钮样式参数 - btn_params = { - 'font': ('Microsoft YaHei', 9), - 'fg': 'white', - 'relief': tk.FLAT, - 'cursor': 'hand2', - 'height': 1, - 'width': 14 - } - - # 第一排按钮 - row1_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) - row1_frame.pack(pady=(8, 4)) - - self.btn_root = tk.Button(row1_frame, text="🔓 获取权限", - command=self.get_root_permission, - bg=self.colors['success'], - **btn_params) - self.btn_root.pack(side=tk.LEFT, padx=4) - - self.btn_push = tk.Button(row1_frame, text="📦 刷入语言包", - command=self.push_all_apks, - bg=self.colors['accent'], - **btn_params) - self.btn_push.pack(side=tk.LEFT, padx=4) - - self.btn_install_all = tk.Button(row1_frame, text="📱 安装App", - command=self.install_apps, - bg=self.colors['accent'], - **btn_params) - self.btn_install_all.pack(side=tk.LEFT, padx=4) - - self.btn_language = tk.Button(row1_frame, text="🌐 语言设置", - command=self.open_language_quick_set, - bg=self.colors['accent'], - **btn_params) - self.btn_language.pack(side=tk.LEFT, padx=4) - - # 第二排按钮 - row2_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) - row2_frame.pack(pady=(4, 8)) - - self.btn_timezone = tk.Button(row2_frame, text="⏰ 时区设置", - command=self.open_timezone_settings, - bg=self.colors['accent'], - **btn_params) - self.btn_timezone.pack(side=tk.LEFT, padx=4) - - self.btn_settings = tk.Button(row2_frame, text="⚙️ 安卓设置", - command=self.open_android_settings, - bg=self.colors['accent'], - **btn_params) - self.btn_settings.pack(side=tk.LEFT, padx=4) - - self.btn_reboot = tk.Button(row2_frame, text="🔄 重启设备", - command=self.reboot_device, - bg=self.colors['warning'], - **btn_params) - self.btn_reboot.pack(side=tk.LEFT, padx=4) - - self.btn_exit = tk.Button(row2_frame, text="❌ 禁用升级", - command=self.on_disable_upgrade, - bg=self.colors['error'], - **btn_params) - self.btn_exit.pack(side=tk.LEFT, padx=4) - - # 设备状态栏(横条) - status_bar_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) - status_bar_frame.pack(fill=tk.X, pady=(0, 5)) - - # 状态指示器 - status_indicator_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) - status_indicator_frame.pack(side=tk.LEFT, padx=10, pady=5) - - self.status_indicator = tk.Canvas(status_indicator_frame, width=10, height=10, - bg=self.colors['bg_light'], highlightthickness=0) - self.status_indicator.pack(side=tk.LEFT) - self.status_dot = self.status_indicator.create_oval(2, 2, 8, 8, fill='#636e72') - - tk.Label(status_indicator_frame, text="设备:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT, padx=(5, 3)) - - self.device_status_label = tk.Label(status_indicator_frame, text="未检测", - font=('Microsoft YaHei', 9, 'bold'), - fg='#636e72', - bg=self.colors['bg_light'], - anchor='w', width=4) - self.device_status_label.pack(side=tk.LEFT) - - # VIN信息 - vin_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) - vin_frame.pack(side=tk.LEFT, padx=20, pady=5) - tk.Label(vin_frame, text="VIN码:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT) - self.vin_label = tk.Label(vin_frame, text="未获取", - font=('Microsoft YaHei', 9, 'bold'), - fg='#636e72', - bg=self.colors['bg_light'], - anchor='w', width=17) - self.vin_label.pack(side=tk.LEFT, padx=(5, 0)) - - # 授权状态 - auth_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) - auth_frame.pack(side=tk.LEFT, padx=20, pady=5) - tk.Label(auth_frame, text="授权:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT) - self.auth_label = tk.Label(auth_frame, text="未验证", - font=('Microsoft YaHei', 9, 'bold'), - fg='#636e72', - bg=self.colors['bg_light'], - anchor='w', width=4) - self.auth_label.pack(side=tk.LEFT, padx=(5, 0)) - - # 刷新按钮 - refresh_btn = tk.Button(status_bar_frame, text="🔄 检查", - command=self.refresh_device_status, - font=('Microsoft YaHei', 8), - fg=self.colors['accent'], - bg=self.colors['bg_light'], - relief=tk.FLAT, - cursor='hand2') - refresh_btn.pack(side=tk.RIGHT, padx=10, pady=5) - - # 提示信息区域(设备状态下方) - tips_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) - tips_frame.pack(fill=tk.X, pady=(5, 5), padx=5) - - tips = [ - "1. 安装语言过程中请保持车辆和电脑的电量充足,不可中途停止。", - "2. 获取权限以后,车辆自动重启以后再进入语言刷入。", - "3. 部分语言需要重启后生效,可以一切工作完成以后再重启。", - ] - - for i, tip in enumerate(tips): - tip_row = tk.Frame(tips_frame, bg=self.colors['bg_light']) - tip_row.pack(fill=tk.X, padx=10, pady=(5 if i == 0 else 0, 5 if i == len(tips) - 1 else 0)) - tk.Label(tip_row, text=tip, - font=('Microsoft YaHei', 9), - fg=self.colors['warning'], - bg=self.colors['bg_light'], - wraplength=600, - justify=tk.LEFT).pack(side=tk.LEFT) - - # 解压进度条框架 - progress_frame = tk.Frame(main_frame, bg=self.colors['bg_dark']) - progress_frame.pack(fill=tk.X, pady=(5, 5)) - - self.progress_label = tk.Label(progress_frame, text="", - font=('Microsoft YaHei', 9), - fg=self.colors['text_secondary'], - bg=self.colors['bg_dark']) - self.progress_label.pack() - - self.progress = ttk.Progressbar(progress_frame, mode='determinate', style='TProgressbar') - self.progress.pack(fill=tk.X, pady=(2, 0)) - - # 推送进度条 - self.push_progress_label = tk.Label(progress_frame, text="", - font=('Microsoft YaHei', 9), - fg=self.colors['text_secondary'], - bg=self.colors['bg_dark']) - - self.push_progress = ttk.Progressbar(progress_frame, mode='determinate', style='TProgressbar') - - # 日志区域(下方) - log_card = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) - log_card.pack(fill=tk.BOTH, expand=True, pady=(5, 0)) - - # 日志标题栏 - log_title_frame = tk.Frame(log_card, bg=self.colors['bg_dark'], height=30) - log_title_frame.pack(fill=tk.X) - log_title_frame.pack_propagate(False) - - tk.Label(log_title_frame, text="📋 运行日志", - font=('Microsoft YaHei', 10, 'bold'), - fg=self.colors['accent'], - bg=self.colors['bg_dark']).pack(side=tk.LEFT, padx=10) - - self.btn_clear = tk.Button(log_title_frame, text="🗑 清空日志", - command=self.clear_log, - font=('Microsoft YaHei', 8), - fg=self.colors['text_secondary'], - bg=self.colors['bg_dark'], - relief=tk.FLAT, - cursor='hand2') - self.btn_clear.pack(side=tk.RIGHT, padx=10) - - # 日志文本框 - text_frame = tk.Frame(log_card, bg=self.colors['bg_light']) - text_frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5) - - self.log_text = scrolledtext.ScrolledText(text_frame, - height=12, - wrap=tk.WORD, - font=('Consolas', 9), - bg='#2d2d3d', - fg='#e0e0e0', - insertbackground='white', - relief=tk.FLAT, - borderwidth=0) - self.log_text.pack(fill=tk.BOTH, expand=True) - - # 配置日志颜色标签 - self.log_text.tag_config('INFO', foreground='#74b9ff') - self.log_text.tag_config('SUCCESS', foreground='#55efc4') - self.log_text.tag_config('ERROR', foreground='#ff7675') - self.log_text.tag_config('WARNING', foreground='#ffeaa7') - self.log_text.tag_config('CMD', foreground='#a29bfe') - - # 底部状态栏 - bottom_status = tk.Frame(main_frame, bg=self.colors['bg_light'], height=22) - bottom_status.pack(fill=tk.X, pady=(5, 0)) - bottom_status.pack_propagate(False) - - self.status_text = tk.Label(bottom_status, text="就绪", - font=('Microsoft YaHei', 8), - fg=self.colors['text_secondary'], - bg=self.colors['bg_light']) - self.status_text.pack(side=tk.LEFT, padx=10) - - # 主题和语言切换按钮 - self.btn_theme_switch = tk.Button(bottom_status, text="🌙 暗色", - command=self.toggle_theme, - font=('Microsoft YaHei', 8), - fg=self.colors['accent'], - bg=self.colors['bg_light'], - relief=tk.FLAT, - cursor='hand2') - self.btn_theme_switch.pack(side=tk.RIGHT, padx=5) - - self.btn_lang_switch = tk.Button(bottom_status, text="EN", - command=self.toggle_lang, - font=('Microsoft YaHei', 8, 'bold'), - fg=self.colors['accent'], - bg=self.colors['bg_light'], - relief=tk.FLAT, - cursor='hand2') - self.btn_lang_switch.pack(side=tk.RIGHT, padx=5) - - # 调试模式快捷键 - self.root.bind('', self._toggle_debug) - - # 绑定悬停效果 - self.bind_hover_effects() - - def bind_hover_effects(self): - """绑定按钮悬停效果""" - buttons = [self.btn_root, self.btn_push, self.btn_install_all, - self.btn_language, self.btn_timezone, self.btn_settings, - self.btn_reboot, self.btn_clear, self.btn_exit] - - for btn in buttons: - original_bg = btn.cget('bg') - def on_enter(e, btn=btn, bg=original_bg): - btn.config(bg=self.lighten_color(bg)) - def on_leave(e, btn=btn, bg=original_bg): - btn.config(bg=bg) - btn.bind('', on_enter) - btn.bind('', on_leave) - - def lighten_color(self, color): - """调亮颜色""" - if color == self.colors['accent']: - return self.colors['accent_hover'] - elif color == self.colors['warning']: - return '#feca57' - elif color == self.colors['info']: - return '#0984e3' - elif color == self.colors['error']: - return '#e17055' - elif color == self.colors['success']: - return '#00a884' - return color - - def center_window(self): - """将窗口居中显示在屏幕上""" - self.root.update_idletasks() - screen_w = self.root.winfo_screenwidth() - screen_h = self.root.winfo_screenheight() - win_w = self.root.winfo_reqwidth() - win_h = self.root.winfo_reqheight() - x = (screen_w - win_w) // 2 - y = (screen_h - win_h) // 2 - self.root.geometry(f"+{x}+{y}") - - def run_on_ui_thread(self, func, *args, **kwargs): - """将函数调度到主线程执行,确保线程安全""" - self.root.after(0, func, *args, **kwargs) - - def t(self, key): - """获取翻译文本""" - return self.T.get(self.lang, self.T['zh']).get(key, key) - - def toggle_lang(self): - """切换语言""" - self.lang = 'en' if self.lang == 'zh' else 'zh' - self.btn_lang_switch.config(text=self.t('lang_en') if self.lang == 'zh' else self.t('lang_zh')) - self._refresh_ui_texts() - self.log(f"语言已切换为 {'English' if self.lang == 'en' else '中文'}", "INFO") - - def toggle_theme(self): - """切换主题""" - if self.theme == 'dark': - self.colors = dict(self.colors_light) - self.theme = 'light' - self.btn_theme_switch.config(text=self.t('theme_dark')) - else: - self.colors = dict(self.colors_dark) - self.theme = 'dark' - self.btn_theme_switch.config(text=self.t('theme_light')) - self._apply_theme() - - def _apply_theme(self): - """应用当前主题到所有控件""" - c = self.colors - self.root.configure(bg=c['bg_dark']) - style = ttk.Style() - style.configure('TFrame', background=c['bg_dark']) - style.configure('TLabel', background=c['bg_dark'], foreground=c['text']) - style.configure('TLabelframe', background=c['bg_dark'], foreground=c['text']) - style.configure('TLabelframe.Label', background=c['bg_dark'], foreground=c['accent']) - style.configure('TProgressbar', background=c['accent'], troughcolor=c['bg_light'], borderwidth=0) - self.log_text.tag_config('INFO', foreground='#74b9ff') - self.log_text.tag_config('SUCCESS', foreground='#55efc4') - self.log_text.tag_config('ERROR', foreground='#ff7675') - self.log_text.tag_config('WARNING', foreground='#ffeaa7') - self.log_text.tag_config('CMD', foreground='#a29bfe') - if self.theme == 'light': - self.log_text.configure(bg='#ffffff', fg='#2d3436') - else: - self.log_text.configure(bg='#2d2d3d', fg='#e0e0e0') - - def _refresh_ui_texts(self): - """刷新所有UI文本""" - t = self.t - widgets = [ - (getattr(self, 'title_label', None), 'title', None), - (getattr(self, 'subtitle_label', None), 'about_company', None), - (getattr(self, 'btn_root', None), 'btn_root', None), - (getattr(self, 'btn_push', None), 'btn_push', None), - (getattr(self, 'btn_install_all', None), 'btn_install', None), - (getattr(self, 'btn_language', None), 'btn_language', None), - (getattr(self, 'btn_timezone', None), 'btn_timezone', None), - (getattr(self, 'btn_settings', None), 'btn_settings', None), - (getattr(self, 'btn_reboot', None), 'btn_reboot', None), - (getattr(self, 'btn_exit', None), 'btn_disable_upgrade', None), - (getattr(self, 'btn_clear', None), 'btn_clear_log', None), - (getattr(self, 'log_title_label', None), 'log_title', None), - (getattr(self, 'status_text', None), 'status_ready', None), - (getattr(self, 'device_label', None), 'device_label', None), - (getattr(self, 'vin_label_title', None), 'vin_label', None), - (getattr(self, 'auth_label_title', None), 'auth_label', None), - (getattr(self, 'btn_refresh', None), 'btn_refresh', None), - (getattr(self, 'hint_label', None), 'hint_factory', None), - ] - for w, key, _ in widgets: - if w: - w.config(text=t(key)) - self.btn_theme_switch.config(text=t('theme_light') if self.theme == 'dark' else t('theme_dark')) - self.btn_lang_switch.config(text=t('lang_en') if self.lang == 'zh' else t('lang_zh')) - if self.vin: - self._update_device_status_impl(self.device_connected, self.vin, - getattr(self, '_last_authorized', False)) - - def _log_impl(self, message, level="INFO"): - """日志写入的实际实现(必须在主线程调用)""" - timestamp = datetime.now().strftime("%H:%M:%S") - log_entry = f"[{timestamp}] [{level}] {message}\n" - self.log_text.insert(tk.END, log_entry, level) - self.log_text.see(tk.END) - - def log(self, message, level="INFO"): - """添加日志(线程安全)""" - self.run_on_ui_thread(self._log_impl, message, level) - - def clear_log(self): - """清空日志""" - self.log_text.delete(1.0, tk.END) - self.log("日志已清空", "INFO") - - def _show_progress_impl(self, show=True, is_push=False): - """显示/隐藏进度条的实际实现(必须在主线程调用)""" - if is_push: - if show: - self.push_progress_label.pack() - self.push_progress.pack(fill=tk.X, pady=(2, 0)) - self.push_progress['value'] = 0 - else: - self.push_progress_label.pack_forget() - self.push_progress.pack_forget() - else: - if show: - self.progress_label.pack() - self.progress.pack(fill=tk.X, pady=(2, 0)) - self.progress['value'] = 0 - else: - self.progress_label.pack_forget() - self.progress.pack_forget() - - def show_progress(self, show=True, is_push=False): - """显示/隐藏进度条(线程安全)""" - self.run_on_ui_thread(self._show_progress_impl, show, is_push) - - def _update_progress_impl(self, value, max_value=100, label="", is_push=False): - """更新进度条的实际实现(必须在主线程调用)""" - if is_push: - percent = (value / max_value) * 100 - self.push_progress['value'] = percent - self.push_progress_label.config(text=f"{label}: {value}/{max_value} ({percent:.1f}%)") - else: - percent = (value / max_value) * 100 - self.progress['value'] = percent - self.progress_label.config(text=f"{label}: {value}/{max_value} ({percent:.1f}%)") - self.root.update_idletasks() - - def update_progress(self, value, max_value=100, label="", is_push=False): - """更新进度条(线程安全)""" - self.run_on_ui_thread(self._update_progress_impl, value, max_value, label, is_push) - - def update_device_status(self, connected, vin=None, authorized=False): - """更新设备状态显示(线程安全:立即设状态变量,UI走主线程)""" - self.device_connected = connected - if vin is not None: - self.vin = vin - self.run_on_ui_thread(self._update_device_status_impl, connected, vin, authorized) - - def _update_device_status_impl(self, connected, vin, authorized): - """设备状态UI更新的实际实现(必须在主线程调用)""" - self._last_authorized = authorized - t = self.t - if connected: - self.status_indicator.itemconfig(self.status_dot, fill=self.colors['success']) - self.device_status_label.config(text=t('status_connected'), fg=self.colors['success']) - if vin: - self.vin_label.config(text=vin, fg=self.colors['success']) - if authorized: - self.auth_label.config(text=t('auth_yes'), fg=self.colors['success']) - else: - self.auth_label.config(text=t('auth_no'), fg=self.colors['error']) - else: - self.vin_label.config(text=t('vin_none'), fg=self.colors['error']) - self.auth_label.config(text=t('auth_none'), fg=self.colors['error']) - else: - self.status_indicator.itemconfig(self.status_dot, fill=self.colors['error']) - self.device_status_label.config(text=t('status_disconnected'), fg=self.colors['error']) - self.vin_label.config(text=t('vin_none'), fg=self.colors['error']) - self.auth_label.config(text=t('auth_none'), fg=self.colors['error']) - - def check_device_connection(self): - """检查设备是否连接""" - if self.debug_mode: - return True - if not self.device_connected: - messagebox.showwarning("设备未连接", "请先连接设备并点击「检查」按钮刷新状态!") - return False - return True - - def start_device_monitor(self): - """启动设备状态监控(每5秒检查一次)""" - def monitor(): - while True: - try: - result = subprocess.run(f'{self.adb} -d devices', shell=True, capture_output=True, text=True) - lines = result.stdout.strip().split('\n') - devices = [line for line in lines[1:] if line.strip() and 'device' in line and 'offline' not in line] - - if devices and not self.device_connected and not self._refreshing: - # 设备新连接,刷新状态 - self.refresh_device_status() - elif not devices and self.device_connected: - # 设备断开连接 - self.update_device_status(False) - self.log("设备已断开连接", "WARNING") - - time.sleep(5) - except: - time.sleep(5) - - threading.Thread(target=monitor, daemon=True).start() - - def get_root_permission(self): - """获取 root 权限,首次获取需重启""" - if not self.check_device_connection(): - return - - def get_root(): - self.show_progress(True, is_push=False) - - # 执行 adb -d root - ok_root, out_root = self.run_adb_command('adb -d root') - if not ok_root: - self.log("获取 root 失败", "ERROR") - self.show_progress(False, is_push=False) - return - - time.sleep(1) - - # 执行 adb -d remount(需同时捕获 stdout 和 stderr) - remount_result = subprocess.run(f'{self.adb} -d remount', shell=True, - capture_output=True, text=True) - if remount_result.returncode != 0: - self.log("获取权限失败", "ERROR") - self.show_progress(False, is_push=False) - return - - # 判断是否需要重启:首次 remount 返回 "Now reboot your device for settings to take effect" - combined_output = (remount_result.stdout + remount_result.stderr).lower() - if 'now reboot your device' in combined_output: - self.log("首次获取权限,需要重启设备...", "INFO") - ok, _ = self.run_adb_command('adb -d shell reboot') - if ok: - self.log("设备即将重启,重启后权限生效", "INFO") - self.update_device_status(False) - else: - self.log("重启失败", "ERROR") - else: - self.log("已获取权限", "SUCCESS") - - self.show_progress(False, is_push=False) - - threading.Thread(target=get_root, daemon=True).start() - - def check_package_extracted(self): - """检查语言包是否已解压""" - has_app = self.apps_dir and self.apps_dir.exists() and len(list(self.apps_dir.glob("*.apk"))) > 0 - has_priv = self.priv_apps_dir and self.priv_apps_dir.exists() and len(list(self.priv_apps_dir.glob("*.apk"))) > 0 - if has_app or has_priv: - ok, reason = self._validate_extracted_apks() - if not ok: - self.log(f"已解压缓存无效: {reason}", "ERROR") - self._clear_extracted_cache() - return False - return has_app or has_priv - - def _validate_extracted_apks(self): - apks = [] - if self.apps_dir and self.apps_dir.exists(): - apks.extend(self.apps_dir.glob("*.apk")) - if self.priv_apps_dir and self.priv_apps_dir.exists(): - apks.extend(self.priv_apps_dir.glob("*.apk")) - if not apks: - return False, "未找到可用 APK" - zero_apks = [apk.name for apk in apks if apk.stat().st_size <= 0] - if zero_apks: - preview = ", ".join(zero_apks[:5]) - suffix = "..." if len(zero_apks) > 5 else "" - return False, f"发现 0KB APK: {preview}{suffix}" - return True, "" - - def _clear_extracted_cache(self): - if self.temp_dir and self.temp_dir.exists(): - shutil.rmtree(self.temp_dir, ignore_errors=True) - time.sleep(0.5) - self.apps_dir = None - self.priv_apps_dir = None - - def _format_extract_error(self, err_msg, return_code): - text = (err_msg or "").lower() - if any(marker in text for marker in ( - "wrong password", - "incorrect password", - "password is incorrect", - "data error in encrypted file", - "can not open encrypted archive", - )): - return "解压密码错误,请重新确认 package.bin 密码" - if "data error" in text: - return "资源包数据错误,可能是密码错误或 package.bin 损坏" - if "headers error" in text or "unexpected end" in text: - return "资源包损坏或不完整,请检查 package.bin" - if err_msg.strip(): - return f"解压失败: {err_msg.strip()[:300]}" - return f"解压失败 (返回码 {return_code}),请检查密码是否正确" - - def extract_package_silent(self): - """静默解压语言包(带进度)""" - if not self.package_file.exists(): - self.log(f"错误:未找到资源包 ({self.package_file})", "ERROR") - return False - - if not self.extract_password: - self.log("错误:解压密码未设置", "ERROR") - return False - - if not os.path.exists(self.sz): - self.log(f"错误:未找到 7za.exe ({self.sz})", "ERROR") - return False - - try: - # 使用用户目录,无需管理员权限 - local_appdata = os.environ.get('LOCALAPPDATA', os.path.expanduser('~\\AppData\\Local')) - hidden_path = Path(local_appdata) / ".cache" / "system" / ".android" - hidden_path.mkdir(parents=True, exist_ok=True) - - self.temp_dir = hidden_path / "apps_cache_S05" - - # 如果已存在,先清理 - if self.temp_dir.exists(): - shutil.rmtree(self.temp_dir, ignore_errors=True) - time.sleep(0.5) - - self.temp_dir.mkdir(parents=True, exist_ok=True) - - # 设置隐藏属性(Windows) - if sys.platform == 'win32': - subprocess.run(f'attrib +h "{self.temp_dir.parent}"', shell=True, capture_output=True) - subprocess.run(f'attrib +h "{self.temp_dir}"', shell=True, capture_output=True) - - self.log(f"正在解压资源包...", "INFO") - - # 使用 7za 解压(不用 text=True 避免编码问题) - self.update_progress(0, 1, "资源加载中...") - result = subprocess.run( - [self.sz, 'x', str(self.package_file), - f'-p{self.extract_password}', - f'-o{self.temp_dir}', '-y'], - capture_output=True, - creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 - ) - - if result.returncode != 0: - err_msg = "" - for output in [result.stderr, result.stdout]: - if output: - for enc in ['gbk', 'utf-8']: - try: - err_msg += output.decode(enc, errors='replace') - break - except: - continue - self.log(self._format_extract_error(err_msg, result.returncode), "ERROR") - self._clear_extracted_cache() - return False - self.update_progress(1, 1, "资源加载完成") - - # 查找app和priv-app目录 - self.apps_dir = None - self.priv_apps_dir = None - - app_candidates = list(self.temp_dir.rglob("app")) or list(self.temp_dir.rglob("apps")) - if app_candidates: - self.apps_dir = app_candidates[0] - - priv_app_candidates = list(self.temp_dir.rglob("priv-app")) or list(self.temp_dir.rglob("priv-apps")) - if priv_app_candidates: - self.priv_apps_dir = priv_app_candidates[0] - - if not self.apps_dir and not self.priv_apps_dir: - self.log("警告:未找到 app/priv-app 目录", "WARNING") - self._clear_extracted_cache() - return False - - apk_count = len(list(self.apps_dir.glob("*.apk"))) if self.apps_dir else 0 - priv_count = len(list(self.priv_apps_dir.glob("*.apk"))) if self.priv_apps_dir else 0 - ok, reason = self._validate_extracted_apks() - if not ok: - self.log(f"解压后的资源无效: {reason}。已停止刷入,请检查解压密码或资源包。", "ERROR") - self._clear_extracted_cache() - return False - self.log(f"资源准备完成 (app: {apk_count}, priv-app: {priv_count})", "SUCCESS") - return True - - except Exception as e: - if getattr(self, 'debug_mode', False): - self.log(f"资源准备失败: {str(e)}", "ERROR") - import traceback - self.log(traceback.format_exc(), "ERROR") - else: - self.log("资源准备失败,请检查网络连接后重试", "ERROR") - self._clear_extracted_cache() - return False - - def check_environment(self): - """检查环境""" - try: - result = subprocess.run(f'{self.adb} version', shell=True, capture_output=True, text=True) - if result.returncode == 0: - self.refresh_device_status() - if not self.package_file.exists(): - self.log("未找到资源包文件", "WARNING") - else: - self._try_reuse_extracted() - else: - self.log("未找到adb命令,请将ADB文件放入本目录", "ERROR") - except FileNotFoundError: - self.log("未找到adb命令,请将ADB文件放入本目录", "ERROR") - - def _try_reuse_extracted(self): - """检查磁盘上是否已有解压好的资源,有则直接复用""" - local_appdata = os.environ.get('LOCALAPPDATA', os.path.expanduser('~\\AppData\\Local')) - cache_dir = Path(local_appdata) / ".cache" / "system" / ".android" / "apps_cache_S05" - if not cache_dir.exists(): - return - - app_candidates = list(cache_dir.rglob("app")) or list(cache_dir.rglob("apps")) - priv_candidates = list(cache_dir.rglob("priv-app")) or list(cache_dir.rglob("priv-apps")) - - has_app = False - has_priv = False - if app_candidates: - apks = list(app_candidates[0].glob("*.apk")) - has_app = len(apks) > 0 - if priv_candidates: - apks = list(priv_candidates[0].glob("*.apk")) - has_priv = len(apks) > 0 - - if has_app or has_priv: - if has_app: - self.apps_dir = app_candidates[0] - if has_priv: - self.priv_apps_dir = priv_candidates[0] - self.temp_dir = cache_dir - ok, reason = self._validate_extracted_apks() - if not ok: - self.log(f"缓存资源无效,已清理: {reason}", "WARNING") - self._clear_extracted_cache() - return - # self.log("已复用缓存的资源文件", "INFO") - - def refresh_device_status(self): - """刷新设备状态""" - # 防止并发刷新 - if self._refreshing: - return - self._refreshing = True - - def refresh(): - was_connected = self.device_connected - - # 检查设备连接 - result = subprocess.run(f'{self.adb} -d devices', shell=True, capture_output=True, text=True) - lines = result.stdout.strip().split('\n') - devices = [line for line in lines[1:] if line.strip() and 'device' in line and 'offline' not in line] - - if devices: - # 只在首次连接时打日志 - if not was_connected: - self.log("设备已连接", "SUCCESS") - - # 获取VIN — 兼容两种 key,过滤 Android null 返回值 - vin = '' - for key in ('ca_vin_info', 'VIN'): - vin_result = subprocess.run( - f'{self.adb} -d shell settings get system {key}', - shell=True, capture_output=True, text=True) - vin = vin_result.stdout.strip() - if vin and vin != 'null': - break - vin = '' - if vin: - self.log(f"当前车辆VIN: {vin}", "INFO") - - # 验证授权 - authorized = self.check_authorization(vin) - self.update_device_status(True, vin, authorized) - else: - self.log("无法获取VIN", "WARNING") - self.update_device_status(True, None, False) - else: - if was_connected: - self.log("设备未连接", "WARNING") - self.update_device_status(False) - - self._refreshing = False - - threading.Thread(target=refresh, daemon=True).start() - - def check_authorization(self, vin): - """检查授权""" - if self.debug_mode: - self.log("调试模式: 跳过授权验证", "WARNING") - return True - self.log("正在验证授权...", "INFO") - try: - url = f"{self.api_url}?vin={vin}" - req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) - - with urlopen(req, timeout=10) as response: - data = json.loads(response.read().decode('utf-8')) - - if data.get('authorized') == True: - self.log("✅ 授权验证通过!", "SUCCESS") - if 'data' in data and 'vehicleName' in data['data']: - self.log(f"车辆名称: {data['data']['vehicleName']}", "INFO") - return True - else: - self.log(f"❌ 授权验证失败", "ERROR") - return False - - except Exception as e: - self.log(f"❌ 授权验证失败", "ERROR") - return False - - def fetch_package_password(self): - """从服务端获取资源包解压密码""" - if not self.vin: - self.log("请先连接adb!", "ERROR") - return False - - try: - pwd_api_url = "https://api.changan.softwindy.cn/api/authorizations/package-key" - url = f"{pwd_api_url}?vin={self.vin}" - req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) - - with urlopen(req, timeout=10) as response: - data = json.loads(response.read().decode('utf-8')) - - if data.get('success') and 'data' in data and 'password' in data['data']: - self.extract_password = data['data']['password'] - return True - else: - self.log(f"数据准备失败: {data.get('message', '未知错误')}", "ERROR") - return False - - except Exception as e: - self.log(f"数据准备失败: {str(e)}", "ERROR") - return False - - def run_adb_command(self, command): - """执行 adb 命令,静默执行,仅返回结果""" - command = command.replace('adb', self.adb, 1) - if self.debug_mode: - self.log(f"CMD: {command}", "CMD") - try: - result = subprocess.run(command, shell=True, capture_output=True, text=True, encoding='utf-8') - if self.debug_mode: - out = result.stdout.strip() - err = result.stderr.strip() - if out: - self.log(f" -> {out[:300]}", "CMD") - if err: - self.log(f" !! {err[:300]}", "ERROR") - if result.returncode == 0: - return True, result.stdout.strip() - else: - return False, result.stderr.strip() - except Exception as e: - return False, str(e) - - def push_single_apk(self, apk_path, apk_name, target_type="app"): - """推送单个APK到系统分区,返回 (成功, 错误信息)""" - temp_apk_path = f"/data/local/tmp/{apk_name}.apk" - target_dir = f"/system/priv-app/{apk_name}" if target_type == "priv-app" else f"/system/app/{apk_name}" - target_apk_path = f"{target_dir}/{apk_name}.apk" - - ok, err = self.run_adb_command(f'adb -d push "{apk_path}" {temp_apk_path}') - if not ok: - return False, f"push失败: {err}" - - self.run_adb_command(f'adb -d shell mkdir -p {target_dir}') - ok, err = self.run_adb_command(f'adb -d shell cp {temp_apk_path} {target_apk_path}') - self.run_adb_command(f'adb -d shell rm -f {temp_apk_path}') - if not ok: - return False, f"cp失败: {err}" - - return True, "" - - def push_all_apks(self): - """推送APK到系统分区(支持app和priv-app)""" - if not self.check_device_connection(): - return - if not self.vin: - messagebox.showwarning("警告", "请先刷新设备状态并获取VIN码") - return - - messagebox.showwarning("⚠️ 重要提示", - "刷入过程中请勿:\n" - " ● 重启车机\n" - " ● 退出本程序\n" - " ● 关闭电脑\n\n" - "否则可能导致车机系统损坏!") - - def do_push_all(): - if not self.check_authorization(self.vin): - self.run_on_ui_thread(lambda: messagebox.showerror("授权失败", "设备未授权")) - return - if not self.extract_password: - if not self.fetch_package_password(): - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源准备失败!")) - return - if not self.check_package_extracted(): - self.show_progress(True, is_push=False) - if not self.extract_package_silent(): - self.show_progress(False, is_push=False) - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源准备失败!")) - return - self.show_progress(False, is_push=False) - - if (not self.apps_dir or not self.apps_dir.exists()) and \ - (not self.priv_apps_dir or not self.priv_apps_dir.exists()): - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源目录未找到")) - return - - self.show_progress(True, is_push=True) - self.run_adb_command('adb -d shell mkdir -p /data/local/tmp') - - all_apks = [] - if self.apps_dir and self.apps_dir.exists(): - for apk in self.apps_dir.glob("*.apk"): - all_apks.append((apk, "app")) - if self.priv_apps_dir and self.priv_apps_dir.exists(): - for apk in self.priv_apps_dir.glob("*.apk"): - all_apks.append((apk, "priv-app")) - - if not all_apks: - # 缓存可能过期,强制重新解压 - self.apps_dir = None - self.priv_apps_dir = None - self.temp_dir = None - if not self.fetch_package_password() or not self.extract_package_silent(): - self.log("未找到语言包文件", "WARNING") - self.show_progress(False, is_push=True) - return - # 重新收集 - all_apks = [] - if self.apps_dir and self.apps_dir.exists(): - for apk in self.apps_dir.glob("*.apk"): - all_apks.append((apk, "app")) - if self.priv_apps_dir and self.priv_apps_dir.exists(): - for apk in self.priv_apps_dir.glob("*.apk"): - all_apks.append((apk, "priv-app")) - if not all_apks: - self.log("未找到语言包文件", "WARNING") - self.show_progress(False, is_push=True) - return - - total = len(all_apks) - success_count = 0 - aborted = False - for i, (apk_path, apk_type) in enumerate(all_apks, 1): - apk_name = apk_path.stem - ok, err = self.push_single_apk(apk_path, apk_name, apk_type) - if ok: - success_count += 1 - else: - if "Read-only file system" in err: - self.log("请先点击「获取权限」获取权限后再试", "ERROR") - aborted = True - break - self.update_progress(i, total, "正在刷入...", is_push=True) - - self.update_progress(total, total, "刷入完成" if not aborted else "已终止", is_push=True) - - if success_count == total: - self.log(f"刷入完成,共 {total} 个语言包", "SUCCESS") - self.log("语言包已刷入完成,重启设备后生效,您可在适当时候重启", "WARNING") - elif success_count > 0: - self.log(f"部分刷入成功({success_count}/{total})", "WARNING") - if not aborted: - self.log("语言包已刷入完成,重启设备后生效,您可在适当时候重启", "WARNING") - - self.show_progress(False, is_push=True) - - threading.Thread(target=do_push_all, daemon=True).start() - - def install_all_apks(self): - """批量安装APK — 手动选择文件夹""" - if not self.check_device_connection(): - return - - apk_dir = filedialog.askdirectory(title="选择包含APK文件的文件夹") - if not apk_dir: - return - - apk_files = list(Path(apk_dir).glob("*.apk")) - if not apk_files: - messagebox.showerror("错误", "所选文件夹中没有APK文件!") - return - - result = messagebox.askyesno("确认安装", - f"找到 {len(apk_files)} 个APK文件\n\n是否开始批量安装?") - if not result: - return - - def install(): - self.show_progress(True, is_push=True) - total = len(apk_files) - self.log(f"开始批量安装 {total} 个APK...", "INFO") - self.run_adb_command('adb -d shell setprop vecentek.model 1') - - success_count = 0 - for i, apk_path in enumerate(apk_files, 1): - self.update_progress(i, total, "安装中...", is_push=True) - success, _ = self.run_adb_command(f'adb -d install -r "{apk_path}"') - if success: - success_count += 1 - - self.run_adb_command('adb -d shell setprop vecentek.model 0') - self.update_progress(total, total, "安装完成", is_push=True) - self.show_progress(False, is_push=True) - - if success_count == total: - self.log(f"安装完成:全部 {total} 个成功", "SUCCESS") - messagebox.showinfo("安装完成", f"成功安装 {total} 个APK!") - elif success_count > 0: - self.log(f"安装完成:{success_count}/{total} 成功", "WARNING") - messagebox.showwarning("部分成功", f"成功: {success_count}\n失败: {total - success_count}") - else: - self.log("安装失败", "ERROR") - messagebox.showerror("安装失败", "所有APK安装失败!") - - self.show_progress(False, is_push=True) - - threading.Thread(target=install, daemon=True).start() - - def install_single_apk(self): - """安装单个APK""" - # 检查设备连接 - if not self.check_device_connection(): - return - - file_path = filedialog.askopenfilename( - title="选择APK文件", - filetypes=[("APK文件", "*.apk"), ("所有文件", "*.*")] - ) - - if not file_path: - return - - def install(): - self.show_progress(True, is_push=True) - self.update_progress(50, 100, f"安装中", is_push=True) - self.run_adb_command('adb -d shell setprop vecentek.model 1') - success, _ = self.run_adb_command(f'adb -d install -r "{file_path}"') - self.run_adb_command('adb -d shell setprop vecentek.model 0') - self.update_progress(100, 100, f"完成", is_push=True) - if success: - self.log("✓ 安装成功", "SUCCESS") - else: - self.log("✗ 安装失败", "ERROR") - self.show_progress(False, is_push=True) - - threading.Thread(target=install, daemon=True).start() - - def open_language_settings(self): - """打开系统语言设置""" - if not self.check_device_connection(): - return - self.run_adb_command('adb -d shell am start -a android.settings.LOCALE_SETTINGS') - - def open_language_quick_set(self): - """打开快捷语言设置弹窗""" - # 检查设备连接 - if not self.check_device_connection(): - return - - # 创建弹窗 - popup = tk.Toplevel(self.root) - popup.title("快捷语言设置") - popup.geometry("520x320") - popup.configure(bg=self.colors['bg_dark']) - popup.resizable(False, False) - - # 居中显示 - popup.update_idletasks() - x = self.root.winfo_x() + (self.root.winfo_width() - 520) // 2 - y = self.root.winfo_y() + (self.root.winfo_height() - 320) // 2 - popup.geometry(f"+{x}+{y}") - popup.transient(self.root) - popup.grab_set() - - # 标题 - header = tk.Label(popup, text="选择目标语言", - font=('Microsoft YaHei', 13, 'bold'), - fg=self.colors['accent'], - bg=self.colors['bg_dark']) - header.pack(pady=(15, 10)) - - hint = tk.Label(popup, text="点击按钮即可将系统语言切换为对应语言,重启后生效", - font=('Microsoft YaHei', 9), - fg=self.colors['text_secondary'], - bg=self.colors['bg_dark']) - hint.pack(pady=(0, 12)) - - # 语言列表:(显示名, locale_code) - languages = [ - ("🇨🇳 中文", "zh-CN"), - ("英 English", "en-US"), - ("俄 Русский", "ru-RU"), - ("法 Français", "fr-FR"), - ("西 Español", "es-ES"), - ("葡 Português", "pt-BR"), - ("意 Italiano", "it-IT"), - ("阿 العربية", "ar-SA"), - ] - - # 创建按钮容器 - btn_frame = tk.Frame(popup, bg=self.colors['bg_dark']) - btn_frame.pack(pady=(0, 10)) - - btn_colors = [ - self.colors['accent'], self.colors['info'], - self.colors['success'], self.colors['warning'], - '#e17055', '#00b894', - '#6c5ce7', '#0984e3', - ] - - for i, (label, locale) in enumerate(languages): - row = i // 4 - col = i % 4 - - def make_cmd(loc=locale, lbl=label): - return lambda: self._quick_set_language(loc, lbl, popup) - - btn = tk.Button(btn_frame, text=label, - command=make_cmd(), - font=('Microsoft YaHei', 10), - fg='white', - bg=btn_colors[i], - relief=tk.FLAT, - cursor='hand2', - width=12, height=2) - btn.grid(row=row, column=col, padx=5, pady=5) - - # 底部分隔 + 打开系统设置入口 - sep = tk.Frame(popup, bg=self.colors['border'], height=1) - sep.pack(fill=tk.X, padx=20, pady=(8, 6)) - - sys_btn = tk.Button(popup, text="⚙️ 打开系统语言设置(手动选择)", - command=lambda: self._open_sys_and_close(popup), - font=('Microsoft YaHei', 9), - fg=self.colors['text_secondary'], - bg=self.colors['bg_light'], - relief=tk.FLAT, - cursor='hand2') - sys_btn.pack(pady=(0, 10)) - - def _quick_set_language(self, locale_code, language_name, popup): - """执行快捷语言设置""" - popup.destroy() - - def do_set(): - self.log(f"正在设置系统语言为: {language_name} ({locale_code})", "INFO") - success, output = self.run_adb_command( - f'adb -d shell settings put system system_locales {locale_code}' - ) - - if success: - self.log(f"✓ 语言已设置为 {language_name}", "SUCCESS") - messagebox.showinfo( - "设置成功", - f"系统语言已设置为 {language_name}\n\n⚠️ 请重启设备使其生效。" - ) - else: - self.log(f"✗ 语言设置失败: {output}", "ERROR") - messagebox.showerror("设置失败", f"语言设置失败!\n\n{output}") - - threading.Thread(target=do_set, daemon=True).start() - - def _open_sys_and_close(self, popup): - """关闭弹窗并打开系统语言设置""" - popup.destroy() - self.open_language_settings() - - def open_timezone_settings(self): - """打开时区设置""" - if not self.check_device_connection(): - return - self.run_adb_command('adb -d shell am start -a android.settings.TIMEZONE_SETTINGS') - - def open_android_settings(self): - """打开安卓原生设置""" - if not self.check_device_connection(): - return - self.run_adb_command('adb -d shell am start -a android.settings.SETTINGS') - - def reboot_device(self): - """重启设备""" - if not self.check_device_connection(): - return - if messagebox.askyesno("确认重启", "确定要重启设备吗?"): - subprocess.Popen(f'{self.adb} -d shell reboot', shell=True, - stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) - self.log("设备正在重启...", "INFO") - self.update_device_status(False) - - def on_disable_upgrade(self): - """禁用系统升级""" - # 检查设备连接 - if not self.check_device_connection(): - return - - # 弹窗确认 - result = messagebox.askyesno( - "确认禁用升级", - "⚠️ 警告:禁用系统升级后,将无法接收系统更新!\n\n" - "是否确定要禁用系统升级应用?\n\n" - "禁用命令:\n" - "adb -d shell pm disable-user --user 0 com.incall.apps.softmanager" - ) - - if not result: - self.log("已取消禁用升级操作", "INFO") - return - - def disable(): - self.show_progress(True, is_push=False) - success, output = self.run_adb_command( - 'adb -d shell pm disable-user --user 0 com.incall.apps.softmanager') - if success: - self.log("系统升级已禁用", "SUCCESS") - messagebox.showinfo("成功", "系统升级已成功禁用!") - else: - self.log("禁用系统升级失败", "ERROR") - messagebox.showerror("错误", f"禁用失败:{output}") - self.show_progress(False, is_push=False) - - threading.Thread(target=disable, daemon=True).start() - - def _on_vin_input_focus_in(self, event): - """输入框获得焦点时清除占位符""" - if self.vin_input.get() == "请输入VIN": - self.vin_input.delete(0, tk.END) - self.vin_input.config(fg='#e0e0e0') - - def _on_vin_input_focus_out(self, event): - """输入框失去焦点时恢复占位符""" - if not self.vin_input.get(): - self.vin_input.insert(0, "请输入VIN") - self.vin_input.config(fg='#636e72') - - def query_password_by_vin(self): - """通过VIN查询密码""" - vin = self.vin_input.get().strip() - if not vin: - messagebox.showwarning("提示", "请输入VIN码") - return - - def do_query(): - try: - api_url = "https://api.changan.softwindy.cn/api/authorizations/generate-password-by-vin" - url = f"{api_url}?vin={vin}" - req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) - - with urlopen(req, timeout=10) as response: - data = json.loads(response.read().decode('utf-8')) - - def update_ui(): - if data.get('success'): - pwd = data.get('data', {}).get('devicePassword', '未知') - self.pwd_result_label.config( - text=f"密码: *#{pwd}#*", - fg=self.colors['success'] - ) - self.log(f"密码查询成功 VIN={vin} -> {pwd}", "SUCCESS") - else: - msg = data.get('message', '查询失败') - self.pwd_result_label.config( - text=f"失败: {msg}", - fg=self.colors['error'] - ) - self.log(f"密码查询失败: {msg}", "ERROR") - - self.run_on_ui_thread(update_ui) - - except Exception as e: - def update_ui_error(): - self.pwd_result_label.config( - text=f"请求失败", - fg=self.colors['error'] - ) - self.log(f"密码查询请求失败: {str(e)}", "ERROR") - self.run_on_ui_thread(update_ui_error) - - threading.Thread(target=do_query, daemon=True).start() - - def _toggle_debug(self, event=None): - """切换调试模式(隐藏入口,Ctrl+Shift+D)""" - if self.debug_mode: - self.debug_mode = False - self.log("调试模式已关闭", "WARNING") - self.status_text.config(text="就绪") - self.refresh_device_status() - return - - pwd = tk.simpledialog.askstring("调试模式", "请输入调试密码:", show='*', parent=self.root) - if pwd == "zxch5200": - self.debug_mode = True - self.update_device_status(True, "", True) - self.log("🔧 调试模式已开启 - 跳过授权和设备校验,显示详细ADB日志", "WARNING") - self.status_text.config(text="🔧 调试模式") - elif pwd is not None: - messagebox.showwarning("错误", "密码错误") - - def install_apps(self): - """安装App — 支持单选或多选APK文件""" - if not self.check_device_connection(): - return - - file_paths = filedialog.askopenfilenames( - title="选择APK文件", - filetypes=[("APK文件", "*.apk"), ("所有文件", "*.*")] - ) - if not file_paths: - return - - count = len(file_paths) - result = messagebox.askyesno("确认安装", f"已选择 {count} 个APK文件\n\n是否开始安装?") - if not result: - return - - def install(): - self.show_progress(True, is_push=True) - self.log(f"开始安装 {count} 个APK...", "INFO") - self.run_adb_command('adb -d shell setprop vecentek.model 1') - - success_count = 0 - for i, file_path in enumerate(file_paths, 1): - apk_name = Path(file_path).stem - self.update_progress(i, count, f"安装中 ({apk_name})", is_push=True) - success, _ = self.run_adb_command(f'adb -d install -r "{file_path}"') - if success: - self.log(f"✓ {apk_name}.apk", "SUCCESS") - success_count += 1 - else: - self.log(f"✗ {apk_name}.apk", "ERROR") - - self.run_adb_command('adb -d shell setprop vecentek.model 0') - self.update_progress(count, count, "安装完成", is_push=True) - self.show_progress(False, is_push=True) - - if success_count == count: - self.log(f"安装完成:全部 {count} 个成功", "SUCCESS") - messagebox.showinfo("安装完成", f"成功安装 {count} 个APK!") - elif success_count > 0: - self.log(f"安装完成:{success_count}/{count} 成功", "WARNING") - messagebox.showwarning("部分成功", f"成功: {success_count}\n失败: {count - success_count}") - else: - self.log("安装失败", "ERROR") - messagebox.showerror("安装失败", "所有APK安装失败!") - - threading.Thread(target=install, daemon=True).start() - - def run(self): - """运行程序""" - self.root.mainloop() - -def main(): - """主函数""" - if sys.version_info < (3, 6): - print("错误:需要Python 3.6或更高版本") - sys.exit(1) - - try: - app = ADKAPKGUI() - app.run() - except Exception as e: - print(f"启动失败: {e}") - import traceback - traceback.print_exc() - messagebox.showerror("错误", f"程序启动失败: {e}") - -if __name__ == "__main__": - main() diff --git a/S05/app.ico b/S05/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..2d65a13d279c013de850029486fb51eeca6b460b GIT binary patch literal 162254 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 +setlocal EnableExtensions cd /d "%~dp0" + set "ROOT=%~dp0.." set "TOOLS=%ROOT%\tools" -set NAME=深蓝S05刷入工具_fixed -set SRC=S05_fixed.py -title %NAME% - Build +set "NAME=Deepal_S05_Installer" +set "SRC=Deepal_S05.py" +set "ICON=%~dp0app.ico" +title %NAME% - Cython Build echo ============================================================ echo %NAME% - Cython Build echo ============================================================ echo. -where python >nul 2>&1 +where python >nul 2>nul if errorlevel 1 ( echo [ERROR] Python not found pause - exit /b + exit /b 1 ) -for /f "delims=" %%i in ('where python') do set PY=%%i +for /f "delims=" %%i in ('where python') do set "PY=%%i" echo Python: %PY% +if not exist "%SRC%" ( + echo [ERROR] Source not found: %SRC% + pause + exit /b 1 +) +if not exist "%ICON%" ( + echo [ERROR] Icon not found: %ICON% + pause + exit /b 1 +) +if not exist "%TOOLS%\adb.exe" ( + echo [ERROR] adb.exe not found in %TOOLS% + pause + exit /b 1 +) +if not exist "%TOOLS%\AdbWinApi.dll" ( + echo [ERROR] AdbWinApi.dll not found in %TOOLS% + pause + exit /b 1 +) +if not exist "%TOOLS%\AdbWinUsbApi.dll" ( + echo [ERROR] AdbWinUsbApi.dll not found in %TOOLS% + pause + exit /b 1 +) +if not exist "%TOOLS%\7za.exe" ( + echo [ERROR] 7za.exe not found in %TOOLS% + pause + exit /b 1 +) + echo [1/6] Installing deps... -%PY% -m pip install pyinstaller cython pyzipper -q +"%PY%" -m pip install pyinstaller cython pyzipper -q if errorlevel 1 ( - %PY% -m pip install pyinstaller cython pyzipper -q -i https://pypi.tuna.tsinghua.edu.cn/simple + "%PY%" -m pip install pyinstaller cython pyzipper -q -i https://pypi.tuna.tsinghua.edu.cn/simple +) +if errorlevel 1 ( + echo [ERROR] Dependency install failed + pause + exit /b 1 ) echo [2/6] Clean... -if exist "dist_cy" rmdir /s /q dist_cy 2>nul -if exist "build" rmdir /s /q build 2>nul -if exist "dist" rmdir /s /q dist 2>nul +if exist "dist_cy" rmdir /s /q "dist_cy" 2>nul +if exist "build" rmdir /s /q "build" 2>nul +if exist "dist" rmdir /s /q "dist" 2>nul +if exist "%NAME%.spec" del /q "%NAME%.spec" 2>nul echo [3/6] Cython compile... -mkdir dist_cy 2>nul -copy %SRC% dist_cy\_core.py >nul - -%PY% -c "open('dist_cy/setup_cython.py','w').write('from setuptools import setup\nfrom Cython.Build import cythonize\nsetup(ext_modules=cythonize(\"_core.py\", compiler_directives={\"language_level\":\"3\"}))\n')" - -cd dist_cy -%PY% setup_cython.py build_ext --inplace +mkdir "dist_cy" 2>nul +copy "%SRC%" "dist_cy\_core.py" >nul if errorlevel 1 ( - cd .. - echo [WARN] Cython failed, fallback - goto :NORMAL + echo [ERROR] Copy source failed + pause + exit /b 1 ) -for %%f in (_core*.pyd) do set PYD=%%f +"%PY%" -c "open('dist_cy/setup_cython.py','w',encoding='utf-8').write('from setuptools import setup\nfrom Cython.Build import cythonize\nsetup(ext_modules=cythonize(\"_core.py\", compiler_directives={\"language_level\":\"3\"}))\n')" +if errorlevel 1 ( + echo [ERROR] Failed to create Cython setup script + pause + exit /b 1 +) + +cd /d "dist_cy" +"%PY%" "setup_cython.py" build_ext --inplace +if errorlevel 1 ( + cd /d "%~dp0" + echo [ERROR] Cython failed. Build stopped. + pause + exit /b 1 +) + +set "PYD=" +for %%f in (_core*.pyd) do set "PYD=%%f" if "%PYD%"=="" ( - cd .. - echo [WARN] No pyd, fallback - goto :NORMAL + cd /d "%~dp0" + echo [ERROR] No Cython PYD generated. Build stopped. + pause + exit /b 1 ) echo PYD: %PYD% -copy "%PYD%" _core.pyd >nul +copy "%PYD%" "_core.pyd" >nul +if errorlevel 1 ( + cd /d "%~dp0" + echo [ERROR] Failed to copy Cython PYD + pause + exit /b 1 +) -%PY% -c "open('launcher.py','w').write('# -*- coding: utf-8 -*-\nfrom _core import main\nmain()\n')" +"%PY%" -c "open('launcher.py','w',encoding='utf-8').write('# -*- coding: utf-8 -*-\nfrom _core import main\nmain()\n')" +if errorlevel 1 ( + cd /d "%~dp0" + echo [ERROR] Failed to create launcher.py + pause + exit /b 1 +) echo [4/6] Copy resources... copy "%TOOLS%\adb.exe" . >nul copy "%TOOLS%\AdbWinApi.dll" . >nul copy "%TOOLS%\AdbWinUsbApi.dll" . >nul copy "%TOOLS%\7za.exe" . >nul -if exist "%ROOT%\app.ico" copy "%ROOT%\app.ico" . >nul +copy "%ICON%" . >nul +if errorlevel 1 ( + cd /d "%~dp0" + echo [ERROR] Copy resources failed + pause + exit /b 1 +) echo [5/6] PyInstaller... -%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ROOT%\app.ico" --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin launcher.py +"%PY%" -m PyInstaller --onefile --windowed --name="%NAME%" --icon="app.ico" --add-data "adb.exe;." --add-data "AdbWinApi.dll;." --add-data "AdbWinUsbApi.dll;." --add-data "7za.exe;." --add-data "app.ico;." --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin "launcher.py" if errorlevel 1 ( - cd .. + cd /d "%~dp0" echo [ERROR] PyInstaller failed pause - exit /b + exit /b 1 ) echo [6/6] Cleanup... -del /q _core.py _core.c _core.pyd %PYD% launcher.py setup_cython.py 2>nul -rmdir /s /q build 2>nul -cd .. -goto :DONE +del /q "_core.py" "_core.c" "_core.pyd" "%PYD%" "launcher.py" "setup_cython.py" "app.ico" 2>nul +rmdir /s /q "build" 2>nul +cd /d "%~dp0" -:NORMAL -echo [INFO] Normal PyInstaller... -%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ROOT%\app.ico" --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin %SRC% - -:DONE echo. echo Done. if exist "dist_cy\dist\%NAME%.exe" ( echo Output: dist_cy\dist\%NAME%.exe -) else if exist "dist\%NAME%.exe" ( - echo Output: dist\%NAME%.exe ) else ( - echo Check dist folder + echo [ERROR] Output exe was not generated + pause + exit /b 1 ) pause diff --git a/UNI-T/UNI-T-multi-lan-installer.py b/UNI-T/UNI-T-multi-lan-installer.py new file mode 100644 index 0000000..2c13a05 --- /dev/null +++ b/UNI-T/UNI-T-multi-lan-installer.py @@ -0,0 +1,2112 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import os +import sys +import subprocess +import json +import re +import threading +import tkinter as tk +import atexit +from tkinter import ttk, scrolledtext, filedialog, messagebox, simpledialog +from pathlib import Path +from urllib.request import urlopen, Request +from urllib.error import URLError, HTTPError +from urllib.parse import urlencode +from datetime import datetime +import zipfile +try: + import pyzipper +except ImportError: + pyzipper = None +import shutil +import time + + +def get_app_dir(): + return Path(sys.executable).resolve().parent if getattr(sys, 'frozen', False) else Path(__file__).resolve().parent + + +def resource_candidates(file_name): + base_dir = get_app_dir() + candidates = [] + if getattr(sys, 'frozen', False): + candidates.append(Path(getattr(sys, '_MEIPASS', base_dir)) / file_name) + candidates.extend([ + base_dir / file_name, + base_dir / 'tools' / file_name, + base_dir / 'shared' / file_name, + base_dir.parent / 'tools' / file_name, + base_dir.parent / 'shared' / file_name, + base_dir.parent / file_name, + ]) + unique = [] + for candidate in candidates: + if candidate not in unique: + unique.append(candidate) + return unique + + +def find_resource(file_name): + candidates = resource_candidates(file_name) + for candidate in candidates: + if candidate.exists(): + return candidate + return candidates[0] + + +def find_tool(file_name, fallback=None): + path = find_resource(file_name) + if path.exists(): + return str(path) + return fallback or str(path) + + +def set_windows_app_user_model_id(): + if sys.platform != 'win32': + return + try: + import ctypes + ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID( + "yibin.keyi.unit.language.installer" + ) + except Exception: + pass + + +class ADKAPKGUI: + def __init__(self): + set_windows_app_user_model_id() + self.root = tk.Tk() + self.root.title("长安语言安装工具") + self.root.geometry("650x640") + self.root.resizable(True, True) + self.set_window_icon() + + # 固定颜色 + self.colors = { + 'bg_dark': '#1e1e2e', + 'bg_light': '#2a2a3e', + 'accent': '#6c5ce7', + 'accent_hover': '#5b4bc4', + 'success': '#00b894', + 'error': '#d63031', + 'warning': '#fdcb6e', + 'info': '#0984e3', + 'text': '#dfe6e9', + 'text_secondary': '#b2bec3', + 'border': '#3d3d5e' + } + + # 多语言 + self.lang = 'zh' + self.T = { + 'zh': { + 'title': '适用于UNI-T多语言安装', + 'btn_root': '🔓 获取权限', + 'btn_push': '📦 刷入语言包', + 'btn_install': '📱 安装App', + 'btn_language': '🌐 语言设置', + 'btn_timezone': '⏰ 时区设置', + 'btn_settings': '⚙️ 安卓设置', + 'btn_reboot': '🔄 重启设备', + 'btn_disable_upgrade': '❌ 禁用升级', + 'btn_clear_log': '🗑 清空日志', + 'btn_debug_extract': '解压测试', + 'device_label': '设备:', + 'vin_label': 'VIN码:', + 'auth_label': '授权:', + 'log_title': '📋 运行日志', + 'status_ready': '就绪', + 'status_connected': '已连接', + 'status_disconnected': '未连接', + 'status_detecting': '未检测', + 'vin_none': '未获取', + 'auth_none': '未验证', + 'auth_yes': '已授权', + 'auth_no': '未授权', + 'btn_refresh': '🔄 检查', + 'hint_factory': '🔧 关闭车辆WI-FI和4G网络,拨号获取的密码进入工程模式', + 'warn_no_device': '设备未连接', + 'warn_connect_first': '请先连接设备并点击「检查」按钮刷新状态!', + 'warn_no_vin': '请先刷新设备状态并获取VIN码', + 'err_auth_fail': '授权失败', + 'err_device_not_auth': '设备未授权', + 'err_resource_fail': '资源准备失败!', + 'err_no_resource_dir': '资源目录未找到', + 'info_flash_start': '开始刷入语言包...', + 'info_flash_done': '语言包刷入完成,重启设备后生效', + 'info_flash_fail': '语言包刷入失败', + 'warn_no_apk': '未找到语言包文件', + 'info_installing': '安装中...', + 'info_install_done': '安装完成', + 'info_log_cleared': '日志已清空', + 'confirm_reboot': '确定要重启设备吗?', + 'info_rebooting': '设备正在重启...', + 'warn_device_disconnected': '设备已断开连接', + 'info_device_connected': '设备已连接', + 'info_checking_auth': '正在验证授权状态...', + 'info_auth_pass': '✅ 授权验证通过!', + 'info_auth_fail': '❌ 授权验证失败', + 'info_preparing': '正在准备资源...', + 'err_no_package': '错误:未找到资源包', + 'err_no_password': '错误:解压密码未设置', + 'err_no_7za': '错误:未找到 7za.exe', + 'err_extract_fail': '解压失败', + 'info_extracting': '资源准备中...', + 'info_extract_done': '资源准备完成', + 'err_extract_user': '资源准备失败,请检查网络连接后重试', + 'warn_no_app_dir': '警告:未找到 app/priv-app 目录', + 'progress_resource_loading': '资源准备中...', + 'progress_resource_done': '资源准备完成', + 'progress_extracting_percent': '资源准备中 {percent}%', + 'progress_flashing': '正在刷入', + 'progress_flash_done': '刷入完成', + 'progress_aborted': '已终止', + 'progress_installing': '安装中', + 'progress_installing_name': '安装中 ({name})', + 'progress_done': '完成', + 'lang_zh': '中', + 'lang_en': 'EN', + 'switch_lang': '语言 / Language', + 'tip_1': '1. 安装语言过程中请保持车辆和电脑的电量充足,不可中途停止。', + 'tip_2': '2. 获取权限以后,车辆自动重启以后再进入语言刷入。', + 'tip_3': '3. 部分语言需要重启后生效,可以一切工作完成以后再重启。', + 'warn_flash_warning': '⚠️ 重要提示', + 'warn_flash_msg': '刷入过程中请勿:\n ● 重启车机\n ● 退出本程序\n ● 关闭电脑\n\n否则可能导致车机系统损坏!', + 'err_wrong_password': '请检查密码是否正确', + 'title_pop_lang': '快捷语言设置', + 'quick_lang_header': '选择目标语言', + 'quick_lang_hint': '点击按钮即可将系统语言切换为对应语言,重启后生效', + 'quick_lang_system': '⚙️ 打开系统语言设置(手动选择)', + 'msg_warn_title': '警告', + 'msg_error_title': '错误', + 'msg_done_title': '完成', + 'msg_success_title': '成功', + 'msg_auth_failed_title': '授权失败', + 'msg_device_unauthorized': '设备未授权', + 'msg_resource_prepare_failed': '资源准备失败!', + 'msg_resource_dir_missing': '资源目录未找到', + 'msg_no_apk_in_folder': '所选文件夹中没有APK文件!', + 'msg_confirm_install_title': '确认安装', + 'msg_confirm_install_many': '已选择 {count} 个APK文件\n\n是否开始安装?', + 'msg_confirm_install_folder': '找到 {count} 个APK文件\n\n是否开始批量安装?', + 'msg_install_success_many': '成功安装 {count} 个APK!', + 'msg_install_partial': '成功: {success}\n失败: {failed}', + 'msg_install_all_failed': '所有APK安装失败!', + 'msg_install_exception': '安装过程异常:{error}', + 'msg_quick_lang_success': '系统语言已设置为 {language}\n\n⚠️ 请重启设备使其生效。', + 'msg_quick_lang_failed': '语言设置失败!\n\n{output}', + 'msg_disable_confirm_title': '确认禁用升级', + 'msg_disable_confirm': '⚠️ 警告:禁用系统升级后,将无法接收系统更新!\n\n是否确定要禁用系统升级应用?', + 'msg_disable_success': '系统升级已成功禁用!', + 'msg_disable_failed': '禁用失败:{output}', + 'msg_reboot_confirm_title': '确认重启', + 'file_apk': 'APK文件', + 'file_all': '所有文件', + 'dialog_select_apk': '选择APK文件', + 'dialog_select_apk_folder': '选择包含APK文件的文件夹', + 'unknown_error': '未知错误', + 'status_debug': '调试模式', + 'debug_password_prompt': '请输入调试密码:', + 'debug_password_verifying': '正在校验调试密码...', + 'debug_wrong_password': '密码错误', + 'debug_verify_failed': '调试密码校验失败: {message}', + 'debug_need_enable': '请先按 Ctrl+Shift+D 进入调试模式', + 'debug_need_vin': '调试解压测试需要 VIN。请先连接设备刷新,或在调试模式中手动设置 VIN。', + 'log_debug_on': '🔧 调试模式已开启 - 跳过授权和设备校验,显示详细ADB日志', + 'log_debug_off': '调试模式已关闭', + 'log_lang_switched': '语言已切换为中文', + 'log_cache_invalid': '已解压缓存无效: {reason}', + 'log_cache_reuse_invalid': '缓存资源无效,已清理: {reason}', + 'log_package_missing': '未找到资源包文件: {path}', + 'log_adb_missing': '未找到adb命令,请将ADB文件放入本目录', + 'log_device_connected': '设备已连接', + 'log_device_disconnected': '设备已断开连接', + 'log_current_vin': '当前VIN: {vin}', + 'log_vin_unavailable': '无法读取VIN', + 'log_refresh_failed': '刷新设备状态失败: {error}', + 'log_auth_skip_debug': '调试模式:跳过授权', + 'log_auth_checking': '正在验证授权状态...', + 'log_auth_ok': '授权验证通过', + 'log_auth_failed': '授权验证失败', + 'log_vehicle_name': '车型名称: {name}', + 'log_adb_required': '请先连接 ADB 并获取 VIN', + 'log_data_prepare_failed_detail': '资源准备失败: {error}', + 'log_extract_password_missing': '错误:解压密码未设置', + 'log_7za_missing': '错误:未找到 7za.exe ({path})', + 'log_extracted_resource_invalid': '解压后的资源无效: {reason}。已停止刷入,请检查解压密码或资源包。', + 'log_extract_done': '资源准备完成', + 'log_extract_exception': '资源准备失败: {error}', + 'err_extract_wrong_password': '解压密码错误,请重新确认 UNI-T_package.bin 密码', + 'err_extract_data': '资源包数据错误,可能是密码错误或 UNI-T_package.bin 损坏', + 'err_extract_corrupt': '资源包损坏或不完整,请检查 UNI-T_package.bin', + 'err_extract_failed': '解压失败: {error}', + 'err_extract_failed_code': '解压失败 (返回码 {code}),请检查密码是否正确', + 'log_root_failed': '获取 root 失败', + 'log_permission_failed': '获取权限失败', + 'log_permission_reboot_required': '首次获取权限,需要重启设备...', + 'log_permission_rebooting': '设备即将重启,重启后权限生效', + 'log_reboot_failed': '重启失败', + 'log_permission_ok': '已获取权限', + 'log_flash_readonly': '请先点击「获取权限」获取权限后再试', + 'log_flash_complete_count': '刷入完成,共 {count} 个语言包', + 'log_flash_effect_after_reboot': '语言包已刷入完成,重启设备后生效,您可在适当时候重启', + 'log_flash_partial': '部分刷入成功({success}/{total})', + 'log_install_start': '开始安装 {count} 个APK...', + 'log_install_done_all': '安装完成:全部 {count} 个成功', + 'log_install_done_partial': '安装完成:{success}/{total} 成功', + 'log_install_failed': '安装失败', + 'log_install_exception': '安装过程异常: {error}', + 'log_install_success_item': '✓ {name}', + 'log_install_failed_item': '✗ {name}', + 'log_quick_lang_setting': '正在设置系统语言为: {language} ({locale})', + 'log_quick_lang_success': '✓ 语言已设置为 {language}', + 'log_quick_lang_failed': '✗ 语言设置失败: {output}', + 'log_rebooting': '设备正在重启...', + 'log_disable_cancelled': '已取消禁用升级操作', + 'log_disable_success': '系统升级已禁用', + 'log_disable_failed': '禁用系统升级失败', + 'log_package_key_failed': 'package-key 获取失败', + 'log_package_extract_success': '资源准备完成', + 'log_package_extract_failed': 'UNI-T_package.bin 解压测试失败', + 'err_no_usable_apk': '未找到可用 APK', + 'err_zero_apk': '发现 0KB APK: {files}', + 'err_push_failed': 'push失败: {error}', + 'err_cp_failed': 'cp失败: {error}', + }, + 'en': { + 'title': 'UNI-T Multi-Language', + 'btn_root': '🔓 Get Root', + 'btn_push': '📦 Flash Lang Pkg', + 'btn_install': '📱 Install App', + 'btn_language': '🌐 Language', + 'btn_timezone': '⏰ Timezone', + 'btn_settings': '⚙️ Settings', + 'btn_reboot': '🔄 Reboot', + 'btn_disable_upgrade': '❌ Disable OTA', + 'btn_clear_log': '🗑 Clear Log', + 'btn_debug_extract': 'Extract', + 'device_label': 'Device:', + 'vin_label': 'VIN:', + 'auth_label': 'Auth:', + 'log_title': '📋 Log', + 'status_ready': 'Ready', + 'status_connected': 'Connected', + 'status_disconnected': 'Disconnected', + 'status_detecting': 'Detecting', + 'vin_none': 'None', + 'auth_none': 'Unknown', + 'auth_yes': 'Authorized', + 'auth_no': 'Unauthorized', + 'btn_refresh': '🔄 Check', + 'hint_factory': '🔧 Turn off WiFi & 4G, enter factory mode with dial code', + 'warn_no_device': 'Device not connected', + 'warn_connect_first': 'Please connect device and click Check button!', + 'warn_no_vin': 'Please refresh device status and get VIN', + 'err_auth_fail': 'Authorization failed', + 'err_device_not_auth': 'Device not authorized', + 'err_resource_fail': 'Resource preparation failed!', + 'err_no_resource_dir': 'Resource directory not found', + 'info_flash_start': 'Starting language pack flashing...', + 'info_flash_done': 'Flashing complete, reboot device to take effect', + 'info_flash_fail': 'Flashing failed', + 'warn_no_apk': 'No APK files found', + 'info_installing': 'Installing...', + 'info_install_done': 'Install complete', + 'info_log_cleared': 'Log cleared', + 'confirm_reboot': 'Are you sure you want to reboot?', + 'info_rebooting': 'Device rebooting...', + 'warn_device_disconnected': 'Device disconnected', + 'info_device_connected': 'Device connected', + 'info_checking_auth': 'Verifying authorization...', + 'info_auth_pass': '✅ Authorization passed!', + 'info_auth_fail': '❌ Authorization failed', + 'info_preparing': 'Preparing resources...', + 'err_no_package': 'Error: UNI-T_package.bin not found', + 'err_no_password': 'Error: password not set', + 'err_no_7za': 'Error: 7za.exe not found', + 'err_extract_fail': 'Extraction failed', + 'info_extracting': 'Preparing resources...', + 'info_extract_done': 'Resource preparation complete', + 'err_extract_user': 'Resource preparation failed, check network and retry', + 'warn_no_app_dir': 'Warning: app/priv-app directory not found', + 'progress_resource_loading': 'Preparing resources...', + 'progress_resource_done': 'Resources ready', + 'progress_extracting_percent': 'Preparing resources {percent}%', + 'progress_flashing': 'Flashing', + 'progress_flash_done': 'Flash complete', + 'progress_aborted': 'Aborted', + 'progress_installing': 'Installing', + 'progress_installing_name': 'Installing ({name})', + 'progress_done': 'Done', + 'lang_zh': '中', + 'lang_en': 'EN', + 'switch_lang': 'Language', + 'tip_1': '1. Keep the vehicle and PC powered during language installation.', + 'tip_2': '2. After permission is obtained, wait for the vehicle to reboot before flashing.', + 'tip_3': '3. Some languages take effect after reboot; reboot after all work is finished.', + 'warn_flash_warning': '⚠️ Warning', + 'warn_flash_msg': 'During flashing, DO NOT:\n ● Reboot vehicle\n ● Close this app\n ● Power off PC\n\nSystem damage may occur!', + 'err_wrong_password': 'Please check password', + 'title_pop_lang': 'Quick Language Setting', + 'quick_lang_header': 'Select target language', + 'quick_lang_hint': 'Click a button to set the system language. Reboot to apply.', + 'quick_lang_system': '⚙️ Open system language settings', + 'msg_warn_title': 'Warning', + 'msg_error_title': 'Error', + 'msg_done_title': 'Done', + 'msg_success_title': 'Success', + 'msg_auth_failed_title': 'Authorization failed', + 'msg_device_unauthorized': 'Device unauthorized', + 'msg_resource_prepare_failed': 'Resource preparation failed!', + 'msg_resource_dir_missing': 'Resource directory not found', + 'msg_no_apk_in_folder': 'No APK files found in the selected folder!', + 'msg_confirm_install_title': 'Confirm install', + 'msg_confirm_install_many': '{count} APK files selected.\n\nStart installation?', + 'msg_confirm_install_folder': '{count} APK files found.\n\nStart batch installation?', + 'msg_install_success_many': '{count} APKs installed successfully!', + 'msg_install_partial': 'Success: {success}\nFailed: {failed}', + 'msg_install_all_failed': 'All APK installations failed!', + 'msg_install_exception': 'Installation error: {error}', + 'msg_quick_lang_success': 'System language set to {language}.\n\n⚠️ Reboot the device to apply.', + 'msg_quick_lang_failed': 'Language setting failed!\n\n{output}', + 'msg_disable_confirm_title': 'Confirm Disable OTA', + 'msg_disable_confirm': '⚠️ Warning: after disabling OTA, the system will no longer receive updates.\n\nDisable the OTA app?', + 'msg_disable_success': 'System upgrade has been disabled!', + 'msg_disable_failed': 'Disable failed: {output}', + 'msg_reboot_confirm_title': 'Confirm reboot', + 'file_apk': 'APK files', + 'file_all': 'All files', + 'dialog_select_apk': 'Select APK file', + 'dialog_select_apk_folder': 'Select a folder containing APK files', + 'unknown_error': 'unknown error', + 'status_debug': 'Debug mode', + 'debug_password_prompt': 'Enter debug password:', + 'debug_password_verifying': 'Verifying debug password...', + 'debug_wrong_password': 'Wrong password', + 'debug_verify_failed': 'Debug password verification failed: {message}', + 'debug_need_enable': 'Press Ctrl+Shift+D first.', + 'debug_need_vin': 'Extract test needs a VIN. Refresh a connected device or set VIN in debug mode.', + 'log_debug_on': '🔧 Debug mode enabled - authorization and device checks are skipped, detailed ADB logs are shown', + 'log_debug_off': 'Debug mode disabled', + 'log_lang_switched': 'Language switched to English', + 'log_cache_invalid': 'Extract cache invalid: {reason}', + 'log_cache_reuse_invalid': 'Cached resources invalid and cleaned: {reason}', + 'log_package_missing': 'Resource package not found: {path}', + 'log_adb_missing': 'adb not found. Put ADB files in this directory.', + 'log_device_connected': 'Device connected', + 'log_device_disconnected': 'Device disconnected', + 'log_current_vin': 'Current VIN: {vin}', + 'log_vin_unavailable': 'Unable to read VIN', + 'log_refresh_failed': 'Refresh device status failed: {error}', + 'log_auth_skip_debug': 'Debug mode: skip authorization', + 'log_auth_checking': 'Checking authorization...', + 'log_auth_ok': 'Authorization passed', + 'log_auth_failed': 'Authorization failed', + 'log_vehicle_name': 'Vehicle name: {name}', + 'log_adb_required': 'Connect ADB and get VIN first', + 'log_data_prepare_failed_detail': 'Resource preparation failed: {error}', + 'log_extract_password_missing': 'Extraction password is not set', + 'log_7za_missing': '7za.exe not found: {path}', + 'log_extracted_resource_invalid': 'Extracted resources are invalid: {reason}. Flashing stopped. Check the password or package.', + 'log_extract_done': 'Resources ready', + 'log_extract_exception': 'Resource preparation failed: {error}', + 'err_extract_wrong_password': 'Incorrect extraction password. Check the UNI-T_package.bin password.', + 'err_extract_data': 'Package data error. The password may be wrong or UNI-T_package.bin may be damaged.', + 'err_extract_corrupt': 'Package is damaged or incomplete. Check UNI-T_package.bin.', + 'err_extract_failed': 'Extraction failed: {error}', + 'err_extract_failed_code': 'Extraction failed (exit code {code}). Check whether the password is correct.', + 'log_root_failed': 'Failed to get root', + 'log_permission_failed': 'Failed to get permission', + 'log_permission_reboot_required': 'First permission attempt requires a reboot...', + 'log_permission_rebooting': 'Device will reboot; permission takes effect after reboot', + 'log_reboot_failed': 'Reboot failed', + 'log_permission_ok': 'Permission granted', + 'log_flash_readonly': 'Click Get Root first, then try again', + 'log_flash_complete_count': 'Flashing complete, {count} language packages', + 'log_flash_effect_after_reboot': 'Language package flashed. Reboot the device when convenient.', + 'log_flash_partial': 'Partially flashed ({success}/{total})', + 'log_install_start': 'Installing {count} APKs...', + 'log_install_done_all': 'Installation complete: all {count} succeeded', + 'log_install_done_partial': 'Installation complete: {success}/{total} succeeded', + 'log_install_failed': 'Installation failed', + 'log_install_exception': 'Installation error: {error}', + 'log_install_success_item': '✓ {name}', + 'log_install_failed_item': '✗ {name}', + 'log_quick_lang_setting': 'Setting system language to: {language} ({locale})', + 'log_quick_lang_success': '✓ Language set to {language}', + 'log_quick_lang_failed': '✗ Language setting failed: {output}', + 'log_rebooting': 'Device rebooting...', + 'log_disable_cancelled': 'Disable OTA cancelled', + 'log_disable_success': 'System upgrade disabled', + 'log_disable_failed': 'Failed to disable system upgrade', + 'log_package_key_failed': 'package-key fetch failed', + 'log_package_extract_success': 'Resources ready', + 'log_package_extract_failed': 'UNI-T_package.bin extract test failed', + 'err_no_usable_apk': 'No usable APK found', + 'err_zero_apk': '0KB APK found: {files}', + 'err_push_failed': 'push failed: {error}', + 'err_cp_failed': 'cp failed: {error}', + } + } + + # 从 exe/py 所在目录查找资源文件 + self.base_dir = get_app_dir() + self.adb = find_tool('adb.exe', 'adb') + self.sz = find_tool('7za.exe') + self.package_file = self._find_package_file() + self.extract_password = None + self.apps_dir = None + self.priv_apps_dir = None + self.temp_dir = None + self.api_url = "https://api.changan.softwindy.cn/api/authorizations/auth-check" + self.debug_password_api_url = "https://api.changan.softwindy.cn/api/authorizations/verify-debug-mode-password" + self.vin = None + self.vehicle_name = "" + self.device_connected = False + self._refreshing = False # 防止并发刷新 + self.debug_mode = False # 调试模式 + atexit.register(self.cleanup_cache_on_exit) + + # 设置样式 + self.setup_styles() + self.setup_ui() + self.root.after(200, self.set_window_icon) + self.center_window() + + # 检查环境 + self.check_environment() + + # 启动设备状态监控 + self.start_device_monitor() + + def set_window_icon(self): + """Set the Tk window/taskbar icon at runtime; PyInstaller --icon only sets the exe file icon.""" + try: + icon_path = find_resource("app.ico") + if icon_path.exists(): + self.root.iconbitmap(str(icon_path)) + self._set_windows_hwnd_icon(icon_path) + except Exception: + pass + + def _set_windows_hwnd_icon(self, icon_path): + if sys.platform != 'win32': + return + try: + import ctypes + user32 = ctypes.windll.user32 + hwnd = self.root.winfo_id() + image_icon = 1 + lr_loadfromfile = 0x00000010 + wm_seticon = 0x0080 + icon_small = 0 + icon_big = 1 + path = str(icon_path) + small = user32.LoadImageW(None, path, image_icon, 16, 16, lr_loadfromfile) + big = user32.LoadImageW(None, path, image_icon, 32, 32, lr_loadfromfile) + if small: + user32.SendMessageW(hwnd, wm_seticon, icon_small, small) + if big: + user32.SendMessageW(hwnd, wm_seticon, icon_big, big) + except Exception: + pass + + def setup_styles(self): + """设置自定义样式""" + style = ttk.Style() + style.theme_use('clam') + + # 配置主颜色 + style.configure('TFrame', background=self.colors['bg_dark']) + style.configure('TLabel', background=self.colors['bg_dark'], foreground=self.colors['text']) + style.configure('TLabelframe', background=self.colors['bg_dark'], foreground=self.colors['text']) + style.configure('TLabelframe.Label', background=self.colors['bg_dark'], foreground=self.colors['accent']) + + # 配置进度条 + style.configure('TProgressbar', + background=self.colors['accent'], + troughcolor=self.colors['bg_light'], + borderwidth=0) + + def setup_ui(self): + """设置UI界面""" + # 配置根窗口 + self.root.title(self.t('title')) + self.root.configure(bg=self.colors['bg_dark']) + + # 创建主框架 + main_frame = tk.Frame(self.root, bg=self.colors['bg_dark']) + main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) + + # 顶部标题栏 + title_frame = tk.Frame(main_frame, bg=self.colors['bg_dark'], height=45) + title_frame.pack(fill=tk.X, pady=(0, 10)) + title_frame.pack_propagate(False) + + # 标题 + self.title_label = tk.Label(title_frame, + text="🚀 适用于UNI-T多语言安装", + font=('Microsoft YaHei', 18, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.title_label.pack() + + # 按钮区域(两排,每排5个) + button_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + button_frame.pack(fill=tk.X, pady=(0, 10), padx=5) + + # 按钮样式参数 + btn_params = { + 'font': ('Microsoft YaHei', 9), + 'fg': 'white', + 'relief': tk.FLAT, + 'cursor': 'hand2', + 'height': 1, + 'width': 14 + } + + # 第一排按钮 + row1_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) + row1_frame.pack(pady=(8, 4)) + + self.btn_root = tk.Button(row1_frame, text="🔓 获取权限", + command=self.get_root_permission, + bg=self.colors['success'], + **btn_params) + self.btn_root.pack(side=tk.LEFT, padx=4) + + self.btn_push = tk.Button(row1_frame, text="📦 刷入语言包", + command=self.push_all_apks, + bg=self.colors['accent'], + **btn_params) + self.btn_push.pack(side=tk.LEFT, padx=4) + + self.btn_install_all = tk.Button(row1_frame, text="📱 安装App", + command=self.install_apps, + bg=self.colors['accent'], + **btn_params) + self.btn_install_all.pack(side=tk.LEFT, padx=4) + + self.btn_language = tk.Button(row1_frame, text="🌐 语言设置", + command=self.open_language_quick_set, + bg=self.colors['accent'], + **btn_params) + self.btn_language.pack(side=tk.LEFT, padx=4) + + # 第二排按钮 + row2_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) + row2_frame.pack(pady=(4, 8)) + + self.btn_timezone = tk.Button(row2_frame, text="⏰ 时区设置", + command=self.open_timezone_settings, + bg=self.colors['accent'], + **btn_params) + self.btn_timezone.pack(side=tk.LEFT, padx=4) + + self.btn_settings = tk.Button(row2_frame, text="⚙️ 安卓设置", + command=self.open_android_settings, + bg=self.colors['accent'], + **btn_params) + self.btn_settings.pack(side=tk.LEFT, padx=4) + + self.btn_reboot = tk.Button(row2_frame, text="🔄 重启设备", + command=self.reboot_device, + bg=self.colors['warning'], + **btn_params) + self.btn_reboot.pack(side=tk.LEFT, padx=4) + + self.btn_exit = tk.Button(row2_frame, text="❌ 禁用升级", + command=self.on_disable_upgrade, + bg=self.colors['error'], + **btn_params) + self.btn_exit.pack(side=tk.LEFT, padx=4) + + self.debug_button_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) + self.btn_debug_extract = tk.Button(self.debug_button_frame, text=self.t('btn_debug_extract'), + command=self.debug_test_package_extract, + bg=self.colors['info'], + **btn_params) + self.btn_debug_extract.pack(side=tk.LEFT, padx=4) + + # 设备状态栏(横条) + status_bar_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + status_bar_frame.pack(fill=tk.X, pady=(0, 5)) + + # 状态指示器 + status_indicator_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) + status_indicator_frame.pack(side=tk.LEFT, padx=10, pady=5) + + self.status_indicator = tk.Canvas(status_indicator_frame, width=10, height=10, + bg=self.colors['bg_light'], highlightthickness=0) + self.status_indicator.pack(side=tk.LEFT) + self.status_dot = self.status_indicator.create_oval(2, 2, 8, 8, fill='#636e72') + + self.device_label = tk.Label(status_indicator_frame, text="设备:", + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.device_label.pack(side=tk.LEFT, padx=(5, 3)) + + self.device_status_label = tk.Label(status_indicator_frame, text=self.t('status_detecting'), + font=('Microsoft YaHei', 9, 'bold'), + fg='#636e72', + bg=self.colors['bg_light'], + anchor='w', width=4) + self.device_status_label.pack(side=tk.LEFT) + + # VIN信息 + vin_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) + vin_frame.pack(side=tk.LEFT, padx=20, pady=5) + self.vin_label_title = tk.Label(vin_frame, text="VIN码:", + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.vin_label_title.pack(side=tk.LEFT) + self.vin_label = tk.Label(vin_frame, text=self.t('vin_none'), + font=('Microsoft YaHei', 9, 'bold'), + fg='#636e72', + bg=self.colors['bg_light'], + anchor='w', width=17) + self.vin_label.pack(side=tk.LEFT, padx=(5, 0)) + + # 授权状态 + auth_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) + auth_frame.pack(side=tk.LEFT, padx=20, pady=5) + self.auth_label_title = tk.Label(auth_frame, text="授权:", + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.auth_label_title.pack(side=tk.LEFT) + self.auth_label = tk.Label(auth_frame, text=self.t('auth_none'), + font=('Microsoft YaHei', 9, 'bold'), + fg='#636e72', + bg=self.colors['bg_light'], + anchor='w', width=4) + self.auth_label.pack(side=tk.LEFT, padx=(5, 0)) + + # 刷新按钮 + self.btn_refresh = tk.Button(status_bar_frame, text="🔄 检查", + command=self.refresh_device_status, + font=('Microsoft YaHei', 8), + fg=self.colors['accent'], + bg=self.colors['bg_light'], + relief=tk.FLAT, + cursor='hand2') + self.btn_refresh.pack(side=tk.RIGHT, padx=10, pady=5) + + # 提示信息区域(设备状态下方) + tips_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + tips_frame.pack(fill=tk.X, pady=(5, 5), padx=5) + + tips = [self.t('tip_1'), self.t('tip_2'), self.t('tip_3')] + + for i, tip in enumerate(tips): + tip_row = tk.Frame(tips_frame, bg=self.colors['bg_light']) + tip_row.pack(fill=tk.X, padx=10, pady=(5 if i == 0 else 0, 5 if i == len(tips) - 1 else 0)) + label = tk.Label(tip_row, text=tip, + font=('Microsoft YaHei', 9), + fg=self.colors['warning'], + bg=self.colors['bg_light'], + wraplength=600, + justify=tk.LEFT) + label.pack(side=tk.LEFT) + setattr(self, f'tip_label_{i + 1}', label) + + # 解压进度条框架 + progress_frame = tk.Frame(main_frame, bg=self.colors['bg_dark']) + progress_frame.pack(fill=tk.X, pady=(5, 5)) + + self.progress_label = tk.Label(progress_frame, text="", + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark']) + self.progress_label.pack() + + self.progress = ttk.Progressbar(progress_frame, mode='determinate', style='TProgressbar') + self.progress.pack(fill=tk.X, pady=(2, 0)) + + # 推送进度条 + self.push_progress_label = tk.Label(progress_frame, text="", + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark']) + + self.push_progress = ttk.Progressbar(progress_frame, mode='determinate', style='TProgressbar') + + # 日志区域(下方) + log_card = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + log_card.pack(fill=tk.BOTH, expand=True, pady=(5, 0)) + + # 日志标题栏 + log_title_frame = tk.Frame(log_card, bg=self.colors['bg_dark'], height=30) + log_title_frame.pack(fill=tk.X) + log_title_frame.pack_propagate(False) + + self.log_title_label = tk.Label(log_title_frame, text="📋 运行日志", + font=('Microsoft YaHei', 10, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.log_title_label.pack(side=tk.LEFT, padx=10) + + self.btn_clear = tk.Button(log_title_frame, text="🗑 清空日志", + command=self.clear_log, + font=('Microsoft YaHei', 8), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark'], + relief=tk.FLAT, + cursor='hand2') + self.btn_clear.pack(side=tk.RIGHT, padx=10) + + # 日志文本框 + text_frame = tk.Frame(log_card, bg=self.colors['bg_light']) + text_frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5) + + self.log_text = scrolledtext.ScrolledText(text_frame, + height=12, + wrap=tk.WORD, + font=('Consolas', 9), + bg='#2d2d3d', + fg='#e0e0e0', + insertbackground='white', + relief=tk.FLAT, + borderwidth=0) + self.log_text.pack(fill=tk.BOTH, expand=True) + + # 配置日志颜色标签 + self.log_text.tag_config('INFO', foreground='#74b9ff') + self.log_text.tag_config('SUCCESS', foreground='#55efc4') + self.log_text.tag_config('ERROR', foreground='#ff7675') + self.log_text.tag_config('WARNING', foreground='#ffeaa7') + self.log_text.tag_config('CMD', foreground='#a29bfe') + + # 底部状态栏 + bottom_status = tk.Frame(main_frame, bg=self.colors['bg_light'], height=22) + bottom_status.pack(fill=tk.X, pady=(5, 0)) + bottom_status.pack_propagate(False) + + self.status_text = tk.Label(bottom_status, text="就绪", + font=('Microsoft YaHei', 8), + fg=self.colors['text_secondary'], + bg=self.colors['bg_light']) + self.status_text.pack(side=tk.LEFT, padx=10) + + # 语言切换按钮 + self.btn_lang_switch = tk.Button(bottom_status, text="EN", + command=self.toggle_lang, + font=('Microsoft YaHei', 8, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_light'], + relief=tk.FLAT, + cursor='hand2') + self.btn_lang_switch.pack(side=tk.RIGHT, padx=5) + + # 调试模式快捷键 + self.root.bind('', self._toggle_debug) + self.root.bind('', self._debug_test_extract) + self.root.protocol("WM_DELETE_WINDOW", self.on_close) + + # 绑定悬停效果 + self.bind_hover_effects() + + def bind_hover_effects(self): + """绑定按钮悬停效果""" + buttons = [self.btn_root, self.btn_push, self.btn_install_all, + self.btn_language, self.btn_timezone, self.btn_settings, + self.btn_reboot, self.btn_clear, self.btn_exit, + self.btn_debug_extract] + + for btn in buttons: + original_bg = btn.cget('bg') + def on_enter(e, btn=btn, bg=original_bg): + btn.config(bg=self.lighten_color(bg)) + def on_leave(e, btn=btn, bg=original_bg): + btn.config(bg=bg) + btn.bind('', on_enter) + btn.bind('', on_leave) + + def lighten_color(self, color): + """调亮颜色""" + if color == self.colors['accent']: + return self.colors['accent_hover'] + elif color == self.colors['warning']: + return '#feca57' + elif color == self.colors['info']: + return '#0984e3' + elif color == self.colors['error']: + return '#e17055' + elif color == self.colors['success']: + return '#00a884' + return color + + def center_window(self): + """将窗口居中显示在屏幕上""" + self.root.update_idletasks() + screen_w = self.root.winfo_screenwidth() + screen_h = self.root.winfo_screenheight() + win_w = self.root.winfo_reqwidth() + win_h = self.root.winfo_reqheight() + x = (screen_w - win_w) // 2 + y = (screen_h - win_h) // 2 + self.root.geometry(f"+{x}+{y}") + + def run_on_ui_thread(self, func, *args, **kwargs): + """将函数调度到主线程执行,确保线程安全""" + self.root.after(0, lambda: func(*args, **kwargs)) + + def _adb_cmd(self): + return subprocess.list2cmdline([self.adb]) + + def _find_package_file(self): + unit_package = find_resource("UNI-T_package.bin") + if unit_package.exists(): + return unit_package + legacy_package = find_resource("package.bin") + if legacy_package.exists(): + return legacy_package + return unit_package + + def t(self, key): + """获取翻译文本""" + return self.T.get(self.lang, self.T['zh']).get(key, key) + + def tf(self, key, **kwargs): + try: + return self.t(key).format(**kwargs) + except Exception: + return self.t(key) + + def toggle_lang(self): + """切换语言""" + self.lang = 'en' if self.lang == 'zh' else 'zh' + self.btn_lang_switch.config(text=self.t('lang_en') if self.lang == 'zh' else self.t('lang_zh')) + self._refresh_ui_texts() + self.log(self.t('log_lang_switched'), "INFO") + + def _refresh_ui_texts(self): + """刷新所有UI文本""" + t = self.t + self.root.title(t('title')) + widgets = [ + (getattr(self, 'title_label', None), 'title', None), + (getattr(self, 'btn_root', None), 'btn_root', None), + (getattr(self, 'btn_push', None), 'btn_push', None), + (getattr(self, 'btn_install_all', None), 'btn_install', None), + (getattr(self, 'btn_language', None), 'btn_language', None), + (getattr(self, 'btn_timezone', None), 'btn_timezone', None), + (getattr(self, 'btn_settings', None), 'btn_settings', None), + (getattr(self, 'btn_reboot', None), 'btn_reboot', None), + (getattr(self, 'btn_exit', None), 'btn_disable_upgrade', None), + (getattr(self, 'btn_debug_extract', None), 'btn_debug_extract', None), + (getattr(self, 'btn_clear', None), 'btn_clear_log', None), + (getattr(self, 'log_title_label', None), 'log_title', None), + (getattr(self, 'device_label', None), 'device_label', None), + (getattr(self, 'vin_label_title', None), 'vin_label', None), + (getattr(self, 'auth_label_title', None), 'auth_label', None), + (getattr(self, 'btn_refresh', None), 'btn_refresh', None), + (getattr(self, 'hint_label', None), 'hint_factory', None), + (getattr(self, 'tip_label_1', None), 'tip_1', None), + (getattr(self, 'tip_label_2', None), 'tip_2', None), + (getattr(self, 'tip_label_3', None), 'tip_3', None), + ] + for w, key, _ in widgets: + if w: + w.config(text=t(key)) + if getattr(self, 'status_text', None): + self.status_text.config(text=t('status_debug') if self.debug_mode else t('status_ready')) + self.btn_lang_switch.config(text=t('lang_en') if self.lang == 'zh' else t('lang_zh')) + self._update_device_status_impl( + self.device_connected, + self.vin, + getattr(self, '_last_authorized', False) + ) + + def set_debug_buttons_visible(self, visible): + if not hasattr(self, 'debug_button_frame'): + return + if visible: + self.debug_button_frame.pack(pady=(0, 8)) + else: + self.debug_button_frame.pack_forget() + + def _log_impl(self, message, level="INFO"): + """日志写入的实际实现(必须在主线程调用)""" + timestamp = datetime.now().strftime("%H:%M:%S") + log_entry = f"[{timestamp}] [{level}] {message}\n" + self.log_text.insert(tk.END, log_entry, level) + self.log_text.see(tk.END) + + def log(self, message, level="INFO"): + """添加日志(线程安全)""" + self.run_on_ui_thread(self._log_impl, message, level) + + def clear_log(self): + """清空日志""" + self.log_text.delete(1.0, tk.END) + self.log(self.t('info_log_cleared'), "INFO") + + def _show_progress_impl(self, show=True, is_push=False): + """显示/隐藏进度条的实际实现(必须在主线程调用)""" + if is_push: + if show: + self.push_progress_label.pack() + self.push_progress.pack(fill=tk.X, pady=(2, 0)) + self.push_progress['value'] = 0 + else: + self.push_progress_label.pack_forget() + self.push_progress.pack_forget() + else: + if show: + self.progress_label.pack() + self.progress.pack(fill=tk.X, pady=(2, 0)) + self.progress['value'] = 0 + else: + self.progress_label.pack_forget() + self.progress.pack_forget() + + def show_progress(self, show=True, is_push=False): + """显示/隐藏进度条(线程安全)""" + self.run_on_ui_thread(self._show_progress_impl, show, is_push) + + def _update_progress_impl(self, value, max_value=100, label="", is_push=False): + """更新进度条的实际实现(必须在主线程调用)""" + if is_push: + percent = (value / max_value) * 100 + self.push_progress['value'] = percent + self.push_progress_label.config(text=f"{label}: {value}/{max_value} ({percent:.1f}%)") + else: + percent = (value / max_value) * 100 + self.progress['value'] = percent + self.progress_label.config(text=f"{label}: {value}/{max_value} ({percent:.1f}%)") + self.root.update_idletasks() + + def update_progress(self, value, max_value=100, label="", is_push=False): + """更新进度条(线程安全)""" + self.run_on_ui_thread(self._update_progress_impl, value, max_value, label, is_push) + + def update_device_status(self, connected, vin=None, authorized=False): + """更新设备状态显示(线程安全:立即设状态变量,UI走主线程)""" + self.device_connected = connected + if vin is not None: + self.vin = vin + self.run_on_ui_thread(self._update_device_status_impl, connected, vin, authorized) + + def _update_device_status_impl(self, connected, vin, authorized): + """设备状态UI更新的实际实现(必须在主线程调用)""" + self._last_authorized = authorized + t = self.t + if connected: + self.status_indicator.itemconfig(self.status_dot, fill=self.colors['success']) + self.device_status_label.config(text=t('status_connected'), fg=self.colors['success']) + if vin: + self.vin_label.config(text=vin, fg=self.colors['success']) + if authorized: + self.auth_label.config(text=t('auth_yes'), fg=self.colors['success']) + else: + self.auth_label.config(text=t('auth_no'), fg=self.colors['error']) + else: + self.vin_label.config(text=t('vin_none'), fg=self.colors['error']) + self.auth_label.config(text=t('auth_none'), fg=self.colors['error']) + else: + self.status_indicator.itemconfig(self.status_dot, fill=self.colors['error']) + self.device_status_label.config(text=t('status_disconnected'), fg=self.colors['error']) + self.vin_label.config(text=t('vin_none'), fg=self.colors['error']) + self.auth_label.config(text=t('auth_none'), fg=self.colors['error']) + + def check_device_connection(self): + """检查设备是否连接""" + if self.debug_mode: + return True + if not self.device_connected: + messagebox.showwarning(self.t('warn_no_device'), self.t('warn_connect_first')) + return False + return True + + def start_device_monitor(self): + """启动设备状态监控(每5秒检查一次)""" + def monitor(): + while True: + try: + result = subprocess.run(f'{self._adb_cmd()} -d devices', shell=True, capture_output=True, text=True) + lines = result.stdout.strip().split('\n') + devices = [line for line in lines[1:] if line.strip() and 'device' in line and 'offline' not in line] + + if devices and not self.device_connected and not self._refreshing: + # 设备新连接,刷新状态 + self.refresh_device_status() + elif not devices and self.device_connected: + # 设备断开连接 + self.update_device_status(False) + self.log(self.t('log_device_disconnected'), "WARNING") + + time.sleep(5) + except: + time.sleep(5) + + threading.Thread(target=monitor, daemon=True).start() + + def get_root_permission(self): + """获取 root 权限,首次获取需重启""" + if not self.check_device_connection(): + return + + def get_root(): + self.show_progress(True, is_push=False) + + ok_setenforce, _ = self.run_adb_command('adb -d shell setenforce 0') + if not ok_setenforce: + self.log(self.t('log_permission_failed'), "ERROR") + self.show_progress(False, is_push=False) + return + + # 执行 adb -d root + ok_root, out_root = self.run_adb_command('adb -d root') + if not ok_root: + self.log(self.t('log_root_failed'), "ERROR") + self.show_progress(False, is_push=False) + return + + time.sleep(1) + + # 执行 adb -d remount(需同时捕获 stdout 和 stderr) + remount_result = subprocess.run(f'{self._adb_cmd()} -d remount', shell=True, + capture_output=True, text=True) + if remount_result.returncode != 0: + self.log(self.t('log_permission_failed'), "ERROR") + self.show_progress(False, is_push=False) + return + + # 判断是否需要重启:首次 remount 返回 "Now reboot your device for settings to take effect" + combined_output = (remount_result.stdout + remount_result.stderr).lower() + if 'now reboot your device' in combined_output: + self.log(self.t('log_permission_reboot_required'), "INFO") + ok, _ = self.run_adb_command('adb -d shell reboot') + if ok: + self.log(self.t('log_permission_rebooting'), "INFO") + self.update_device_status(False) + else: + self.log(self.t('log_reboot_failed'), "ERROR") + else: + self.log(self.t('log_permission_ok'), "SUCCESS") + + self.show_progress(False, is_push=False) + + threading.Thread(target=get_root, daemon=True).start() + + def check_package_extracted(self): + """检查语言包是否已解压""" + has_app = self.apps_dir and self.apps_dir.exists() and len(list(self.apps_dir.glob("*.apk"))) > 0 + has_priv = self.priv_apps_dir and self.priv_apps_dir.exists() and len(list(self.priv_apps_dir.glob("*.apk"))) > 0 + if has_app or has_priv: + ok, reason = self._validate_extracted_apks() + if not ok: + self.log(self.tf('log_cache_invalid', reason=reason), "ERROR") + self._clear_extracted_cache() + return False + return has_app or has_priv + + def _validate_extracted_apks(self): + apks = [] + if self.apps_dir and self.apps_dir.exists(): + apks.extend(self.apps_dir.glob("*.apk")) + if self.priv_apps_dir and self.priv_apps_dir.exists(): + apks.extend(self.priv_apps_dir.glob("*.apk")) + if not apks: + return False, self.t('err_no_usable_apk') + + zero_apks = [apk.name for apk in apks if apk.stat().st_size <= 0] + if zero_apks: + preview = ", ".join(zero_apks[:5]) + suffix = "..." if len(zero_apks) > 5 else "" + return False, self.tf('err_zero_apk', files=f"{preview}{suffix}") + return True, "" + + def _clear_extracted_cache(self): + if self.temp_dir and self.temp_dir.exists(): + shutil.rmtree(self.temp_dir, ignore_errors=True) + time.sleep(0.5) + self.apps_dir = None + self.priv_apps_dir = None + + def cleanup_cache_on_exit(self): + self._clear_extracted_cache() + + def on_close(self): + self.cleanup_cache_on_exit() + self.root.destroy() + + def _format_extract_error(self, err_msg, return_code): + text = (err_msg or "").lower() + if any(marker in text for marker in ( + "wrong password", + "incorrect password", + "password is incorrect", + "data error in encrypted file", + "can not open encrypted archive", + )): + return self.t('err_extract_wrong_password') + if "data error" in text: + return self.t('err_extract_data') + if "headers error" in text or "unexpected end" in text: + return self.t('err_extract_corrupt') + if err_msg.strip(): + return self.tf('err_extract_failed', error=err_msg.strip()[:300]) + return self.tf('err_extract_failed_code', code=return_code) + + def _decode_7z_output(self, output): + for enc in ('gbk', 'utf-8'): + try: + return output.decode(enc) + except UnicodeDecodeError: + continue + return output.decode('utf-8', errors='replace') + + def _seven_zip_supports_progress_stream(self): + try: + result = subprocess.run( + [self.sz], + capture_output=True, + text=True, + errors='ignore', + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + return '-bs{o|e|p}' in (result.stdout + result.stderr) + except Exception: + return False + + def _extract_with_7za_progress(self): + self.update_progress(0, 100, self.t('progress_resource_loading')) + cmd = [ + self.sz, 'x', str(self.package_file), + f'-p{self.extract_password}', + f'-o{self.temp_dir}', '-y' + ] + use_progress_switch = self._seven_zip_supports_progress_stream() + if use_progress_switch: + cmd.extend(['-bsp1', '-bso0', '-bse1']) + + proc = subprocess.Popen( + cmd, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + stdin=subprocess.DEVNULL, + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0, + bufsize=0 + ) + + output = bytearray() + last_percent = -1 + while True: + chunk = proc.stdout.read(1) if proc.stdout else b'' + if not chunk: + if proc.poll() is not None: + break + time.sleep(0.05) + continue + + output.extend(chunk) + if len(output) > 60000: + del output[:-60000] + + matches = re.findall(rb'(\d{1,3})%', bytes(output[-512:])) + if matches: + percent = min(100, int(matches[-1])) + if percent != last_percent: + last_percent = percent + self.update_progress( + percent, + 100, + self.tf('progress_extracting_percent', percent=percent) + ) + + return_code = proc.wait() + decoded_output = self._decode_7z_output(bytes(output)) + if return_code == 0: + self.update_progress(100, 100, self.t('progress_resource_done')) + return True, decoded_output + if use_progress_switch and "incorrect command line" in decoded_output.lower(): + return self._extract_with_7za_basic() + return False, decoded_output + + def _extract_with_7za_basic(self): + cmd = [ + self.sz, 'x', str(self.package_file), + f'-p{self.extract_password}', + f'-o{self.temp_dir}', '-y' + ] + result = subprocess.run( + cmd, + capture_output=True, + stdin=subprocess.DEVNULL, + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + decoded_output = self._decode_7z_output(result.stdout + result.stderr) + if result.returncode == 0: + self.update_progress(100, 100, self.t('progress_resource_done')) + return True, decoded_output + return False, decoded_output + + def extract_package_silent(self): + """Extract UNI-T_package.bin silently with progress.""" + if not self.package_file.exists(): + self.log(self.tf('log_package_missing', path=self.package_file), "ERROR") + return False + + if not self.extract_password: + self.log(self.t('log_extract_password_missing'), "ERROR") + return False + + if not os.path.exists(self.sz): + self.log(self.tf('log_7za_missing', path=self.sz), "ERROR") + return False + + try: + local_appdata = os.environ.get('LOCALAPPDATA', os.path.expanduser('~\\AppData\\Local')) + hidden_path = Path(local_appdata) / ".cache" / "system" / ".android" + hidden_path.mkdir(parents=True, exist_ok=True) + + self.temp_dir = hidden_path / "apps_cache_UNI_T" + + if self.temp_dir.exists(): + shutil.rmtree(self.temp_dir, ignore_errors=True) + time.sleep(0.5) + + self.temp_dir.mkdir(parents=True, exist_ok=True) + + if sys.platform == 'win32': + subprocess.run(f'attrib +h "{self.temp_dir.parent}"', shell=True, capture_output=True) + subprocess.run(f'attrib +h "{self.temp_dir}"', shell=True, capture_output=True) + + self.log(self.t('info_extracting'), "INFO") + + ok, err_msg = self._extract_with_7za_progress() + if not ok: + self.log(self._format_extract_error(err_msg, 1), "ERROR") + self._clear_extracted_cache() + return False + + self.apps_dir = None + self.priv_apps_dir = None + + app_candidates = list(self.temp_dir.rglob("app")) or list(self.temp_dir.rglob("apps")) + if app_candidates: + self.apps_dir = app_candidates[0] + + priv_app_candidates = list(self.temp_dir.rglob("priv-app")) or list(self.temp_dir.rglob("priv-apps")) + if priv_app_candidates: + self.priv_apps_dir = priv_app_candidates[0] + + if not self.apps_dir and not self.priv_apps_dir: + self.log(self.t('warn_no_app_dir'), "WARNING") + self._clear_extracted_cache() + return False + + ok, reason = self._validate_extracted_apks() + if not ok: + self.log(self.tf('log_extracted_resource_invalid', reason=reason), "ERROR") + self._clear_extracted_cache() + return False + self.log(self.t('log_extract_done'), "SUCCESS") + return True + + except Exception as e: + if getattr(self, 'debug_mode', False): + self.log(self.tf('log_extract_exception', error=str(e)), "ERROR") + import traceback + self.log(traceback.format_exc(), "ERROR") + else: + self.log(self.t('err_extract_user'), "ERROR") + self._clear_extracted_cache() + return False + + def check_environment(self): + """检查环境""" + try: + result = subprocess.run(f'{self._adb_cmd()} version', shell=True, capture_output=True, text=True) + if result.returncode == 0: + self.refresh_device_status() + if not self.package_file.exists(): + self.log(self.tf('log_package_missing', path=self.package_file), "WARNING") + else: + self._try_reuse_extracted() + else: + self.log(self.t('log_adb_missing'), "ERROR") + except FileNotFoundError: + self.log(self.t('log_adb_missing'), "ERROR") + + def _try_reuse_extracted(self): + """检查磁盘上是否已有解压好的资源,有则直接复用""" + local_appdata = os.environ.get('LOCALAPPDATA', os.path.expanduser('~\\AppData\\Local')) + cache_dir = Path(local_appdata) / ".cache" / "system" / ".android" / "apps_cache_UNI_T" + if not cache_dir.exists(): + return + + app_candidates = list(cache_dir.rglob("app")) or list(cache_dir.rglob("apps")) + priv_candidates = list(cache_dir.rglob("priv-app")) or list(cache_dir.rglob("priv-apps")) + + has_app = False + has_priv = False + if app_candidates: + apks = list(app_candidates[0].glob("*.apk")) + has_app = len(apks) > 0 + if priv_candidates: + apks = list(priv_candidates[0].glob("*.apk")) + has_priv = len(apks) > 0 + + if has_app or has_priv: + if has_app: + self.apps_dir = app_candidates[0] + if has_priv: + self.priv_apps_dir = priv_candidates[0] + self.temp_dir = cache_dir + ok, reason = self._validate_extracted_apks() + if not ok: + self.log(self.tf('log_cache_reuse_invalid', reason=reason), "WARNING") + self._clear_extracted_cache() + return + # self.log("已复用缓存的资源文件", "INFO") + + def refresh_device_status(self): + """Refresh device status.""" + if self._refreshing: + return + self._refreshing = True + + def refresh(): + try: + was_connected = self.device_connected + + result = subprocess.run(f'{self._adb_cmd()} -d devices', shell=True, capture_output=True, text=True) + lines = result.stdout.strip().splitlines() + devices = [line for line in lines[1:] if line.strip() and 'device' in line and 'offline' not in line] + + if devices: + if not was_connected: + self.log(self.t('log_device_connected'), "SUCCESS") + + vin = '' + vin_commands = [ + 'shell getprop persist.vendor.car.VIN', + 'shell settings get global VIN', + 'shell settings get system VIN', + 'shell settings get system ca_vin_info', + ] + for command in vin_commands: + vin_result = subprocess.run( + f'{self._adb_cmd()} -d {command}', + shell=True, capture_output=True, text=True) + vin = vin_result.stdout.strip() + if vin and vin != 'null': + break + vin = '' + if vin: + self.log(self.tf('log_current_vin', vin=vin), "INFO") + authorized = self.check_authorization(vin) + self.update_device_status(True, vin, authorized) + else: + self.log(self.t('log_vin_unavailable'), "WARNING") + self.update_device_status(True, None, False) + else: + if was_connected: + self.log(self.t('log_device_disconnected'), "WARNING") + self.update_device_status(False) + except Exception as e: + self.log(self.tf('log_refresh_failed', error=str(e)), "ERROR") + finally: + self._refreshing = False + + threading.Thread(target=refresh, daemon=True).start() + + def check_authorization(self, vin): + """Check authorization.""" + if getattr(self, 'debug_mode', False): + self.log(self.t('log_auth_skip_debug'), "WARNING") + return True + self.log(self.t('log_auth_checking'), "INFO") + try: + authorized, vehicle_name, _ = self.query_authorization_info(vin) + if authorized: + self.log(self.t('log_auth_ok'), "SUCCESS") + if vehicle_name: + self.vehicle_name = vehicle_name + self.log(self.tf('log_vehicle_name', name=vehicle_name), "INFO") + return True + else: + self.log(self.t('log_auth_failed'), "ERROR") + return False + + except Exception: + self.log(self.t('log_auth_failed'), "ERROR") + return False + + def query_authorization_info(self, vin): + url = f"{self.api_url}?{urlencode({'vin': vin})}" + req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + + payload = data.get('data', {}) if isinstance(data, dict) else {} + vehicle_name = payload.get('vehicleName') or payload.get('vehicle_name') or "" + vehicle_name = str(vehicle_name).strip() + if data.get('authorized') is True and vehicle_name: + self.vehicle_name = vehicle_name + return data.get('authorized') is True, vehicle_name, data + + def fetch_package_password(self): + """Fetch package password from server.""" + if not self.vin: + self.log(self.t('log_adb_required'), "ERROR") + return False + + try: + vehicle_name = self.vehicle_name + if not vehicle_name: + authorized, vehicle_name, _ = self.query_authorization_info(self.vin) + if not authorized: + self.log(self.t('log_auth_failed'), "ERROR") + return False + if not vehicle_name: + self.log(self.t('log_auth_failed'), "ERROR") + return False + + pwd_api_url = "https://api.changan.softwindy.cn/api/authorizations/package-key" + url = f"{pwd_api_url}?{urlencode({'vin': self.vin, 'vehicleName': vehicle_name})}" + req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + + if data.get('success') and 'data' in data and 'password' in data['data']: + self.extract_password = data['data']['password'] + return True + else: + self.log(self.tf('log_data_prepare_failed_detail', error=data.get('message', self.t('unknown_error'))), "ERROR") + return False + + except Exception as e: + self.log(self.tf('log_data_prepare_failed_detail', error=str(e)), "ERROR") + return False + + def run_adb_command(self, command): + """执行 adb 命令,静默执行,仅返回结果""" + command = command.replace('adb', self._adb_cmd(), 1) + if self.debug_mode: + self.log(f"CMD: {command}", "CMD") + try: + result = subprocess.run(command, shell=True, capture_output=True, text=True, encoding='utf-8') + if self.debug_mode: + out = result.stdout.strip() + err = result.stderr.strip() + if out: + self.log(f" -> {out[:300]}", "CMD") + if err: + self.log(f" !! {err[:300]}", "ERROR") + if result.returncode == 0: + return True, result.stdout.strip() + else: + return False, result.stderr.strip() + except Exception as e: + return False, str(e) + + def push_single_apk(self, apk_path, apk_name, target_type="app"): + """推送单个APK到系统分区,返回 (成功, 错误信息)""" + temp_apk_path = f"/data/local/tmp/{apk_name}.apk" + target_dir = f"/system/priv-app/{apk_name}" if target_type == "priv-app" else f"/system/app/{apk_name}" + target_apk_path = f"{target_dir}/{apk_name}.apk" + + ok, err = self.run_adb_command(f'adb -d push "{apk_path}" {temp_apk_path}') + if not ok: + return False, self.tf('err_push_failed', error=err) + + self.run_adb_command(f'adb -d shell mkdir -p {target_dir}') + ok, err = self.run_adb_command(f'adb -d shell cp {temp_apk_path} {target_apk_path}') + self.run_adb_command(f'adb -d shell rm -f {temp_apk_path}') + if not ok: + return False, self.tf('err_cp_failed', error=err) + + return True, "" + + def push_car_system_ui(self, apk_path): + """Push package-root CarSystemUI.apk to system_ext priv-app.""" + temp_apk_path = "/data/local/tmp/CarSystemUI.apk" + target_dir = "/system/system_ext/priv-app/CarSystemUI" + target_apk_path = f"{target_dir}/CarSystemUI.apk" + + ok, err = self.run_adb_command(f'adb -d push "{apk_path}" {temp_apk_path}') + if not ok: + return False, self.tf('err_push_failed', error=err) + + self.run_adb_command(f'adb -d shell mkdir -p {target_dir}') + ok, err = self.run_adb_command(f'adb -d shell cp -f {temp_apk_path} {target_apk_path}') + self.run_adb_command(f'adb -d shell rm -f {temp_apk_path}') + if not ok: + return False, self.tf('err_cp_failed', error=err) + + return True, "" + + def disable_unit_user10_packages_before_flash(self): + packages = [ + "com.wt.roadbook", + "com.thunder.carplay", + "com.tencent.wecarmas", + "com.tencent.qqlive.audiobox", + "com.incall.apps.softmanager", + "com.changan.appmarket", + "com.bytedance.byteautoservice", + ] + for package in packages: + self.run_adb_command(f'adb -d shell pm disable-user --user 10 {package}') + + def push_all_apks(self): + """推送APK到系统分区(支持app和priv-app)""" + if not self.check_device_connection(): + return + if not self.vin and not self.debug_mode: + messagebox.showwarning(self.t('msg_warn_title'), self.t('warn_no_vin')) + return + + messagebox.showwarning(self.t('warn_flash_warning'), self.t('warn_flash_msg')) + + def do_push_all(): + if not self.check_authorization(self.vin): + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_auth_failed_title'), self.t('msg_device_unauthorized'))) + return + if not self.extract_password: + if not self.fetch_package_password(): + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_prepare_failed'))) + return + if not self.check_package_extracted(): + self.show_progress(True, is_push=False) + if not self.extract_package_silent(): + self.show_progress(False, is_push=False) + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_prepare_failed'))) + return + self.show_progress(False, is_push=False) + + if (not self.apps_dir or not self.apps_dir.exists()) and \ + (not self.priv_apps_dir or not self.priv_apps_dir.exists()): + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_dir_missing'))) + return + + self.show_progress(True, is_push=True) + self.disable_unit_user10_packages_before_flash() + self.run_adb_command('adb -d shell mkdir -p /data/local/tmp') + + all_apks = [] + if self.apps_dir and self.apps_dir.exists(): + for apk in self.apps_dir.glob("*.apk"): + all_apks.append((apk, "app")) + if self.priv_apps_dir and self.priv_apps_dir.exists(): + for apk in self.priv_apps_dir.glob("*.apk"): + all_apks.append((apk, "priv-app")) + if self.temp_dir and self.temp_dir.exists(): + car_system_ui = self.temp_dir / "CarSystemUI.apk" + if car_system_ui.exists(): + all_apks.append((car_system_ui, "car-system-ui")) + + if not all_apks: + # 缓存可能过期,强制重新解压 + self.apps_dir = None + self.priv_apps_dir = None + self.temp_dir = None + if not self.fetch_package_password() or not self.extract_package_silent(): + self.log(self.t('warn_no_apk'), "WARNING") + self.show_progress(False, is_push=True) + return + # 重新收集 + all_apks = [] + if self.apps_dir and self.apps_dir.exists(): + for apk in self.apps_dir.glob("*.apk"): + all_apks.append((apk, "app")) + if self.priv_apps_dir and self.priv_apps_dir.exists(): + for apk in self.priv_apps_dir.glob("*.apk"): + all_apks.append((apk, "priv-app")) + if self.temp_dir and self.temp_dir.exists(): + car_system_ui = self.temp_dir / "CarSystemUI.apk" + if car_system_ui.exists(): + all_apks.append((car_system_ui, "car-system-ui")) + if not all_apks: + self.log(self.t('warn_no_apk'), "WARNING") + self.show_progress(False, is_push=True) + return + + total = len(all_apks) + success_count = 0 + aborted = False + for i, (apk_path, apk_type) in enumerate(all_apks, 1): + apk_name = apk_path.stem + if apk_type == "car-system-ui": + ok, err = self.push_car_system_ui(apk_path) + else: + ok, err = self.push_single_apk(apk_path, apk_name, apk_type) + if ok: + success_count += 1 + else: + if "Read-only file system" in err: + self.log(self.t('log_flash_readonly'), "ERROR") + aborted = True + break + self.update_progress(i, total, self.t('progress_flashing'), is_push=True) + + self.update_progress(total, total, self.t('progress_flash_done') if not aborted else self.t('progress_aborted'), is_push=True) + + if success_count == total: + self.log(self.tf('log_flash_complete_count', count=total), "SUCCESS") + self.log(self.t('log_flash_effect_after_reboot'), "WARNING") + elif success_count > 0: + self.log(self.tf('log_flash_partial', success=success_count, total=total), "WARNING") + if not aborted: + self.log(self.t('log_flash_effect_after_reboot'), "WARNING") + + self.show_progress(False, is_push=True) + + threading.Thread(target=do_push_all, daemon=True).start() + + def install_all_apks(self): + """批量安装APK — 手动选择文件夹""" + if not self.check_device_connection(): + return + + apk_dir = filedialog.askdirectory(title=self.t('dialog_select_apk_folder')) + if not apk_dir: + return + + apk_files = list(Path(apk_dir).glob("*.apk")) + if not apk_files: + messagebox.showerror(self.t('msg_error_title'), self.t('msg_no_apk_in_folder')) + return + + result = messagebox.askyesno( + self.t('msg_confirm_install_title'), + self.tf('msg_confirm_install_folder', count=len(apk_files)) + ) + if not result: + return + + def install(): + self.show_progress(True, is_push=True) + total = len(apk_files) + self.log(self.tf('log_install_start', count=total), "INFO") + success_count = 0 + try: + self.run_adb_command('adb -d shell setprop vecentek.model 1') + + for i, apk_path in enumerate(apk_files, 1): + self.update_progress(i, total, self.t('progress_installing'), is_push=True) + success, _ = self.run_adb_command(f'adb -d install -r "{apk_path}"') + if success: + success_count += 1 + + self.update_progress(total, total, self.t('progress_done'), is_push=True) + + if success_count == total: + self.log(self.tf('log_install_done_all', count=total), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t('info_install_done'), self.tf('msg_install_success_many', count=total)) + elif success_count > 0: + self.log(self.tf('log_install_done_partial', success=success_count, total=total), "WARNING") + self.run_on_ui_thread(messagebox.showwarning, self.t('info_install_done'), self.tf('msg_install_partial', success=success_count, failed=total - success_count)) + else: + self.log(self.t('log_install_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('log_install_failed'), self.t('msg_install_all_failed')) + except Exception as e: + self.log(self.tf('log_install_exception', error=str(e)), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('log_install_failed'), self.tf('msg_install_exception', error=str(e))) + finally: + self.run_adb_command('adb -d shell setprop vecentek.model 0') + self.show_progress(False, is_push=True) + + threading.Thread(target=install, daemon=True).start() + + def install_single_apk(self): + """安装单个APK""" + # 检查设备连接 + if not self.check_device_connection(): + return + + file_path = filedialog.askopenfilename( + title=self.t('dialog_select_apk'), + filetypes=[(self.t('file_apk'), "*.apk"), (self.t('file_all'), "*.*")] + ) + + if not file_path: + return + + def install(): + self.show_progress(True, is_push=True) + self.update_progress(50, 100, self.t('progress_installing'), is_push=True) + try: + self.run_adb_command('adb -d shell setprop vecentek.model 1') + success, _ = self.run_adb_command(f'adb -d install -r "{file_path}"') + self.update_progress(100, 100, self.t('progress_done'), is_push=True) + if success: + self.log(self.t('info_install_done'), "SUCCESS") + else: + self.log(self.t('log_install_failed'), "ERROR") + except Exception as e: + self.log(self.tf('log_install_exception', error=str(e)), "ERROR") + finally: + self.run_adb_command('adb -d shell setprop vecentek.model 0') + self.show_progress(False, is_push=True) + + threading.Thread(target=install, daemon=True).start() + + def open_language_settings(self): + """打开系统语言设置""" + if not self.check_device_connection(): + return + self.run_adb_command('adb -d shell am start -a android.settings.LOCALE_SETTINGS') + + def open_language_quick_set(self): + """打开快捷语言设置弹窗""" + # 检查设备连接 + if not self.check_device_connection(): + return + + # 创建弹窗 + popup = tk.Toplevel(self.root) + popup.title(self.t('title_pop_lang')) + popup.geometry("520x320") + popup.configure(bg=self.colors['bg_dark']) + popup.resizable(False, False) + + # 居中显示 + popup.update_idletasks() + x = self.root.winfo_x() + (self.root.winfo_width() - 520) // 2 + y = self.root.winfo_y() + (self.root.winfo_height() - 320) // 2 + popup.geometry(f"+{x}+{y}") + popup.transient(self.root) + popup.grab_set() + + # 标题 + header = tk.Label(popup, text=self.t('quick_lang_header'), + font=('Microsoft YaHei', 13, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + header.pack(pady=(15, 10)) + + hint = tk.Label(popup, text=self.t('quick_lang_hint'), + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark']) + hint.pack(pady=(0, 12)) + + # 语言列表:(显示名, locale_code) + languages = [ + ("🇨🇳 中文", "zh-CN"), + ("英 English", "en-US"), + ("俄 Русский", "ru-RU"), + ("法 Français", "fr-FR"), + ("西 Español", "es-ES"), + ("葡 Português", "pt-BR"), + ("意 Italiano", "it-IT"), + ("阿 العربية", "ar-SA"), + ] + # 创建按钮容器 + btn_frame = tk.Frame(popup, bg=self.colors['bg_dark']) + btn_frame.pack(pady=(0, 10)) + + btn_colors = [ + self.colors['accent'], self.colors['info'], + self.colors['success'], self.colors['warning'], + '#e17055', '#00b894', + '#6c5ce7', '#0984e3', + ] + + for i, (label, locale) in enumerate(languages): + row = i // 4 + col = i % 4 + + def make_cmd(loc=locale, lbl=label): + return lambda: self._quick_set_language(loc, lbl, popup) + + btn = tk.Button(btn_frame, text=label, + command=make_cmd(), + font=('Microsoft YaHei', 10), + fg='white', + bg=btn_colors[i], + relief=tk.FLAT, + cursor='hand2', + width=12, height=2) + btn.grid(row=row, column=col, padx=5, pady=5) + + # 底部分隔 + 打开系统设置入口 + sep = tk.Frame(popup, bg=self.colors['border'], height=1) + sep.pack(fill=tk.X, padx=20, pady=(8, 6)) + + sys_btn = tk.Button(popup, text=self.t('quick_lang_system'), + command=lambda: self._open_sys_and_close(popup), + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_light'], + relief=tk.FLAT, + cursor='hand2') + sys_btn.pack(pady=(0, 10)) + + def _quick_set_language(self, locale_code, language_name, popup): + """执行快捷语言设置""" + popup.destroy() + + def do_set(): + self.log(self.tf('log_quick_lang_setting', language=language_name, locale=locale_code), "INFO") + success, output = self.run_adb_command( + f'adb -d shell settings put system system_locales {locale_code}' + ) + + if success: + self.log(self.tf('log_quick_lang_success', language=language_name), "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t('msg_success_title'), + self.tf('msg_quick_lang_success', language=language_name) + ) + else: + self.log(self.tf('log_quick_lang_failed', output=output), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.tf('msg_quick_lang_failed', output=output)) + + threading.Thread(target=do_set, daemon=True).start() + + def _open_sys_and_close(self, popup): + """关闭弹窗并打开系统语言设置""" + popup.destroy() + self.open_language_settings() + + def open_timezone_settings(self): + """打开时区设置""" + if not self.check_device_connection(): + return + self.run_adb_command('adb -d shell am start -a android.settings.TIMEZONE_SETTINGS') + + def open_android_settings(self): + """打开安卓原生设置""" + if not self.check_device_connection(): + return + self.run_adb_command('adb -d shell am start -a android.settings.SETTINGS') + + def reboot_device(self): + """重启设备""" + if not self.check_device_connection(): + return + if messagebox.askyesno(self.t('msg_reboot_confirm_title'), self.t('confirm_reboot')): + subprocess.Popen(f'{self._adb_cmd()} -d shell reboot', shell=True, + stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + self.log(self.t('log_rebooting'), "INFO") + self.update_device_status(False) + + def on_disable_upgrade(self): + """禁用系统升级""" + # 检查设备连接 + if not self.check_device_connection(): + return + + # 弹窗确认 + result = messagebox.askyesno( + self.t('msg_disable_confirm_title'), + self.t('msg_disable_confirm') + ) + + if not result: + self.log(self.t('log_disable_cancelled'), "INFO") + return + + def disable(): + self.show_progress(True, is_push=False) + success, output = self.run_adb_command( + 'adb -d shell pm disable-user --user 0 com.incall.apps.softmanager') + if success: + self.log(self.t('log_disable_success'), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t('msg_success_title'), self.t('msg_disable_success')) + else: + self.log(self.t('log_disable_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.tf('msg_disable_failed', output=output)) + self.show_progress(False, is_push=False) + + threading.Thread(target=disable, daemon=True).start() + + def _toggle_debug(self, event=None): + """切换调试模式(隐藏入口,Ctrl+Shift+D)""" + if self.debug_mode: + self.debug_mode = False + self.log(self.t('log_debug_off'), "WARNING") + self.status_text.config(text=self.t('status_ready')) + self.set_debug_buttons_visible(False) + self.refresh_device_status() + return + + pwd = simpledialog.askstring(self.t('status_debug'), self.t('debug_password_prompt'), show='*', parent=self.root) + if not pwd: + return + + self.log(self.t('debug_password_verifying'), "INFO") + + def verify(): + valid, message = self.verify_debug_mode_password(pwd) + if valid: + def enable_debug(): + self.debug_mode = True + self.update_device_status(True, "", True) + self.log(self.t('log_debug_on'), "WARNING") + self.status_text.config(text=self.t('status_debug')) + self.set_debug_buttons_visible(True) + self.run_on_ui_thread(enable_debug) + else: + def show_failed(): + msg = message or self.t('debug_wrong_password') + self.log(self.tf('debug_verify_failed', message=msg), "WARNING") + messagebox.showwarning(self.t('msg_error_title'), msg) + self.run_on_ui_thread(show_failed) + + threading.Thread(target=verify, daemon=True).start() + + def verify_debug_mode_password(self, password): + try: + payload = json.dumps({"password": password}).encode('utf-8') + req = Request( + self.debug_password_api_url, + data=payload, + method='POST', + headers={ + 'Content-Type': 'application/json', + 'User-Agent': 'Mozilla/5.0', + } + ) + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + if data.get('success') is True and data.get('valid') is True: + return True, data.get('message', '') + return False, data.get('message') or self.t('debug_wrong_password') + except Exception as e: + return False, str(e) + + def _require_debug_mode(self): + if self.debug_mode: + return True + messagebox.showwarning(self.t('status_debug'), self.t('debug_need_enable')) + return False + + def install_apps(self): + """安装App — 支持单选或多选APK文件""" + if not self.check_device_connection(): + return + if not self.vin and not self.debug_mode: + messagebox.showwarning(self.t('msg_warn_title'), self.t('warn_no_vin')) + return + + file_paths = filedialog.askopenfilenames( + title=self.t('dialog_select_apk'), + filetypes=[(self.t('file_apk'), "*.apk"), (self.t('file_all'), "*.*")] + ) + if not file_paths: + return + + count = len(file_paths) + result = messagebox.askyesno( + self.t('msg_confirm_install_title'), + self.tf('msg_confirm_install_many', count=count) + ) + if not result: + return + + def install(): + if not self.check_authorization(self.vin): + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_auth_failed_title'), + self.t('msg_device_unauthorized') + ) + return + + self.show_progress(True, is_push=True) + self.log(self.tf('log_install_start', count=count), "INFO") + success_count = 0 + try: + self.run_adb_command('adb -d shell setprop vecentek.model 1') + + for i, file_path in enumerate(file_paths, 1): + apk_name = Path(file_path).name + self.update_progress(i, count, self.tf('progress_installing_name', name=apk_name), is_push=True) + success, _ = self.run_adb_command(f'adb -d install -r "{file_path}"') + if success: + self.log(self.tf('log_install_success_item', name=apk_name), "SUCCESS") + success_count += 1 + else: + self.log(self.tf('log_install_failed_item', name=apk_name), "ERROR") + + self.update_progress(count, count, self.t('progress_done'), is_push=True) + + if success_count == count: + self.log(self.tf('log_install_done_all', count=count), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t('info_install_done'), self.tf('msg_install_success_many', count=count)) + elif success_count > 0: + self.log(self.tf('log_install_done_partial', success=success_count, total=count), "WARNING") + self.run_on_ui_thread(messagebox.showwarning, self.t('info_install_done'), self.tf('msg_install_partial', success=success_count, failed=count - success_count)) + else: + self.log(self.t('log_install_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('log_install_failed'), self.t('msg_install_all_failed')) + except Exception as e: + self.log(self.tf('log_install_exception', error=str(e)), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('log_install_failed'), self.tf('msg_install_exception', error=str(e))) + finally: + self.run_adb_command('adb -d shell setprop vecentek.model 0') + self.show_progress(False, is_push=True) + + threading.Thread(target=install, daemon=True).start() + + def _debug_test_extract(self, event=None): + self.debug_test_package_extract() + + def debug_test_package_extract(self): + """Debug-only package extraction test using package-key.""" + if not self._require_debug_mode(): + return + + if not self.vin: + vin = simpledialog.askstring(self.t('status_debug'), 'VIN:', parent=self.root) + if vin: + self.vin = vin.strip().upper() + if not self.vin: + messagebox.showwarning(self.t('status_debug'), self.t('debug_need_vin')) + return + + def do_extract(): + old_password = self.extract_password + try: + self.log(self.t('info_extracting'), "INFO") + self.extract_password = None + if not self.fetch_package_password(): + self.log(self.t('log_package_key_failed'), "ERROR") + return + self.show_progress(True, is_push=False) + if self.extract_package_silent(): + self.log(self.t('log_package_extract_success'), "SUCCESS") + else: + self.log(self.t('log_package_extract_failed'), "ERROR") + finally: + self.extract_password = old_password + self.show_progress(False, is_push=False) + + threading.Thread(target=do_extract, daemon=True).start() + + def run(self): + """运行程序""" + self.root.mainloop() + +def main(): + """主函数""" + if sys.version_info < (3, 6): + print("错误:需要Python 3.6或更高版本") + sys.exit(1) + + try: + app = ADKAPKGUI() + app.run() + except Exception as e: + print(f"启动失败: {e}") + import traceback + traceback.print_exc() + messagebox.showerror("错误", f"程序启动失败: {e}") + +if __name__ == "__main__": + main() diff --git a/S05/pack_s05.bat b/UNI-T/pack_unit.bat similarity index 55% rename from S05/pack_s05.bat rename to UNI-T/pack_unit.bat index b03bd4e..a90736c 100644 --- a/S05/pack_s05.bat +++ b/UNI-T/pack_unit.bat @@ -3,8 +3,9 @@ chcp 65001 >nul cd /d "%~dp0" set "ROOT=%~dp0.." set "TOOLS=%ROOT%\tools" -set NAME=深蓝S05刷入工具 -set SRC=S05.py +set "ICON=%~dp0app.ico" +set NAME=UNI-T-multi-lan-installer +set SRC=UNI-T-multi-lan-installer.py title %NAME% - Build echo ============================================================ @@ -27,14 +28,42 @@ if errorlevel 1 ( %PY% -m pip install pyinstaller cython pyzipper -q -i https://pypi.tuna.tsinghua.edu.cn/simple ) -echo [2/6] Clean... +echo [2/7] Clean... if exist "dist_cy" rmdir /s /q dist_cy 2>nul if exist "build" rmdir /s /q build 2>nul if exist "dist" rmdir /s /q dist 2>nul -echo [3/6] Cython compile... +echo [3/7] Checking resources... +if not exist "%ICON%" ( + echo [ERROR] app.ico not found in UNI-T folder: %ICON% + pause + exit /b 1 +) +if not exist "%TOOLS%\adb.exe" ( + echo [ERROR] Missing ADB file: %TOOLS%\adb.exe + pause + exit /b 1 +) +if not exist "%TOOLS%\AdbWinApi.dll" ( + echo [ERROR] Missing ADB file: %TOOLS%\AdbWinApi.dll + pause + exit /b 1 +) +if not exist "%TOOLS%\AdbWinUsbApi.dll" ( + echo [ERROR] Missing ADB file: %TOOLS%\AdbWinUsbApi.dll + pause + exit /b 1 +) +if not exist "%TOOLS%\7za.exe" ( + echo [ERROR] Missing 7za file: %TOOLS%\7za.exe + pause + exit /b 1 +) + +echo [4/7] Cython compile... mkdir dist_cy 2>nul copy %SRC% dist_cy\_core.py >nul +set "PYD=" %PY% -c "open('dist_cy/setup_cython.py','w').write('from setuptools import setup\nfrom Cython.Build import cythonize\nsetup(ext_modules=cythonize(\"_core.py\", compiler_directives={\"language_level\":\"3\"}))\n')" @@ -42,54 +71,50 @@ cd dist_cy %PY% setup_cython.py build_ext --inplace if errorlevel 1 ( cd .. - echo [WARN] Cython failed, fallback - goto :NORMAL + echo [ERROR] Cython build failed. Install Microsoft C++ Build Tools and retry. + pause + exit /b 1 ) for %%f in (_core*.pyd) do set PYD=%%f if "%PYD%"=="" ( cd .. - echo [WARN] No pyd, fallback - goto :NORMAL + echo [ERROR] Cython build did not generate _core*.pyd. Stop. + pause + exit /b 1 ) echo PYD: %PYD% copy "%PYD%" _core.pyd >nul %PY% -c "open('launcher.py','w').write('# -*- coding: utf-8 -*-\nfrom _core import main\nmain()\n')" -echo [4/6] Copy resources... +echo [5/7] Copy resources... copy "%TOOLS%\adb.exe" . >nul copy "%TOOLS%\AdbWinApi.dll" . >nul copy "%TOOLS%\AdbWinUsbApi.dll" . >nul copy "%TOOLS%\7za.exe" . >nul -if exist "%ROOT%\app.ico" copy "%ROOT%\app.ico" . >nul +copy "%ICON%" . >nul -echo [5/6] PyInstaller... -%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ROOT%\app.ico" --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin launcher.py +echo [6/7] PyInstaller... +%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ICON%" --add-data "%ICON%;." --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin launcher.py if errorlevel 1 ( cd .. echo [ERROR] PyInstaller failed pause - exit /b + exit /b 1 ) -echo [6/6] Cleanup... +echo [7/7] Cleanup... del /q _core.py _core.c _core.pyd %PYD% launcher.py setup_cython.py 2>nul rmdir /s /q build 2>nul cd .. goto :DONE -:NORMAL -echo [INFO] Normal PyInstaller... -%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ROOT%\app.ico" --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin %SRC% - :DONE echo. echo Done. if exist "dist_cy\dist\%NAME%.exe" ( echo Output: dist_cy\dist\%NAME%.exe -) else if exist "dist\%NAME%.exe" ( - echo Output: dist\%NAME%.exe ) else ( echo Check dist folder ) diff --git a/X5plus/X5plusTool.py b/X5plus/X5plusTool.py index 1c93b33..31e0042 100644 --- a/X5plus/X5plusTool.py +++ b/X5plus/X5plusTool.py @@ -7,6 +7,7 @@ import subprocess import json import re import threading +import atexit import tkinter as tk from tkinter import ttk, scrolledtext, filedialog, messagebox, simpledialog from pathlib import Path @@ -59,11 +60,26 @@ def find_tool(file_name, fallback=None): path = find_resource(file_name) if path.exists(): return str(path) - return fallback or str(path) + return fallback or str(path) + + +def set_windows_app_user_model_id(): + if sys.platform != 'win32': + return + try: + import ctypes + ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID( + "yibin.keyi.x5plus.flash.tool" + ) + except Exception: + pass + + class ADKAPKGUI: def __init__(self): + set_windows_app_user_model_id() self.root = tk.Tk() - self.root.title("长安语言安装工具") + self.root.title("X5plus") self.root.geometry("650x640") self.root.resizable(True, True) @@ -101,8 +117,9 @@ class ADKAPKGUI: self.lang = 'zh' self.T = { 'zh': { - 'title': '适用于X5plus多语言安装', + 'title': '长安X5Plus刷机工具', 'btn_push': '📦 刷入语言包', + 'btn_patch_52': '🧩 5.2补丁', 'btn_install': '📱 安装App', 'btn_language': '🌐 语言设置', 'btn_timezone': '⏰ 时区设置', @@ -115,6 +132,7 @@ class ADKAPKGUI: 'auth_label': '授权:', 'log_title': '📋 运行日志', 'status_ready': '就绪', + 'status_debug': '🔧 调试模式', 'status_connected': '已连接', 'status_disconnected': '未连接', 'status_detecting': '未检测', @@ -123,15 +141,145 @@ class ADKAPKGUI: 'auth_yes': '已授权', 'auth_no': '未授权', 'btn_refresh': '🔄 检查', + 'hint_factory_dynamic': '工程模式:拨号 *#*#888 ,工程密码:{password},调试密码:3821', + 'hint_lines': [ + '1. 安装语言过程中请保持车辆和电脑电量充足,不可中途停止。', + '2. 获取权限以后,车辆自动重启以后再进入语言刷入。', + '3. 部分语言需要重启后生效,可以一切工作完成以后再重启。', + ], 'theme_dark': '🌙 暗色', 'theme_light': '☀️ 亮色', 'lang_zh': '中', 'lang_en': 'EN', - 'about_company': '宜宾科宜科技有限公司 - 智能设备管理平台', + 'msg_warn_title': '警告', + 'msg_error_title': '错误', + 'msg_success_title': '成功', + 'msg_done_title': '完成', + 'msg_device_not_connected_title': '设备未连接', + 'msg_device_not_connected': '请先连接设备并点击「检查」按钮刷新状态!', + 'msg_need_vin': '请先刷新设备状态并获取VIN码', + 'msg_auth_failed_title': '授权失败', + 'msg_device_unauthorized': '设备未授权', + 'msg_data_prepare_failed': '资源准备失败!', + 'msg_resource_dir_missing': '资源目录未找到', + 'msg_flash_warning_title': '⚠️ 重要提示', + 'msg_flash_warning': '刷入过程中请勿:\n ● 重启车机\n ● 退出本程序\n ● 关闭电脑\n\n否则可能导致车机系统损坏!', + 'msg_patch_missing': '未找到 5.2 补丁文件', + 'msg_patch_push_failed': '5.2 补丁推送失败', + 'msg_patch_apply_failed': '5.2 补丁刷入失败', + 'msg_patch_done': '5.2 补丁刷入完成,重启设备后生效', + 'msg_no_apks_in_folder': '所选文件夹中没有APK文件!', + 'msg_install_confirm_title': '确认安装', + 'msg_install_confirm_folder': '找到 {count} 个APK文件\n\n是否开始批量安装?', + 'msg_install_confirm_many': '已选择 {count} 个APK文件\n\n是否开始安装?', + 'msg_install_done_title': '安装完成', + 'msg_install_done_all': '成功安装 {count} 个APK!', + 'msg_install_partial_title': '部分成功', + 'msg_install_partial': '成功: {success}\n失败: {failed}', + 'msg_install_failed_title': '安装失败', + 'msg_install_failed_all': '所有APK安装失败!', + 'msg_install_exception': '安装过程异常', + 'file_select_folder_title': '选择包含APK文件的文件夹', + 'file_select_apk_title': '选择APK文件', + 'filetype_apk': 'APK文件', + 'filetype_all': '所有文件', + 'quick_lang_title': '快捷语言设置', + 'quick_lang_header': '选择目标语言', + 'quick_lang_hint': '点击按钮即可将系统语言切换为对应语言,重启后生效', + 'quick_lang_system': '⚙️ 打开系统语言设置(手动选择)', + 'quick_lang_success_title': '设置成功', + 'quick_lang_success': '系统语言已设置为 {language}\n\n⚠️ 请重启设备使其生效。', + 'quick_lang_failed_title': '设置失败', + 'quick_lang_failed': '语言设置失败!', + 'quick_lang_names': ['🇨🇳 中文', '英 English', '俄 Русский', '法 Français', '西 Español', '葡 Português', '意 Italiano', '阿 العربية'], + 'msg_reboot_title': '确认重启', + 'msg_reboot_confirm': '确定要重启设备吗?', + 'msg_disable_ota_title': '确认禁用升级', + 'msg_disable_ota_confirm': '⚠️ 警告:禁用系统升级后,将无法接收系统更新!\n\n是否确定要禁用系统升级应用?', + 'msg_disable_ota_success': '系统升级已成功禁用!', + 'msg_disable_ota_failed': '禁用失败', + 'debug_title': '调试模式', + 'debug_prompt': '请输入调试密码:', + 'debug_password_verifying': '正在校验调试模式密码...', + 'debug_verify_failed': '调试模式密码校验失败: {message}', + 'msg_debug_wrong_password': '密码错误', + 'debug_need_enable': '请先按 Ctrl+Shift+D 开启调试模式', + 'debug_extract_title': '测试解压', + 'debug_extract_prompt': '请输入 package.bin 解压密码:', + 'debug_extract_success_title': '测试解压成功', + 'debug_extract_success': '资源已解压到:\n{path}', + 'debug_extract_failed_title': '测试解压失败', + 'debug_extract_failed': '请查看日志中的 7za 输出', + 'progress_loading': '资源加载中', + 'progress_loaded': '资源加载完成', + 'progress_flashing': '正在刷入', + 'progress_flash_done': '刷入完成', + 'progress_installing': '安装中', + 'progress_installing_name': '安装中 ({name})', + 'progress_done': '完成', + 'progress_install_done': '安装完成', + 'progress_patch_prepare': '准备刷入 5.2 补丁', + 'progress_patch_push': '推送补丁文件', + 'progress_patch_apply': '应用补丁文件', + 'progress_patch_done': '5.2 补丁完成', + 'log_lang_changed': '语言已切换为中文', + 'log_cleared': '日志已清空', + 'log_device_connected': '设备已连接', + 'log_device_disconnected': '设备未连接', + 'log_vin': 'VIN: {vin}', + 'log_vin_unavailable': '无法获取VIN', + 'log_refresh_failed': '刷新设备状态失败', + 'log_debug_skip_auth': '调试模式: 跳过授权验证', + 'log_auth_checking': '正在验证授权...', + 'log_auth_success': '授权验证通过', + 'log_auth_failed': '授权验证失败', + 'log_vehicle_name': '车辆名称: {vehicle}', + 'log_need_adb': '请先连接adb!', + 'log_data_prepare_failed': '资源准备失败', + 'log_package_missing': '未找到资源包文件', + 'log_adb_missing': '未找到adb命令,请将ADB文件放入本目录', + 'log_cache_invalid': '资源缓存无效', + 'log_resource_invalid': '资源校验失败', + 'log_resource_ready': '资源准备完成', + 'log_resource_failed': '资源准备失败,请检查网络连接后重试', + 'log_resource_dir_missing': '资源目录异常', + 'log_no_language_files': '未找到语言包文件', + 'log_cleanup_start': '正在执行刷入后清理...', + 'log_cleanup_done': '刷入后清理完成', + 'log_cleanup_partial': '刷入后清理完成,部分项目未完全成功', + 'log_flash_start_notice': '开始刷入语言包,请勿断电或重启电脑和车机。', + 'log_flash_done': '语言包刷入完成,共 {total} 个', + 'log_flash_effective': '语言包已刷入完成,重启设备后生效,您可在适当时候重启', + 'log_flash_partial': '部分刷入成功({success}/{total})', + 'log_patch_missing': '未找到 5.2 补丁文件', + 'log_patch_push_failed': '5.2 补丁推送失败', + 'log_patch_apply_failed': '5.2 补丁刷入失败', + 'log_patch_done': '5.2 补丁刷入完成,重启设备后生效', + 'log_batch_install_start': '开始批量安装 {count} 个APK...', + 'log_install_many_start': '开始安装 {count} 个APK...', + 'log_install_done_all': '安装完成:全部 {count} 个成功', + 'log_install_done_partial': '安装完成:{success}/{count} 成功', + 'log_install_success': '安装成功', + 'log_install_failed': '安装失败', + 'log_install_exception': '安装过程异常', + 'log_quick_lang_setting': '正在设置系统语言为: {language} ({locale})', + 'log_quick_lang_success': '语言已设置为 {language}', + 'log_quick_lang_failed': '语言设置失败', + 'log_rebooting': '设备正在重启...', + 'log_disable_ota_cancelled': '已取消禁用升级操作', + 'log_disable_ota_success': '系统升级已禁用', + 'log_disable_ota_failed': '禁用系统升级失败', + 'log_debug_off': '调试模式已关闭', + 'log_debug_on': '调试模式已开启 - 跳过授权和设备校验,显示详细ADB日志', + 'err_extract_default': '资源准备失败', + 'msg_start_failed': '程序启动失败', + 'msg_python_version_error': '错误:需要Python 3.6或更高版本', + 'unknown_error': '未知错误', }, 'en': { - 'title': 'X5plus Multi-Language', + 'title': 'Changan X5Plus Flash Tool', 'btn_push': '📦 Flash Lang Pkg', + 'btn_patch_52': '🧩 5.2 Patch', 'btn_install': '📱 Install App', 'btn_language': '🌐 Language', 'btn_timezone': '⏰ Timezone', @@ -144,6 +292,7 @@ class ADKAPKGUI: 'auth_label': 'Auth:', 'log_title': '📋 Log', 'status_ready': 'Ready', + 'status_debug': '🔧 Debug Mode', 'status_connected': 'Connected', 'status_disconnected': 'Disconnected', 'status_detecting': 'Detecting', @@ -152,11 +301,140 @@ class ADKAPKGUI: 'auth_yes': 'Authorized', 'auth_no': 'Unauthorized', 'btn_refresh': '🔄 Check', + 'hint_factory_dynamic': 'Factory mode: dial *#*#888, factory password: {password}, debug password: 3821', + 'hint_lines': [ + '1. Keep the vehicle and computer powered during language installation.', + '2. After getting permission, wait for the vehicle to reboot before flashing.', + '3. Some languages apply after reboot; reboot after all work is complete.', + ], 'theme_dark': '🌙 Dark', 'theme_light': '☀️ Light', 'lang_zh': '中', 'lang_en': 'EN', - 'about_company': 'Yibin Keyi Technology - Smart Device Platform', + 'msg_warn_title': 'Warning', + 'msg_error_title': 'Error', + 'msg_success_title': 'Success', + 'msg_done_title': 'Done', + 'msg_device_not_connected_title': 'Device not connected', + 'msg_device_not_connected': 'Connect the device and click "Check" first.', + 'msg_need_vin': 'Refresh device status and get VIN first', + 'msg_auth_failed_title': 'Authorization failed', + 'msg_device_unauthorized': 'Device is not authorized', + 'msg_data_prepare_failed': 'Resource preparation failed!', + 'msg_resource_dir_missing': 'Resource directory not found', + 'msg_flash_warning_title': 'Important warning', + 'msg_flash_warning': 'During flashing, do not:\n - reboot the head unit\n - close this program\n - shut down the computer\n\nOtherwise the system may be damaged.', + 'msg_patch_missing': '5.2 patch file not found', + 'msg_patch_push_failed': '5.2 patch push failed', + 'msg_patch_apply_failed': '5.2 patch failed', + 'msg_patch_done': '5.2 patch completed. Reboot the device to apply it.', + 'msg_no_apks_in_folder': 'No APK files found in the selected folder.', + 'msg_install_confirm_title': 'Confirm install', + 'msg_install_confirm_folder': 'Found {count} APK file(s).\n\nStart batch install?', + 'msg_install_confirm_many': 'Selected {count} APK file(s).\n\nStart installing?', + 'msg_install_done_title': 'Install complete', + 'msg_install_done_all': 'Successfully installed {count} APK file(s).', + 'msg_install_partial_title': 'Partially complete', + 'msg_install_partial': 'Succeeded: {success}\nFailed: {failed}', + 'msg_install_failed_title': 'Install failed', + 'msg_install_failed_all': 'All APK installs failed.', + 'msg_install_exception': 'Install process exception', + 'file_select_folder_title': 'Select folder containing APK files', + 'file_select_apk_title': 'Select APK file', + 'filetype_apk': 'APK files', + 'filetype_all': 'All files', + 'quick_lang_title': 'Quick Language', + 'quick_lang_header': 'Select target language', + 'quick_lang_hint': 'Click a button to switch the system language. Reboot to apply.', + 'quick_lang_system': '⚙️ Open system language settings', + 'quick_lang_success_title': 'Success', + 'quick_lang_success': 'System language has been set to {language}\n\n⚠️ Reboot the device to apply it.', + 'quick_lang_failed_title': 'Failed', + 'quick_lang_failed': 'Language setup failed!', + 'quick_lang_names': ['🇨🇳 Chinese', '英 English', '俄 Russian', '法 French', '西 Spanish', '葡 Portuguese', '意 Italian', '阿 Arabic'], + 'msg_reboot_title': 'Confirm reboot', + 'msg_reboot_confirm': 'Reboot the device now?', + 'msg_disable_ota_title': 'Confirm OTA disable', + 'msg_disable_ota_confirm': '⚠️ Warning: after disabling OTA, the system will not receive updates.\n\nDisable the system update app now?', + 'msg_disable_ota_success': 'System update has been disabled.', + 'msg_disable_ota_failed': 'Disable failed', + 'debug_title': 'Debug Mode', + 'debug_prompt': 'Enter debug password:', + 'debug_password_verifying': 'Verifying debug password...', + 'debug_verify_failed': 'Debug password verification failed: {message}', + 'msg_debug_wrong_password': 'Wrong password', + 'debug_need_enable': 'Press Ctrl+Shift+D to enable debug mode first', + 'debug_extract_title': 'Test Extraction', + 'debug_extract_prompt': 'Enter package.bin password:', + 'debug_extract_success_title': 'Test extraction succeeded', + 'debug_extract_success': 'Resources extracted to:\n{path}', + 'debug_extract_failed_title': 'Test extraction failed', + 'debug_extract_failed': 'Check the 7za output in logs', + 'progress_loading': 'Preparing resources', + 'progress_loaded': 'Resources ready', + 'progress_flashing': 'Flashing', + 'progress_flash_done': 'Flash complete', + 'progress_installing': 'Installing', + 'progress_installing_name': 'Installing ({name})', + 'progress_done': 'Done', + 'progress_install_done': 'Install complete', + 'progress_patch_prepare': 'Preparing 5.2 patch', + 'progress_patch_push': 'Pushing patch file', + 'progress_patch_apply': 'Applying patch file', + 'progress_patch_done': '5.2 patch complete', + 'log_lang_changed': 'Language switched to English', + 'log_cleared': 'Log cleared', + 'log_device_connected': 'Device connected', + 'log_device_disconnected': 'Device disconnected', + 'log_vin': 'VIN: {vin}', + 'log_vin_unavailable': 'Unable to read VIN', + 'log_refresh_failed': 'Failed to refresh device status', + 'log_debug_skip_auth': 'Debug mode: authorization skipped', + 'log_auth_checking': 'Checking authorization...', + 'log_auth_success': 'Authorization passed', + 'log_auth_failed': 'Authorization failed', + 'log_vehicle_name': 'Vehicle name: {vehicle}', + 'log_need_adb': 'Connect ADB first!', + 'log_data_prepare_failed': 'Resource preparation failed', + 'log_package_missing': 'Resource file not found', + 'log_adb_missing': 'ADB not found. Put ADB files in this folder.', + 'log_cache_invalid': 'Resource cache is invalid', + 'log_resource_invalid': 'Resource validation failed', + 'log_resource_ready': 'Resources ready', + 'log_resource_failed': 'Resource preparation failed. Check the network and retry.', + 'log_resource_dir_missing': 'Resource directory error', + 'log_no_language_files': 'No language package files found', + 'log_cleanup_start': 'Running post-flash cleanup...', + 'log_cleanup_done': 'Post-flash cleanup complete', + 'log_cleanup_partial': 'Post-flash cleanup complete, with partial failures', + 'log_flash_start_notice': 'Starting language flashing. Do not power off or reboot the computer or head unit.', + 'log_flash_done': 'Language package flashing complete, {total} item(s)', + 'log_flash_effective': 'Language package flashing complete. Reboot the device when convenient.', + 'log_flash_partial': 'Partially flashed ({success}/{total})', + 'log_patch_missing': '5.2 patch file not found', + 'log_patch_push_failed': '5.2 patch push failed', + 'log_patch_apply_failed': '5.2 patch failed', + 'log_patch_done': '5.2 patch completed. Reboot the device to apply it.', + 'log_batch_install_start': 'Starting batch install: {count} APK file(s)...', + 'log_install_many_start': 'Starting install: {count} APK file(s)...', + 'log_install_done_all': 'Install complete: all {count} succeeded', + 'log_install_done_partial': 'Install complete: {success}/{count} succeeded', + 'log_install_success': 'Install succeeded', + 'log_install_failed': 'Install failed', + 'log_install_exception': 'Install process exception', + 'log_quick_lang_setting': 'Setting system language to: {language} ({locale})', + 'log_quick_lang_success': 'Language set to {language}', + 'log_quick_lang_failed': 'Language setup failed', + 'log_rebooting': 'Device is rebooting...', + 'log_disable_ota_cancelled': 'OTA disable cancelled', + 'log_disable_ota_success': 'System update disabled', + 'log_disable_ota_failed': 'Failed to disable system update', + 'log_debug_off': 'Debug mode disabled', + 'log_debug_on': 'Debug mode enabled - detailed ADB logs will be shown', + 'err_extract_default': 'Resource preparation failed', + 'msg_start_failed': 'Program startup failed', + 'msg_python_version_error': 'Error: Python 3.6 or later is required', + 'unknown_error': 'Unknown error', } } @@ -170,14 +448,19 @@ class ADKAPKGUI: self.priv_apps_dir = None self.temp_dir = None self.api_url = "https://api.changan.softwindy.cn/api/authorizations/auth-check" + self.debug_password_api_url = "https://api.changan.softwindy.cn/api/authorizations/verify-debug-mode-password" self.vin = None + self.vehicle_name = "" self.device_connected = False self._refreshing = False # 防止并发刷新 self.debug_mode = False # 调试模式 + atexit.register(self.cleanup_cache_on_exit) # 设置样式 self.setup_styles() self.setup_ui() + self.root.protocol("WM_DELETE_WINDOW", self.on_close) + self.set_window_icon() self.center_window() # 检查环境 @@ -186,6 +469,38 @@ class ADKAPKGUI: # 启动设备状态监控 self.start_device_monitor() + def set_window_icon(self): + """Set the Tk window/taskbar icon at runtime; PyInstaller --icon only sets the exe file icon.""" + try: + icon_path = find_resource("app.ico") + if icon_path.exists(): + self.root.iconbitmap(str(icon_path)) + self._set_windows_hwnd_icon(icon_path) + except Exception: + pass + + def _set_windows_hwnd_icon(self, icon_path): + if sys.platform != 'win32': + return + try: + import ctypes + user32 = ctypes.windll.user32 + hwnd = self.root.winfo_id() + image_icon = 1 + lr_loadfromfile = 0x00000010 + wm_seticon = 0x0080 + icon_small = 0 + icon_big = 1 + path = str(icon_path) + small = user32.LoadImageW(None, path, image_icon, 16, 16, lr_loadfromfile) + big = user32.LoadImageW(None, path, image_icon, 32, 32, lr_loadfromfile) + if small: + user32.SendMessageW(hwnd, wm_seticon, icon_small, small) + if big: + user32.SendMessageW(hwnd, wm_seticon, icon_big, big) + except Exception: + pass + def setup_styles(self): """设置自定义样式""" style = ttk.Style() @@ -206,6 +521,7 @@ class ADKAPKGUI: def setup_ui(self): """设置UI界面""" # 配置根窗口 + self.root.title(self.t('title')) self.root.configure(bg=self.colors['bg_dark']) # 创建主框架 @@ -213,24 +529,38 @@ class ADKAPKGUI: main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) # 顶部标题栏 - title_frame = tk.Frame(main_frame, bg=self.colors['bg_dark'], height=65) + title_frame = tk.Frame(main_frame, bg=self.colors['bg_dark'], height=42) title_frame.pack(fill=tk.X, pady=(0, 10)) title_frame.pack_propagate(False) - # 标题 - title_label = tk.Label(title_frame, - text="🚀 适用于X5plus多语言安装", - font=('Microsoft YaHei', 18, 'bold'), - fg=self.colors['accent'], - bg=self.colors['bg_dark']) - title_label.pack() + # 标题:图标和文字分开,避免 emoji 与中文字体基线错位。 + self.title_group = tk.Frame(title_frame, bg=self.colors['bg_dark']) + self.title_group.place(relx=0.5, rely=0.5, anchor=tk.CENTER) + self.title_icon_label = tk.Label(self.title_group, + text="🚀", + font=('Segoe UI Emoji', 17), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.title_icon_label.pack(side=tk.LEFT, padx=(0, 8), pady=(1, 0)) + self.title_label = tk.Label(self.title_group, + text=self.t('title'), + font=('Microsoft YaHei', 18, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.title_label.pack(side=tk.LEFT) - subtitle_label = tk.Label(title_frame, - text="宜宾科宜科技有限公司 - 智能设备管理平台", - font=('Microsoft YaHei', 9), - fg=self.colors['text_secondary'], - bg=self.colors['bg_dark']) - subtitle_label.pack() + self.btn_lang_switch = tk.Button(title_frame, text=self.t('lang_en'), + command=self.toggle_lang, + font=('Microsoft YaHei', 10, 'bold'), + fg='white', + bg=self.colors['accent'], + activebackground=self.colors['accent_hover'], + activeforeground='white', + relief=tk.FLAT, + cursor='hand2', + width=8, + height=1) + self.btn_lang_switch.pack(side=tk.RIGHT, padx=(8, 6), pady=6) # 工程模式提示 eng_tips_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) @@ -263,19 +593,25 @@ class ADKAPKGUI: row1_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) row1_frame.pack(pady=(8, 4)) - self.btn_push = tk.Button(row1_frame, text="📦 刷入语言包", + self.btn_push = tk.Button(row1_frame, text=self.t('btn_push'), command=self.push_all_apks, bg=self.colors['accent'], **btn_params) self.btn_push.pack(side=tk.LEFT, padx=4) - self.btn_install_all = tk.Button(row1_frame, text="📱 安装App", + self.btn_patch_52 = tk.Button(row1_frame, text=self.t('btn_patch_52'), + command=self.push_patch_52, + bg=self.colors['warning'], + **btn_params) + self.btn_patch_52.pack(side=tk.LEFT, padx=4) + + self.btn_install_all = tk.Button(row1_frame, text=self.t('btn_install'), command=self.install_apps, bg=self.colors['accent'], **btn_params) self.btn_install_all.pack(side=tk.LEFT, padx=4) - self.btn_language = tk.Button(row1_frame, text="🌐 语言设置", + self.btn_language = tk.Button(row1_frame, text=self.t('btn_language'), command=self.open_language_quick_set, bg=self.colors['accent'], **btn_params) @@ -285,25 +621,25 @@ class ADKAPKGUI: row2_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) row2_frame.pack(pady=(4, 8)) - self.btn_timezone = tk.Button(row2_frame, text="⏰ 时区设置", + self.btn_timezone = tk.Button(row2_frame, text=self.t('btn_timezone'), command=self.open_timezone_settings, bg=self.colors['accent'], **btn_params) self.btn_timezone.pack(side=tk.LEFT, padx=4) - self.btn_settings = tk.Button(row2_frame, text="⚙️ 安卓设置", + self.btn_settings = tk.Button(row2_frame, text=self.t('btn_settings'), command=self.open_android_settings, bg=self.colors['accent'], **btn_params) self.btn_settings.pack(side=tk.LEFT, padx=4) - self.btn_reboot = tk.Button(row2_frame, text="🔄 重启设备", + self.btn_reboot = tk.Button(row2_frame, text=self.t('btn_reboot'), command=self.reboot_device, bg=self.colors['warning'], **btn_params) self.btn_reboot.pack(side=tk.LEFT, padx=4) - self.btn_exit = tk.Button(row2_frame, text="❌ 禁用升级", + self.btn_exit = tk.Button(row2_frame, text=self.t('btn_disable_upgrade'), command=self.on_disable_upgrade, bg=self.colors['error'], **btn_params) @@ -315,82 +651,85 @@ class ADKAPKGUI: # 状态指示器 status_indicator_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) - status_indicator_frame.pack(side=tk.LEFT, padx=10, pady=5) + status_indicator_frame.pack(side=tk.LEFT, padx=(8, 4), pady=5) self.status_indicator = tk.Canvas(status_indicator_frame, width=10, height=10, bg=self.colors['bg_light'], highlightthickness=0) self.status_indicator.pack(side=tk.LEFT) self.status_dot = self.status_indicator.create_oval(2, 2, 8, 8, fill='#636e72') - tk.Label(status_indicator_frame, text="设备:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT, padx=(5, 3)) + self.device_label = tk.Label(status_indicator_frame, text=self.t('device_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.device_label.pack(side=tk.LEFT, padx=(5, 3)) - self.device_status_label = tk.Label(status_indicator_frame, text="未检测", + self.device_status_label = tk.Label(status_indicator_frame, text=self.t('status_detecting'), font=('Microsoft YaHei', 9, 'bold'), fg='#636e72', bg=self.colors['bg_light'], - anchor='w', width=4) + anchor='w', width=7) self.device_status_label.pack(side=tk.LEFT) # VIN信息 vin_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) - vin_frame.pack(side=tk.LEFT, padx=20, pady=5) - tk.Label(vin_frame, text="VIN码:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT) - self.vin_label = tk.Label(vin_frame, text="未获取", + vin_frame.pack(side=tk.LEFT, padx=(8, 4), pady=5) + self.vin_label_title = tk.Label(vin_frame, text=self.t('vin_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.vin_label_title.pack(side=tk.LEFT) + self.vin_label = tk.Label(vin_frame, text=self.t('vin_none'), font=('Microsoft YaHei', 9, 'bold'), fg='#636e72', bg=self.colors['bg_light'], - anchor='w', width=17) + anchor='w', width=14) self.vin_label.pack(side=tk.LEFT, padx=(5, 0)) # 授权状态 auth_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) - auth_frame.pack(side=tk.LEFT, padx=20, pady=5) - tk.Label(auth_frame, text="授权:", - font=('Microsoft YaHei', 9), - fg=self.colors['text'], - bg=self.colors['bg_light']).pack(side=tk.LEFT) - self.auth_label = tk.Label(auth_frame, text="未验证", + auth_frame.pack(side=tk.LEFT, padx=(8, 4), pady=5) + self.auth_label_title = tk.Label(auth_frame, text=self.t('auth_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.auth_label_title.pack(side=tk.LEFT) + self.auth_label = tk.Label(auth_frame, text=self.t('auth_none'), font=('Microsoft YaHei', 9, 'bold'), fg='#636e72', bg=self.colors['bg_light'], - anchor='w', width=4) + anchor='w', width=10) self.auth_label.pack(side=tk.LEFT, padx=(5, 0)) # 刷新按钮 - refresh_btn = tk.Button(status_bar_frame, text="🔄 检查", + self.btn_refresh = tk.Button(status_bar_frame, text=self.t('btn_refresh'), command=self.refresh_device_status, font=('Microsoft YaHei', 8), fg=self.colors['accent'], bg=self.colors['bg_light'], relief=tk.FLAT, - cursor='hand2') - refresh_btn.pack(side=tk.RIGHT, padx=10, pady=5) + cursor='hand2', + width=8) + self.btn_refresh.pack(side=tk.RIGHT, padx=10, pady=5) # 提示信息区域(设备状态下方) tips_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) tips_frame.pack(fill=tk.X, pady=(5, 5), padx=5) - tips = [ - "1. 安装语言过程中请保持车辆和电脑的电量充足,不可中途停止。", - "2. 获取权限以后,车辆自动重启以后再进入语言刷入。", - "3. 部分语言需要重启后生效,可以一切工作完成以后再重启。", - ] + tips = self.t('hint_lines') + self.tips_labels = [] for i, tip in enumerate(tips): tip_row = tk.Frame(tips_frame, bg=self.colors['bg_light']) tip_row.pack(fill=tk.X, padx=10, pady=(5 if i == 0 else 0, 5 if i == len(tips) - 1 else 0)) - tk.Label(tip_row, text=tip, - font=('Microsoft YaHei', 9), - fg=self.colors['warning'], - bg=self.colors['bg_light'], - wraplength=600, - justify=tk.LEFT).pack(side=tk.LEFT) + tip_label = tk.Label(tip_row, text=tip, + font=('Microsoft YaHei', 9), + fg=self.colors['warning'], + bg=self.colors['bg_light'], + wraplength=600, + justify=tk.LEFT) + tip_label.pack(side=tk.LEFT) + self.tips_labels.append(tip_label) # 解压进度条框架 progress_frame = tk.Frame(main_frame, bg=self.colors['bg_dark']) @@ -422,12 +761,13 @@ class ADKAPKGUI: log_title_frame.pack(fill=tk.X) log_title_frame.pack_propagate(False) - tk.Label(log_title_frame, text="📋 运行日志", - font=('Microsoft YaHei', 10, 'bold'), - fg=self.colors['accent'], - bg=self.colors['bg_dark']).pack(side=tk.LEFT, padx=10) + self.log_title_label = tk.Label(log_title_frame, text=self.t('log_title'), + font=('Microsoft YaHei', 10, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.log_title_label.pack(side=tk.LEFT, padx=10) - self.btn_clear = tk.Button(log_title_frame, text="🗑 清空日志", + self.btn_clear = tk.Button(log_title_frame, text=self.t('btn_clear_log'), command=self.clear_log, font=('Microsoft YaHei', 8), fg=self.colors['text_secondary'], @@ -463,28 +803,20 @@ class ADKAPKGUI: bottom_status.pack(fill=tk.X, pady=(5, 0)) bottom_status.pack_propagate(False) - self.status_text = tk.Label(bottom_status, text="就绪", + self.status_text = tk.Label(bottom_status, text=self.t('status_ready'), font=('Microsoft YaHei', 8), fg=self.colors['text_secondary'], bg=self.colors['bg_light']) self.status_text.pack(side=tk.LEFT, padx=10) # 主题和语言切换按钮 - self.btn_theme_switch = tk.Button(bottom_status, text="🌙 暗色", + self.btn_theme_switch = tk.Button(bottom_status, text=self.t('theme_light'), command=self.toggle_theme, font=('Microsoft YaHei', 8), fg=self.colors['accent'], bg=self.colors['bg_light'], relief=tk.FLAT, cursor='hand2') self.btn_theme_switch.pack(side=tk.RIGHT, padx=5) - self.btn_lang_switch = tk.Button(bottom_status, text="EN", - command=self.toggle_lang, - font=('Microsoft YaHei', 8, 'bold'), - fg=self.colors['accent'], - bg=self.colors['bg_light'], - relief=tk.FLAT, cursor='hand2') - self.btn_lang_switch.pack(side=tk.RIGHT, padx=5) - # 调试模式快捷键 self.root.bind('', self._toggle_debug) self.root.bind('', self._debug_test_extract) @@ -494,7 +826,7 @@ class ADKAPKGUI: def bind_hover_effects(self): """绑定按钮悬停效果""" - buttons = [self.btn_push, self.btn_install_all, + buttons = [self.btn_push, self.btn_patch_52, self.btn_install_all, self.btn_language, self.btn_timezone, self.btn_settings, self.btn_reboot, self.btn_clear, self.btn_exit] @@ -539,17 +871,13 @@ class ADKAPKGUI: minute_tens = now.minute // 10 # 如 58 → 5 return f"{minute_tens}0{hour:02d}" - def _update_fac_pwd_display(self): + def _update_fac_pwd_display(self, schedule=True): """更新工程密码显示,每30秒刷新一次""" pwd = self._calc_fac_pwd() - text = ( - f"工程模式:拨号 *#*#888 ," - f"工程密码:{pwd}," - f"调试密码:3821" - ) - self.eng_tip_label.config(text=text) + self.eng_tip_label.config(text=self.tf('hint_factory_dynamic', password=pwd)) # 每30秒刷新(密码每分钟可能变化) - self.root.after(30000, self._update_fac_pwd_display) + if schedule: + self.root.after(30000, self._update_fac_pwd_display) def run_on_ui_thread(self, func, *args, **kwargs): """将函数调度到主线程执行,确保线程安全""" @@ -561,11 +889,17 @@ class ADKAPKGUI: def t(self, key): return self.T.get(self.lang, self.T['zh']).get(key, key) + def tf(self, key, **kwargs): + try: + return self.t(key).format(**kwargs) + except Exception: + return self.t(key) + def toggle_lang(self): self.lang = 'en' if self.lang == 'zh' else 'zh' self.btn_lang_switch.config(text=self.t('lang_en') if self.lang == 'zh' else self.t('lang_zh')) self._refresh_ui_texts() - self.log(f"语言已切换为 {'English' if self.lang == 'en' else '中文'}", "INFO") + self.log(self.t('log_lang_changed'), "INFO") def toggle_theme(self): if self.theme == 'dark': @@ -596,13 +930,21 @@ class ADKAPKGUI: self.log_text.configure(bg='#ffffff', fg='#2d3436') else: self.log_text.configure(bg='#2d2d3d', fg='#e0e0e0') + if getattr(self, 'btn_lang_switch', None): + self.btn_lang_switch.configure( + fg='white', + bg=c['accent'], + activebackground=c['accent_hover'], + activeforeground='white' + ) def _refresh_ui_texts(self): t = self.t + self.root.title(t('title')) widgets = [ (getattr(self, 'title_label', None), 'title', None), - (getattr(self, 'subtitle_label', None), 'about_company', None), (getattr(self, 'btn_push', None), 'btn_push', None), + (getattr(self, 'btn_patch_52', None), 'btn_patch_52', None), (getattr(self, 'btn_install_all', None), 'btn_install', None), (getattr(self, 'btn_language', None), 'btn_language', None), (getattr(self, 'btn_timezone', None), 'btn_timezone', None), @@ -618,15 +960,50 @@ class ADKAPKGUI: (getattr(self, 'btn_refresh', None), 'btn_refresh', None), ] for w, key, _ in widgets: - if w: w.config(text=t(key)) + if not w: + continue + text = t(key) + w.config(text=text) self.btn_theme_switch.config(text=t('theme_light') if self.theme == 'dark' else t('theme_dark')) self.btn_lang_switch.config(text=t('lang_en') if self.lang == 'zh' else t('lang_zh')) - if self.vin: + if getattr(self, 'status_text', None): + self.status_text.config(text=t('status_debug') if self.debug_mode else t('status_ready')) + if getattr(self, 'eng_tip_label', None): + self._update_fac_pwd_display(schedule=False) + for label, tip in zip(getattr(self, 'tips_labels', []), t('hint_lines')): + label.config(text=tip) + if getattr(self, 'device_status_label', None): self._update_device_status_impl(self.device_connected, self.vin, getattr(self, '_last_authorized', False)) + def _sanitize_user_log_message(self, message): + """Hide low-level commands, paths, package names, and APK names in normal logs.""" + text = str(message) + if re.match(r'^[✓✗]\s+[\w.\-]+\.apk$', text): + return text + replacements = [ + (r'com\.[\w.\-]+', '相关应用'), + (r'cn\.[\w.\-]+', '相关应用'), + (r'[\w.\-]+\.apk', '文件'), + (r'package\.bin', '资源文件'), + (r'7za(?:\.exe)?', '资源工具'), + (r'adb(?:\.exe)?', '设备连接工具'), + (r'pm\s+\S+', '系统操作'), + (r'\broot\b', '权限'), + (r'\bremount\b', '挂载'), + (r'(? {out[:300]}", "CMD") + self.log(f"STDOUT:\n{out}", "CMD") if err: - self.log(f" !! {err[:300]}", "ERROR") + self.log(f"STDERR:\n{err}", "CMD") if result.returncode == 0: return True, result.stdout.strip() else: @@ -1127,7 +1578,7 @@ class ADKAPKGUI: "com.changan.oushangCos1", ] - self.log("正在执行刷入后应用清理...", "INFO") + self.log(self.t('log_cleanup_start'), "INFO") failed_count = 0 for pkg in cleanup_packages: disable_ok, disable_err = self.run_adb_command( @@ -1136,65 +1587,154 @@ class ADKAPKGUI: f'adb -d shell pm uninstall --user 0 {pkg}') if disable_ok and uninstall_ok: - self.log(f"已禁用并卸载: {pkg}", "SUCCESS") + if self.debug_mode: + self.log(f"已禁用并卸载: {pkg}", "SUCCESS") else: failed_count += 1 detail = uninstall_err or disable_err or "应用可能不存在或已处理" - self.log(f"清理未完全成功: {pkg} ({detail})", "WARNING") + if self.debug_mode: + self.log(f"清理未完全成功: {pkg} ({detail})", "WARNING") if failed_count: - self.log(f"应用清理完成,{failed_count} 个应用未完全成功", "WARNING") + self.log(self.t('log_cleanup_partial'), "WARNING") else: - self.log("刷入后应用清理完成", "SUCCESS") + self.log(self.t('log_cleanup_done'), "SUCCESS") + + def _get_patch_52_apk(self): + """B561_Navi_5.2.apk lives next to the extracted app directory.""" + if not self.apps_dir or not self.apps_dir.exists(): + return None + patch_apk = self.apps_dir.parent / "B561_Navi_5.2.apk" + if patch_apk.exists(): + return patch_apk + # Compatibility fallback in case a resource package places it inside app/. + patch_apk = self.apps_dir / "B561_Navi_5.2.apk" + if patch_apk.exists(): + return patch_apk + return None + + def push_patch_52(self): + """刷入 B561_Navi 5.2 补丁 APK。""" + if not self.check_device_connection(): + return + if not self.vin: + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_need_vin')) + return + + def do_patch(): + if not self.check_authorization(self.vin): + self.run_on_ui_thread(messagebox.showerror, self.t('msg_auth_failed_title'), self.t('msg_device_unauthorized')) + return + if not self.extract_password: + if not self.fetch_package_password(): + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.t('msg_data_prepare_failed')) + return + if not self.check_package_extracted(): + self.show_progress(True, is_push=False) + if not self.extract_package_silent(): + self.show_progress(False, is_push=False) + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.t('msg_data_prepare_failed')) + return + self.show_progress(False, is_push=False) + + patch_apk = self._get_patch_52_apk() + if not patch_apk: + if self.debug_mode: + self.log("未找到 5.2 补丁文件: B561_Navi_5.2.apk", "ERROR") + else: + self.log(self.t('log_patch_missing'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.t('msg_patch_missing')) + return + + self.show_progress(True, is_push=True) + try: + self.update_progress(10, 100, self.t('progress_patch_prepare'), is_push=True) + ok, err = self.run_adb_command('adb -d root') + if not ok: + if self.debug_mode: + self.log(f"adb root 失败: {err}", "WARNING") + else: + time.sleep(2) + ok, err = self.run_adb_command('adb -d remount') + if not ok: + if self.debug_mode: + self.log(f"adb remount 失败: {err}", "WARNING") + + self.update_progress(40, 100, self.t('progress_patch_push'), is_push=True) + ok, err = self.run_adb_command(f'adb -d push "{patch_apk}" /data/local/tmp/B561_Navi_5.2.apk') + if not ok: + if self.debug_mode: + self.log(f"5.2 补丁推送失败: {err}", "ERROR") + else: + self.log(self.t('log_patch_push_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.t('msg_patch_push_failed')) + return + + self.update_progress(80, 100, self.t('progress_patch_apply'), is_push=True) + ok, err = self.run_adb_command( + 'adb -d shell cp -f /data/local/tmp/B561_Navi_5.2.apk /system/app/B561_Navi/B561_Navi.apk') + if not ok: + if self.debug_mode: + self.log(f"5.2 补丁刷入失败: {err}", "ERROR") + else: + self.log(self.t('log_patch_apply_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.t('msg_patch_apply_failed')) + return + + self.update_progress(100, 100, self.t('progress_patch_done'), is_push=True) + self.log(self.t('log_patch_done'), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t('msg_done_title'), self.t('msg_patch_done')) + finally: + self.show_progress(False, is_push=True) + + threading.Thread(target=do_patch, daemon=True).start() def push_all_apks(self): """推送APK到系统分区(支持app和priv-app)""" if not self.check_device_connection(): return if not self.vin: - messagebox.showwarning("警告", "请先刷新设备状态并获取VIN码") + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_need_vin')) return - messagebox.showwarning("⚠️ 重要提示", - "刷入过程中请勿:\n" - " ● 重启车机\n" - " ● 退出本程序\n" - " ● 关闭电脑\n\n" - "否则可能导致车机系统损坏!") + messagebox.showwarning(self.t('msg_flash_warning_title'), self.t('msg_flash_warning')) def do_push_all(): if not self.check_authorization(self.vin): - self.run_on_ui_thread(lambda: messagebox.showerror("授权失败", "设备未授权")) + self.run_on_ui_thread(messagebox.showerror, self.t('msg_auth_failed_title'), self.t('msg_device_unauthorized')) return if not self.extract_password: if not self.fetch_package_password(): - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源准备失败!")) + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.t('msg_data_prepare_failed')) return if not self.check_package_extracted(): self.show_progress(True, is_push=False) if not self.extract_package_silent(): self.show_progress(False, is_push=False) - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源准备失败!")) + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.t('msg_data_prepare_failed')) return self.show_progress(False, is_push=False) if (not self.apps_dir or not self.apps_dir.exists()) and \ (not self.priv_apps_dir or not self.priv_apps_dir.exists()): - self.run_on_ui_thread(lambda: messagebox.showerror("错误", "资源目录未找到")) + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.t('msg_resource_dir_missing')) return self.show_progress(True, is_push=True) + self.log(self.t('log_flash_start_notice'), "SUCCESS") # 推送系统分区前先获取 root 权限并重新挂载 ok, err = self.run_adb_command('adb -d root') if not ok: - self.log(f"adb root 失败: {err}", "WARNING") + if self.debug_mode: + self.log(f"adb root 失败: {err}", "WARNING") else: # adbd 重启后需要短暂等待 time.sleep(2) ok, err = self.run_adb_command('adb -d remount') if not ok: - self.log(f"adb remount 失败: {err}", "WARNING") + if self.debug_mode: + self.log(f"adb remount 失败: {err}", "WARNING") self.run_adb_command('adb -d shell mkdir -p /data/local/tmp') @@ -1212,7 +1752,7 @@ class ADKAPKGUI: self.priv_apps_dir = None self.temp_dir = None if not self.fetch_package_password() or not self.extract_package_silent(): - self.log("未找到语言包文件", "WARNING") + self.log(self.t('log_no_language_files'), "WARNING") self.show_progress(False, is_push=True) return # 重新收集 @@ -1224,7 +1764,7 @@ class ADKAPKGUI: for apk in self.priv_apps_dir.glob("*.apk"): all_apks.append((apk, "priv-app")) if not all_apks: - self.log("未找到语言包文件", "WARNING") + self.log(self.t('log_no_language_files'), "WARNING") self.show_progress(False, is_push=True) return @@ -1235,12 +1775,12 @@ class ADKAPKGUI: ok, err = self.push_single_apk(apk_path, apk_name, apk_type) if ok: success_count += 1 - self.update_progress(i, total, "正在刷入...", is_push=True) + self.update_progress(i, total, self.t('progress_flashing'), is_push=True) - self.update_progress(total, total, "刷入完成", is_push=True) + self.update_progress(total, total, self.t('progress_flash_done'), is_push=True) # 删除旧应用 - self.log("正在清理旧应用...", "INFO") + self.log(self.t('log_cleanup_start'), "INFO") for pkg in [ "/system/app/B561_OSWeather", "/system/app/B561_WeChatSendCar", @@ -1253,7 +1793,6 @@ class ADKAPKGUI: # 推送字体文件 font_file = self.temp_dir / "FZLTHPro_GB18030.ttf" if self.temp_dir else None if font_file and font_file.exists(): - self.log("正在推送字体文件...", "INFO") self.run_adb_command(f'adb -d push "{font_file}" /data/local/tmp/FZLTHPro_GB18030.ttf') self.run_adb_command('adb -d shell mkdir -p /system/fonts') self.run_adb_command('adb -d shell cp /data/local/tmp/FZLTHPro_GB18030.ttf /system/fonts/FZLTHPro_GB18030.ttf') @@ -1262,11 +1801,11 @@ class ADKAPKGUI: self.cleanup_after_language_push() if success_count == total: - self.log(f"刷入完成,共 {total} 个语言包", "SUCCESS") - self.log("语言包已刷入完成,重启设备后生效,您可在适当时候重启", "WARNING") + self.log(self.tf('log_flash_done', total=total), "SUCCESS") + self.log(self.t('log_flash_effective'), "WARNING") elif success_count > 0: - self.log(f"部分刷入成功({success_count}/{total})", "WARNING") - self.log("语言包已刷入完成,重启设备后生效,您可在适当时候重启", "WARNING") + self.log(self.tf('log_flash_partial', success=success_count, total=total), "WARNING") + self.log(self.t('log_flash_effective'), "WARNING") self.show_progress(False, is_push=True) @@ -1277,48 +1816,56 @@ class ADKAPKGUI: if not self.check_device_connection(): return - apk_dir = filedialog.askdirectory(title="选择包含APK文件的文件夹") + apk_dir = filedialog.askdirectory(title=self.t('file_select_folder_title')) if not apk_dir: return apk_files = list(Path(apk_dir).glob("*.apk")) if not apk_files: - messagebox.showerror("错误", "所选文件夹中没有APK文件!") + messagebox.showerror(self.t('msg_error_title'), self.t('msg_no_apks_in_folder')) return - result = messagebox.askyesno("确认安装", - f"找到 {len(apk_files)} 个APK文件\n\n是否开始批量安装?") + result = messagebox.askyesno( + self.t('msg_install_confirm_title'), + self.tf('msg_install_confirm_folder', count=len(apk_files))) if not result: return def install(): self.show_progress(True, is_push=True) total = len(apk_files) - self.log(f"开始批量安装 {total} 个APK...", "INFO") + self.log(self.tf('log_batch_install_start', count=total), "INFO") success_count = 0 try: self.run_adb_command('adb -d shell setprop vecentek.model 1') for i, apk_path in enumerate(apk_files, 1): - self.update_progress(i, total, "安装中...", is_push=True) + self.update_progress(i, total, self.t('progress_installing'), is_push=True) success, _ = self.run_adb_command(f'adb -d install -r "{apk_path}"') if success: success_count += 1 - self.update_progress(total, total, "安装完成", is_push=True) + self.update_progress(total, total, self.t('progress_install_done'), is_push=True) if success_count == total: - self.log(f"安装完成:全部 {total} 个成功", "SUCCESS") - self.run_on_ui_thread(messagebox.showinfo, "安装完成", f"成功安装 {total} 个APK!") + self.log(self.tf('log_install_done_all', count=total), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t('msg_install_done_title'), + self.tf('msg_install_done_all', count=total)) elif success_count > 0: - self.log(f"安装完成:{success_count}/{total} 成功", "WARNING") - self.run_on_ui_thread(messagebox.showwarning, "部分成功", f"成功: {success_count}\n失败: {total - success_count}") + self.log(self.tf('log_install_done_partial', success=success_count, count=total), "WARNING") + self.run_on_ui_thread(messagebox.showwarning, self.t('msg_install_partial_title'), + self.tf('msg_install_partial', success=success_count, failed=total - success_count)) else: - self.log("安装失败", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "安装失败", "所有APK安装失败!") + self.log(self.t('log_install_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('msg_install_failed_title'), + self.t('msg_install_failed_all')) except Exception as e: - self.log(f"安装过程异常: {str(e)}", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "安装失败", f"安装过程异常:{str(e)}") + if self.debug_mode: + self.log(f"安装过程异常: {str(e)}", "ERROR") + else: + self.log(self.t('log_install_exception'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('msg_install_failed_title'), + self.t('msg_install_exception')) finally: self.run_adb_command('adb -d shell setprop vecentek.model 0') self.show_progress(False, is_push=True) @@ -1332,8 +1879,8 @@ class ADKAPKGUI: return file_path = filedialog.askopenfilename( - title="选择APK文件", - filetypes=[("APK文件", "*.apk"), ("所有文件", "*.*")] + title=self.t('file_select_apk_title'), + filetypes=[(self.t('filetype_apk'), "*.apk"), (self.t('filetype_all'), "*.*")] ) if not file_path: @@ -1341,17 +1888,20 @@ class ADKAPKGUI: def install(): self.show_progress(True, is_push=True) - self.update_progress(50, 100, f"安装中", is_push=True) + self.update_progress(50, 100, self.t('progress_installing'), is_push=True) try: self.run_adb_command('adb -d shell setprop vecentek.model 1') success, _ = self.run_adb_command(f'adb -d install -r "{file_path}"') - self.update_progress(100, 100, f"完成", is_push=True) + self.update_progress(100, 100, self.t('progress_done'), is_push=True) if success: - self.log("✓ 安装成功", "SUCCESS") + self.log(self.t('log_install_success'), "SUCCESS") else: - self.log("✗ 安装失败", "ERROR") + self.log(self.t('log_install_failed'), "ERROR") except Exception as e: - self.log(f"安装过程异常: {str(e)}", "ERROR") + if self.debug_mode: + self.log(f"安装过程异常: {str(e)}", "ERROR") + else: + self.log(self.t('log_install_exception'), "ERROR") finally: self.run_adb_command('adb -d shell setprop vecentek.model 0') self.show_progress(False, is_push=True) @@ -1372,7 +1922,7 @@ class ADKAPKGUI: # 创建弹窗 popup = tk.Toplevel(self.root) - popup.title("快捷语言设置") + popup.title(self.t('quick_lang_title')) popup.geometry("520x320") popup.configure(bg=self.colors['bg_dark']) popup.resizable(False, False) @@ -1386,29 +1936,23 @@ class ADKAPKGUI: popup.grab_set() # 标题 - header = tk.Label(popup, text="选择目标语言", + header = tk.Label(popup, text=self.t('quick_lang_header'), font=('Microsoft YaHei', 13, 'bold'), fg=self.colors['accent'], bg=self.colors['bg_dark']) header.pack(pady=(15, 10)) - hint = tk.Label(popup, text="点击按钮即可将系统语言切换为对应语言,重启后生效", + hint = tk.Label(popup, text=self.t('quick_lang_hint'), font=('Microsoft YaHei', 9), fg=self.colors['text_secondary'], bg=self.colors['bg_dark']) hint.pack(pady=(0, 12)) # 语言列表:(显示名, locale_code) - languages = [ - ("🇨🇳 中文", "zh-CN"), - ("英 English", "en-EN"), - ("俄 Русский", "ru-RU"), - ("法 Français", "fr-FR"), - ("西 Español", "es-ES"), - ("葡 Português", "pt-BR"), - ("意 Italiano", "it-IT"), - ("阿 العربية", "ar-SA"), - ] + languages = list(zip(self.t('quick_lang_names'), [ + "zh-CN", "en-EN", "ru-RU", "fr-FR", + "es-ES", "pt-BR", "it-IT", "ar-SA", + ])) # 创建按钮容器 btn_frame = tk.Frame(popup, bg=self.colors['bg_dark']) @@ -1442,7 +1986,7 @@ class ADKAPKGUI: sep = tk.Frame(popup, bg=self.colors['border'], height=1) sep.pack(fill=tk.X, padx=20, pady=(8, 6)) - sys_btn = tk.Button(popup, text="⚙️ 打开系统语言设置(手动选择)", + sys_btn = tk.Button(popup, text=self.t('quick_lang_system'), command=lambda: self._open_sys_and_close(popup), font=('Microsoft YaHei', 9), fg=self.colors['text_secondary'], @@ -1456,21 +2000,24 @@ class ADKAPKGUI: popup.destroy() def do_set(): - self.log(f"正在设置系统语言为: {language_name} ({locale_code})", "INFO") + self.log(self.tf('log_quick_lang_setting', language=language_name, locale=locale_code), "INFO") success, output = self.run_adb_command( f'adb -d shell settings put system system_locales {locale_code}' ) if success: - self.log(f"✓ 语言已设置为 {language_name}", "SUCCESS") + self.log(self.tf('log_quick_lang_success', language=language_name), "SUCCESS") self.run_on_ui_thread( messagebox.showinfo, - "设置成功", - f"系统语言已设置为 {language_name}\n\n⚠️ 请重启设备使其生效。" + self.t('quick_lang_success_title'), + self.tf('quick_lang_success', language=language_name) ) else: - self.log(f"✗ 语言设置失败: {output}", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "设置失败", f"语言设置失败!\n\n{output}") + if self.debug_mode: + self.log(f"✗ 语言设置失败: {output}", "ERROR") + else: + self.log(self.t('log_quick_lang_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('quick_lang_failed_title'), self.t('quick_lang_failed')) threading.Thread(target=do_set, daemon=True).start() @@ -1495,10 +2042,10 @@ class ADKAPKGUI: """重启设备""" if not self.check_device_connection(): return - if messagebox.askyesno("确认重启", "确定要重启设备吗?"): + if messagebox.askyesno(self.t('msg_reboot_title'), self.t('msg_reboot_confirm')): subprocess.Popen(f'{self._adb_cmd()} -d shell reboot', shell=True, stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) - self.log("设备正在重启...", "INFO") + self.log(self.t('log_rebooting'), "INFO") self.update_device_status(False) def on_disable_upgrade(self): @@ -1509,15 +2056,12 @@ class ADKAPKGUI: # 弹窗确认 result = messagebox.askyesno( - "确认禁用升级", - "⚠️ 警告:禁用系统升级后,将无法接收系统更新!\n\n" - "是否确定要禁用系统升级应用?\n\n" - "禁用命令:\n" - "adb -d shell pm disable-user --user 0 com.incall.apps.softmanager" + self.t('msg_disable_ota_title'), + self.t('msg_disable_ota_confirm') ) if not result: - self.log("已取消禁用升级操作", "INFO") + self.log(self.t('log_disable_ota_cancelled'), "INFO") return def disable(): @@ -1525,11 +2069,14 @@ class ADKAPKGUI: success, output = self.run_adb_command( 'adb -d shell pm disable-user --user 0 com.incall.apps.softmanager') if success: - self.log("系统升级已禁用", "SUCCESS") - self.run_on_ui_thread(messagebox.showinfo, "成功", "系统升级已成功禁用!") + self.log(self.t('log_disable_ota_success'), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t('msg_success_title'), self.t('msg_disable_ota_success')) else: - self.log("禁用系统升级失败", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "错误", f"禁用失败:{output}") + if self.debug_mode: + self.log(f"禁用系统升级失败: {output}", "ERROR") + else: + self.log(self.t('log_disable_ota_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.t('msg_disable_ota_failed')) self.show_progress(False, is_push=False) threading.Thread(target=disable, daemon=True).start() @@ -1538,19 +2085,43 @@ class ADKAPKGUI: """切换调试模式(隐藏入口,Ctrl+Shift+D)""" if self.debug_mode: self.debug_mode = False - self.log("调试模式已关闭", "WARNING") - self.status_text.config(text="就绪") + self.log(self.t('log_debug_off'), "WARNING") + self.status_text.config(text=self.t('status_ready')) self.refresh_device_status() return - pwd = simpledialog.askstring("调试模式", "请输入调试密码:", show='*', parent=self.root) - if pwd == "zxch5200": - self.debug_mode = True - self.update_device_status(True, "", True) - self.log("🔧 调试模式已开启 - 跳过授权和设备校验,显示详细ADB日志", "WARNING") - self.status_text.config(text="🔧 调试模式") - elif pwd is not None: - messagebox.showwarning("错误", "密码错误") + pwd = simpledialog.askstring(self.t('debug_title'), self.t('debug_prompt'), show='*', parent=self.root) + if not pwd: + return + + self.log(self.t('debug_password_verifying'), "WARNING") + + def verify(): + valid, message = self.verify_debug_mode_password(pwd) + if valid: + def enable_debug(): + self.debug_mode = True + self.update_device_status(True, "", True) + self.log(self.t('log_debug_on'), "WARNING") + self.status_text.config(text=self.t('status_debug')) + self.run_on_ui_thread(enable_debug) + else: + def show_failed(): + msg = message or self.t('msg_debug_wrong_password') + self.log(self.tf('debug_verify_failed', message=msg), "WARNING") + messagebox.showwarning(self.t('msg_error_title'), msg) + self.run_on_ui_thread(show_failed) + + threading.Thread(target=verify, daemon=True).start() + + def verify_debug_mode_password(self, password): + try: + data = self._post_json(self.debug_password_api_url, {"password": password}) + if data.get('success') is True and data.get('valid') is True: + return True, data.get('message', '') + return False, data.get('message') or self.t('msg_debug_wrong_password') + except Exception as e: + return False, str(e) def install_apps(self): """安装App — 支持单选或多选APK文件""" @@ -1558,27 +2129,28 @@ class ADKAPKGUI: return file_paths = filedialog.askopenfilenames( - title="选择APK文件", - filetypes=[("APK文件", "*.apk"), ("所有文件", "*.*")] + title=self.t('file_select_apk_title'), + filetypes=[(self.t('filetype_apk'), "*.apk"), (self.t('filetype_all'), "*.*")] ) if not file_paths: return count = len(file_paths) - result = messagebox.askyesno("确认安装", f"已选择 {count} 个APK文件\n\n是否开始安装?") + result = messagebox.askyesno(self.t('msg_install_confirm_title'), + self.tf('msg_install_confirm_many', count=count)) if not result: return def install(): self.show_progress(True, is_push=True) - self.log(f"开始安装 {count} 个APK...", "INFO") + self.log(self.tf('log_install_many_start', count=count), "INFO") success_count = 0 try: self.run_adb_command('adb -d shell setprop vecentek.model 1') for i, file_path in enumerate(file_paths, 1): apk_name = Path(file_path).stem - self.update_progress(i, count, f"安装中 ({apk_name})", is_push=True) + self.update_progress(i, count, self.tf('progress_installing_name', name=apk_name), is_push=True) success, _ = self.run_adb_command(f'adb -d install -r "{file_path}"') if success: self.log(f"✓ {apk_name}.apk", "SUCCESS") @@ -1586,20 +2158,27 @@ class ADKAPKGUI: else: self.log(f"✗ {apk_name}.apk", "ERROR") - self.update_progress(count, count, "安装完成", is_push=True) + self.update_progress(count, count, self.t('progress_install_done'), is_push=True) if success_count == count: - self.log(f"安装完成:全部 {count} 个成功", "SUCCESS") - self.run_on_ui_thread(messagebox.showinfo, "安装完成", f"成功安装 {count} 个APK!") + self.log(self.tf('log_install_done_all', count=count), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t('msg_install_done_title'), + self.tf('msg_install_done_all', count=count)) elif success_count > 0: - self.log(f"安装完成:{success_count}/{count} 成功", "WARNING") - self.run_on_ui_thread(messagebox.showwarning, "部分成功", f"成功: {success_count}\n失败: {count - success_count}") + self.log(self.tf('log_install_done_partial', success=success_count, count=count), "WARNING") + self.run_on_ui_thread(messagebox.showwarning, self.t('msg_install_partial_title'), + self.tf('msg_install_partial', success=success_count, failed=count - success_count)) else: - self.log("安装失败", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "安装失败", "所有APK安装失败!") + self.log(self.t('log_install_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('msg_install_failed_title'), + self.t('msg_install_failed_all')) except Exception as e: - self.log(f"安装过程异常: {str(e)}", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "安装失败", f"安装过程异常:{str(e)}") + if self.debug_mode: + self.log(f"安装过程异常: {str(e)}", "ERROR") + else: + self.log(self.t('log_install_exception'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('msg_install_failed_title'), + self.t('msg_install_exception')) finally: self.run_adb_command('adb -d shell setprop vecentek.model 0') self.show_progress(False, is_push=True) @@ -1609,10 +2188,11 @@ class ADKAPKGUI: def _debug_test_extract(self, event=None): """Debug-only package extraction test.""" if not getattr(self, 'debug_mode', False): - messagebox.showwarning("Debug mode", "Press Ctrl+Shift+D to enable debug mode first") + messagebox.showwarning(self.t('debug_title'), self.t('debug_need_enable')) return - pwd = simpledialog.askstring("Test extraction", "Enter package.bin password:", show='*', parent=self.root) + pwd = simpledialog.askstring(self.t('debug_extract_title'), self.t('debug_extract_prompt'), + show='*', parent=self.root) if not pwd: return @@ -1622,15 +2202,16 @@ class ADKAPKGUI: try: self.show_progress(True, is_push=False) if self.extract_package_silent(): - self.log("Test extraction succeeded", "SUCCESS") + self.log(self.t('debug_extract_success_title'), "SUCCESS") self.run_on_ui_thread( messagebox.showinfo, - "Test extraction succeeded", - f"Resources extracted to:\n{self.temp_dir}" + self.t('debug_extract_success_title'), + self.tf('debug_extract_success', path=self.temp_dir) ) else: - self.log("Test extraction failed", "ERROR") - self.run_on_ui_thread(messagebox.showerror, "Test extraction failed", "Check the 7za output in logs") + self.log(self.t('debug_extract_failed_title'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('debug_extract_failed_title'), + self.t('debug_extract_failed')) finally: self.extract_password = old_password self.show_progress(False, is_push=False) @@ -1644,17 +2225,17 @@ class ADKAPKGUI: def main(): """主函数""" if sys.version_info < (3, 6): - print("错误:需要Python 3.6或更高版本") + print("错误:需要Python 3.6或更高版本 / Error: Python 3.6 or later is required") sys.exit(1) try: app = ADKAPKGUI() app.run() except Exception as e: - print(f"启动失败: {e}") + print(f"启动失败 / Startup failed: {e}") import traceback traceback.print_exc() - messagebox.showerror("错误", f"程序启动失败: {e}") + messagebox.showerror("Error", f"程序启动失败 / Startup failed: {e}") if __name__ == "__main__": main() diff --git a/X5plus/app.ico b/X5plus/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..dd3b20ef5b198f127a731adb53e905d424384e6e GIT binary patch literal 2506 zcmV;*2{rZr0096206;(h0096X0JI4J02TlM0EtjeM-2)Z3IG5A4M|8uQUCw|KmY&$ zKnMl^0063Kaozv`328}0K~#7F>{@$pRA&`G=i3Al7znv{d89=UvUe$uwu2T1toqmpmZX|-~ z9QHyYL15{&QAv!bRzg*ec1Fn#0T@wSHeLx=?k9vG3m?@PfxV*)6#$r9c$(~U|Dybs zj&!mGKn+Fa36cE{5Z&F8fL@(PFo%Teuu`Ib%1+OA0Z>Dg_YvSOt|aF+2Yr`#^o|CT z_T-1F7Pn_b8vta_6VOXsIET5P5Dr61{I0!`&;kHC=eg&9&sO&%0PXnk&S$_ZJ8xxEBV{lWM8}yqg)vrzQ@hIQs=& z!3N)~)&GA0^d9qm_CF4=9!Ht4GWQrE!2}7w(C%#!6MVMV#XHSYi1IYmPcv#f!x7D~fUpnE;Rz) z4N;%xPsVDktZezT_t~(vRD@>KH|eb5)Akqv&j!P3Iq$dupA*AI7&k#0FFw$ zE{t9<)WQ|DYi^S_N!OFR8e6M18UgKZ38tH!1lG>`_ikV7S z|2p3=eVdQmYveVXQe5$v8m@TQ9n`<7mXt5!^m%-zH%lqjrxp|+A3yeIr*o6_FZu6? z@pasHlkZN2-2wn1{_xC`AFG#2=7;pJu~F4T;-5T}f5mIT1_Infe9ZCc-u{ zU9WQb8(ilAuM0SgT!@`neL|=g`HRDLrsY={dJ0glLBq zI`rc_0EqHNsaZX`uQ`%wkkyd5I#&uAGBW3N4jr2Yjsqa#aj77{IuM>5tfRRGc=C?ZQ=MAw$otW4sTz;p%h0@uiORmcvO7GxXm+^otmkH zv;+~q#ei(&T7TfF^Cl7;;`lK{sN%4Ur_8&Y|99pcoL3BJu4m`zm^Kdwo4@=WI{~qQCId6^OoAlFKzqT{x^Be&_53sZjNxIEEQsmU@uw3iR z^Z`IxtBkz$1iPwRnzp>wqPzdyvq>MEAF5o$=ZliM+=dg}qQ=}MN*@5(4B}W09;F1{ z&tZ>K-Qc0aco*2s(`OYBj7~>^%m8R^(L}l`qe@s`pak`O96swVEh~^|PO{b8LH%Vu zHNN%nU!TZ1_um2|Q~8bnfF?;l0LTO%FJg1JH;T+e)+tu>xAH)giIQWtpUzc+mFty| ze$wh~gf9``J$09^Cgbh!~e`^H#Qj-Qj6G1s(*VbqL~VBwU$2Z1^%r<1x;kd5*}OjRIHlDDz3VhCsuNVs0*0tZafJZK8s zg#;lWn8Ru56T*HWM3$ppTGH31=WCi~)?RU8b)n7+)jK`k{7rB1?Tb%LtmY}eilDib ze+Lv1P)HhV0T30J!+>~7CJYePV>M^DOIs}fVAWmMfD%8D2?K$V=xKS6g4EzQxggO$e}ykL=bLENSS60LT|tmg^x#=Yov)Q$8JsK`T>jYXLyb;}g%53+3(2 zmDEE0B98EXlW6HB|M*y{JuLu`8T=*Z015GBj`trB*m!W^!ixd#yKGkrY6F1G+!Y=fK*nFgvK~bq218-DNN)^lFkmC79gkSrJrcwaKkdnO=Xar5DSe=@z7 zg(d>*V}97EIpc}?J@W8$Llrv(fF-2}O?k!5*WI(@;+mJ!9tXr1k?1hTYxt{>{JRWC zdxYdAj{LXzzoZU)Dtyc|T@#~z?Ox_>NhhZ>ntT8N0RR8(06a+m000I_L_t&o0Cr^I Uo0m|3vj6}907*qoM6N<$f>tl7*8l(j literal 0 HcmV?d00001 diff --git a/X5plus/apps/FZLTHPro_GB18030.ttf b/X5plus/apps/FZLTHPro_GB18030.ttf new file mode 100644 index 0000000000000000000000000000000000000000..500b1045b0c94d83d2e6798aaf1faa55a2dab6fc GIT binary patch literal 305608 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
^|w#p-*faeRa`IJ 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 z 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�an+ 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 N)wRzvMS%?|2g*+{|xg(;Jq)Q%*B^H@|u6jyEl2 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�W5+L{Oa7%kiR+a_t0aeF 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 -cd /d "%~dp0" -set "ROOT=%~dp0.." -set "TOOLS=%ROOT%\tools" -set NAME=X5plus刷入工具 -set SRC=X5plusTool.py -title %NAME% - Build - -echo ============================================================ -echo %NAME% - Cython Build -echo ============================================================ -echo. - -where python >nul 2>&1 -if errorlevel 1 ( - echo [ERROR] Python not found - pause - exit /b -) -for /f "delims=" %%i in ('where python') do set PY=%%i -echo Python: %PY% - -echo [1/6] Installing deps... -%PY% -m pip install pyinstaller cython pyzipper -q -if errorlevel 1 ( - %PY% -m pip install pyinstaller cython pyzipper -q -i https://pypi.tuna.tsinghua.edu.cn/simple -) - -echo [2/6] Clean... -if exist "dist_cy" rmdir /s /q dist_cy 2>nul -if exist "build" rmdir /s /q build 2>nul -if exist "dist" rmdir /s /q dist 2>nul - -echo [3/6] Cython compile... -mkdir dist_cy 2>nul -copy %SRC% dist_cy\_core.py >nul - -%PY% -c "open('dist_cy/setup_cython.py','w').write('from setuptools import setup\nfrom Cython.Build import cythonize\nsetup(ext_modules=cythonize(\"_core.py\", compiler_directives={\"language_level\":\"3\"}))\n')" - -cd dist_cy -%PY% setup_cython.py build_ext --inplace -if errorlevel 1 ( - cd .. - echo [WARN] Cython failed, fallback - goto :NORMAL -) - -for %%f in (_core*.pyd) do set PYD=%%f -if "%PYD%"=="" ( - cd .. - echo [WARN] No pyd, fallback - goto :NORMAL -) -echo PYD: %PYD% -copy "%PYD%" _core.pyd >nul - -%PY% -c "open('launcher.py','w').write('# -*- coding: utf-8 -*-\nfrom _core import main\nmain()\n')" - -echo [4/6] Copy resources... -copy "%TOOLS%\adb.exe" . >nul -copy "%TOOLS%\AdbWinApi.dll" . >nul -copy "%TOOLS%\AdbWinUsbApi.dll" . >nul -copy "%TOOLS%\7za.exe" . >nul -if exist "%ROOT%\app.ico" copy "%ROOT%\app.ico" . >nul - -echo [5/6] PyInstaller... -%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ROOT%\app.ico" --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin launcher.py -if errorlevel 1 ( - cd .. - echo [ERROR] PyInstaller failed - pause - exit /b -) - -echo [6/6] Cleanup... -del /q _core.py _core.c _core.pyd %PYD% launcher.py setup_cython.py 2>nul -rmdir /s /q build 2>nul -cd .. -goto :DONE - -:NORMAL -echo [INFO] Normal PyInstaller... -%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ROOT%\app.ico" --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin %SRC% - -:DONE -echo. -echo Done. -if exist "dist_cy\dist\%NAME%.exe" ( - echo Output: dist_cy\dist\%NAME%.exe -) else if exist "dist\%NAME%.exe" ( - echo Output: dist\%NAME%.exe -) else ( - echo Check dist folder -) -pause +@echo off +chcp 65001 >nul +setlocal +cd /d "%~dp0" + +set "ROOT=%~dp0.." +set "TOOLS=%ROOT%\tools" +set "ICON=%~dp0app.ico" +set "NAME=Changan_X5Plus-Installer" +set "SRC=X5plusTool.py" +title %NAME% - Build + +echo ============================================================ +echo %NAME% - Cython Build +echo ============================================================ +echo. + +set "PY=" +where python >nul 2>&1 +if not errorlevel 1 ( + for /f "delims=" %%i in ('where python') do ( + if not defined PY set "PY=%%i" + ) +) +if not defined PY ( + where py >nul 2>&1 + if not errorlevel 1 set "PY=py" +) +if not defined PY ( + if exist "%LOCALAPPDATA%\Microsoft\WindowsApps\python.exe" set "PY=%LOCALAPPDATA%\Microsoft\WindowsApps\python.exe" +) +if not defined PY ( + echo [ERROR] Python not found + pause + exit /b 1 +) +echo Python: %PY% + +if not exist "%SRC%" ( + echo [ERROR] Source not found: %SRC% + pause + exit /b 1 +) + +if not exist "%ICON%" ( + echo [ERROR] app.ico not found: %ICON% + pause + exit /b 1 +) + +echo [1/6] Installing deps... +"%PY%" -m pip install pyinstaller cython pyzipper -q +if errorlevel 1 ( + "%PY%" -m pip install pyinstaller cython pyzipper -q -i https://pypi.tuna.tsinghua.edu.cn/simple + if errorlevel 1 ( + echo [ERROR] Dependency installation failed + pause + exit /b 1 + ) +) + +echo [2/6] Clean... +if exist "dist_cy" rmdir /s /q dist_cy 2>nul +if exist "build" rmdir /s /q build 2>nul +if exist "dist" rmdir /s /q dist 2>nul + +echo [3/6] Cython compile... +mkdir dist_cy 2>nul +copy "%SRC%" "dist_cy\_core.py" >nul +if errorlevel 1 ( + echo [ERROR] Copy source failed + pause + exit /b 1 +) + +"%PY%" -c "open('dist_cy/setup_cython.py','w',encoding='utf-8').write('from setuptools import setup\nfrom Cython.Build import cythonize\nsetup(ext_modules=cythonize(\"_core.py\", compiler_directives={\"language_level\":\"3\"}))\n')" +if errorlevel 1 ( + echo [ERROR] Generate Cython setup failed + pause + exit /b 1 +) + +cd dist_cy +"%PY%" setup_cython.py build_ext --inplace +if errorlevel 1 ( + cd .. + echo [ERROR] Cython compile failed + pause + exit /b 1 +) + +set "PYD=" +for %%f in (_core*.pyd) do set "PYD=%%f" +if "%PYD%"=="" ( + cd .. + echo [ERROR] No Cython pyd generated + pause + exit /b 1 +) +echo PYD: %PYD% +copy "%PYD%" "_core.pyd" >nul +if errorlevel 1 ( + cd .. + echo [ERROR] Copy Cython pyd failed + pause + exit /b 1 +) + +"%PY%" -c "open('launcher.py','w',encoding='utf-8').write('# -*- coding: utf-8 -*-\nfrom _core import main\nmain()\n')" +if errorlevel 1 ( + cd .. + echo [ERROR] Generate launcher failed + pause + exit /b 1 +) + +echo [4/6] Copy resources... +copy "%TOOLS%\adb.exe" . >nul +if errorlevel 1 ( + cd .. + echo [ERROR] adb.exe not found in %TOOLS% + pause + exit /b 1 +) +copy "%TOOLS%\AdbWinApi.dll" . >nul +copy "%TOOLS%\AdbWinUsbApi.dll" . >nul +copy "%TOOLS%\7za.exe" . >nul +copy "%ICON%" . >nul +if errorlevel 1 ( + cd .. + echo [ERROR] Copy resources failed + pause + exit /b 1 +) + +echo [5/6] PyInstaller... +"%PY%" -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ICON%" --add-data "%ICON%;." --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin launcher.py +if errorlevel 1 ( + cd .. + echo [ERROR] PyInstaller failed + pause + exit /b 1 +) + +echo [6/6] Cleanup... +del /q "_core.py" "_core.c" "_core.pyd" "%PYD%" "launcher.py" "setup_cython.py" 2>nul +rmdir /s /q build 2>nul +cd .. + +echo. +echo Done. +if exist "dist_cy\dist\%NAME%.exe" ( + echo Output: dist_cy\dist\%NAME%.exe +) else ( + echo [ERROR] Build output not found +) +pause diff --git a/Yidong/Changan_Yidong-Language_Installer.exe.id0 b/Yidong/Changan_Yidong-Language_Installer.exe.id0 new file mode 100644 index 0000000000000000000000000000000000000000..bffc9f3a860e069632abab65ce1f3960ac7c5ce4 GIT binary patch literal 3833856 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%0A`hV-g?=V}7|19sQ&bDJu1S-BNe?7Fkn}*( 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
v9lLm z8(tNjAN{8#OmzAeBFSdW4qcmoc5Xnw82(flmFU&Xq{+Xe2a+C0dLZe6qz957NO~aY zfuskL9!PrNe~AZzQpdi{6Mh3gP`-;IA4QOW%&M!mTmmxF+(XoV2lzLwqW;TT$l;!J z*Os|Im{m4zn`_J5Kg%v#rCa(M<#9_~)Z7ls)=Up;Cb;Nm*H)%(*|)P&eykc^Gh$pH zMDBIMy|=W<=CNznisIf|VWl2adxhJ8WYh}n$OY}SaC2$%1gfXG8gCkC$qH?ehNym= zr2lnw8;|zg&`6;xK9=o(P$$ESZTz?(AzSX&`E8xpLC~9R;dWiD|1DXrsry!JK)Mc6 zm_r|9wZt-yKjFjN*?0S}OG36{wKe<5`6+W-7CtVn(cLIRI~3{egvP9{^=Z*Az9&&=;h4( zMb4O7>X77MWr0ItTghIT#2y1aotft_V0Y$(49rQ?z)TMV5x#Q9er-oYH_~UMPxaVG zv;m*fbBc$7h(=CwNbE*NNX9uNxjI_T*mACp)<{PSYy%OE9PW_h(2sr&iQSI~E6(V0 z4pzK^#nA`FXY6)zG{f%92^nbbVIZO(&giqob#wngQ_Ep6=h5Z!>3CLL27KIhx`zStIkC|s@&haF z?;#Gqql$?+Z>wTr&hN4g{7dk8MEIu?r5_I;4DSVR0lxr#D!dH*Fwyn>Ja4~^sQbH+ z*D9MR_sft)Jefa_C-cp^<+_?QJd^l*Z}gquP2lH2s$(GoQXUH>u#gYsFGSk+5P{!D z1b#hF-7kU9g*?WS`42)_4c=fh8er@{Xq zcD;|7_WMMzSMkn;XW=v8cfkAe&V_!&JUdc)Ii(jcBzZmd&c$+Ph3 z@Uifr@Q(1y;OD|mgOp?TM{!6Rvp-Up{qZOB6m~Ix;bVOwS7*5JT<&uCQ}8M9Vemfi z&>J6`!>hwjf~TN2Z*9=U`!v;OdWp#|Wp=}S`2FxZ;Jx6TAeS=>pedvQ^B~S+9>nP- zO*FnZJQWLn620GtuRh`#_;(=7nIo_S@*GdaKV3qrNm!JUw|_Mg2rN0KX+S<)6BUw-xOJCm zTW~y$ogF%L25eLBuZm?y6e>-Ab4Cd5TYs+T@`*Re8IH5>aA!9u6tT5$EyfXLIq2wN z_Ps>+OokIMcOY-g?aNzpdwtEh4`;c^!|4tx=F!pI=4eqK9L+5bb9rzyH~N}$`>SxY zzcx6k+y06*RDI$V>m26d?VOLfw{v06Cls;9*PQW{&Re=)?{Dda=QrKdtI#1$?P*IX zzix|m;3|jBJaC{hu$u=CT;^z99++F2x8`2XTXReD*4*N}HMb~l%{`Y3b3UiW0$+2k z%gFeB(PzOtNA)~73+6b?<-xF>oww#@=B>HM^VXbmxf)$Ow&>Z|1G)ElL#F0;{A|G6jJMSQy*?Jybr<-^^gEzvC+ z>8PG#i|SJE$54w*!+cvb$YC;8i`GTAsGp;H9<`{O!(?=ePWbC~7l*lcPavN-y!Sj4 z`vh_yK{LTOVgR&vv?fP?MUAPfdDFkP484R(e*@}zhvt{yYy2Gif%lMqPV{~)(fegY z@82Y%xB&hr{2usCMEkFWH-*=OmxBl4{}81=K$QMljmhhqv5CyTNyPqTV*4*)e;)i{ z_!xK(>UMxPgx7(Wg6D@vKdZl-`22ig^)ra=KdQu%vG9UKEdM0}`D*y-Yx7X=i$o(A z5P|%FSmn1wAVX2jdr(e>+=X&D$|q3vV=h2f<^s&6FITazi{Lfk>9i*RKS0bs^yL3m z*5rSW_4(f>zmoO&Uto5?G?Wi8FW@m^xf8KJlG5IkUd!Bpi_n}6FAEPsj@@Y zrZHdOcK9vu4)B)nGvO8C`Qd*vFW^h&1#Duzz;fmbJO`fu9|i9N?+kAMKL>siyfFM{ z<^}B1c>$JGCThI}@;2-3zYc$%Sp$zTn_xV%35MW}5%8Yyj_?bpTLWGiUJ$;Y*#SG4 z9k8Cc1FtEuyQ?V@sCS7{`#y284H|}2{Sx$#dg?PH^%3_BGadH~-!soM zL_Zzc(?b%J_idUrV73t+~U#=3Mt`XHMV%Ip&hM z7q_?X)!M=1)S2dpW^dJ}`dKcP;o2(Y+w^cO17bg_ugBY7$0G89 z`&h@$Cv>yl*E!y|*?r9AX5NU8x$p9}b^g;(PPnssa?!dRPb2p%mplkj?8rsyd``;k zzUItX6mh-U=BQwwH$mAF&*o9+>-IFt5g^vupCUv#ayg z+^Srd3!QtO%T}z&g*l&-WvQ<@kCVkY%f&uf>@N?xCb*fyl=8Qk=@pRkFV%nM3&t8g zJe-lhh%<1WqZN4&LY?C<7d`qtIyKW#Ai7qfm&6VV15aFZ4%i- z^u8m{)=nW3xRI#7S^wXXr-+o6d*6{n_Bj8=&jo_EUFMwBo*MaAQA12b?i}qKA?;!&J34A#b_%iUP;8Wnk z;058`;O*e&!T%wWSp{AKeu%jG0r*ZL?OTb!zXIQ>+>#qu|9lpuli+9btnwGd%`?(l zs5^qv{?u)Q=56W@qHaUT3#>N(I{Icrbf>ZA{49cA3hF#8~j>$S9nu+J@`e~zY3lKFA4vH7=Bau*TnEYBDTL2eja=_ z{1NyNcy;*o@V4+e@X)j672(C;zY^O|L;oeQ{msPof5D$enT4?e{yh94^uNGwgWn8q z1>emR<`Hz$87?F_BDZ!r>T(UMD4W61`_%#XzF zcM`XMn${LUQ-Ri=inVjt%PH(7jiY&-=jsc?k242hH**tyg@3@@gw^ml@NeLg$Zuv; z?@(gNX3n6OdH4G>_~9bn>wX#JJl^zv8su!=^nMj>9)bP-*guK(tigUq_~r1k*w@SO zGVnt1AMwLH_$M5x4IHWG;8Wp`lOIDnCn~XIHSL^8tH#pK6k1gra+Ei>|G}HvPojn6 zuzVYqccUMI73ypA$c?-%NQ?^$m~WWAuQw{Oj4#ZNa!kcj)PJ?&x* zujUY`b>8l=B|)ibSJXYFs^0@LtrM+mrW;nH)W@nix27C&ZS8Pvna75*;*wL=>6Rsn zTx^bO%e9{=tz2d4&aKIZ*>XSX;=Iq9ee*Mp_4GqG*7C@hxvi$R0P&ScWQ>l4# z_DD!6?;%O)zCF|>N5z2r9rBjlG~*-qgnf5BLgJjBl6?a^GUQ?J)LtONC;oVy$3CN1N%px1?;X~N zY{3ZzG9r5I9lCJ89wEBXKE1A&Xs_#f7>HvV_2?sb|R6?;IO_Q9G(Ts87g zTn2oO&A~(s97xo_J`V#Ce%|YlZ-GKX_~O`QY{8HQ+_yf2AA${6*A#KT-XSMCN~huOh!K-2@8v zD6!-P>>LT2)dzkF8c$9Onm3<6qp8TGpqZmRK4{**uqbGrvfhsJ1C%$Rxmt-OL*d=g zUyJ?@j?}ZXWCr^^Sh%FRL`oC(ATVl_i>{$a9(oWS*v$%+^$7dSTO& zM>Jnp9@I2V?$I8@$2bk;OQI%pb@Hkw*;nWiF5 zv3Xu$)8F-Y=5E?K43Bl9wJYFF;OD{1!k@!$rxrGTwkSQs?1RP}ubGqL4941doDtVUuIJd@0)K;JS0&B#s6?94*W%b+!f`o+ zV{tOaqB+N+1@E+LZ)QL=W-oKt`!~#k_>_4N%V_ht)LH|7 z1^yVds=@Dq4~DmgmxW&fuMIB=F9bizJcWbIUw9n*{}wYI{sO)U{vvZFeuB?{n^hPr zS%Cg)_%L{1_!a24!q0=B4iCcD!VfXy;Cp5wyvH1eSCw1Rf?mHu>9dqhU@!BjH3@z< zyce}*z}vu^z^lR^gcpTd@Nbw$a3_2d^9a^3kKk$eK==gsUGVPk?#eAWPOGk<^b$%d z)2epVa<1SIpjLDE0pT%_(1rL@X&mp3d$|{iM`jP^knom z7BS~k7fnU3DPqpkvos%&a`066F~(RCEPRQDG%OrrhDeb1A1`W-^*&~fdnIpf# z7r~!|-wXc+J_z0e-W>jk@_;<7d$Hs__H_=LQz#up3)`^Acd<~I(&MZdv70p`UW0$Y zS`w?_bKuXzAAsKp?+TvYmoe~nS;J)|@0FMd9|FG@emlG~ zycfJVygs}LpANqkGM^5mxWcr-eiJNj<4U`MqaQ44K09hq zTA95Inj=Nbao^9Jm#@qqQfnqn{{8RtKu}iN-`(`?e%3d--+*P!1coX_C`o#(ZvU{jUgi8Ef3dr--!>%&OwnCg0k7+5_2=t^^+z|elKj7=Nw6K-b1k?DK0ZXY35-iC>Po^ zE37jrf<%}(U>7?Y6O=tR%`)RW&ZbjAxh_JJeLOeV@db06I4D^^G}Tyss%HJBQj!mn z^$SBuDrAboe2ARoAfZ}S9mHt#i=uj4hs4}N`p=Smq+3YWk!ps=97bLK zh_n%DUDDG@D{87n)7dyodVq8n={C|0q^n4$lTIKVO`54`R_N;KF0QS%uB~S1_mXaR zmOQl)w#LPl>Q+FWTHt~+U0aioOz5ZoEXnS4R%;$KozLDfUC!RpLzunwfa!Zy*#oAp z*;`9oTgC&~Wv>1{kl`%5|DbEj^gD9KyK^{2o`Ci<37*j$ZG4=s)%FW^LN=o$zkm)!kd}M!3u3 z-^#6(=z2jp>ead~QB|;V_W1XM7Ae?~Uimz^93}U|XUFK8nkL&w<(! zmjR!e-%O9X5zd+J zkmSlak2(zGJb-=9!AWr$@Hqn}Bx+!Mq6Wr!7>MxmXonN2M@5Ik?y4@Y6XR>8PosZx7|d0p55{G{XW$<2Fc8t}eGZA; z>uAsV^zu80ft-8kV_WX6sQ9ElBG;k?(lZ-2Jl+&67W>`&%}6l6W#ro{3h~mvbz34$V?)@qu_(!*TJuZp94P`o(4Zg z24p@xxDPpaY(cgoGf$$q4%~ z@-OLuqz957NO~aYfuskL9!Pp1>4BsNk{(EUAnAdm2XgHJohKPyx?*x@2A5j0C)ntM z1sm^F8aaQH3IW+z#H+>!M?GqMR8OHL|9Vw;*Uaa1?IQY)w9k#sMvl9f*>_6aQ_n(= zxTj9j88F%k$J0t0P;peZZ-Pch&T>fXNu5DC-4!axo{Qx0pRS?d5=G9BvkT*R{`?e2 z8=`v|nmZI}&gagpSAZl|>wJ!ZGnf+Hy3o9%@G+QbrXof-xSXSNIUIw64oUVga4#F+ zc?{Czc;rLX_So?DnosQFn4=NV-Sjr+a}bW?!ko`RIP7cAeGqmh?j1H6(m| zj3Xx@Z*0|l0LF(?T z>Cn@9Mmyg-i00oWpVMY@-i|D<2wip;y$^to$2R1mbw1|S<*m6jzUEw~(bNsmM{<>; zx_uf2Wr6El&~Hnua;`pfoiX!Vs#qTOIsQ*O8WDXd@IGKZm(4l8=G-nZPX$C=HfK7j z+b)TaOmIlDKbXh6{Nee*9F%b`Q36gI>u5tBIBj$;%=wJ+k-p~K#~}3NiR%mMa7T6f z7zAaQO~ViR#PXic7|FCvIp%R@n{&5sx{i^o=Y@_9vTHgTtfz&1ZW6hYXkPU5{|({J zC;!dL|01>FeTep(XZ|fQEB}j}3a<_~&-`0rR{j?$4gZd4zj@~0lB-xxy8ztzn%Ksv7!AHSw zg`1WCMP7kN&jok}9zZjRDDG?}mSocY6rQF0Gu>EN!Ybmcd18Da`KMS>JoLo-0cHVw z&Afo7tc#w3AI4(;Jxa}b0s0(1noRh3_#N=;;l1H4;1|L}?*iz=`u6$YhnXYr1#<*0 zN577_1Iytv;1|R1h7W`Hr#&^{-Qexu=b_JlSAm<^2bLUS)<6mPPG${kWj29%I$h^b zz-PfC2c;d_`_@Ch>umcv)W zpMp<;4}&j(cZ0Wsp9g;$ZssP4Jj9CePbjgZC&zbJx_M0YV~+1Aj_Cx*aPosVzEgOj zz8IDR*a@wBe-iz=3;PF{q3|^`7v5s#!maS<;j`hR;XU9t!>@-ogm-|S0j~%@#>|Bl z@O{i&FmoR)c>{g{d_Mef_(*sScyIW%@QdJ;;ML&e;Qufmp%{EG^AtW~p2BNz3qBV< z6<(eG{?0SZqv1o~9ngOZZwRjgF9rV$evJ7GzcPQ}W9BTp2Y&-@-ojwXqwv?^BjE$# zSHVLoYg`1c2~UTcbxcJ5VYb3gjKdEZhoKcr-Xwnq?*h0VU|5f;)q|)^ja8(3ITbtidT)<=O}fB zBO~s3)w1t;I96VXknHl11Z2iMwXCb?uVc62c-Ulf+b!!3^W-J2EpxjiyUg4i%HGO! zZS`Tx-TACrm7Z&CgzhD}Z&W9`6}nlJsFl2FS-35Z;gEeBGEW_nH=WKKD{j~Q*IeM< zt$Qnxj%D3y{CBByPzB{I*RA8AxFc3U8SW~No=@O&2R<|RRR=px`|SJBw!Ju_{8=|t zUAJOSz`%gGTHtdtxL;fbeC~GlNz}mq6VLBn7gsNRMp>ss4P29`f%b_SxH>KaK4YzI zTn2o`TB}42v`o}MGYekf<1*mm_l!ghR7})B zIS&I7elO*aWc$5@gXYS4>2VqGabDp>4HWb+5YhKkhs5st35~IU!$2 zI+Cb?!-*O=!<0^DKSjS^y%CQThC3^o; zWwZBhiQa!r{|5EsTlrt!O1o9yHyHO59*$v(fWphd!u!2B6@-VynuXd zlvOL4C&r7Q6qLWQvcP^K_It_isA%^7A*%+w246(Xe>SC4A(P0DM|lUzUhvQ=`j=DM zq@vmTMdZ&#c^b-elquN!qk`%CPsH=TC;xQ?v-gi!Q(zVRMI!%CQ97f7vH2+Z2T
    !tRa&B3X%M0 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

    n_ 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

    G8pb(Om+$FH!#Rv&cJ4KMZ;E)uS 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

    P^{e9YLFtc1KZKZpl=t3Z5O-v zDl!R+*|#6qsf=Ku-XzttB7`pHh{eGDbjAK9ZeU~Zi5vl5c7%w@5#%I`H##5fcIndv ztK7hTIOFgKG5Qiq$h?zbfKDV!4Hk6L&E^CDQ-Nf`LXnQK47?+lg_6G=f*B(mW69jH zgkb307nFF6emgpXUuc~Jj3XkVas+tU5h5l>kn5Bq%F`i~WQWhmeH2IKOI-8+!AXZ6 zA|BIcNzI_=yQ~FY;c;J}X|6US2@DlYv9V(MHt8fd2JP}N`ckoo#H2HdX#qX-E^7qr zQKKbBFcfd7u;dLRwrEEk)9$F;W*F(K@v3Nj+n~D-5d=gzMGH;gC2^r{XvvQ3Xq4BO zD3b_<(Fz!~i>R~%FKZ`aWQXBoNAVpcrkw`kAtHy!0Y*6yl^pQ091-&|p(-Y3YRL(d zn3yh!A&iKa7<k8+b_w0y3W# z1rre{yd=~C{gpuo7oygN76rVd%@d)w%8N~lNh47J9&nahyqzQmb9fyb|rDqt2(P-4% zo7MPu!&F{k zCGfRmttIEou_W+SLC$w8M00lA893jtms3A0xwdF+&0Um@iRhKtQ4zf{>x}4Koazg8 zo7=Ln=(FQroSVgAIui7;1V4~#zJ;@Wq(LE}xk5XBII^Lu-M};_ra!~gFeMRFB`_t? zmoJn?rl7{uo)4JFqXTFp23RT@YmW|Kp~xN`3_O}>A=~ln=#LJ4v0{L#)?Ozd2PPRy zV1cE&QANfw#j`UFojGP*P+f+4W@<5YWPc!LhHJi+X*0vQ6Qw0qS-McuCK4~uwE0kN z!-+NHcsi-3}nb9>`VFr$~X$kD{UJ$`hO?dF~gcmVQ zcycn9E-5_aaTg^)SHzrPVt}S%)IjbU?Xx5_LJw>QM%^MR-N4JbiI^61)iLEt%b!Y; zaxahp{7%u|Q?sVH%zbl)j+8ukv?v}5tNtnvR34~2PuO++K+8=T779%AWbw80y&bfp`7 zm2(sNEU6hR>~Ox6XsT)$QSVL--e#NHme7hEt$=N<&=VrNlrCel^Z$pQvy4&Lb%7|G#Unh1;^;E=bUI( z{Ej&gSg6Mj=4w1HcoegIeA%l7nRmIjk7Ccx3_Bj zyQVd;ppBOrsV4RPifRl3+oUS~QDjLplo0}KtLdfZbj6tmE!Zj8qb_A=M^r-_ygUU( zOjD3tCoS7Q+>T0=m`N|KGr&FtbEJ`=88AwVXy%S*5wQ9?L9z26Jlm{vf@0^_5$^;G z{?Z8w5v5CZ7NU0kqcVbpdOAVji&T#pu=AflR{CVECCxvWX=#`Ns^Ik^AhPpYK}1^^ zaJ3uk(t@*-=$V+3h^Z2ol4x2fjZ8s}siI?p=)BZmK~*cNS*HUFMT(B?{6$b@iQD

    5>{@K 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 NqN&K-yE19}{{bXzLS8Ow^4)K#1;A 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

    ;%qr{)wb3eqqd}))Pkn;~K$!rhc&PeqD4j<*xrL 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

    l({3 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

    a;i?0Hoi={OWs=?k!(a;I?kqrn(z`M>(mp+Q*~F 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 If0_sWA9Wq8)&Kwi literal 0 HcmV?d00001 diff --git a/Yidong/Changan_Yidong-Language_Installer.exe.id2 b/Yidong/Changan_Yidong-Language_Installer.exe.id2 new file mode 100644 index 0000000000000000000000000000000000000000..522c30da9c57caf4d9560b95793481882ab2f689 GIT binary patch literal 7001 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 OTjsxUiRT0g{`Y@gAc&Cw literal 0 HcmV?d00001 diff --git a/Yidong/pack_common.bat b/Yidong/pack_common.bat deleted file mode 100644 index 7c36664..0000000 --- a/Yidong/pack_common.bat +++ /dev/null @@ -1,96 +0,0 @@ -@echo off -chcp 65001 >nul -cd /d "%~dp0" -set "ROOT=%~dp0.." -set "TOOLS=%ROOT%\tools" -set NAME=长安逸动刷入工具 -set SRC=app-install.py -title %NAME% - Build - -echo ============================================================ -echo %NAME% - Cython Build -echo ============================================================ -echo. - -where python >nul 2>&1 -if errorlevel 1 ( - echo [ERROR] Python not found - pause - exit /b -) -for /f "delims=" %%i in ('where python') do set PY=%%i -echo Python: %PY% - -echo [1/6] Installing deps... -%PY% -m pip install pyinstaller cython pyzipper -q -if errorlevel 1 ( - %PY% -m pip install pyinstaller cython pyzipper -q -i https://pypi.tuna.tsinghua.edu.cn/simple -) - -echo [2/6] Clean... -if exist "dist_cy" rmdir /s /q dist_cy 2>nul -if exist "build" rmdir /s /q build 2>nul -if exist "dist" rmdir /s /q dist 2>nul - -echo [3/6] Cython compile... -mkdir dist_cy 2>nul -copy %SRC% dist_cy\_core.py >nul - -%PY% -c "open('dist_cy/setup_cython.py','w').write('from setuptools import setup\nfrom Cython.Build import cythonize\nsetup(ext_modules=cythonize(\"_core.py\", compiler_directives={\"language_level\":\"3\"}))\n')" - -cd dist_cy -%PY% setup_cython.py build_ext --inplace -if errorlevel 1 ( - cd .. - echo [WARN] Cython failed, fallback - goto :NORMAL -) - -for %%f in (_core*.pyd) do set PYD=%%f -if "%PYD%"=="" ( - cd .. - echo [WARN] No pyd, fallback - goto :NORMAL -) -echo PYD: %PYD% -copy "%PYD%" _core.pyd >nul - -%PY% -c "open('launcher.py','w').write('# -*- coding: utf-8 -*-\nfrom _core import main\nmain()\n')" - -echo [4/6] Copy resources... -copy "%TOOLS%\adb.exe" . >nul -copy "%TOOLS%\AdbWinApi.dll" . >nul -copy "%TOOLS%\AdbWinUsbApi.dll" . >nul -copy "%TOOLS%\7za.exe" . >nul -if exist "%ROOT%\app.ico" copy "%ROOT%\app.ico" . >nul - -echo [5/6] PyInstaller... -%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ROOT%\app.ico" --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin launcher.py -if errorlevel 1 ( - cd .. - echo [ERROR] PyInstaller failed - pause - exit /b -) - -echo [6/6] Cleanup... -del /q _core.py _core.c _core.pyd %PYD% launcher.py setup_cython.py 2>nul -rmdir /s /q build 2>nul -cd .. -goto :DONE - -:NORMAL -echo [INFO] Normal PyInstaller... -%PY% -m PyInstaller --onefile --windowed --name="%NAME%" --icon="%ROOT%\app.ico" --add-data "%TOOLS%\adb.exe;." --add-data "%TOOLS%\AdbWinApi.dll;." --add-data "%TOOLS%\AdbWinUsbApi.dll;." --add-data "%TOOLS%\7za.exe;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.simpledialog --hidden-import=zipfile --hidden-import=json --hidden-import=urllib --hidden-import=urllib.parse --collect-all tkinter --uac-admin %SRC% - -:DONE -echo. -echo Done. -if exist "dist_cy\dist\%NAME%.exe" ( - echo Output: dist_cy\dist\%NAME%.exe -) else if exist "dist\%NAME%.exe" ( - echo Output: dist\%NAME%.exe -) else ( - echo Check dist folder -) -pause diff --git a/tools/encrypt_q05_lidar_resource.py b/tools/encrypt_q05_lidar_resource.py index 21e14a5..ea22127 100644 --- a/tools/encrypt_q05_lidar_resource.py +++ b/tools/encrypt_q05_lidar_resource.py @@ -10,16 +10,35 @@ import struct import zlib from pathlib import Path -AAD = b"Q05-Lidar init_boot resource v1" +DEFAULT_AAD = "Q05-Lidar init_boot resource v1" +FORMAT_MAGIC = { + "q05": (b"Q05R2\x00", "q05-lidar-resource-v2", DEFAULT_AAD), + "ez60": (b"EZ60R2\x00", "ez60-resource-v2", "Mazda-EZ60 init_boot resource v1"), +} def b64u(data): return base64.urlsafe_b64encode(data).decode("ascii").rstrip("=") +def decode_key_material(key_text): + text = str(key_text).strip() + if text.startswith("raw:"): + key = text.split(":", 1)[1].encode("utf-8") + elif len(text) == 64 and all(c in "0123456789abcdefABCDEF" for c in text): + key = bytes.fromhex(text) + elif len(text.encode("utf-8")) == 32: + key = text.encode("utf-8") + else: + key = base64.urlsafe_b64decode(text + "=" * (-len(text) % 4)) + if len(key) != 32: + raise ValueError(f"key must decode to 32 bytes, got {len(key)} bytes") + return key + + def main(): parser = argparse.ArgumentParser( - description="Encrypt a Q05-Lidar init_boot image into resource.dat" + description="Encrypt a vehicle init_boot image into a resource dat file" ) parser.add_argument("input_img", help="Magisk-patched init_boot image") parser.add_argument( @@ -27,9 +46,19 @@ def main(): default="resource.dat", help="Output encrypted resource file, default: resource.dat", ) + parser.add_argument( + "--vehicle", + choices=sorted(FORMAT_MAGIC.keys()), + default="q05", + help="Resource header/profile to write. Default: q05.", + ) + parser.add_argument( + "--aad", + help="Optional AES-GCM AAD text. Defaults to the selected vehicle profile.", + ) parser.add_argument( "--key", - help="Optional AES-256 key as base64url or 64-char hex. Omit to generate a random key.", + help="Optional AES-256 key as base64url, 64-char hex, raw:TEXT, or 32-byte UTF-8 text. Omit to generate a random key.", ) parser.add_argument( "--no-compress", @@ -49,29 +78,28 @@ def main(): input_path = Path(args.input_img) plain = input_path.read_bytes() sha256 = hashlib.sha256(plain).hexdigest() + magic, resource_format, default_aad = FORMAT_MAGIC[args.vehicle] + aad = (args.aad or default_aad).encode("utf-8") if args.key: - text = args.key.strip() - if len(text) == 64 and all(c in "0123456789abcdefABCDEF" for c in text): - key = bytes.fromhex(text) - else: - key = base64.urlsafe_b64decode(text + "=" * (-len(text) % 4)) - if len(key) != 32: - raise SystemExit("key must decode to 32 bytes") + try: + key = decode_key_material(args.key) + except Exception as e: + raise SystemExit(str(e)) else: key = os.urandom(32) compression = "none" if args.no_compress else "zlib" body = plain if args.no_compress else zlib.compress(plain, level=9) nonce = os.urandom(12) - ciphertext = AESGCM(key).encrypt(nonce, body, AAD) + ciphertext = AESGCM(key).encrypt(nonce, body, aad) header = { - "format": "q05-lidar-resource-v2", + "format": resource_format, "cipher": "AES-256-GCM", "kdf": "none", "compression": compression, - "aad": AAD.decode("utf-8"), + "aad": aad.decode("utf-8"), "nonce": b64u(nonce), "sha256": sha256, "plainSize": len(plain), @@ -80,7 +108,7 @@ def main(): output_path = Path(args.output) header_bytes = json.dumps(header, ensure_ascii=False, separators=(",", ":")).encode("utf-8") - output_path.write_bytes(b"Q05R2\x00" + struct.pack(">I", len(header_bytes)) + header_bytes + ciphertext) + output_path.write_bytes(magic + struct.pack(">I", len(header_bytes)) + header_bytes + ciphertext) print("resource.dat created") print(f"input: {input_path}") diff --git a/tools/usb_driver/android_winusb.inf b/tools/usb_driver/android_winusb.inf new file mode 100644 index 0000000..dcf4c28 --- /dev/null +++ b/tools/usb_driver/android_winusb.inf @@ -0,0 +1,195 @@ +; +; Android WinUsb driver installation. +; +[Version] +Signature = "$Windows NT$" +Class = AndroidUsbDeviceClass +ClassGuid = {3F966BD9-FA04-4ec5-991C-D326973B5128} +Provider = %ProviderName% +DriverVer = 08/28/2014,11.0.0000.00000 +CatalogFile.NTx86 = androidwinusb86.cat +CatalogFile.NTamd64 = androidwinusba64.cat + +[ClassInstall32] +Addreg = AndroidWinUsbClassReg + +[AndroidWinUsbClassReg] +HKR,,,0,%ClassName% +HKR,,Icon,,-1 + + +[Manufacturer] +%ProviderName% = Google, NTx86, NTamd64 + + +[Google.NTx86] + +;Google Nexus One +%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02&MI_01 +%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E11 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E12&MI_01 + +;Google Nexus S +%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E21 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E22&MI_01 +%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E23 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E24&MI_01 + +;Google Nexus 7 +%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4E40 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E42&MI_01 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E44&MI_01 + +;Google Nexus Q +%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_2C10 +%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_2C11 + +;Google Nexus (generic) +%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4EE0 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE2&MI_01 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE4&MI_02 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE6&MI_01 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE7 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_D001 + +;Google Glass +%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_9001 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_9001&MI_01 + +;Google Glass EE1 + +%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_9003 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_9003&MI_01 +%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_9004 + +;Google Glass EE2 + +%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_9005 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_9005&MI_00 +%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_9006 + +;Project Tango (generic) +%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4D00 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D02&MI_01 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D04&MI_02 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D06&MI_01 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D07 + + +[Google.NTamd64] + +;Google Nexus One +%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02&MI_01 +%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E11 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E12&MI_01 + +;Google Nexus S +%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E21 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E22&MI_01 +%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E23 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E24&MI_01 + +;Google Nexus 7 +%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4E40 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E42&MI_01 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E44&MI_01 + +;Google Nexus Q +%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_2C10 +%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_2C11 + +;Google Nexus (generic) +%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4EE0 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE2&MI_01 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE4&MI_02 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE6&MI_01 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE7 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_D001 + +;Google Glass +%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_9001 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_9001&MI_01 + +;Google Glass EE1 + +%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_9003 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_9003&MI_01 +%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_9004 + +;Google Glass EE2 + +%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_9005 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_9005&MI_00 +%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_9006 + +;Project Tango (generic) +%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4D00 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D02&MI_01 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D04&MI_02 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D06&MI_01 +%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D07 + + +[USB_Install] +Include = winusb.inf +Needs = WINUSB.NT + +[USB_Install.Services] +Include = winusb.inf +AddService = WinUSB,0x00000002,WinUSB_ServiceInstall + +[WinUSB_ServiceInstall] +DisplayName = %WinUSB_SvcDesc% +ServiceType = 1 +StartType = 3 +ErrorControl = 1 +ServiceBinary = %12%\WinUSB.sys + +[USB_Install.Wdf] +KmdfService = WINUSB, WinUSB_Install + +[WinUSB_Install] +KmdfLibraryVersion = 1.9 + +[USB_Install.HW] +AddReg = Dev_AddReg + +[Dev_AddReg] +HKR,,DeviceInterfaceGUIDs,0x10000,"{F72FE0D4-CBCB-407d-8814-9ED673D0DD6B}" + +[USB_Install.CoInstallers] +AddReg = CoInstallers_AddReg +CopyFiles = CoInstallers_CopyFiles + +[CoInstallers_AddReg] +HKR,,CoInstallers32,0x00010000,"WdfCoInstaller01009.dll,WdfCoInstaller","WinUSBCoInstaller2.dll" + +[CoInstallers_CopyFiles] +WinUSBCoInstaller2.dll +WdfCoInstaller01009.dll + +[DestinationDirs] +CoInstallers_CopyFiles=11 + +[SourceDisksNames] +1 = %DISK_NAME%,,,\i386 +2 = %DISK_NAME%,,,\amd64 + +[SourceDisksFiles.x86] +WinUSBCoInstaller2.dll = 1 +WdfCoInstaller01009.dll = 1 + +[SourceDisksFiles.amd64] +WinUSBCoInstaller2.dll = 2 +WdfCoInstaller01009.dll = 2 + +[Strings] +ProviderName = "Google, Inc." +SingleAdbInterface = "Android ADB Interface" +CompositeAdbInterface = "Android Composite ADB Interface" +SingleBootLoaderInterface = "Android Bootloader Interface" +WinUSB_SvcDesc = "Android USB Driver" +DISK_NAME = "Android WinUsb installation disk" +ClassName = "Android Device" diff --git a/tools/usb_driver/androidwinusb86.cat b/tools/usb_driver/androidwinusb86.cat new file mode 100644 index 0000000000000000000000000000000000000000..3aa4b92b29592ed06bcf689d6cec13d4bf9e2d30 GIT binary patch literal 12789 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 Ub6qu(92PuZs@rh~FPb>`Km6IM$N&HU literal 0 HcmV?d00001 diff --git a/tools/usb_driver/source.properties b/tools/usb_driver/source.properties new file mode 100644 index 0000000..fdb9336 --- /dev/null +++ b/tools/usb_driver/source.properties @@ -0,0 +1,3 @@ +Pkg.Revision=13 +Archive.HostOs=WINDOWS +Extra.Path=usb_driver

    T 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%0A6}I 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

q1b+hG9W_Ye~93|wJpT$iidT+aMnJ3{AWi5Wc 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 literal 0 HcmV?d00001 diff --git a/Mazda-EZ6/pack_mazda_ez6.bat b/Mazda-EZ6/pack_mazda_ez6.bat new file mode 100644 index 0000000..b8b1f6a --- /dev/null +++ b/Mazda-EZ6/pack_mazda_ez6.bat @@ -0,0 +1,153 @@ +@echo off +chcp 65001 >nul +cd /d "%~dp0" +set "ROOT=%~dp0.." +set "TOOLS=%ROOT%\tools" +set "NAME=Mazda-EZ6-Installer" +set "SRC=Mazda-EZ6_Installer.py" +set "ICON=%~dp0app.ico" +title %NAME% - Cython Build + +echo ============================================================ +echo %NAME% - Cython Build +echo ============================================================ +echo. + +where python >nul 2>&1 +if errorlevel 1 ( + echo [ERROR] Python not found + pause + exit /b 1 +) +for /f "delims=" %%i in ('where python') do set "PY=%%i" +echo Python: %PY% + +if not exist "%SRC%" ( + echo [ERROR] Source not found: %SRC% + pause + exit /b 1 +) +if not exist "%ICON%" ( + echo [ERROR] Icon not found: %ICON% + pause + exit /b 1 +) +if not exist "%TOOLS%\adb.exe" ( + echo [ERROR] adb.exe not found in %TOOLS% + pause + exit /b 1 +) +if not exist "%TOOLS%\AdbWinApi.dll" ( + echo [ERROR] AdbWinApi.dll not found in %TOOLS% + pause + exit /b 1 +) +if not exist "%TOOLS%\AdbWinUsbApi.dll" ( + echo [ERROR] AdbWinUsbApi.dll not found in %TOOLS% + pause + exit /b 1 +) + +echo [1/6] Installing deps... +"%PY%" -m pip install pyinstaller cython -q +if errorlevel 1 ( + "%PY%" -m pip install pyinstaller cython -q -i https://pypi.tuna.tsinghua.edu.cn/simple +) +if errorlevel 1 ( + echo [ERROR] Dependency install failed + pause + exit /b 1 +) + +echo [2/6] Clean... +if exist "dist_cy" rmdir /s /q dist_cy 2>nul +if exist "build" rmdir /s /q build 2>nul +if exist "dist" rmdir /s /q dist 2>nul +if exist "%NAME%.spec" del /q "%NAME%.spec" 2>nul + +echo [3/6] Cython compile... +mkdir dist_cy 2>nul +copy "%SRC%" "dist_cy\_core.py" >nul +if errorlevel 1 ( + echo [ERROR] Copy source failed + pause + exit /b 1 +) + +"%PY%" -c "open('dist_cy/setup_cython.py','w',encoding='utf-8').write('from setuptools import setup\nfrom Cython.Build import cythonize\nsetup(ext_modules=cythonize(\"_core.py\", compiler_directives={\"language_level\":\"3\"}))\n')" +if errorlevel 1 ( + echo [ERROR] Failed to create Cython setup script + pause + exit /b 1 +) + +cd dist_cy +"%PY%" setup_cython.py build_ext --inplace +if errorlevel 1 ( + cd .. + echo [ERROR] Cython failed. Build stopped. + pause + exit /b 1 +) + +set "PYD=" +for %%f in (_core*.pyd) do set "PYD=%%f" +if "%PYD%"=="" ( + cd .. + echo [ERROR] No Cython PYD generated. Build stopped. + pause + exit /b 1 +) +echo PYD: %PYD% +copy "%PYD%" "_core.pyd" >nul +if errorlevel 1 ( + cd .. + echo [ERROR] Failed to copy Cython PYD + pause + exit /b 1 +) + +"%PY%" -c "open('launcher.py','w',encoding='utf-8').write('# -*- coding: utf-8 -*-\nfrom _core import main\nmain()\n')" +if errorlevel 1 ( + cd .. + echo [ERROR] Failed to create launcher.py + pause + exit /b 1 +) + +echo [4/6] Copy resources... +copy "%TOOLS%\adb.exe" . >nul +copy "%TOOLS%\AdbWinApi.dll" . >nul +copy "%TOOLS%\AdbWinUsbApi.dll" . >nul +copy "%ICON%" . >nul +if errorlevel 1 ( + cd .. + echo [ERROR] Copy resources failed + pause + exit /b 1 +) + +echo [5/6] PyInstaller... +"%PY%" -m PyInstaller --onefile --windowed --name="%NAME%" --icon="app.ico" --add-data "app.ico;." --add-data "adb.exe;." --add-data "AdbWinApi.dll;." --add-data "AdbWinUsbApi.dll;." --add-binary "_core.pyd;." --hidden-import=queue --hidden-import=threading --hidden-import=tkinter --hidden-import=tkinter.filedialog --hidden-import=tkinter.messagebox --hidden-import=tkinter.scrolledtext --hidden-import=tkinter.ttk --hidden-import=json --hidden-import=urllib --hidden-import=urllib.error --hidden-import=urllib.parse --hidden-import=urllib.request --collect-all tkinter --uac-admin launcher.py +if errorlevel 1 ( + cd .. + echo [ERROR] PyInstaller failed + pause + exit /b 1 +) + +echo [6/6] Cleanup... +del /q _core.py _core.c _core.pyd %PYD% launcher.py setup_cython.py adb.exe AdbWinApi.dll AdbWinUsbApi.dll app.ico 2>nul +rmdir /s /q build 2>nul +cd .. + +echo. +echo Done. +if exist "dist_cy\dist\%NAME%.exe" ( + echo Output: dist_cy\dist\%NAME%.exe +) else ( + echo [ERROR] Output exe was not generated + pause + exit /b 1 +) +pause diff --git a/Mazda-EZ60/Mazda-EZ60_1.2.py b/Mazda-EZ60/Mazda-EZ60_1.2.py new file mode 100644 index 0000000..c752ddb --- /dev/null +++ b/Mazda-EZ60/Mazda-EZ60_1.2.py @@ -0,0 +1,3981 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import os +import sys +import subprocess +import json +import threading +import re +import atexit +import base64 +import hashlib +import struct +import tempfile +import zlib +import tkinter as tk +from tkinter import ttk, scrolledtext, filedialog, messagebox, simpledialog +from pathlib import Path +from urllib.request import urlopen, Request +from urllib.error import URLError, HTTPError +from urllib.parse import urlencode +from datetime import datetime +import zipfile +try: + import pyzipper +except ImportError: + pyzipper = None +import shutil +import time +try: + from cryptography.hazmat.primitives.ciphers.aead import AESGCM +except ImportError: + AESGCM = None + +DEFAULT_EXTRACT_PASSWORD = object() + + +def set_windows_app_id(): + if sys.platform != 'win32': + return + try: + import ctypes + app_id = 'YibinKeyi.MazdaEZ60.LanguageInstaller.1.2' + ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(app_id) + except Exception: + pass + + +def get_app_dir(): + return Path(sys.executable).resolve().parent if getattr(sys, 'frozen', False) else Path(__file__).resolve().parent + + +def resource_candidates(file_name): + base_dir = get_app_dir() + candidates = [] + if getattr(sys, 'frozen', False): + candidates.append(Path(getattr(sys, '_MEIPASS', base_dir)) / file_name) + candidates.extend([ + base_dir / file_name, + base_dir / 'tools' / file_name, + base_dir / 'shared' / file_name, + base_dir.parent / 'tools' / file_name, + base_dir.parent / 'shared' / file_name, + base_dir.parent / file_name, + ]) + unique = [] + for candidate in candidates: + if candidate not in unique: + unique.append(candidate) + return unique + + +def find_resource(file_name): + candidates = resource_candidates(file_name) + for candidate in candidates: + if candidate.exists(): + return candidate + return candidates[0] + + +def resource_dir_candidates(dir_name): + base_dir = get_app_dir() + candidates = [] + if getattr(sys, 'frozen', False): + candidates.append(Path(getattr(sys, '_MEIPASS', base_dir)) / dir_name) + candidates.extend([ + base_dir / dir_name, + base_dir / 'tools' / dir_name, + base_dir / 'shared' / dir_name, + base_dir.parent / 'tools' / dir_name, + base_dir.parent / 'shared' / dir_name, + base_dir.parent / dir_name, + base_dir.parent / 'Q05-Lidar' / dir_name, + ]) + unique = [] + for candidate in candidates: + if candidate not in unique: + unique.append(candidate) + return unique + + +def find_resource_dir(dir_name): + candidates = resource_dir_candidates(dir_name) + for candidate in candidates: + if candidate.exists() and candidate.is_dir(): + return candidate + return candidates[0] + + +def find_tool(file_name, fallback=None): + path = find_resource(file_name) + if path.exists(): + return str(path) + return fallback or str(path) +class ADKAPKGUI: + CACHE_DIR_NAME = "apps_cache_Mazda_EZ60" + + def __init__(self): + set_windows_app_id() + self.root = tk.Tk() + self.root.title("Mazda-EZ60_OS-1.2适用") + self.root.geometry("900x620") + self.root.resizable(True, True) + self.set_window_icon() + self.root.after(200, self.set_window_icon) + + # 设置颜色主题 + self.colors_dark = { + 'bg_dark': '#1e1e2e', + 'bg_light': '#2a2a3e', + 'accent': '#6c5ce7', + 'accent_hover': '#5b4bc4', + 'success': '#00b894', + 'error': '#d63031', + 'warning': '#fdcb6e', + 'info': '#0984e3', + 'text': '#dfe6e9', + 'text_secondary': '#b2bec3', + 'border': '#3d3d5e' + } + self.colors_light = { + 'bg_dark': '#f5f5f5', + 'bg_light': '#ffffff', + 'accent': '#6c5ce7', + 'accent_hover': '#5b4bc4', + 'success': '#00b894', + 'error': '#d63031', + 'warning': '#e17055', + 'info': '#0984e3', + 'text': '#2d3436', + 'text_secondary': '#636e72', + 'border': '#dfe6e9' + } + self.colors = dict(self.colors_dark) + self.theme = 'dark' + + # 多语言 + self.lang = 'zh' + self.T = { + 'zh': { + 'title': 'Mazda-EZ60_OS-1.2适用', + 'btn_permission': '🔓 获取权限', + 'btn_voice_patch': '🎙 语音助理补丁', + 'btn_push': '📦 刷入语言包', + 'btn_install': '📱 安装App', + 'btn_language': '🌐 语言设置', + 'btn_timezone': '⏰ 时区设置', + 'btn_settings': '⚙️ 安卓设置', + 'btn_reboot': '🔄 重启设备', + 'btn_disable_upgrade': '❌ 禁用升级', + 'btn_clear_log': '🗑 清空日志', + 'btn_query_pwd': '查询密码', + 'btn_install_driver': '🧩 安装驱动', + 'btn_debug_extract': '解压测试', + 'btn_debug_boot': '解压Boot测试', + 'device_label': '设备:', + 'vin_label': 'VIN码:', + 'auth_label': '授权:', + 'log_title': '📋 运行日志', + 'status_ready': '就绪', + 'status_connected': '已连接', + 'status_disconnected': '未连接', + 'status_detecting': '未检测', + 'vin_none': '未获取', + 'auth_none': '未验证', + 'auth_yes': '已授权', + 'auth_no': '未授权', + 'btn_refresh': '🔄 检查', + 'hint_factory': '🔧 关闭车辆WI-FI和4G网络,拨号获取的密码进入工程模式', + 'hotspot_icon': '📶', + 'hotspot_title': '电脑热点', + 'hotspot_start': '🔧 打开热点设置', + 'hint_icon': '💡', + 'hint_title': '使用提示', + 'theme_dark': '🌙 暗色', + 'theme_light': '☀️ 亮色', + 'lang_zh': '中', + 'lang_en': 'EN', + 'pwd_query_label': '工程密码查询:', + 'vin_placeholder': '请输入VIN', + 'vin_query_hint': '💡 请输入VIN或者VIN后八位查询。', + 'pwd_empty': '', + 'pwd_success': '密码: *#{password}#*', + 'pwd_failed': '失败: {message}', + 'pwd_request_failed': '请求失败', + 'hotspot_name_detecting': '名称: 检测中...', + 'hotspot_name_unset': '名称: 未配置', + 'hotspot_name_value': '名称: {ssid}', + 'hotspot_pwd_default': '密码: changan2024', + 'hotspot_pwd_value': '密码: {password}', + 'hotspot_status_off': '状态: 未启动', + 'hotspot_status_value': '状态: {status}', + 'hotspot_started': '已启动', + 'hotspot_stopped': '未启动', + 'hint_lines': [ + '1. 确保电脑已开启热点', + '2. 拨号进入工厂模式,点击调试工具', + '3. 需要云端认证时,连接右侧显示的电脑热点', + '4. 连接后点击车机“云端认证”按钮', + '5. 打开 ADB 后即可刷入语言包', + ], + 'log_lang_changed': '语言已切换为中文', + 'log_cleared': '日志已清空', + 'msg_warn_title': '警告', + 'msg_error_title': '错误', + 'msg_success_title': '成功', + 'msg_hint_title': '提示', + 'msg_device_not_connected_title': '设备未连接', + 'msg_device_not_connected': '请先连接设备并点击「检查」按钮刷新状态!', + 'msg_need_vin': '请先刷新设备状态并获取VIN码', + 'msg_auth_failed_title': '授权失败', + 'msg_device_unauthorized': '设备未授权', + 'msg_device_unauthorized_action': '设备未授权,无法执行此操作', + 'msg_data_prepare_failed': '资源初始化失败!', + 'msg_resource_prepare_failed': '资源准备失败!', + 'msg_resource_dir_missing': '资源目录未找到', + 'msg_input_vin': '请输入VIN码', + 'msg_done_title': '完成', + 'msg_confirm_permission_title': '确认获取权限', + 'msg_confirm_permission': '即将获取系统权限,过程中请勿断开数据连接或关闭程序。\n\n是否继续?', + 'msg_permission_done': '获取成功,设备正在重启。', + 'msg_driver_missing_title': '驱动环境', + 'msg_driver_missing': '驱动缺失,即将自动安装驱动。', + 'msg_driver_install_confirm': '即将安装驱动环境,需要管理员权限。', + 'msg_driver_install_done': '驱动安装完成。如设备仍无法识别,请重新插拔 USB 线缆。', + 'msg_driver_install_failed': '驱动安装失败: {error}', + 'msg_reboot_title': '确认重启', + 'msg_reboot_confirm': '确定要重启设备吗?', + 'msg_disable_ota_title': '确认禁用升级', + 'msg_disable_ota_confirm': '⚠️ 警告:禁用系统升级后,将无法接收系统更新!\n\n是否确定要禁用系统升级应用?', + 'msg_disable_ota_success': '系统升级已成功禁用!', + 'msg_disable_ota_failed': '禁用失败:{output}', + 'file_select_apk_title': '选择APK文件', + 'filetype_apk': 'APK文件', + 'filetype_all': '所有文件', + 'msg_install_confirm_title': '确认安装', + 'msg_install_confirm_many': '已选择 {count} 个APK文件\n\n是否开始安装?', + 'msg_install_confirm_folder': '找到 {count} 个APK文件\n\n是否开始批量安装?', + 'msg_install_done_title': '安装完成', + 'msg_install_done_all': '成功安装 {count} 个APK!', + 'msg_install_partial_title': '部分成功', + 'msg_install_partial': '成功: {success}\n失败: {failed}', + 'msg_install_failed_title': '安装失败', + 'msg_install_failed_all': '所有APK安装失败!', + 'msg_apks_dir_missing': '未找到apks文件夹!\n请在程序目录下创建apks文件夹并放入APK文件。', + 'msg_apks_empty': 'apks文件夹中没有找到APK文件!', + 'quick_lang_title': '快捷语言设置', + 'quick_lang_header': '选择目标语言', + 'quick_lang_hint': '点击按钮即可将系统语言切换为对应语言,重启后生效', + 'quick_lang_system': '⚙️ 打开系统语言设置(手动选择)', + 'quick_lang_success_title': '设置成功', + 'quick_lang_success': '系统语言已设置为 {language}\n\n⚠️ 请重启设备使其生效。', + 'quick_lang_failed_title': '设置失败', + 'quick_lang_failed': '语言设置失败!', + 'quick_lang_names': ['🇨🇳 中文', '英 English', '俄 Русский', '法 Français', '西 Español', '葡 Português', '意 Italiano', '阿 العربية'], + 'debug_title': '调试模式', + 'debug_prompt': '请输入调试密码:', + 'debug_password_verifying': '正在校验调试模式密码...', + 'debug_verify_failed': '调试模式密码校验失败: {message}', + 'debug_status': '🔧 调试模式', + 'debug_need_enable': '请先按 Ctrl+Shift+D 进入调试模式', + 'debug_need_vin': '请先刷新设备VIN,或在工程密码输入框填入VIN', + 'debug_boot_title': '解压Boot测试', + 'debug_boot_prompt': '未检测到VIN/设备。\n请输入 BOOT_KEY 或 boot-key 返回的 sessionKey:', + 'debug_key_len_error': '密钥长度错误,应为32字节AES密钥', + 'debug_key_format_error': '密钥格式错误: {error}', + 'msg_debug_wrong_password': '密码错误', + 'status_debug': '🔧 调试模式', + 'progress_loading': '资源加载中', + 'progress_loaded': '资源加载完成', + 'progress_preparing': '正在准备资源', + 'progress_prepare_runtime': '正在获取权限中', + 'progress_install_runtime': '正在获取权限中', + 'progress_fetch_boot_key': '正在获取权限中', + 'progress_reboot_fastboot': '正在获取权限中', + 'progress_decrypt_init_boot': '正在获取权限中', + 'progress_flash_init_boot': '正在获取权限中', + 'progress_reboot_device': '正在获取权限中', + 'progress_install_module': '安装补丁', + 'progress_flashing': '正在刷入', + 'progress_flash_done': '刷入完成', + 'progress_installing': '安装中', + 'progress_installing_name': '安装中 ({name})', + 'progress_install_done': '安装完成', + 'progress_done': '完成', + 'log_device_disconnected': '设备已断开连接', + 'log_device_connected': '设备已连接', + 'log_no_package': '资源文件缺失', + 'log_no_adb': '未找到adb命令,请将ADB文件放入本目录', + 'log_no_fastboot': '运行环境缺失', + 'log_vin': 'VIN: {vin}', + 'log_vin_unavailable': '无法获取VIN,请确认设备已进入工厂模式', + 'log_auth_checking': '正在验证授权状态...', + 'log_auth_success': '授权验证通过', + 'log_auth_failed': '授权验证失败', + 'log_debug_skip_auth': '调试模式: 跳过授权验证', + 'log_vehicle_name': '车辆名称: {vehicle}', + 'log_data_prepare_failed': '资源初始化失败', + 'log_boot_challenge_failed': '获取失败', + 'log_boot_key_failed': '获取失败', + 'log_boot_key_len_error': '获取失败', + 'log_boot_key_success': '正在获取权限中', + 'log_crypto_missing': '获取失败', + 'log_driver_found': '已检测到驱动环境', + 'log_driver_missing': '未检测到驱动环境', + 'log_driver_install_start': '正在安装驱动环境...', + 'log_driver_install_success': '驱动环境安装完成', + 'log_driver_install_failed': '驱动环境安装失败: {error}', + 'log_runtime_missing': '获取失败', + 'log_base_apk_invalid': '获取失败', + 'log_runtime_ready': '正在获取权限中', + 'log_runtime_install_failed': '获取失败', + 'log_runtime_install_success': '正在获取权限中', + 'log_permission_resource_missing': '获取失败', + 'log_permission_resource_format_unsupported': '获取失败', + 'log_permission_resource_algorithm_unsupported': '获取失败', + 'log_permission_resource_decrypt_auth_failed': '获取失败', + 'log_permission_resource_decrypt_ready': '正在获取权限中', + 'log_permission_resource_decrypt_failed': '获取失败', + 'log_fastboot_wait': '正在获取权限,请不要关闭程序或断开数据连接!', + 'log_fastboot_missing': '获取失败', + 'log_fastboot_enter_failed': '获取失败', + 'log_init_boot_flash_failed': '获取失败', + 'log_init_boot_flash_success': '正在获取权限中', + 'log_fastboot_reboot_failed': '获取失败', + 'log_permission_success': '获取成功', + 'log_permission_failed': '获取失败', + 'log_temp_img_deleted': '临时文件已清理', + 'log_temp_img_delete_failed': '临时文件清理失败', + 'log_open_magisk': '请在弹窗中点击“允许”授予权限', + 'log_root_checking': '正在检测权限...', + 'log_root_ok': '权限已授予', + 'log_root_failed': '权限获取失败,请手动授予权限', + 'msg_root_failed': '请手动授予权限后重试。', + 'log_magisk_cleanup_done': '权限入口已清理', + 'log_magisk_cleanup_failed': '权限入口清理失败', + 'log_magisk_cleanup_module_done': '权限入口清理已持久化', + 'log_magisk_cleanup_module_failed': '权限入口清理持久化失败', + 'log_voice_patch_start': '开始安装语音助理补丁', + 'log_voice_patch_done': '语音助理补丁安装完成,重启设备后生效', + 'log_voice_patch_failed': '语音助理补丁安装失败', + 'log_module_install_start': '开始安装补丁', + 'log_module_install_done': '补丁安装完成', + 'log_module_install_failed': '补丁安装失败: {error}', + 'log_push_file_failed': '文件推送失败: {file}: {error}', + 'log_root_cmd_failed': '权限操作失败: {error}', + 'err_module_prop_missing': '资源包缺少补丁文件', + 'err_module_id_missing': '补丁配置缺少 ID 字段', + 'err_module_zip_invalid': '补丁文件无效或缺少配置: {file}', + 'err_duplicate_module_id': '资源包存在重复补丁 ID', + 'log_need_adb': '请先连接设备', + 'log_no_vehicle_name': '资源初始化失败', + 'log_package_missing': '资源文件缺失', + 'log_extract_password_missing': '资源初始化失败', + 'log_7za_missing': '运行环境缺失', + 'log_extracting': '资源准备中...', + 'log_apps_missing': '警告:未找到 apps 目录', + 'log_resource_invalid': '资源校验失败', + 'log_resource_ready': '资源准备完成', + 'log_resource_failed': '资源准备失败,请检查网络连接后重试', + 'log_cache_invalid': '资源缓存无效', + 'log_no_language_files': '未找到语言包文件', + 'log_flash_start': '开始刷入语言包,请勿断电或重启电脑和车机。', + 'log_install_success': '安装成功', + 'log_install_failed': '安装失败', + 'log_flash_item_failed': '语言包刷入失败: {current}/{total}', + 'log_flash_done_config': '语言包刷入完成,开始执行 Mazda-EZ60 安装后配置', + 'log_flash_partial_config': '语言包部分刷入成功,仍继续执行 Mazda-EZ60 安装后配置', + 'log_flash_failed_config': '语言包刷入失败,仍继续执行 Mazda-EZ60 安装后配置', + 'log_post_config_start': '正在执行 Mazda-EZ60 安装后配置...', + 'log_overlay_enabled': '配置项已完成', + 'log_overlay_failed': '配置项执行失败', + 'log_disabled_package': '清理项已完成', + 'log_disable_package_failed': '清理项执行失败', + 'log_post_config_done': 'Mazda-EZ60 安装后配置完成', + 'log_post_config_all_done': 'Mazda-EZ60 安装后配置全部完成,重启设备后生效', + 'log_post_config_partial': 'Mazda-EZ60 安装后配置部分失败,请查看日志', + 'log_batch_install_start': '开始批量安装 {count} 个APK...', + 'log_install_many_start': '开始安装 {count} 个APK...', + 'log_install_done_all': '安装完成:全部 {count} 个成功', + 'log_install_done_partial': '安装完成:{success}/{count} 成功', + 'log_install_failed_simple': '安装失败', + 'log_rebooting': '设备正在重启...', + 'log_disable_ota_cancelled': '已取消禁用升级操作', + 'log_disable_ota_success': '系统升级已禁用', + 'log_disable_ota_failed': '禁用系统升级失败', + 'log_pwd_success': '密码查询成功', + 'log_pwd_failed': '密码查询失败', + 'log_pwd_request_failed': '密码查询请求失败', + 'log_debug_off': '调试模式已关闭', + 'log_debug_on': '调试模式已开启 - 跳过授权和设备校验,显示详细ADB日志', + 'log_debug_extract_start': '开始资源包解压测试...', + 'log_debug_extract_success': '资源包解压测试成功: APK数量={apk_count}, 补丁数量={module_count}', + 'log_debug_extract_failed': '资源包解压测试失败', + 'log_debug_boot_start': '开始 Boot 资源解压测试...', + 'log_debug_boot_success': 'Boot 资源解压测试成功: size={size}, sha256={sha}', + 'log_debug_boot_failed': 'Boot 资源解压测试失败', + 'log_env_config_failed_admin': '环境配置失败,请以管理员身份运行', + 'log_env_config_failed': '环境配置失败', + 'log_env_config_failed_detail': '环境配置失败: {error}', + 'log_hotspot_opening': '已打开热点设置,正在检测热点...', + 'log_hotspot_detected': '检测到热点: {ssid} / {password}', + 'log_hotspot_not_detected': '未检测到热点,请确认已开启', + 'err_extract_wrong_password': '资源准备失败', + 'err_extract_data': '资源准备失败', + 'err_extract_headers': '资源准备失败', + 'err_extract_detail': '资源准备失败', + 'err_extract_code': '资源准备失败', + 'err_missing_apps': '资源目录异常', + 'err_empty_apps': '资源目录异常', + 'err_zero_apks': '资源文件异常', + 'err_cmd_timeout': '命令超时', + 'err_fastboot_timeout': '获取失败', + 'err_push_failed': 'push失败: {error}', + 'err_install_failed': 'install失败: {error}', + 'err_decode_failed': '解码失败', + 'msg_start_failed_title': '错误', + 'msg_start_failed': '程序启动失败: {error}', + 'print_python_required': '错误:需要Python 3.6或更高版本', + 'print_start_failed': '启动失败: {error}', + }, + 'en': { + 'title': 'Mazda-EZ60_OS-1.2适用', + 'btn_permission': '🔓 Unlock', + 'btn_voice_patch': '🎙 Voice Patch', + 'btn_push': '📦 Flash Lang Pkg', + 'btn_install': '📱 Install App', + 'btn_language': '🌐 Language', + 'btn_timezone': '⏰ Timezone', + 'btn_settings': '⚙️ Settings', + 'btn_reboot': '🔄 Reboot', + 'btn_disable_upgrade': '❌ Disable OTA', + 'btn_clear_log': '🗑 Clear Log', + 'btn_query_pwd': 'Query Pwd', + 'btn_install_driver': '🧩 Driver', + 'btn_debug_extract': 'Extract Test', + 'btn_debug_boot': 'Boot Extract', + 'device_label': 'Device:', + 'vin_label': 'VIN:', + 'auth_label': 'Auth:', + 'log_title': '📋 Log', + 'status_ready': 'Ready', + 'status_connected': 'Connected', + 'status_disconnected': 'Disconnected', + 'status_detecting': 'Detecting', + 'vin_none': 'None', + 'auth_none': 'Unknown', + 'auth_yes': 'Authorized', + 'auth_no': 'Unauthorized', + 'btn_refresh': '🔄 Check', + 'hint_factory': '🔧 Turn off WiFi & 4G, enter factory mode with dial code', + 'hotspot_icon': '📶', + 'hotspot_title': 'Hotspot', + 'hotspot_start': '🔧 Open Hotspot Settings', + 'hint_icon': '💡', + 'hint_title': 'Tips', + 'theme_dark': '🌙 Dark', + 'theme_light': '☀️ Light', + 'lang_zh': '中', + 'lang_en': 'EN', + 'pwd_query_label': 'Factory password:', + 'vin_placeholder': 'Enter VIN', + 'vin_query_hint': '💡 Enter the VIN or the last 8 digits of the VIN to query.', + 'pwd_empty': '', + 'pwd_success': 'Password: *#{password}#*', + 'pwd_failed': 'Failed: {message}', + 'pwd_request_failed': 'Request failed', + 'hotspot_name_detecting': 'Name: detecting...', + 'hotspot_name_unset': 'Name: not configured', + 'hotspot_name_value': 'Name: {ssid}', + 'hotspot_pwd_default': 'Password: changan2024', + 'hotspot_pwd_value': 'Password: {password}', + 'hotspot_status_off': 'Status: stopped', + 'hotspot_status_value': 'Status: {status}', + 'hotspot_started': 'started', + 'hotspot_stopped': 'stopped', + 'hint_lines': [ + '1. Turn on the PC hotspot', + '2. Enter factory mode with the dial password and open debug tools', + '3. For cloud authentication, connect the head unit to the hotspot shown above', + '4. Tap “Cloud Authentication” on the head unit after connecting', + '5. Enable ADB, then flash the language package', + ], + 'log_lang_changed': 'Language switched to English', + 'log_cleared': 'Log cleared', + 'msg_warn_title': 'Warning', + 'msg_error_title': 'Error', + 'msg_success_title': 'Success', + 'msg_hint_title': 'Hint', + 'msg_device_not_connected_title': 'Device not connected', + 'msg_device_not_connected': 'Connect the device and click "Check" to refresh status first.', + 'msg_need_vin': 'Refresh device status and get VIN first', + 'msg_auth_failed_title': 'Authorization failed', + 'msg_device_unauthorized': 'Device is not authorized', + 'msg_device_unauthorized_action': 'Device is not authorized. This action cannot continue.', + 'msg_data_prepare_failed': 'Resource initialization failed!', + 'msg_resource_prepare_failed': 'Resource preparation failed!', + 'msg_resource_dir_missing': 'Resource directory not found', + 'msg_input_vin': 'Enter VIN', + 'msg_done_title': 'Done', + 'msg_confirm_permission_title': 'Confirm unlock', + 'msg_confirm_permission': 'The tool will get system permission. Do not disconnect the data cable or close the program during the process.\n\nContinue?', + 'msg_permission_done': 'Permission acquired. The device is rebooting.', + 'msg_driver_missing_title': 'Driver Environment', + 'msg_driver_missing': 'Driver environment is missing. Driver installation will start automatically.', + 'msg_driver_install_confirm': 'Driver environment installation requires administrator permission.', + 'msg_driver_install_done': 'Driver installation completed. If the device is still not recognized, reconnect USB cable.', + 'msg_driver_install_failed': 'Driver installation failed: {error}', + 'msg_reboot_title': 'Confirm reboot', + 'msg_reboot_confirm': 'Reboot the device now?', + 'msg_disable_ota_title': 'Confirm Disable OTA', + 'msg_disable_ota_confirm': 'Warning: after disabling OTA, the system will not receive updates.\n\nDisable the OTA app now?', + 'msg_disable_ota_success': 'System OTA has been disabled.', + 'msg_disable_ota_failed': 'Disable failed: {output}', + 'file_select_apk_title': 'Select APK files', + 'filetype_apk': 'APK files', + 'filetype_all': 'All files', + 'msg_install_confirm_title': 'Confirm install', + 'msg_install_confirm_many': 'Selected {count} APK file(s).\n\nStart installing?', + 'msg_install_confirm_folder': 'Found {count} APK file(s).\n\nStart batch install?', + 'msg_install_done_title': 'Install complete', + 'msg_install_done_all': 'Successfully installed {count} APK file(s).', + 'msg_install_partial_title': 'Partially complete', + 'msg_install_partial': 'Succeeded: {success}\nFailed: {failed}', + 'msg_install_failed_title': 'Install failed', + 'msg_install_failed_all': 'All APK installs failed.', + 'msg_apks_dir_missing': 'apks folder not found.\nCreate an apks folder next to the program and place APK files in it.', + 'msg_apks_empty': 'No APK files found in the apks folder.', + 'quick_lang_title': 'Quick Language', + 'quick_lang_header': 'Select Target Language', + 'quick_lang_hint': 'Tap a language to switch the system locale. Reboot to apply.', + 'quick_lang_system': '⚙️ Open system language settings', + 'quick_lang_success_title': 'Set Successfully', + 'quick_lang_success': 'System language has been set to {language}.\n\nReboot the device to apply.', + 'quick_lang_failed_title': 'Set Failed', + 'quick_lang_failed': 'Language setting failed.', + 'quick_lang_names': ['🇨🇳 Chinese', 'English', 'Russian', 'French', 'Spanish', 'Portuguese', 'Italian', 'Arabic'], + 'debug_title': 'Debug Mode', + 'debug_prompt': 'Enter debug password:', + 'debug_password_verifying': 'Verifying debug mode password...', + 'debug_verify_failed': 'Debug mode password verification failed: {message}', + 'debug_status': '🔧 Debug Mode', + 'debug_need_enable': 'Press Ctrl+Shift+D to enable debug mode first', + 'debug_need_vin': 'Refresh device VIN first, or enter VIN in the password query box', + 'debug_boot_title': 'Boot Extract Test', + 'debug_boot_prompt': 'No VIN/device detected.\nEnter BOOT_KEY or sessionKey returned by boot-key:', + 'debug_key_len_error': 'Invalid key length. Expected a 32-byte AES key.', + 'debug_key_format_error': 'Invalid key format: {error}', + 'msg_debug_wrong_password': 'Wrong password', + 'status_debug': '🔧 Debug mode', + 'progress_loading': 'Preparing resources', + 'progress_loaded': 'Resources ready', + 'progress_preparing': 'Preparing resources', + 'progress_prepare_runtime': 'Getting permission', + 'progress_install_runtime': 'Getting permission', + 'progress_fetch_boot_key': 'Getting permission', + 'progress_reboot_fastboot': 'Getting permission', + 'progress_decrypt_init_boot': 'Getting permission', + 'progress_flash_init_boot': 'Getting permission', + 'progress_reboot_device': 'Getting permission', + 'progress_install_module': 'Installing patch', + 'progress_flashing': 'Flashing', + 'progress_flash_done': 'Flash complete', + 'progress_installing': 'Installing', + 'progress_installing_name': 'Installing ({name})', + 'progress_install_done': 'Install complete', + 'progress_done': 'Done', + 'log_device_disconnected': 'Device disconnected', + 'log_device_connected': 'Device connected', + 'log_no_package': 'Resource file is missing', + 'log_no_adb': 'adb not found. Place ADB files in this folder.', + 'log_no_fastboot': 'Runtime environment is incomplete', + 'log_vin': 'VIN: {vin}', + 'log_vin_unavailable': 'Unable to read VIN. Confirm the device is in factory mode.', + 'log_auth_checking': 'Checking authorization...', + 'log_auth_success': 'Authorization passed', + 'log_auth_failed': 'Authorization failed', + 'log_debug_skip_auth': 'Debug mode: skipping authorization', + 'log_vehicle_name': 'Vehicle name: {vehicle}', + 'log_data_prepare_failed': 'Resource initialization failed', + 'log_boot_challenge_failed': 'Permission failed', + 'log_boot_key_failed': 'Permission failed', + 'log_boot_key_len_error': 'Permission failed', + 'log_boot_key_success': 'Getting permission', + 'log_crypto_missing': 'Permission failed', + 'log_driver_found': 'Driver environment detected', + 'log_driver_missing': 'Driver environment not detected', + 'log_driver_install_start': 'Installing driver environment...', + 'log_driver_install_success': 'Driver environment installed', + 'log_driver_install_failed': 'Driver environment installation failed: {error}', + 'log_runtime_missing': 'Permission failed', + 'log_base_apk_invalid': 'Permission failed', + 'log_runtime_ready': 'Getting permission', + 'log_runtime_install_failed': 'Permission failed', + 'log_runtime_install_success': 'Getting permission', + 'log_permission_resource_missing': 'Permission failed', + 'log_permission_resource_format_unsupported': 'Permission failed', + 'log_permission_resource_algorithm_unsupported': 'Permission failed', + 'log_permission_resource_decrypt_auth_failed': 'Permission failed', + 'log_permission_resource_decrypt_ready': 'Getting permission', + 'log_permission_resource_decrypt_failed': 'Permission failed', + 'log_fastboot_wait': 'Getting permission. Do not close the program or disconnect the data cable.', + 'log_fastboot_missing': 'Permission failed', + 'log_fastboot_enter_failed': 'Permission failed', + 'log_init_boot_flash_failed': 'Permission failed', + 'log_init_boot_flash_success': 'Getting permission', + 'log_fastboot_reboot_failed': 'Permission failed', + 'log_permission_success': 'Permission acquired', + 'log_permission_failed': 'Permission failed', + 'log_temp_img_deleted': 'Temporary file cleaned', + 'log_temp_img_delete_failed': 'Failed to clean temporary file', + 'log_open_magisk': 'Tap "允许" to grant permission when prompted.', + 'log_root_checking': 'Checking permission...', + 'log_root_ok': 'Permission granted', + 'log_root_failed': 'Permission grant failed. Grant permission manually.', + 'msg_root_failed': 'Grant permission manually, then retry.', + 'log_magisk_cleanup_done': 'Permission entry cleaned', + 'log_magisk_cleanup_failed': 'Permission entry cleanup failed', + 'log_magisk_cleanup_module_done': 'Permission entry cleanup persisted', + 'log_magisk_cleanup_module_failed': 'Permission entry cleanup persistence failed', + 'log_voice_patch_start': 'Starting voice assistant patch install', + 'log_voice_patch_done': 'Voice assistant patch installed. Reboot the device to apply.', + 'log_voice_patch_failed': 'Voice assistant patch install failed', + 'log_module_install_start': 'Starting patch install', + 'log_module_install_done': 'Patch installed', + 'log_module_install_failed': 'Patch install failed: {error}', + 'log_push_file_failed': 'File push failed: {file}: {error}', + 'log_root_cmd_failed': 'Permission operation failed: {error}', + 'err_module_prop_missing': 'Patch files are missing from the resource package', + 'err_module_id_missing': 'Patch config is missing an ID field', + 'err_module_zip_invalid': 'Patch file is invalid or missing config: {file}', + 'err_duplicate_module_id': 'The resource package contains duplicate patch IDs', + 'log_need_adb': 'Connect the device first.', + 'log_no_vehicle_name': 'Resource initialization failed', + 'log_package_missing': 'Resource file is missing', + 'log_extract_password_missing': 'Resource initialization failed', + 'log_7za_missing': 'Runtime environment is incomplete', + 'log_extracting': 'Preparing resources...', + 'log_apps_missing': 'Warning: apps directory not found', + 'log_resource_invalid': 'Resource validation failed', + 'log_resource_ready': 'Resources ready', + 'log_resource_failed': 'Resource preparation failed. Check the network and try again.', + 'log_cache_invalid': 'Resource cache is invalid', + 'log_no_language_files': 'No language package files found', + 'log_flash_start': 'Starting language package flashing. Do not power off or restart the computer or vehicle head unit.', + 'log_install_success': 'Install succeeded', + 'log_install_failed': 'Install failed', + 'log_flash_item_failed': 'Language package flash failed: {current}/{total}', + 'log_flash_done_config': 'Language packages flashed. Running Mazda-EZ60 post-install configuration.', + 'log_flash_partial_config': 'Some language packages flashed. Continuing Mazda-EZ60 post-install configuration.', + 'log_flash_failed_config': 'Language package flashing failed. Still running Mazda-EZ60 post-install configuration.', + 'log_post_config_start': 'Running Mazda-EZ60 post-install configuration...', + 'log_overlay_enabled': 'Configuration item completed', + 'log_overlay_failed': 'Configuration item failed', + 'log_disabled_package': 'Cleanup item completed', + 'log_disable_package_failed': 'Cleanup item failed', + 'log_post_config_done': 'Mazda-EZ60 post-install configuration complete', + 'log_post_config_all_done': 'Mazda-EZ60 post-install configuration complete. Reboot the device to apply.', + 'log_post_config_partial': 'Mazda-EZ60 post-install configuration partly failed. Check the log.', + 'log_batch_install_start': 'Starting batch install for {count} APK file(s)...', + 'log_install_many_start': 'Starting install for {count} APK file(s)...', + 'log_install_done_all': 'Install complete: all {count} succeeded', + 'log_install_done_partial': 'Install complete: {success}/{count} succeeded', + 'log_install_failed_simple': 'Install failed', + 'log_rebooting': 'Device is rebooting...', + 'log_disable_ota_cancelled': 'Disable OTA operation cancelled', + 'log_disable_ota_success': 'System OTA disabled', + 'log_disable_ota_failed': 'Disable OTA failed', + 'log_pwd_success': 'Password query succeeded', + 'log_pwd_failed': 'Password query failed', + 'log_pwd_request_failed': 'Password query request failed', + 'log_debug_off': 'Debug mode disabled', + 'log_debug_on': 'Debug mode enabled - authorization/device checks skipped, detailed ADB logs shown', + 'log_debug_extract_start': 'Starting package extract test...', + 'log_debug_extract_success': 'Package extract test passed: APK count={apk_count}, patch count={module_count}', + 'log_debug_extract_failed': 'Package extract test failed', + 'log_debug_boot_start': 'Starting boot resource extract test...', + 'log_debug_boot_success': 'Boot resource extract test passed: size={size}, sha256={sha}', + 'log_debug_boot_failed': 'Boot resource extract test failed', + 'log_env_config_failed_admin': 'Environment configuration failed. Run as administrator.', + 'log_env_config_failed': 'Environment configuration failed', + 'log_env_config_failed_detail': 'Environment configuration failed: {error}', + 'log_hotspot_opening': 'Opened hotspot settings. Detecting hotspot...', + 'log_hotspot_detected': 'Hotspot detected: {ssid} / {password}', + 'log_hotspot_not_detected': 'Hotspot not detected. Make sure it is turned on.', + 'err_extract_wrong_password': 'Resource preparation failed', + 'err_extract_data': 'Resource preparation failed', + 'err_extract_headers': 'Resource preparation failed', + 'err_extract_detail': 'Resource preparation failed', + 'err_extract_code': 'Resource preparation failed', + 'err_missing_apps': 'Resource directory is invalid', + 'err_empty_apps': 'Resource directory is invalid', + 'err_zero_apks': 'Resource file is invalid', + 'err_cmd_timeout': 'Command timed out', + 'err_fastboot_timeout': 'Permission failed', + 'err_push_failed': 'push failed: {error}', + 'err_install_failed': 'install failed: {error}', + 'err_decode_failed': 'Decode failed', + 'msg_start_failed_title': 'Error', + 'msg_start_failed': 'Program failed to start: {error}', + 'print_python_required': 'Error: Python 3.6 or later is required', + 'print_start_failed': 'Startup failed: {error}', + } + } + + self.base_dir = get_app_dir() + self.adb = find_tool('adb.exe', 'adb') + self.fastboot = find_tool('fastboot.exe', 'fastboot') + self.sz = find_tool('7za.exe') + self.driver_dir = find_resource_dir("usb_driver") + self.driver_inf = self.driver_dir / "android_winusb.inf" + self.package_file = find_resource("package_voice-assistant.bin") + self.runtime_file = find_resource("runtime.dat") + self.permission_resource_file = find_resource("EZ60_resource.dat") + self.extract_password = None + self.runtime_password = None + self.permission_resource_key = None + self.apps_dir = None + self.voice_module_zips = [] + self.temp_dir = None + self.runtime_cache_dir = None + self.api_url = "https://api.changan.softwindy.cn/api/authorizations/auth-check" + self.boot_challenge_api_url = "https://api.changan.softwindy.cn/api/authorizations/boot-challenge" + self.boot_key_api_url = "https://api.changan.softwindy.cn/api/authorizations/boot-key" + self.debug_password_api_url = "https://api.changan.softwindy.cn/api/authorizations/verify-debug-mode-password" + self.tool_version = "Mazda-EZ60_1.2/1.2.0" + self.vin = None + self.vehicle_name = "" + self.device_connected = False + self._refreshing = False # 防止并发刷新 + self.debug_mode = False # 调试模式 + self.driver_prompted = False + self.voice_patch_module_names = [ + "enable_install.zip", + "MazdaEZ60VoiceEnglish-1.2-Aemeth.zip", + ] + self.mazda_overlay_packages = [ + "com.tinnove.launcher.overlay", + "com.tinnove.scenemode.overlay", + "com.incall.dvr.overlay", + ] + self.mazda_disable_packages = [ + "com.carinno.p1", + "com.wtcl.electronicdirections", + "com.ximalaya.ting.android.car", + "com.tinnove.netease.music", + "com.migu.miguplay.car", + "cn.cmvideo.car.play", + "com.tinnove.carshow", + "com.tinnove.changba", + "com.qiyi.video.iv", + "com.changan.appmarket", + "com.incall.apps.softmanager" + ] + atexit.register(self.cleanup_cache_on_exit) + + # 设置样式 + self.setup_styles() + self.setup_ui() + self.root.protocol("WM_DELETE_WINDOW", self.on_close) + self.center_window() + self._clear_extracted_cache() + + # 检查环境 + self.check_environment() + + # 启动设备状态监控 + self.start_device_monitor() + + def setup_styles(self): + """设置自定义样式""" + style = ttk.Style() + style.theme_use('clam') + + # 配置主颜色 + style.configure('TFrame', background=self.colors['bg_dark']) + style.configure('TLabel', background=self.colors['bg_dark'], foreground=self.colors['text']) + style.configure('TLabelframe', background=self.colors['bg_dark'], foreground=self.colors['text']) + style.configure('TLabelframe.Label', background=self.colors['bg_dark'], foreground=self.colors['accent']) + + # 配置进度条 + style.configure('TProgressbar', + background=self.colors['accent'], + troughcolor=self.colors['bg_light'], + borderwidth=0) + + def setup_ui(self): + """设置UI界面""" + # 配置根窗口 + self.root.configure(bg=self.colors['bg_dark']) + + # 创建主框架 + main_frame = tk.Frame(self.root, bg=self.colors['bg_dark']) + main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) + + # 左侧内容区 + left_frame = tk.Frame(main_frame, bg=self.colors['bg_dark']) + left_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + + # 右侧提示面板 + right_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1, width=235) + right_frame.pack(side=tk.RIGHT, fill=tk.Y, padx=(10, 0)) + right_frame.pack_propagate(False) + + # 顶部标题栏 + title_frame = tk.Frame(left_frame, bg=self.colors['bg_dark'], height=65) + title_frame.pack(fill=tk.X, pady=(0, 10)) + title_frame.pack_propagate(False) + + title_content_frame = tk.Frame(title_frame, bg=self.colors['bg_dark']) + title_content_frame.pack(fill=tk.X, expand=True) + + # 标题 + self.title_label = tk.Label(title_content_frame, + text="🚀 " + self.t('title'), + font=('Microsoft YaHei', 18, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.title_label.pack(side=tk.LEFT, expand=True, padx=(0, 10)) + + self.btn_lang_switch = tk.Button(title_content_frame, text=self.t('lang_en'), + command=self.toggle_lang, + font=('Microsoft YaHei', 9, 'bold'), + fg='white', + bg=self.colors['accent'], + activeforeground='white', + activebackground=self.colors['accent_hover'], + relief=tk.FLAT, + cursor='hand2', + width=7, + height=1) + self.btn_lang_switch.pack(side=tk.RIGHT, padx=(8, 4)) + + # 工程密码查询区域 + pwd_query_frame = tk.Frame(left_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + pwd_query_frame.pack(fill=tk.X, pady=(0, 5), padx=5) + + pwd_query_row = tk.Frame(pwd_query_frame, bg=self.colors['bg_light']) + pwd_query_row.pack(fill=tk.X) + + self.pwd_query_label = tk.Label(pwd_query_row, text=self.t('pwd_query_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.pwd_query_label.pack(side=tk.LEFT, padx=(10, 5), pady=5) + + self.vin_input = tk.Entry(pwd_query_row, + font=('Consolas', 9), + bg='#2d2d3d', + fg='#636e72', + insertbackground='white', + relief=tk.FLAT, + width=20) + self.vin_input.insert(0, self.t('vin_placeholder')) + self.vin_input.bind("", self._on_vin_input_focus_in) + self.vin_input.bind("", self._on_vin_input_focus_out) + self.vin_input.pack(side=tk.LEFT, padx=5, pady=5) + + self.btn_query_pwd = tk.Button(pwd_query_row, text=self.t('btn_query_pwd'), + command=self.query_password_by_vin, + font=('Microsoft YaHei', 8), + fg='white', + bg=self.colors['accent'], + relief=tk.FLAT, + cursor='hand2') + self.btn_query_pwd.pack(side=tk.LEFT, padx=5, pady=5) + + self.pwd_result_label = tk.Label(pwd_query_row, text="", + font=('Microsoft YaHei', 9, 'bold'), + fg=self.colors['success'], + bg=self.colors['bg_light']) + self.pwd_result_label.pack(side=tk.LEFT, padx=10, pady=5) + + self.vin_query_hint_label = tk.Label(pwd_query_frame, text=self.t('vin_query_hint'), + font=('Microsoft YaHei', 8, 'bold'), + fg=self.colors['warning'], + bg=self.colors['bg_light'], + anchor='w') + self.vin_query_hint_label.pack(fill=tk.X, padx=(10, 10), pady=(0, 6)) + + + # 工厂模式提示 + factory_hint_frame = tk.Frame(left_frame, bg=self.colors['bg_dark']) + factory_hint_frame.pack(fill=tk.X, pady=(0, 3)) + self.hint_label = tk.Label(factory_hint_frame, text=self.t('hint_factory'), + font=('Microsoft YaHei', 8), + fg=self.colors['warning'], + bg=self.colors['bg_dark']) + self.hint_label.pack(side=tk.LEFT, padx=2) + + # 按钮区域(两排,每排5个) + button_frame = tk.Frame(left_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + button_frame.pack(fill=tk.X, pady=(0, 10), padx=5) + + # 按钮样式参数 + btn_params = { + 'font': ('Microsoft YaHei', 9), + 'fg': 'white', + 'relief': tk.FLAT, + 'cursor': 'hand2', + 'height': 1, + 'width': 12 + } + + # 第一排按钮 + row1_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) + row1_frame.pack(pady=(8, 4)) + + self.btn_permission = tk.Button(row1_frame, text=self.t('btn_permission'), + command=self.prepare_ez60_permission, + bg=self.colors['warning'], + **btn_params) + self.btn_permission.pack(side=tk.LEFT, padx=4) + + self.btn_voice_patch = tk.Button(row1_frame, text=self.t('btn_voice_patch'), + command=self.install_voice_assistant_patch, + bg=self.colors['accent'], + **btn_params) + self.btn_voice_patch.pack(side=tk.LEFT, padx=4) + + self.btn_push = tk.Button(row1_frame, text=self.t('btn_push'), + command=self.push_all_apks, + bg=self.colors['accent'], + **btn_params) + self.btn_push.pack(side=tk.LEFT, padx=4) + + self.btn_install_all = tk.Button(row1_frame, text=self.t('btn_install'), + command=self.install_apps, + bg=self.colors['accent'], + **btn_params) + self.btn_install_all.pack(side=tk.LEFT, padx=4) + + self.btn_language = tk.Button(row1_frame, text=self.t('btn_language'), + command=self.open_language_quick_set, + bg=self.colors['accent'], + **btn_params) + self.btn_language.pack(side=tk.LEFT, padx=4) + + # 第二排按钮 + row2_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) + row2_frame.pack(pady=(4, 8)) + + self.btn_timezone = tk.Button(row2_frame, text=self.t('btn_timezone'), + command=self.open_timezone_settings, + bg=self.colors['accent'], + **btn_params) + self.btn_timezone.pack(side=tk.LEFT, padx=4) + + self.btn_settings = tk.Button(row2_frame, text=self.t('btn_settings'), + command=self.open_android_settings, + bg=self.colors['accent'], + **btn_params) + self.btn_settings.pack(side=tk.LEFT, padx=4) + + self.btn_reboot = tk.Button(row2_frame, text=self.t('btn_reboot'), + command=self.reboot_device, + bg=self.colors['warning'], + **btn_params) + self.btn_reboot.pack(side=tk.LEFT, padx=4) + + self.btn_exit = tk.Button(row2_frame, text=self.t('btn_disable_upgrade'), + command=self.on_disable_upgrade, + bg=self.colors['error'], + **btn_params) + self.btn_exit.pack(side=tk.LEFT, padx=4) + + self.debug_button_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) + + self.btn_debug_extract = tk.Button(self.debug_button_frame, text=self.t('btn_debug_extract'), + command=self.debug_test_package_extract, + bg=self.colors['info'], + **btn_params) + self.btn_debug_extract.pack(side=tk.LEFT, padx=4) + + self.btn_debug_boot = tk.Button(self.debug_button_frame, text=self.t('btn_debug_boot'), + command=self.debug_test_boot_extract, + bg=self.colors['info'], + **btn_params) + self.btn_debug_boot.pack(side=tk.LEFT, padx=4) + + # 设备状态栏(横条) + status_bar_frame = tk.Frame(left_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + status_bar_frame.pack(fill=tk.X, pady=(0, 5)) + + # 状态指示器 + status_indicator_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) + status_indicator_frame.pack(side=tk.LEFT, padx=10, pady=5) + + self.status_indicator = tk.Canvas(status_indicator_frame, width=10, height=10, + bg=self.colors['bg_light'], highlightthickness=0) + self.status_indicator.pack(side=tk.LEFT) + self.status_dot = self.status_indicator.create_oval(2, 2, 8, 8, fill='#636e72') + + self.device_label = tk.Label(status_indicator_frame, text=self.t('device_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.device_label.pack(side=tk.LEFT, padx=(5, 3)) + + self.device_status_label = tk.Label(status_indicator_frame, text=self.t('status_detecting'), + font=('Microsoft YaHei', 9, 'bold'), + fg='#636e72', + bg=self.colors['bg_light']) + self.device_status_label.pack(side=tk.LEFT) + + # VIN信息 + vin_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) + vin_frame.pack(side=tk.LEFT, padx=20, pady=5) + self.vin_label_title = tk.Label(vin_frame, text=self.t('vin_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.vin_label_title.pack(side=tk.LEFT) + self.vin_label = tk.Label(vin_frame, text=self.t('vin_none'), + font=('Microsoft YaHei', 9, 'bold'), + fg='#636e72', + bg=self.colors['bg_light']) + self.vin_label.pack(side=tk.LEFT, padx=(5, 0)) + + # 授权状态 + auth_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) + auth_frame.pack(side=tk.LEFT, padx=20, pady=5) + self.auth_label_title = tk.Label(auth_frame, text=self.t('auth_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.auth_label_title.pack(side=tk.LEFT) + self.auth_label = tk.Label(auth_frame, text=self.t('auth_none'), + font=('Microsoft YaHei', 9, 'bold'), + fg='#636e72', + bg=self.colors['bg_light']) + self.auth_label.pack(side=tk.LEFT, padx=(5, 0)) + + # 操作按钮:检查靠近设备状态,安装驱动在检查右侧 + status_actions_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) + status_actions_frame.pack(side=tk.RIGHT, padx=10, pady=5) + + self.btn_refresh = tk.Button(status_actions_frame, text=self.t('btn_refresh'), + command=lambda: self.refresh_device_status(force=True), + font=('Microsoft YaHei', 8), + fg=self.colors['accent'], + bg=self.colors['bg_light'], + relief=tk.FLAT, + cursor='hand2') + self.btn_refresh.pack(side=tk.LEFT, padx=(0, 8)) + + self.btn_install_driver = tk.Button(status_actions_frame, text=self.t('btn_install_driver'), + command=self.install_fastboot_driver, + font=('Microsoft YaHei', 8), + fg=self.colors['warning'], + bg=self.colors['bg_light'], + relief=tk.FLAT, + cursor='hand2') + self.btn_install_driver.pack(side=tk.LEFT) + + # 解压进度条框架 + progress_frame = tk.Frame(left_frame, bg=self.colors['bg_dark']) + progress_frame.pack(fill=tk.X, pady=(5, 5)) + + self.progress_label = tk.Label(progress_frame, text="", + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark']) + self.progress_label.pack() + + self.progress = ttk.Progressbar(progress_frame, mode='determinate', style='TProgressbar') + self.progress.pack(fill=tk.X, pady=(2, 0)) + + # 推送进度条 + self.push_progress_label = tk.Label(progress_frame, text="", + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark']) + + self.push_progress = ttk.Progressbar(progress_frame, mode='determinate', style='TProgressbar') + + # 日志区域(下方) + log_card = tk.Frame(left_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + log_card.pack(fill=tk.BOTH, expand=True, pady=(5, 0)) + + # 日志标题栏 + log_title_frame = tk.Frame(log_card, bg=self.colors['bg_dark'], height=30) + log_title_frame.pack(fill=tk.X) + log_title_frame.pack_propagate(False) + + self.log_title_label = tk.Label(log_title_frame, text=self.t('log_title'), + font=('Microsoft YaHei', 10, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.log_title_label.pack(side=tk.LEFT, padx=10) + + self.btn_clear = tk.Button(log_title_frame, text=self.t('btn_clear_log'), + command=self.clear_log, + font=('Microsoft YaHei', 8), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark'], + relief=tk.FLAT, + cursor='hand2') + self.btn_clear.pack(side=tk.RIGHT, padx=10) + + # 日志文本框 + text_frame = tk.Frame(log_card, bg=self.colors['bg_light']) + text_frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5) + + self.log_text = scrolledtext.ScrolledText(text_frame, + height=12, + wrap=tk.WORD, + font=('Consolas', 9), + bg='#2d2d3d', + fg='#e0e0e0', + insertbackground='white', + relief=tk.FLAT, + borderwidth=0) + self.log_text.pack(fill=tk.BOTH, expand=True) + + # 配置日志颜色标签 + self.log_text.tag_config('INFO', foreground='#74b9ff') + self.log_text.tag_config('SUCCESS', foreground='#55efc4') + self.log_text.tag_config('ERROR', foreground='#ff7675') + self.log_text.tag_config('WARNING', foreground='#ffeaa7') + self.log_text.tag_config('CMD', foreground='#a29bfe') + + # 底部状态栏 + bottom_status = tk.Frame(left_frame, bg=self.colors['bg_light'], height=22) + bottom_status.pack(fill=tk.X, pady=(5, 0)) + bottom_status.pack_propagate(False) + + self.status_text = tk.Label(bottom_status, text=self.t('status_ready'), + font=('Microsoft YaHei', 8), + fg=self.colors['text_secondary'], + bg=self.colors['bg_light']) + self.status_text.pack(side=tk.LEFT, padx=10) + + # 主题切换按钮 + self.btn_theme_switch = tk.Button(bottom_status, text=self.t('theme_dark'), + command=self.toggle_theme, + font=('Microsoft YaHei', 8), + fg=self.colors['accent'], + bg=self.colors['bg_light'], + relief=tk.FLAT, cursor='hand2') + self.btn_theme_switch.pack(side=tk.RIGHT, padx=5) + + # 调试模式快捷键 + self.root.bind('', self._toggle_debug) + + # ========== 右侧提示面板 ========== + # 热点信息卡片 + hotspot_card = tk.Frame(right_frame, bg=self.colors['bg_dark'], relief=tk.RAISED, bd=1) + hotspot_card.pack(fill=tk.X, padx=5, pady=(10, 5)) + + hotspot_title_row = tk.Frame(hotspot_card, bg=self.colors['bg_dark']) + hotspot_title_row.pack(anchor='w', fill=tk.X, padx=10, pady=(8, 5)) + + self.hotspot_icon_label = tk.Label(hotspot_title_row, text=self.t('hotspot_icon'), + font=('Segoe UI Emoji', 12), + fg=self.colors['accent'], + bg=self.colors['bg_dark'], + width=2, + anchor='center') + self.hotspot_icon_label.pack(side=tk.LEFT, padx=(0, 4)) + + self.hotspot_title_label = tk.Label(hotspot_title_row, text=self.t('hotspot_title'), + font=('Microsoft YaHei', 11, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark'], + anchor='w') + self.hotspot_title_label.pack(side=tk.LEFT, fill=tk.X, expand=True) + + self.hotspot_ssid_label = tk.Label(hotspot_card, text=self.t('hotspot_name_detecting'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_dark']) + self.hotspot_ssid_label.pack(anchor='w', padx=10, pady=2) + + self.hotspot_pwd_label = tk.Label(hotspot_card, text=self.t('hotspot_pwd_default'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_dark']) + self.hotspot_pwd_label.pack(anchor='w', padx=10, pady=2) + + self.hotspot_status_label = tk.Label(hotspot_card, text=self.t('hotspot_status_off'), + font=('Microsoft YaHei', 9), + fg=self.colors['warning'], + bg=self.colors['bg_dark']) + self.hotspot_status_label.pack(anchor='w', padx=10, pady=2) + + self.btn_hotspot = tk.Button(hotspot_card, text=self.t('hotspot_start'), + command=self.start_hotspot_action, + font=('Microsoft YaHei', 8), + fg='white', + bg=self.colors['accent'], + relief=tk.FLAT, + cursor='hand2') + self.btn_hotspot.pack(pady=8, padx=10, fill=tk.X) + + # 分隔线 + tk.Frame(right_frame, bg=self.colors['border'], height=1).pack(fill=tk.X, padx=8, pady=5) + + # 使用提示卡片 + hint_card = tk.Frame(right_frame, bg=self.colors['bg_dark'], relief=tk.RAISED, bd=1) + hint_card.pack(fill=tk.X, padx=5, pady=5) + + hint_title_row = tk.Frame(hint_card, bg=self.colors['bg_dark']) + hint_title_row.pack(anchor='w', fill=tk.X, padx=10, pady=(8, 5)) + + self.hint_icon_label = tk.Label(hint_title_row, text=self.t('hint_icon'), + font=('Segoe UI Emoji', 12), + fg=self.colors['warning'], + bg=self.colors['bg_dark'], + width=2, + anchor='center') + self.hint_icon_label.pack(side=tk.LEFT, padx=(0, 4)) + + self.hint_title_label = tk.Label(hint_title_row, text=self.t('hint_title'), + font=('Microsoft YaHei', 11, 'bold'), + fg=self.colors['warning'], + bg=self.colors['bg_dark'], + anchor='w') + self.hint_title_label.pack(side=tk.LEFT, fill=tk.X, expand=True) + + self.hint_lines_frame = tk.Frame(hint_card, bg=self.colors['bg_dark']) + self.hint_lines_frame.pack(fill=tk.X, padx=10, pady=(0, 10)) + self._render_hint_lines() + + # 绑定悬停效果 + self.bind_hover_effects() + self.set_debug_buttons_visible(False) + + def bind_hover_effects(self): + """绑定按钮悬停效果""" + buttons = [self.btn_permission, self.btn_voice_patch, self.btn_push, self.btn_install_all, + self.btn_language, self.btn_timezone, self.btn_settings, + self.btn_reboot, self.btn_clear, self.btn_exit, self.btn_query_pwd, + self.btn_hotspot, self.btn_debug_extract, self.btn_debug_boot] + + for btn in buttons: + original_bg = btn.cget('bg') + def on_enter(e, btn=btn, bg=original_bg): + btn.config(bg=self.lighten_color(bg)) + def on_leave(e, btn=btn, bg=original_bg): + btn.config(bg=bg) + btn.bind('', on_enter) + btn.bind('', on_leave) + + def lighten_color(self, color): + """调亮颜色""" + if color == self.colors['accent']: + return self.colors['accent_hover'] + elif color == self.colors['warning']: + return '#feca57' + elif color == self.colors['info']: + return '#0984e3' + elif color == self.colors['error']: + return '#e17055' + elif color == self.colors['success']: + return '#00a884' + return color + + def set_window_icon(self): + """Set the Tk window/taskbar icon at runtime; PyInstaller --icon only sets the exe file icon.""" + try: + icon_path = find_resource("app.ico") + if icon_path.exists(): + self.root.iconbitmap(str(icon_path)) + if sys.platform == 'win32': + import ctypes + hwnd = self.root.winfo_id() + image = ctypes.windll.user32.LoadImageW( + None, str(icon_path), 1, 0, 0, 0x00000010 + ) + if image: + ctypes.windll.user32.SendMessageW(hwnd, 0x0080, 0, image) + ctypes.windll.user32.SendMessageW(hwnd, 0x0080, 1, image) + except Exception: + pass + + def center_window(self): + """将窗口居中显示在屏幕上""" + self.root.update_idletasks() + screen_w = self.root.winfo_screenwidth() + screen_h = self.root.winfo_screenheight() + win_w = self.root.winfo_reqwidth() + win_h = self.root.winfo_reqheight() + x = (screen_w - win_w) // 2 + y = (screen_h - win_h) // 2 + self.root.geometry(f"+{x}+{y}") + + def run_on_ui_thread(self, func, *args, **kwargs): + """将函数调度到主线程执行,确保线程安全""" + self.root.after(0, lambda: func(*args, **kwargs)) + + def t(self, key): + return self.T.get(self.lang, self.T['zh']).get(key, key) + + def tf(self, key, **kwargs): + try: + return self.t(key).format(**kwargs) + except Exception: + return self.t(key) + + def is_placeholder_vin(self, value): + return value in ( + self.T['zh'].get('vin_placeholder'), + self.T['en'].get('vin_placeholder'), + ) + + def toggle_lang(self): + self.lang = 'en' if self.lang == 'zh' else 'zh' + self.btn_lang_switch.config(text=self.t('lang_en') if self.lang == 'zh' else self.t('lang_zh')) + self._refresh_ui_texts() + self.log(self.t('log_lang_changed'), "INFO") + + def toggle_theme(self): + if self.theme == 'dark': + self.colors = dict(self.colors_light) + self.theme = 'light' + self.btn_theme_switch.config(text=self.t('theme_dark')) + else: + self.colors = dict(self.colors_dark) + self.theme = 'dark' + self.btn_theme_switch.config(text=self.t('theme_light')) + self._apply_theme() + + def _apply_theme(self): + c = self.colors + self.root.configure(bg=c['bg_dark']) + style = ttk.Style() + style.configure('TFrame', background=c['bg_dark']) + style.configure('TLabel', background=c['bg_dark'], foreground=c['text']) + style.configure('TLabelframe', background=c['bg_dark'], foreground=c['text']) + style.configure('TLabelframe.Label', background=c['bg_dark'], foreground=c['accent']) + style.configure('TProgressbar', background=c['accent'], troughcolor=c['bg_light'], borderwidth=0) + self.log_text.tag_config('INFO', foreground='#74b9ff') + self.log_text.tag_config('SUCCESS', foreground='#55efc4') + self.log_text.tag_config('ERROR', foreground='#ff7675') + self.log_text.tag_config('WARNING', foreground='#ffeaa7') + self.log_text.tag_config('CMD', foreground='#a29bfe') + if self.theme == 'light': + self.log_text.configure(bg='#ffffff', fg='#2d3436') + else: + self.log_text.configure(bg='#2d2d3d', fg='#e0e0e0') + + def _render_hint_lines(self): + if not hasattr(self, 'hint_lines_frame'): + return + for child in self.hint_lines_frame.winfo_children(): + child.destroy() + for line in self.t('hint_lines'): + tk.Label(self.hint_lines_frame, + text=line, + font=('Microsoft YaHei', 8), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark'], + justify=tk.LEFT, + anchor='w', + wraplength=190).pack(anchor='w', fill=tk.X, pady=1) + + def _refresh_ui_texts(self): + t = self.t + widgets = [ + (getattr(self, 'title_label', None), 'title', None), + (getattr(self, 'pwd_query_label', None), 'pwd_query_label', None), + (getattr(self, 'btn_permission', None), 'btn_permission', None), + (getattr(self, 'btn_voice_patch', None), 'btn_voice_patch', None), + (getattr(self, 'btn_push', None), 'btn_push', None), + (getattr(self, 'btn_install_all', None), 'btn_install', None), + (getattr(self, 'btn_language', None), 'btn_language', None), + (getattr(self, 'btn_timezone', None), 'btn_timezone', None), + (getattr(self, 'btn_settings', None), 'btn_settings', None), + (getattr(self, 'btn_reboot', None), 'btn_reboot', None), + (getattr(self, 'btn_exit', None), 'btn_disable_upgrade', None), + (getattr(self, 'btn_clear', None), 'btn_clear_log', None), + (getattr(self, 'btn_query_pwd', None), 'btn_query_pwd', None), + (getattr(self, 'btn_debug_extract', None), 'btn_debug_extract', None), + (getattr(self, 'btn_debug_boot', None), 'btn_debug_boot', None), + (getattr(self, 'log_title_label', None), 'log_title', None), + (getattr(self, 'status_text', None), 'status_ready', None), + (getattr(self, 'device_label', None), 'device_label', None), + (getattr(self, 'vin_label_title', None), 'vin_label', None), + (getattr(self, 'auth_label_title', None), 'auth_label', None), + (getattr(self, 'btn_refresh', None), 'btn_refresh', None), + (getattr(self, 'btn_install_driver', None), 'btn_install_driver', None), + (getattr(self, 'hint_label', None), 'hint_factory', None), + (getattr(self, 'vin_query_hint_label', None), 'vin_query_hint', None), + (getattr(self, 'hotspot_icon_label', None), 'hotspot_icon', None), + (getattr(self, 'hotspot_title_label', None), 'hotspot_title', None), + (getattr(self, 'btn_hotspot', None), 'hotspot_start', None), + (getattr(self, 'hint_icon_label', None), 'hint_icon', None), + (getattr(self, 'hint_title_label', None), 'hint_title', None), + ] + for w, key, _ in widgets: + if not w: + continue + text = t(key) + if key == 'title': + text = "🚀 " + text + w.config(text=text) + self.btn_theme_switch.config(text=t('theme_light') if self.theme == 'dark' else t('theme_dark')) + self.btn_lang_switch.config(text=t('lang_en') if self.lang == 'zh' else t('lang_zh')) + if self.is_placeholder_vin(self.vin_input.get()): + self.vin_input.delete(0, tk.END) + self.vin_input.insert(0, t('vin_placeholder')) + self._render_hint_lines() + self.refresh_hotspot_display() + if self.vin: + self._update_device_status_impl(self.device_connected, self.vin, + getattr(self, '_last_authorized', False)) + + def _sanitize_user_log_message(self, message): + """Hide low-level commands, paths, package names, and APK names in normal logs. + VIN and vehicle names are operator-facing identifiers and are intentionally kept visible. + """ + text = str(message) + replacements = [ + (r'com\.[\w.\-]+', '相关应用'), + (r'cn\.[\w.\-]+', '相关应用'), + (r'[\w.\-]+\.apk', '文件'), + (r'[\w.\-]+\.img', '文件'), + (r'EZ60_resource\.dat', '资源文件'), + (r'package\.bin', '资源文件'), + (r'7za(?:\.exe)?', '资源工具'), + (r'adb(?:\.exe)?', '设备连接工具'), + (r'fastboot(?:\.exe)?', '设备工具'), + (r'/debug_ramdisk/su(?:\s+-c)?', '权限操作'), + (r'MazdaEZ60VoiceEnglish-1\.2-Aemeth\.zip', '补丁文件'), + (r'enable_install\.zip', '补丁文件'), + (r'[\w.\-]+\.zip', '补丁文件'), + (r'module\.prop', '补丁配置'), + (r'/data/adb/modules/[A-Za-z0-9_.-]+', '补丁目录'), + (r'/data/local/tmp/[A-Za-z0-9_./-]+', '临时目录'), + (r'init_boot', '系统资源'), + (r'pm\s+\S+', '系统操作'), + (r'cmd\s+overlay\s+\S+', '系统配置'), + (r'(?/dev/null 2>&1 + cmd package uninstall -k com.topjohnwu.magisk >/dev/null 2>&1 + for user in 0 $(pm list users 2>/dev/null | sed -n 's/.*{\([0-9][0-9]*\):.*/\1/p'); do + pm uninstall -k --user "$user" com.topjohnwu.magisk >/dev/null 2>&1 + pm uninstall --user "$user" com.topjohnwu.magisk >/dev/null 2>&1 + pm disable-user --user "$user" com.topjohnwu.magisk >/dev/null 2>&1 + done + rm -f /data/adb/magisk.apk /data/adb/stub.apk /data/adb/manager.apk >/dev/null 2>&1 + rm -f /data/adb/magisk/magisk.apk /data/adb/magisk/stub.apk /data/adb/magisk/manager.apk >/dev/null 2>&1 + sleep 10 + done +) & +""" + stage_dir = "/data/local/tmp/ez60_magisk_manager_cleanup" + with tempfile.TemporaryDirectory(prefix="ez60_magisk_cleanup_") as tmp: + local_prop = Path(tmp) / "module.prop" + local_service = Path(tmp) / "service.sh" + local_prop.write_text(module_prop, encoding="utf-8") + local_service.write_text(service_sh, encoding="utf-8", newline="\n") + + commands = [ + f"rm -rf {self.shell_quote(module_dir)} {self.shell_quote(stage_dir)}", + f"mkdir -p {self.shell_quote(module_dir)} {self.shell_quote(stage_dir)}", + f"chmod 777 {self.shell_quote(stage_dir)}", + ] + for command in commands: + ok, output = self.run_root_command(command, timeout=60) + if not ok: + if self.debug_mode: + if output: + self.log(f"MAGISK CLEANUP MODULE: {output}", "CMD") + self.log(self.t('log_magisk_cleanup_module_failed'), "WARNING") + return False + + for local_path, remote_name in ((local_prop, "module.prop"), (local_service, "service.sh")): + ok, output = self.run_adb_command(f'adb -d push "{local_path}" {stage_dir}/{remote_name}') + if not ok: + if self.debug_mode: + if output: + self.log(f"MAGISK CLEANUP MODULE PUSH: {output}", "CMD") + self.log(self.t('log_magisk_cleanup_module_failed'), "WARNING") + return False + + commands = [ + f"cp -f {self.shell_quote(stage_dir + '/module.prop')} {self.shell_quote(module_dir + '/module.prop')}", + f"cp -f {self.shell_quote(stage_dir + '/service.sh')} {self.shell_quote(module_dir + '/service.sh')}", + f"chmod 755 {self.shell_quote(module_dir)}", + f"chmod 644 {self.shell_quote(module_dir + '/module.prop')}", + f"chmod 755 {self.shell_quote(module_dir + '/service.sh')}", + f"rm -rf {self.shell_quote(stage_dir)}", + ] + for command in commands: + ok, output = self.run_root_command(command, timeout=60) + if not ok: + if self.debug_mode: + if output: + self.log(f"MAGISK CLEANUP MODULE: {output}", "CMD") + self.log(self.t('log_magisk_cleanup_module_failed'), "WARNING") + return False + if self.debug_mode: + self.log(self.t('log_magisk_cleanup_module_done'), "INFO") + return True + + def read_module_id_from_zip(self, zip_path): + try: + with zipfile.ZipFile(zip_path, 'r') as zf: + prop_name = self._find_module_prop_in_zip(zf) + if not prop_name: + return "" + raw = zf.read(prop_name) + for line in raw.decode('utf-8', errors='replace').splitlines(): + line = line.strip() + if line.startswith("id="): + return line.split("=", 1)[1].strip() + except Exception: + return "" + return "" + + def _find_module_prop_in_zip(self, zf): + names = zf.namelist() + normalized = {} + for name in names: + clean = name.replace("\\", "/").lstrip("./") + normalized[clean] = name + if "module.prop" in normalized: + return normalized["module.prop"] + + candidates = [] + for clean, original in normalized.items(): + parts = [part for part in clean.split("/") if part] + if len(parts) == 2 and parts[-1] == "module.prop": + candidates.append((len(parts), original)) + if candidates: + candidates.sort() + return candidates[0][1] + return "" + + def install_magisk_module_zip(self, zip_path): + zip_path = Path(zip_path) + mod_id = self.read_module_id_from_zip(zip_path) + if not mod_id: + return False, self.t('err_module_id_missing') + if not zip_path.exists(): + return False, self.tf('err_extract_detail', error=f"{zip_path} not found") + + device_stage_dir = "/data/local/tmp/ez60_voice_modules" + device_zip = f"{device_stage_dir}/{mod_id}.zip" + device_module = f"/data/adb/modules/{mod_id}" + + self.log(self.t('log_module_install_start'), "INFO") + commands = [ + f"rm -rf {self.shell_quote(device_module)}", + f"mkdir -p {self.shell_quote(device_stage_dir)} {self.shell_quote(device_module)}", + f"chmod 777 {self.shell_quote(device_stage_dir)}", + ] + for command in commands: + ok, output = self.run_root_command(command, timeout=60) + if not ok: + return False, self.tf('log_root_cmd_failed', error=output) + + ok, output = self.run_adb_command(f'adb -d push "{zip_path}" {device_zip}') + if not ok: + return False, self.tf('log_push_file_failed', file=zip_path.name, error=output) + + install_commands = [ + f"unzip -oq {self.shell_quote(device_zip)} -x 'META-INF/*' -d {self.shell_quote(device_module)}", + f"find {self.shell_quote(device_module)} -type d -exec chmod 755 {{}} \\;", + f"find {self.shell_quote(device_module)} -type f -exec chmod 644 {{}} \\;", + f"find {self.shell_quote(device_module)} -type f -name '*.sh' -exec chmod 755 {{}} \\;", + f"rm -f {self.shell_quote(device_zip)}", + ] + for command in install_commands: + ok, output = self.run_root_command(command, timeout=300) + if not ok: + return False, self.tf('log_root_cmd_failed', error=output) + + self.log(self.t('log_module_install_done'), "INFO") + return True, mod_id + + def check_package_extracted(self): + """检查语言包是否已解压""" + has_app = self.apps_dir and self.apps_dir.exists() and len(list(self.apps_dir.glob("*.apk"))) > 0 + if has_app: + ok, reason = self._validate_extracted_apks() + if not ok: + self.log(self.tf('log_cache_invalid', reason=reason), "ERROR") + self._clear_extracted_cache() + return False + return has_app + + def _validate_extracted_apks(self): + if not self.apps_dir or not self.apps_dir.exists(): + return False, self.t('err_missing_apps') + apks = list(self.apps_dir.glob("*.apk")) + if not apks: + return False, self.t('err_empty_apps') + zero_apks = [apk.name for apk in apks if apk.stat().st_size <= 0] + if zero_apks: + preview = ", ".join(zero_apks[:5]) + suffix = "..." if len(zero_apks) > 5 else "" + return False, self.tf('err_zero_apks', files=f"{preview}{suffix}") + return True, "" + + def find_voice_patch_modules(self): + if not self.temp_dir or not self.temp_dir.exists(): + return [] + + search_roots = [] + if self.apps_dir and self.apps_dir.exists(): + search_roots.extend([self.apps_dir.parent, self.apps_dir]) + search_roots.append(self.temp_dir) + + found = [] + seen_roots = set() + for module_name in self.voice_patch_module_names: + module_path = None + for root in search_roots: + try: + resolved = Path(root).resolve() + except Exception: + resolved = Path(root) + root_key = (module_name, resolved) + if root_key in seen_roots: + continue + seen_roots.add(root_key) + direct = Path(root) / module_name + if direct.exists(): + module_path = direct + break + if not module_path: + matches = list(self.temp_dir.rglob(module_name)) + if matches: + module_path = matches[0] + if not module_path: + return [] + found.append(module_path) + return found + + def validate_voice_patch_modules(self, module_zips): + if len(module_zips) != len(self.voice_patch_module_names): + return False, self.t('err_module_prop_missing') + module_ids = [] + for zip_path in module_zips: + mod_id = self.read_module_id_from_zip(zip_path) + if not mod_id: + return False, self.tf('err_module_zip_invalid', file=Path(zip_path).name) + module_ids.append(mod_id) + if len(set(module_ids)) != len(module_ids): + return False, self.t('err_duplicate_module_id') + return True, "" + + def _cache_dir_path(self): + local_appdata = os.environ.get('LOCALAPPDATA', os.path.expanduser('~\\AppData\\Local')) + return Path(local_appdata) / ".cache" / "system" / ".android" / self.CACHE_DIR_NAME + + def _runtime_cache_dir_path(self): + local_appdata = os.environ.get('LOCALAPPDATA', os.path.expanduser('~\\AppData\\Local')) + return Path(local_appdata) / ".cache" / "system" / ".android" / "apps_cache_Mazda_EZ60_runtime" + + def _remove_dir_tree(self, path): + if not path or not path.exists(): + return + for _ in range(3): + try: + if sys.platform == 'win32': + subprocess.run( + f'attrib -r -s -h "{path}" /s /d', + shell=True, + capture_output=True, + creationflags=subprocess.CREATE_NO_WINDOW + ) + shutil.rmtree(path, ignore_errors=False) + return + except Exception: + time.sleep(0.3) + shutil.rmtree(path, ignore_errors=True) + + def _clear_extracted_cache(self): + cache_dirs = [] + if self.temp_dir: + cache_dirs.append(self.temp_dir) + if self.runtime_cache_dir: + cache_dirs.append(self.runtime_cache_dir) + cache_dirs.append(self._cache_dir_path()) + cache_dirs.append(self._runtime_cache_dir_path()) + + seen = set() + for cache_dir in cache_dirs: + try: + resolved = cache_dir.resolve() + except Exception: + resolved = cache_dir + if resolved in seen: + continue + seen.add(resolved) + self._remove_dir_tree(cache_dir) + + time.sleep(0.2) + self.apps_dir = None + self.voice_module_zips = [] + self.temp_dir = None + self.runtime_cache_dir = None + + def _schedule_cache_cleanup_after_exit(self): + if sys.platform != 'win32': + return + cache_dir = str(self._cache_dir_path()) + runtime_cache_dir = str(self._runtime_cache_dir_path()) + ps_command = ( + "Start-Sleep -Seconds 2; " + f"$paths = @('{cache_dir}', '{runtime_cache_dir}'); " + "foreach ($p in $paths) { " + "if (Test-Path -LiteralPath $p) { " + "attrib -r -s -h $p /s /d 2>$null; " + "Remove-Item -LiteralPath $p -Recurse -Force -ErrorAction SilentlyContinue " + "} " + "}" + ) + try: + subprocess.Popen( + ['powershell', '-NoProfile', '-ExecutionPolicy', 'Bypass', '-WindowStyle', 'Hidden', '-Command', ps_command], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + stdin=subprocess.DEVNULL, + creationflags=subprocess.CREATE_NO_WINDOW + ) + except Exception: + pass + + def cleanup_cache_on_exit(self): + self._clear_extracted_cache() + self._schedule_cache_cleanup_after_exit() + + def on_close(self): + self.cleanup_cache_on_exit() + self.root.destroy() + + def _format_extract_error(self, err_msg, return_code): + text = (err_msg or "").lower() + if any(marker in text for marker in ( + "wrong password", + "incorrect password", + "password is incorrect", + "data error in encrypted file", + "can not open encrypted archive", + )): + return self.t('err_extract_wrong_password') + if "data error" in text: + return self.t('err_extract_data') + if "headers error" in text or "unexpected end" in text: + return self.t('err_extract_headers') + if err_msg.strip(): + return self.tf('err_extract_detail', error=err_msg.strip()[:300]) + return self.tf('err_extract_code', code=return_code) + + def _decode_7z_output(self, *outputs): + """解码 7za 输出,兼容中文 Windows 控制台编码。""" + parts = [] + for output in outputs: + if not output: + continue + for enc in ('gbk', 'utf-8'): + try: + parts.append(output.decode(enc, errors='replace')) + break + except Exception: + continue + return ''.join(parts).strip() + + def _extract_7za_with_progress(self, archive_path=None, output_dir=None, password=DEFAULT_EXTRACT_PASSWORD, progress_cb=None): + """流式运行 7za 并解析百分比输出。""" + archive_path = archive_path or self.package_file + output_dir = output_dir or self.temp_dir + if password is DEFAULT_EXTRACT_PASSWORD: + password = self.extract_password + cmd = [self.sz, 'x', str(archive_path)] + if password: + cmd.append(f'-p{password}') + cmd.extend([f'-o{output_dir}', '-y']) + supports_progress = getattr(self, '_seven_zip_supports_progress_stream', lambda: False)() + if supports_progress: + cmd.extend(['-bsp1', '-bso0', '-bse1']) + + if getattr(self, 'debug_mode', False): + self.log(f"7ZA CMD: {subprocess.list2cmdline(cmd)}", "CMD") + + proc = subprocess.Popen( + cmd, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + stdin=subprocess.DEVNULL, + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + + output = bytearray() + progress_window = bytearray() + last_percent = -1 + + while True: + chunk = proc.stdout.read(1) if proc.stdout else b"" + if not chunk: + if proc.poll() is not None: + break + time.sleep(0.05) + continue + + output.extend(chunk) + progress_window.extend(chunk) + if len(progress_window) > 1024: + del progress_window[:-1024] + if not self.debug_mode and len(output) > 60000: + del output[:-60000] + + matches = re.findall(rb"(\d{1,3})%", bytes(progress_window[-512:])) + if matches: + percent = min(100, int(matches[-1])) + if percent != last_percent: + last_percent = percent + if progress_cb: + progress_cb(percent, 100, self.t('progress_loading')) + else: + self.update_progress(percent, 100, self.t('progress_loading')) + + return_code = proc.wait() + decoded_output = self._decode_7z_output(bytes(output)) + + if getattr(self, 'debug_mode', False): + self.log(f"7ZA RET: {return_code}", "CMD" if return_code == 0 else "ERROR") + if decoded_output.strip(): + self.log(f"7ZA OUTPUT:\n{decoded_output.strip()}", "CMD" if return_code == 0 else "ERROR") + + return return_code, decoded_output + + def _seven_zip_supports_progress_stream(self): + """检测当前 7za 是否支持进度流参数。""" + try: + result = subprocess.run( + [self.sz], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + output = self._decode_7z_output(result.stdout, result.stderr) + return '-bs{o|e|p}' in output + except Exception: + return False + + def extract_package_silent(self): + """静默解压语言包(带进度)—— 逸动版仅处理 app 目录""" + if not self.package_file.exists(): + self.log(self.tf('log_package_missing', path=self.package_file), "ERROR") + return False + + if not self.extract_password: + self.log(self.t('log_extract_password_missing'), "ERROR") + return False + + if not os.path.exists(self.sz): + self.log(self.tf('log_7za_missing', path=self.sz), "ERROR") + return False + + try: + # 使用用户目录,无需管理员权限 + hidden_path = self._cache_dir_path().parent + hidden_path.mkdir(parents=True, exist_ok=True) + + self.temp_dir = self._cache_dir_path() + + # 如果已存在,先清理 + if self.temp_dir.exists(): + shutil.rmtree(self.temp_dir, ignore_errors=True) + time.sleep(0.5) + + self.temp_dir.mkdir(parents=True, exist_ok=True) + + # 设置隐藏属性(Windows) + if sys.platform == 'win32': + subprocess.run(f'attrib +h "{self.temp_dir.parent}"', shell=True, capture_output=True) + subprocess.run(f'attrib +h "{self.temp_dir}"', shell=True, capture_output=True) + + self.log(self.t('log_extracting'), "INFO") + + self.update_progress(0, 100, self.t('progress_loading')) + return_code, err_msg = self._extract_7za_with_progress() + if return_code != 0: + self.log(self._format_extract_error(err_msg, return_code), "ERROR") + self._clear_extracted_cache() + return False + self.update_progress(100, 100, self.t('progress_loaded')) + + # 查找 app 目录(逸动无 priv-app) + self.apps_dir = None + + app_candidates = list(self.temp_dir.rglob("apps")) + if app_candidates: + self.apps_dir = app_candidates[0] + + if not self.apps_dir: + self.log(self.t('log_apps_missing'), "WARNING") + self._clear_extracted_cache() + return False + + apk_count = len(list(self.apps_dir.glob("*.apk"))) + ok, reason = self._validate_extracted_apks() + if not ok: + self.log(self.tf('log_resource_invalid', reason=reason), "ERROR") + self._clear_extracted_cache() + return False + self.log(self.tf('log_resource_ready', count=apk_count), "SUCCESS") + return True + + except Exception as e: + if getattr(self, 'debug_mode', False): + self.log(self.tf('log_data_prepare_failed', error=str(e)), "ERROR") + import traceback + self.log(traceback.format_exc(), "ERROR") + else: + self.log(self.t('log_resource_failed'), "ERROR") + self._clear_extracted_cache() + return False + + def check_environment(self): + """检查环境""" + # 修改hosts文件 + self.modify_hosts() + # 刷新热点显示 + self.refresh_hotspot_display() + try: + result = subprocess.run(f'{self.adb} version', shell=True, capture_output=True, text=True) + if result.returncode == 0: + self.refresh_device_status() + if not self.package_file.exists(): + self.log(self.t('log_no_package'), "WARNING") + if not os.path.exists(self.fastboot): + self.log(self.t('log_no_fastboot'), "WARNING") + else: + self.log(self.t('log_no_adb'), "ERROR") + except FileNotFoundError: + self.log(self.t('log_no_adb'), "ERROR") + self.root.after(800, self.check_fastboot_driver_on_startup) + + def _run_command_capture(self, command, timeout=30): + creationflags = subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + result = subprocess.run( + command, + capture_output=True, + text=True, + timeout=timeout, + creationflags=creationflags + ) + output = (result.stdout or "") + (result.stderr or "") + return result.returncode, output.strip() + + def ask_ok_cancel_on_ui_thread(self, title, message): + result = {"value": False} + done = threading.Event() + + def prompt(): + try: + result["value"] = messagebox.askokcancel(title, message, parent=self.root) + finally: + done.set() + + self.run_on_ui_thread(prompt) + done.wait() + return result["value"] + + def is_fastboot_driver_installed(self): + if sys.platform != 'win32': + return True, "" + try: + code, output = self._run_command_capture(['pnputil', '/enum-drivers'], timeout=40) + if code != 0: + return False, output or "pnputil enum failed" + normalized = output.lower() + installed = ( + 'android_winusb.inf'.lower() in normalized + or 'android bootloader interface' in normalized + or 'android adb interface' in normalized + or 'fastboot' in normalized + ) + return installed, output + except Exception as e: + return False, str(e) + + def _install_driver_with_uac(self, inf_path): + quoted_inf = str(inf_path).replace("'", "''") + ps_command = ( + "$proc = Start-Process -FilePath pnputil " + "-ArgumentList @('/add-driver', '{0}', '/install') " + "-Verb RunAs -WindowStyle Hidden -PassThru; " + "if ($null -eq $proc) {{ exit 1 }}; " + "$proc.WaitForExit(); " + "Write-Output $proc.ExitCode" + ).format(quoted_inf) + creationflags = subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + result = subprocess.run( + ['powershell', '-NoProfile', '-Command', ps_command], + capture_output=True, + text=True, + creationflags=creationflags + ) + output = ((result.stdout or "") + (result.stderr or "")).strip() + exit_code = None + for line in reversed(output.splitlines()): + text = line.strip() + if text.isdigit(): + exit_code = int(text) + break + if exit_code is None and result.returncode == 0: + exit_code = 0 + return exit_code == 0, output or f"powershell exit={result.returncode}" + + def install_fastboot_driver(self, prompt=True): + def worker(): + try: + if not self.driver_inf.exists(): + detail = f"{self.driver_inf} not found" + self.log(self.tf('log_driver_install_failed', error=detail), "ERROR") + self.run_on_ui_thread( + lambda: messagebox.showerror( + self.t('msg_driver_missing_title'), + self.tf('msg_driver_install_failed', error=detail), + parent=self.root + ) + ) + return + + if prompt: + confirmed = self.ask_ok_cancel_on_ui_thread( + self.t('msg_driver_missing_title'), + self.t('msg_driver_install_confirm') + ) + if not confirmed: + return + + self.log(self.t('log_driver_install_start'), "STATUS") + ok, output = self._install_driver_with_uac(self.driver_inf) + if not ok: + detail = output or "unknown error" + self.log(self.tf('log_driver_install_failed', error=detail), "ERROR") + self.run_on_ui_thread( + lambda: messagebox.showerror( + self.t('msg_driver_missing_title'), + self.tf('msg_driver_install_failed', error=detail), + parent=self.root + ) + ) + return + + self.log(self.t('log_driver_install_success'), "SUCCESS") + self.run_on_ui_thread( + lambda: messagebox.showinfo( + self.t('msg_driver_missing_title'), + self.t('msg_driver_install_done'), + parent=self.root + ) + ) + except Exception as e: + self.log(self.tf('log_driver_install_failed', error=str(e)), "ERROR") + self.run_on_ui_thread( + lambda: messagebox.showerror( + self.t('msg_driver_missing_title'), + self.tf('msg_driver_install_failed', error=str(e)), + parent=self.root + ) + ) + + threading.Thread(target=worker, daemon=True).start() + + def check_fastboot_driver_on_startup(self): + if self.driver_prompted: + return + self.driver_prompted = True + + def worker(): + installed, detail = self.is_fastboot_driver_installed() + if installed: + return + if self.debug_mode and detail: + self.log(detail[:500], "CMD") + + def notify_and_install(): + messagebox.showinfo( + self.t('msg_driver_missing_title'), + self.t('msg_driver_missing'), + parent=self.root + ) + self.install_fastboot_driver(prompt=False) + + self.run_on_ui_thread(notify_and_install) + + threading.Thread(target=worker, daemon=True).start() + + def refresh_device_status(self, force=False): + """刷新设备状态 —— 逸动版使用 ca.car.vin 获取 VIN""" + # 防止并发刷新(手动点击「检查」时强制忽略锁) + if self._refreshing and not force: + return + self._refreshing = True + + def refresh(): + was_connected = self.device_connected + + # 检查设备连接 + result = subprocess.run(f'{self.adb} -d devices', shell=True, capture_output=True, text=True) + lines = result.stdout.strip().split('\n') + devices = [line for line in lines[1:] if line.strip() and 'device' in line and 'offline' not in line] + + if devices: + if not was_connected: + self.log(self.t('log_device_connected'), "SUCCESS") + + # 获取VIN —— 逸动车型使用 ca.car.vin + success, vin_output = self.run_adb_shell( + 'settings get system ca.car.vin') + vin = vin_output.strip() if success else '' + + if vin: + self.log(self.tf('log_vin', vin=vin), "SUCCESS") + authorized = self.check_authorization(vin) + self.update_device_status(True, vin, authorized) + else: + self.log(self.t('log_vin_unavailable'), "WARNING") + self.update_device_status(True, None, False) + else: + if was_connected: + self.log(self.t('log_device_disconnected'), "WARNING") + self.update_device_status(False) + + self._refreshing = False + + threading.Thread(target=refresh, daemon=True).start() + + def query_authorization_info(self, vin): + url = f"{self.api_url}?vin={vin}" + req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + payload = data.get('data', {}) if isinstance(data, dict) else {} + vehicle_name = payload.get('vehicleName') or payload.get('vehicle_name') or "" + vehicle_name = str(vehicle_name).strip() + if data.get('authorized') is True and vehicle_name: + self.vehicle_name = vehicle_name + return data.get('authorized') is True, vehicle_name, data + + def _post_json(self, url, payload, timeout=10): + body = json.dumps(payload).encode('utf-8') + req = Request( + url, + data=body, + method='POST', + headers={ + 'User-Agent': 'Mozilla/5.0', + 'Content-Type': 'application/json', + }, + ) + with urlopen(req, timeout=timeout) as response: + return json.loads(response.read().decode('utf-8')) + + def check_authorization(self, vin): + """检查授权""" + if self.debug_mode: + self.log(self.t('log_debug_skip_auth'), "WARNING") + return True + self.log(self.t('log_auth_checking'), "SUCCESS") + + try: + authorized, vehicle_name, _ = self.query_authorization_info(vin) + if authorized: + self.log(self.t('log_auth_success'), "SUCCESS") + if vehicle_name: + self.log(self.tf('log_vehicle_name', vehicle=vehicle_name), "SUCCESS") + return True + self.log(self.t('log_auth_failed'), "ERROR") + return False + + except Exception: + if self.debug_mode: + import traceback + self.log(traceback.format_exc(), "ERROR") + self.log(self.t('log_auth_failed'), "ERROR") + return False + + def fetch_package_password(self): + """从服务端获取资源包解压密码""" + if not self.vin: + self.log(self.t('log_need_adb'), "ERROR") + return False + + try: + vehicle_name = self.vehicle_name + if not vehicle_name: + authorized, vehicle_name, _ = self.query_authorization_info(self.vin) + if not authorized: + self.log(self.t('log_auth_failed'), "ERROR") + return False + if not vehicle_name: + self.log(self.t('log_no_vehicle_name'), "ERROR") + return False + + pwd_api_url = "https://api.changan.softwindy.cn/api/authorizations/package-key" + query = urlencode({ + "vin": self.vin, + "vehicleName": vehicle_name, + }) + url = f"{pwd_api_url}?{query}" + if self.debug_mode: + self.log(f"PACKAGE KEY URL: {url}", "CMD") + req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + + if data.get('success') and 'data' in data and 'password' in data['data']: + self.extract_password = data['data']['password'] + if self.debug_mode: + self.log("PACKAGE KEY: password received", "CMD") + return True + else: + if self.debug_mode: + self.log(f"PACKAGE KEY RESPONSE: {data}", "CMD") + self.log(self.tf('log_data_prepare_failed', error=data.get('message', 'unknown error')), "ERROR") + return False + + except Exception as e: + if self.debug_mode: + import traceback + self.log(traceback.format_exc(), "ERROR") + self.log(self.tf('log_data_prepare_failed', error=str(e)), "ERROR") + return False + + def fetch_runtime_password(self): + """runtime.dat 默认复用 package-key 返回的资源密码。""" + if self.runtime_password: + return True + if not self.extract_password: + if not self.fetch_package_password(): + return False + self.runtime_password = self.extract_password + return True + + def extract_runtime_base_apk(self): + """解压 runtime.dat 到临时缓存,产物必须是 base.apk。""" + if not self.runtime_file.exists(): + self.log(self.tf('log_runtime_missing', path=self.runtime_file), "ERROR") + return None + if not os.path.exists(self.sz): + self.log(self.tf('log_7za_missing', path=self.sz), "ERROR") + return None + if not self.fetch_runtime_password(): + return None + + cache_dir = self._runtime_cache_dir_path() + self.runtime_cache_dir = cache_dir + if cache_dir.exists(): + self._remove_dir_tree(cache_dir) + time.sleep(0.2) + cache_dir.mkdir(parents=True, exist_ok=True) + if sys.platform == 'win32': + subprocess.run(f'attrib +h "{cache_dir.parent}"', shell=True, capture_output=True) + subprocess.run(f'attrib +h "{cache_dir}"', shell=True, capture_output=True) + + def runtime_progress(percent, total, label): + self.update_progress(percent, total, self.t('progress_prepare_runtime'), is_push=True) + + return_code, err_msg = self._extract_7za_with_progress( + self.runtime_file, + cache_dir, + self.runtime_password, + runtime_progress + ) + if return_code != 0: + text = (err_msg or "").lower() + if "password" in text or "data error" in text: + return_code, err_msg = self._extract_7za_with_progress( + self.runtime_file, + cache_dir, + None, + runtime_progress + ) + if return_code != 0: + self.log(self._format_extract_error(err_msg, return_code), "ERROR") + return None + + base_apks = list(cache_dir.rglob("base.apk")) + if not base_apks: + any_apks = list(cache_dir.rglob("*.apk")) + if len(any_apks) == 1: + target = cache_dir / "base.apk" + shutil.move(str(any_apks[0]), str(target)) + base_apks = [target] + if not base_apks or base_apks[0].stat().st_size <= 0: + self.log(self.t('log_base_apk_invalid'), "ERROR") + return None + self.log(self.t('log_runtime_ready'), "INFO") + return base_apks[0] + + def install_runtime_base_apk(self, base_apk): + """安装 runtime 解出的 base.apk;setprop 必须通过自动密码 shell 执行。""" + temp_apk_path = "/data/local/tmp/base.apk" + self.run_adb_shell('mkdir -p /data/local/tmp', timeout=20) + ok, err = self.run_adb_shell('setprop vecentek.model 1', timeout=20) + if not ok: + return False, self.tf('err_install_failed', error=err) + + ok, err = self.run_adb_command(f'adb -d push "{base_apk}" {temp_apk_path}') + if not ok: + return False, self.tf('err_push_failed', error=err) + + ok, err = self.run_adb_shell(f'pm install -r -d -f {temp_apk_path}', timeout=120) + self.run_adb_shell(f'rm -f {temp_apk_path}', timeout=20) + if not ok: + return False, self.tf('err_install_failed', error=err) + return True, "" + + def push_single_apk(self, apk_path, apk_name): + """推送单个APK到设备并安装,返回 (成功, 错误信息)""" + temp_apk_path = f"/data/local/tmp/{apk_name}.apk" + + ok, err = self.run_adb_command(f'adb -d push "{apk_path}" {temp_apk_path}') + if not ok: + return False, self.tf('err_push_failed', error=err) + + ok, err = self.run_adb_shell(f'pm install -r -d {temp_apk_path}') + self.run_adb_shell(f'rm -f {temp_apk_path}') + if not ok: + return False, self.tf('err_install_failed', error=err) + + return True, "" + + def collect_boot_device_info(self): + info = { + "vin": self.vin or "", + "toolVersion": self.tool_version, + } + ok, output = self.run_adb_command('adb -d get-serialno') + if ok: + info["adbSerial"] = output.strip() + + props = { + "ro.serialno": "roSerialno", + "ro.boot.serialno": "roBootSerialno", + "ro.product.manufacturer": "manufacturer", + "ro.product.model": "model", + "ro.product.device": "device", + "ro.build.fingerprint": "fingerprint", + } + for prop, key in props.items(): + ok, output = self.run_adb_shell(f'getprop {prop}') + if ok: + info[key] = output.strip() + return {k: str(v).strip() for k, v in info.items() if str(v).strip()} + + def _decode_key_material(self, key_text): + text = str(key_text).strip() + if text.startswith("raw:"): + key = text.split(":", 1)[1].encode("utf-8") + if len(key) != 32: + raise ValueError("key must decode to 32 bytes") + return key + if text.startswith("sha256:"): + return bytes.fromhex(text.split(":", 1)[1]) + if len(text) == 64 and all(c in '0123456789abcdefABCDEF' for c in text): + return bytes.fromhex(text) + raw = text.encode('utf-8') + if len(raw) == 32: + return raw + padded = text + ("=" * (-len(text) % 4)) + return base64.urlsafe_b64decode(padded.encode('ascii')) + + def fetch_permission_resource_key(self): + """通过 boot challenge 协议获取 EZ60 init_boot 资源解密密钥。""" + if self.permission_resource_key: + return True + if not self.vin: + self.log(self.t('log_need_adb'), "ERROR") + return False + + try: + device_info = self.collect_boot_device_info() + challenge_data = self._post_json(self.boot_challenge_api_url, { + "vin": self.vin, + "toolVersion": self.tool_version, + "deviceInfo": device_info, + }) + challenge_payload = challenge_data.get('data', {}) if isinstance(challenge_data, dict) else {} + challenge_id = str(challenge_payload.get('challengeId') or '').strip() + nonce = str(challenge_payload.get('nonce') or '').strip() + if not challenge_data.get('success') or not challenge_id or not nonce: + self.log(self.tf('log_boot_challenge_failed', error=challenge_data.get('message', 'unknown error')), "ERROR") + return False + + key_data = self._post_json(self.boot_key_api_url, { + "vin": self.vin, + "challengeId": challenge_id, + "nonce": nonce, + "timestamp": int(time.time() * 1000), + "toolVersion": self.tool_version, + "deviceInfo": device_info, + }) + key_payload = key_data.get('data', {}) if isinstance(key_data, dict) else {} + key_text = key_payload.get('sessionKey') + if not key_data.get('success') or not key_text: + self.log(self.tf('log_boot_key_failed', error=key_data.get('message', 'unknown error')), "ERROR") + return False + key_bytes = self._decode_key_material(key_text) + if len(key_bytes) != 32: + self.log(self.t('log_boot_key_len_error'), "ERROR") + return False + self.permission_resource_key = key_bytes + self.log(self.t('log_boot_key_success'), "INFO") + return True + except Exception as e: + if self.debug_mode: + import traceback + self.log(traceback.format_exc(), "ERROR") + self.log(self.tf('log_boot_key_failed', error=str(e)), "ERROR") + return False + + def _parse_permission_resource_payload(self, blob): + if blob.startswith(b'EZ60R2\x00'): + header_len = struct.unpack('>I', blob[7:11])[0] + header_start = 11 + header_end = header_start + header_len + payload = json.loads(blob[header_start:header_end].decode('utf-8')) + ciphertext = blob[header_end:] + return payload, ciphertext + if blob.startswith(b'Q05R2\x00'): + header_len = struct.unpack('>I', blob[6:10])[0] + header_start = 10 + header_end = header_start + header_len + payload = json.loads(blob[header_start:header_end].decode('utf-8')) + ciphertext = blob[header_end:] + return payload, ciphertext + + payload = json.loads(blob.decode('utf-8')) + ciphertext = base64.urlsafe_b64decode(payload['ciphertext'] + "=" * (-len(payload['ciphertext']) % 4)) + return payload, ciphertext + + def decrypt_permission_resource_to_temp_file(self): + """解密 EZ60_resource.dat 到随机临时 img 文件,调用者必须尽快删除。""" + if AESGCM is None: + self.log(self.t('log_crypto_missing'), "ERROR") + return None + if not self.permission_resource_file.exists(): + self.log(self.tf('log_permission_resource_missing', path=self.permission_resource_file), "ERROR") + return None + if not self.fetch_permission_resource_key(): + return None + + try: + blob = self.permission_resource_file.read_bytes() + payload, ciphertext = self._parse_permission_resource_payload(blob) + if payload.get('format') not in ('ez60-resource-v2', 'q05-lidar-resource-v2', 'q05-lidar-resource-v1'): + self.log(self.t('log_permission_resource_format_unsupported'), "ERROR") + return None + if payload.get('cipher') != 'AES-256-GCM': + self.log(self.t('log_permission_resource_algorithm_unsupported'), "ERROR") + return None + + nonce = base64.urlsafe_b64decode(payload['nonce'] + "=" * (-len(payload['nonce']) % 4)) + aad = payload.get('aad', 'Mazda-EZ60 init_boot resource v1').encode('utf-8') + plain = AESGCM(self.permission_resource_key).decrypt(nonce, ciphertext, aad) + if payload.get('compression') == 'zlib': + plain = zlib.decompress(plain) + + expected_sha = payload.get('sha256', '').lower() + actual_sha = hashlib.sha256(plain).hexdigest() + if expected_sha and actual_sha != expected_sha: + self.log(self.t('log_permission_resource_decrypt_auth_failed'), "ERROR") + return None + + fd, temp_name = tempfile.mkstemp(prefix='ez60_', suffix='.img') + try: + with os.fdopen(fd, 'wb') as fp: + fp.write(plain) + fp.flush() + os.fsync(fp.fileno()) + finally: + plain = b'' + self.log(self.t('log_permission_resource_decrypt_ready'), "INFO") + return Path(temp_name) + except Exception as e: + if self.debug_mode: + import traceback + self.log(traceback.format_exc(), "ERROR") + self.log(self.tf('log_permission_resource_decrypt_failed', error=str(e) or e.__class__.__name__), "ERROR") + return None + + def secure_delete_file(self, path): + """尽力覆盖并删除临时镜像。""" + try: + p = Path(path) + if not p.exists(): + return + size = p.stat().st_size + with p.open('r+b') as fp: + first_chunk = min(size, 1024 * 1024) + fp.write(os.urandom(first_chunk)) + remaining = size - first_chunk + zero = b'\x00' * 1024 * 1024 + while remaining > 0: + chunk = min(remaining, len(zero)) + fp.write(zero[:chunk]) + remaining -= chunk + fp.flush() + os.fsync(fp.fileno()) + p.unlink() + self.log(self.t('log_temp_img_deleted'), "INFO") + except Exception as e: + self.log(self.tf('log_temp_img_delete_failed', error=e), "WARNING") + + def run_fastboot_command(self, args, timeout=60): + command = [self.fastboot] + list(args) + if self.debug_mode: + self.log("CMD: " + " ".join(f'"{x}"' if " " in str(x) else str(x) for x in command), "CMD") + try: + result = subprocess.run( + command, + capture_output=True, + text=True, + encoding='utf-8', + errors='replace', + timeout=timeout, + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + output = ((result.stdout or "") + "\n" + (result.stderr or "")).strip() + if result.returncode == 0: + return True, output + return False, output + except subprocess.TimeoutExpired: + return False, self.t('err_fastboot_timeout') + except Exception as e: + return False, str(e) + + def fastboot_device_connected(self, output): + for line in str(output or "").splitlines(): + parts = line.strip().split() + if len(parts) >= 2 and parts[1].lower() == "fastboot": + return True + return False + + def fastboot_output_has_okay(self, output): + text = str(output or "").upper() + return "OKAY" in text and "FAILED" not in text + + def wait_for_fastboot(self, timeout=180, interval=5): + deadline = time.time() + timeout + while time.time() < deadline: + ok, output = self.run_fastboot_command(['devices'], timeout=10) + if ok and self.fastboot_device_connected(output): + return True + time.sleep(interval) + return False + + def prepare_ez60_permission(self): + """获取权限:安装 base.apk、重启到 fastboot、刷入 init_boot、立即重启。""" + if not self.check_device_connection(): + return + if not self.vin: + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_need_vin')) + return + + answer = messagebox.askyesno( + self.t('msg_confirm_permission_title'), + self.t('msg_confirm_permission') + ) + if not answer: + return + + def worker(): + temp_img = None + permission_done = False + try: + if not self.check_authorization(self.vin): + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_auth_failed_title'), self.t('msg_device_unauthorized')) + ) + return + + self.show_progress(True, is_push=True) + self.update_progress(1, 7, self.t('progress_prepare_runtime'), is_push=True) + base_apk = self.extract_runtime_base_apk() + if not base_apk: + return + + self.update_progress(2, 7, self.t('progress_install_runtime'), is_push=True) + ok, err = self.install_runtime_base_apk(base_apk) + if not ok: + self.log(self.tf('log_runtime_install_failed', error=err), "ERROR") + return + self.log(self.t('log_runtime_install_success'), "INFO") + + self.update_progress(3, 7, self.t('progress_fetch_boot_key'), is_push=True) + if not self.fetch_permission_resource_key(): + return + + self.update_progress(4, 7, self.t('progress_reboot_fastboot'), is_push=True) + ok, output = self.run_adb_shell('reboot fastboot') + if not ok and self.debug_mode: + self.log(self.tf('log_fastboot_enter_failed', output=output), "CMD") + self.log(self.t('log_fastboot_wait'), "WARNING") + if not self.wait_for_fastboot(): + self.log(self.t('log_fastboot_missing'), "ERROR") + return + + self.update_progress(5, 7, self.t('progress_decrypt_init_boot'), is_push=True) + temp_img = self.decrypt_permission_resource_to_temp_file() + if not temp_img: + return + + self.update_progress(6, 7, self.t('progress_flash_init_boot'), is_push=True) + ok, output = self.run_fastboot_command(['flash', 'init_boot', str(temp_img)], timeout=120) + if not ok or not self.fastboot_output_has_okay(output): + self.log(self.tf('log_init_boot_flash_failed', output=output), "ERROR") + return + self.log(self.t('log_init_boot_flash_success'), "INFO") + + self.update_progress(7, 7, self.t('progress_reboot_device'), is_push=True) + ok, output = self.run_fastboot_command(['reboot'], timeout=30) + if ok: + permission_done = True + self.log(self.t('log_permission_success'), "SUCCESS") + self.run_on_ui_thread( + lambda: messagebox.showinfo(self.t('msg_done_title'), self.t('msg_permission_done')) + ) + else: + self.log(self.tf('log_fastboot_reboot_failed', output=output), "WARNING") + finally: + self.permission_resource_key = None + if temp_img: + self.secure_delete_file(temp_img) + self.show_progress(False, is_push=True) + if not permission_done: + self.log(self.t('log_permission_failed'), "ERROR") + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_error_title'), self.t('log_permission_failed')) + ) + + threading.Thread(target=worker, daemon=True).start() + + def _push_and_install(self, apk_path, apk_name): + """push → pm install → cleanup,供安装类方法复用""" + ok, _ = self.push_single_apk(apk_path, apk_name) + return ok + + def run_mazda_post_install_tasks(self): + """语言包安装完成后启用 Mazda overlay 并禁用指定应用。""" + self.log(self.t('log_post_config_start'), "INFO") + + overlay_ok = True + for package_name in self.mazda_overlay_packages: + ok, output = self.run_adb_shell(f'cmd overlay enable {package_name}') + if ok: + if self.debug_mode: + self.log(self.tf('log_overlay_enabled', package=package_name), "SUCCESS") + else: + overlay_ok = False + if self.debug_mode: + self.log(self.tf('log_overlay_failed', package=package_name, output=output), "ERROR") + + disabled_count = 0 + for package_name in self.mazda_disable_packages: + ok, output = self.run_adb_shell(f'pm disable-user {package_name}') + if ok: + disabled_count += 1 + if self.debug_mode: + self.log(self.tf('log_disabled_package', package=package_name), "SUCCESS") + else: + if self.debug_mode: + self.log(self.tf('log_disable_package_failed', package=package_name, output=output), "ERROR") + + if self.debug_mode: + self.log( + self.tf( + 'log_post_config_done', + overlay_count=len(self.mazda_overlay_packages), + disabled_count=disabled_count, + total_count=len(self.mazda_disable_packages), + ), + "INFO", + ) + return overlay_ok and disabled_count == len(self.mazda_disable_packages) + + def install_voice_assistant_patch(self): + """安装语音助理 Magisk 模块补丁。""" + if not self.check_device_connection(): + return + if not self.vin: + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_need_vin')) + return + + def do_install_patch(): + if not self.check_authorization(self.vin): + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_auth_failed_title'), self.t('msg_device_unauthorized')) + ) + return + + if not self.extract_password: + if not self.fetch_package_password(): + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_data_prepare_failed')) + ) + return + + if not self.check_package_extracted(): + self.show_progress(True, is_push=False) + if not self.extract_package_silent(): + self.show_progress(False, is_push=False) + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_prepare_failed')) + ) + return + self.show_progress(False, is_push=False) + + module_zips = self.find_voice_patch_modules() + ok, reason = self.validate_voice_patch_modules(module_zips) + if not ok: + self.log(reason, "ERROR") + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_prepare_failed')) + ) + return + self.voice_module_zips = module_zips + + self.show_progress(True, is_push=True) + try: + self.log(self.t('log_voice_patch_start'), "SUCCESS") + if not self.open_magisk_and_check_root(): + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_auth_failed_title'), self.t('msg_root_failed')) + ) + return + + total = len(self.voice_module_zips) + for idx, zip_path in enumerate(self.voice_module_zips, 1): + self.update_progress(idx - 1, total, self.t('progress_install_module'), is_push=True) + ok, result = self.install_magisk_module_zip(zip_path) + if not ok: + self.log(self.tf('log_module_install_failed', error=result), "ERROR") + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_error_title'), self.t('log_voice_patch_failed')) + ) + return + if self.debug_mode: + self.log(f"MODULE OK: {result}", "CMD") + + self.install_magisk_manager_cleanup_module() + self.update_progress(total, total, self.t('progress_flash_done'), is_push=True) + self.log(self.t('log_voice_patch_done'), "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t('msg_success_title'), + self.t('log_voice_patch_done') + ) + finally: + self.show_progress(False, is_push=True) + + threading.Thread(target=do_install_patch, daemon=True).start() + + def push_all_apks(self): + """推送APK并安装 —— 逸动版仅处理 app 目录,使用 pm install""" + # 检查设备连接(仅 UI 层检查在主线程,其余工作进后台线程) + if not self.check_device_connection(): + return + + if not self.vin: + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_need_vin')) + return + + def do_push_all(): + # 验证授权 + if not self.check_authorization(self.vin): + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_auth_failed_title'), self.t('msg_device_unauthorized')) + ) + return + + # 获取解压密码 + if not self.extract_password: + if not self.fetch_package_password(): + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_data_prepare_failed')) + ) + return + + # 解压 + if not self.check_package_extracted(): + self.log(self.t('log_extracting'), "INFO") + self.show_progress(True, is_push=False) + if not self.extract_package_silent(): + self.show_progress(False, is_push=False) + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_prepare_failed')) + ) + return + self.show_progress(False, is_push=False) + + if not self.apps_dir or not self.apps_dir.exists(): + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_dir_missing')) + ) + return + + # 开始刷入 + self.show_progress(True, is_push=True) + self.log(self.t('log_flash_start'), "SUCCESS") + self.run_adb_shell('mkdir -p /data/local/tmp') + self.run_adb_shell('setprop vecentek.model 1') + + all_apks = list(self.apps_dir.glob("*.apk")) + if not all_apks: + self.log(self.t('log_no_language_files'), "WARNING") + self.show_progress(False, is_push=True) + return + + total = len(all_apks) + success_count = 0 + for i, apk_path in enumerate(all_apks, 1): + apk_name = apk_path.stem + ok, _ = self.push_single_apk(apk_path, apk_name) + if ok: + if self.debug_mode: + self.log(self.tf('log_install_success', name=apk_name), "SUCCESS") + success_count += 1 + else: + if self.debug_mode: + self.log(self.tf('log_install_failed', name=apk_name), "ERROR") + else: + self.log(self.tf('log_flash_item_failed', current=i, total=total), "ERROR") + self.update_progress(i, total, self.t('progress_flashing'), is_push=True) + + self.update_progress(total, total, self.t('progress_flash_done'), is_push=True) + self.run_adb_shell('setprop vecentek.model 0') + + if success_count == total: + self.log(self.t('log_flash_done_config'), "SUCCESS") + elif success_count > 0: + self.log(self.t('log_flash_partial_config'), "WARNING") + else: + self.log(self.t('log_flash_failed_config'), "WARNING") + + if self.run_mazda_post_install_tasks(): + self.log(self.t('log_post_config_all_done'), "SUCCESS") + else: + self.log(self.t('log_post_config_partial'), "WARNING") + + self.show_progress(False, is_push=True) + + threading.Thread(target=do_push_all, daemon=True).start() + + def install_all_apks(self): + """批量安装APK — push → pm install → cleanup""" + if not self.check_device_connection(): + return + if not self.vin: + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_need_vin')) + return + if not self.check_authorization(self.vin): + messagebox.showerror(self.t('msg_auth_failed_title'), self.t('msg_device_unauthorized_action')) + return + + # 使用当前目录下的apks文件夹 + apk_dir = self.base_dir / "apks" + if not apk_dir.exists(): + apk_dir = find_resource("apks") + + # 检查apk文件夹是否存在 + if not apk_dir.exists(): + messagebox.showerror(self.t('msg_error_title'), self.t('msg_apks_dir_missing')) + self.log(self.t('msg_apks_dir_missing'), "ERROR") + return + + # 查找所有apk文件 + apk_files = list(apk_dir.glob("*.apk")) + if not apk_files: + messagebox.showerror(self.t('msg_error_title'), self.t('msg_apks_empty')) + self.log(self.t('msg_apks_empty'), "ERROR") + return + + # 询问是否确认安装 + result = messagebox.askyesno( + self.t('msg_install_confirm_title'), + self.tf('msg_install_confirm_folder', count=len(apk_files)) + ) + if not result: + return + + def install(): + self.show_progress(True, is_push=True) + total = len(apk_files) + self.log(self.tf('log_batch_install_start', count=total), "INFO") + + self.run_adb_shell('setprop vecentek.model 1') + + success_count = 0 + for i, apk_path in enumerate(apk_files, 1): + apk_name = apk_path.stem + self.update_progress(i, total, self.t('progress_installing'), is_push=True) + if self._push_and_install(apk_path, apk_name): + self.log(self.tf('log_install_success', name=apk_name), "SUCCESS") + success_count += 1 + else: + self.log(self.tf('log_install_failed', name=apk_name), "ERROR") + + self.run_adb_shell('setprop vecentek.model 0') + self.update_progress(total, total, self.t('progress_install_done'), is_push=True) + self.show_progress(False, is_push=True) + + if success_count == total: + self.run_on_ui_thread( + messagebox.showinfo, + self.t('msg_install_done_title'), + self.tf('msg_install_done_all', count=total) + ) + elif success_count > 0: + self.run_on_ui_thread( + messagebox.showwarning, + self.t('msg_install_partial_title'), + self.tf('msg_install_partial', success=success_count, failed=total - success_count) + ) + else: + self.log(self.t('log_install_failed_simple'), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_install_failed_title'), + self.t('msg_install_failed_all') + ) + + threading.Thread(target=install, daemon=True).start() + + def install_single_apk(self): + """安装单个APK — push → pm install → cleanup""" + if not self.check_device_connection(): + return + if not self.vin: + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_need_vin')) + return + if not self.check_authorization(self.vin): + messagebox.showerror(self.t('msg_auth_failed_title'), self.t('msg_device_unauthorized_action')) + return + + file_path = filedialog.askopenfilename( + title=self.t('file_select_apk_title'), + filetypes=[(self.t('filetype_apk'), "*.apk"), (self.t('filetype_all'), "*.*")] + ) + + if not file_path: + return + + def install(): + apk_name = Path(file_path).stem + self.show_progress(True, is_push=True) + self.update_progress(30, 100, self.t('progress_installing'), is_push=True) + + self.run_adb_shell('setprop vecentek.model 1') + success = self._push_and_install(file_path, apk_name) + self.run_adb_shell('setprop vecentek.model 0') + + self.update_progress(100, 100, self.t('progress_done'), is_push=True) + if success: + self.log(self.tf('log_install_success', name=apk_name), "SUCCESS") + else: + self.log(self.t('log_install_failed_simple'), "ERROR") + self.show_progress(False, is_push=True) + + threading.Thread(target=install, daemon=True).start() + + def open_language_settings(self): + """打开系统语言设置""" + if not self.check_device_connection(): + return + self.run_adb_shell('am start -a android.settings.LOCALE_SETTINGS') + + def open_language_quick_set(self): + """打开快捷语言设置弹窗""" + # 检查设备连接 + if not self.check_device_connection(): + return + + # 创建弹窗 + popup = tk.Toplevel(self.root) + popup.title(self.t('quick_lang_title')) + popup.geometry("520x320") + popup.configure(bg=self.colors['bg_dark']) + popup.resizable(False, False) + + # 居中显示 + popup.update_idletasks() + x = self.root.winfo_x() + (self.root.winfo_width() - 520) // 2 + y = self.root.winfo_y() + (self.root.winfo_height() - 320) // 2 + popup.geometry(f"+{x}+{y}") + popup.transient(self.root) + popup.grab_set() + + # 标题 + header = tk.Label(popup, text=self.t('quick_lang_header'), + font=('Microsoft YaHei', 13, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + header.pack(pady=(15, 10)) + + hint = tk.Label(popup, text=self.t('quick_lang_hint'), + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark']) + hint.pack(pady=(0, 12)) + + # 语言列表:(显示名, locale_code) + locale_codes = ["zh-CN", "en-US", "ru-RU", "fr-FR", "es-ES", "pt-BR", "it-IT", "ar-SA"] + languages = list(zip(self.t('quick_lang_names'), locale_codes)) + + # 创建按钮容器 + btn_frame = tk.Frame(popup, bg=self.colors['bg_dark']) + btn_frame.pack(pady=(0, 10)) + + btn_colors = [ + self.colors['accent'], self.colors['info'], + self.colors['success'], self.colors['warning'], + '#e17055', '#00b894', + '#6c5ce7', '#0984e3', + ] + + for i, (label, locale) in enumerate(languages): + row = i // 4 + col = i % 4 + + def make_cmd(loc=locale, lbl=label): + return lambda: self._quick_set_language(loc, lbl, popup) + + btn = tk.Button(btn_frame, text=label, + command=make_cmd(), + font=('Microsoft YaHei', 10), + fg='white', + bg=btn_colors[i], + relief=tk.FLAT, + cursor='hand2', + width=12, height=2) + btn.grid(row=row, column=col, padx=5, pady=5) + + # 底部分隔 + 打开系统设置入口 + sep = tk.Frame(popup, bg=self.colors['border'], height=1) + sep.pack(fill=tk.X, padx=20, pady=(8, 6)) + + sys_btn = tk.Button(popup, text=self.t('quick_lang_system'), + command=lambda: self._open_sys_and_close(popup), + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_light'], + relief=tk.FLAT, + cursor='hand2') + sys_btn.pack(pady=(0, 10)) + + def _quick_set_language(self, locale_code, language_name, popup): + """执行快捷语言设置""" + popup.destroy() + + def do_set(): + self.log(f"{self.t('progress_installing')}: {language_name} ({locale_code})", "INFO") + success, output = self.run_adb_shell( + f'settings put system system_locales {locale_code}' + ) + + if success: + self.log(f"✓ {language_name}", "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t('quick_lang_success_title'), + self.tf('quick_lang_success', language=language_name) + ) + else: + self.log(f"✗ {output}", "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('quick_lang_failed_title'), + self.tf('quick_lang_failed', output=output) + ) + + threading.Thread(target=do_set, daemon=True).start() + + def _open_sys_and_close(self, popup): + """关闭弹窗并打开系统语言设置""" + popup.destroy() + self.open_language_settings() + + def open_timezone_settings(self): + """打开时区设置""" + if not self.check_device_connection(): + return + self.run_adb_shell('am start -a android.settings.TIMEZONE_SETTINGS') + + def open_android_settings(self): + """打开安卓原生设置""" + if not self.check_device_connection(): + return + self.run_adb_shell('am start -a android.settings.SETTINGS') + + def reboot_device(self): + """重启设备""" + if not self.check_device_connection(): + return + if messagebox.askyesno(self.t('msg_reboot_title'), self.t('msg_reboot_confirm')): + self.run_adb_shell('reboot') + self.log(self.t('log_rebooting'), "INFO") + self.update_device_status(False) + + def on_disable_upgrade(self): + """禁用系统升级""" + # 检查设备连接 + if not self.check_device_connection(): + return + + # 弹窗确认 + result = messagebox.askyesno( + self.t('msg_disable_ota_title'), + self.t('msg_disable_ota_confirm') + ) + + if not result: + self.log(self.t('log_disable_ota_cancelled'), "INFO") + return + + def disable(): + self.show_progress(True, is_push=False) + success, output = self.run_adb_shell( + 'pm disable-user --user 0 com.incall.apps.softmanager') + + if success: + self.log(self.t('log_disable_ota_success'), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t('msg_success_title'), self.t('msg_disable_ota_success')) + else: + self.log(self.t('log_disable_ota_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.tf('msg_disable_ota_failed', output=output)) + + self.show_progress(False, is_push=False) + + threading.Thread(target=disable, daemon=True).start() + + def _on_vin_input_focus_in(self, event): + """输入框获得焦点时清除占位符""" + if self.is_placeholder_vin(self.vin_input.get()): + self.vin_input.delete(0, tk.END) + self.vin_input.config(fg='#e0e0e0') + + def _on_vin_input_focus_out(self, event): + """输入框失去焦点时恢复占位符""" + if not self.vin_input.get(): + self.vin_input.insert(0, self.t('vin_placeholder')) + self.vin_input.config(fg='#636e72') + + def query_password_by_vin(self): + """通过VIN查询密码""" + vin = self.vin_input.get().strip() + if not vin or self.is_placeholder_vin(vin): + messagebox.showwarning(self.t('msg_hint_title'), self.t('msg_input_vin')) + return + + def do_query(): + try: + api_url = "https://api.changan.softwindy.cn/api/authorizations/generate-password-by-vin" + url = f"{api_url}?vin={vin}" + req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + + def update_ui(): + if data.get('success'): + pwd = data.get('data', {}).get('devicePassword', 'unknown') + self.pwd_result_label.config( + text=self.tf('pwd_success', password=pwd), + fg=self.colors['success'] + ) + self.log(self.tf('log_pwd_success', vin=vin, password=pwd), "SUCCESS") + else: + msg = data.get('message', 'failed') + self.pwd_result_label.config( + text=self.tf('pwd_failed', message=msg), + fg=self.colors['error'] + ) + self.log(self.tf('log_pwd_failed', message=msg), "ERROR") + + self.run_on_ui_thread(update_ui) + + except Exception as e: + def update_ui_error(): + self.pwd_result_label.config( + text=self.t('pwd_request_failed'), + fg=self.colors['error'] + ) + self.log(self.tf('log_pwd_request_failed', error=str(e)), "ERROR") + self.run_on_ui_thread(update_ui_error) + + threading.Thread(target=do_query, daemon=True).start() + + def _toggle_debug(self, event=None): + """切换调试模式(隐藏入口,Ctrl+Shift+D)""" + if self.debug_mode: + self.debug_mode = False + self.log(self.t('log_debug_off'), "WARNING") + self.status_text.config(text=self.t('status_ready')) + self.set_debug_buttons_visible(False) + self.refresh_device_status() + return + + pwd = simpledialog.askstring(self.t('debug_title'), self.t('debug_prompt'), show='*', parent=self.root) + if not pwd: + return + + self.log(self.t('debug_password_verifying'), "WARNING") + + def verify(): + valid, message = self.verify_debug_mode_password(pwd) + if valid: + def enable_debug(): + self.debug_mode = True + self.update_device_status(True, "", True) + self.log(self.t('log_debug_on'), "WARNING") + self.status_text.config(text=self.t('debug_status')) + self.set_debug_buttons_visible(True) + self.run_on_ui_thread(enable_debug) + else: + def show_failed(): + msg = message or self.t('msg_debug_wrong_password') + self.log(self.tf('debug_verify_failed', message=msg), "WARNING") + messagebox.showwarning(self.t('msg_error_title'), msg) + self.run_on_ui_thread(show_failed) + + threading.Thread(target=verify, daemon=True).start() + + def verify_debug_mode_password(self, password): + try: + data = self._post_json(self.debug_password_api_url, {"password": password}) + if data.get('success') is True and data.get('valid') is True: + return True, data.get('message', '') + return False, data.get('message') or self.t('msg_debug_wrong_password') + except Exception as e: + return False, str(e) + + def _require_debug_mode(self): + if self.debug_mode: + return True + messagebox.showwarning(self.t('debug_status'), self.t('debug_need_enable')) + return False + + def _ensure_debug_vin_from_input(self): + if self.vin: + return True + vin = self.vin_input.get().strip().upper() + if vin and not self.is_placeholder_vin(vin): + self.vin = vin + return True + return False + + def debug_test_package_extract(self): + if not self._require_debug_mode(): + return + if not self._ensure_debug_vin_from_input(): + messagebox.showwarning(self.t('debug_status'), self.t('debug_need_vin')) + return + + def worker(): + self.log(self.t('log_debug_extract_start'), "INFO") + self.extract_password = None + if not self.fetch_package_password(): + self.log(self.t('log_debug_extract_failed'), "ERROR") + return + self.show_progress(True) + try: + if self.extract_package_silent(): + module_zips = self.find_voice_patch_modules() + ok, reason = self.validate_voice_patch_modules(module_zips) + if not ok: + self.log(reason, "ERROR") + self.log(self.t('log_debug_extract_failed'), "ERROR") + return + apk_count = len(list(self.apps_dir.glob("*.apk"))) if self.apps_dir and self.apps_dir.exists() else 0 + self.log(self.tf( + 'log_debug_extract_success', + apk_count=apk_count, + module_count=len(module_zips) + ), "SUCCESS") + else: + self.log(self.t('log_debug_extract_failed'), "ERROR") + finally: + self.show_progress(False) + + threading.Thread(target=worker, daemon=True).start() + + def debug_test_boot_extract(self): + if not self._require_debug_mode(): + return + if not self._ensure_debug_vin_from_input(): + key_text = simpledialog.askstring( + self.t('debug_boot_title'), + self.t('debug_boot_prompt'), + show='*', + parent=self.root + ) + if not key_text: + return + try: + key_bytes = self._decode_key_material(key_text) + if len(key_bytes) != 32: + messagebox.showwarning(self.t('debug_boot_title'), self.t('debug_key_len_error')) + return + self.permission_resource_key = key_bytes + except Exception as e: + messagebox.showwarning(self.t('debug_boot_title'), self.tf('debug_key_format_error', error=e)) + return + + def worker(): + temp_img = None + try: + self.log(self.t('log_debug_boot_start'), "INFO") + temp_img = self.decrypt_permission_resource_to_temp_file() + if not temp_img: + self.log(self.t('log_debug_boot_failed'), "ERROR") + return + size = temp_img.stat().st_size + sha = hashlib.sha256(temp_img.read_bytes()).hexdigest() + self.log(self.tf('log_debug_boot_success', size=size, sha=sha), "SUCCESS") + finally: + self.permission_resource_key = None + if temp_img: + self.secure_delete_file(temp_img) + + threading.Thread(target=worker, daemon=True).start() + + def install_apps(self): + """安装App — 支持单选或多选APK文件""" + if not self.check_device_connection(): + return + if not self.vin and not self.debug_mode: + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_need_vin')) + return + if not self.check_authorization(self.vin): + return + + file_paths = filedialog.askopenfilenames( + title=self.t('file_select_apk_title'), + filetypes=[(self.t('filetype_apk'), "*.apk"), (self.t('filetype_all'), "*.*")] + ) + if not file_paths: + return + + count = len(file_paths) + result = messagebox.askyesno( + self.t('msg_install_confirm_title'), + self.tf('msg_install_confirm_many', count=count) + ) + if not result: + return + + def install(): + self.show_progress(True, is_push=True) + self.log(self.tf('log_install_many_start', count=count), "INFO") + self.run_adb_shell('setprop vecentek.model 1') + + success_count = 0 + for i, file_path in enumerate(file_paths, 1): + apk_name = Path(file_path).stem + self.update_progress(i, count, self.tf('progress_installing_name', name=apk_name), is_push=True) + if self._push_and_install(file_path, apk_name): + self.log(f"✓ {apk_name}.apk", "SUCCESS") + success_count += 1 + else: + self.log(f"✗ {apk_name}.apk", "ERROR") + + self.run_adb_shell('setprop vecentek.model 0') + self.update_progress(count, count, self.t('progress_install_done'), is_push=True) + self.show_progress(False, is_push=True) + + if success_count == count: + self.log(self.tf('log_install_done_all', count=count), "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t('msg_install_done_title'), + self.tf('msg_install_done_all', count=count) + ) + elif success_count > 0: + self.log(self.tf('log_install_done_partial', success=success_count, count=count), "WARNING") + self.run_on_ui_thread( + messagebox.showwarning, + self.t('msg_install_partial_title'), + self.tf('msg_install_partial', success=success_count, failed=count - success_count) + ) + else: + self.log(self.t('log_install_failed_simple'), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_install_failed_title'), + self.t('msg_install_failed_all') + ) + + threading.Thread(target=install, daemon=True).start() + + # ============================================================ + # hosts 文件修改 + # ============================================================ + + def modify_hosts(self): + """修改hosts文件,添加云端认证DNS映射""" + hosts_path = r"C:\Windows\System32\drivers\etc\hosts" + host_ip = "103.236.55.140" + host_name = "spm.auto-pai.com" + entry = f"{host_ip} {host_name}" + + try: + try: + with open(hosts_path, 'r', encoding='utf-8') as f: + lines = f.readlines() + except UnicodeDecodeError: + with open(hosts_path, 'r', encoding='gbk', errors='replace') as f: + lines = f.readlines() + + new_lines = [] + found_target = False + changed = False + for line in lines: + stripped = line.strip() + if not stripped or stripped.startswith('#'): + new_lines.append(line) + continue + + body, _, _ = line.partition('#') + parts = body.split() + if len(parts) >= 2 and host_name.lower() in [p.lower() for p in parts[1:]]: + if not found_target: + if parts[0] != host_ip or len(parts) != 2: + changed = True + new_lines.append(f"{entry}\n") + found_target = True + else: + changed = True + continue + + new_lines.append(line) + + if found_target and not changed: + return True + + if not found_target: + if not new_lines or (new_lines[-1] and not new_lines[-1].endswith(('\n', '\r'))): + new_lines.append('\n') + new_lines.append(f"{entry}\n") + + with open(hosts_path, 'w', encoding='utf-8', newline='') as f: + f.writelines(new_lines) + return True + except PermissionError: + self.log(self.t('log_env_config_failed_admin'), "WARNING") + return False + except Exception as e: + if self.debug_mode: + self.log(self.tf('log_env_config_failed_detail', error=str(e)), "WARNING") + else: + self.log(self.t('log_env_config_failed'), "WARNING") + return False + + def _run_netsh(self, command): + """执行 netsh 命令,返回 (returncode, output)""" + try: + for enc in ['utf-8', 'gbk']: + try: + r = subprocess.run( + command, + shell=True, + capture_output=True, + text=True, + encoding=enc, + errors='replace', + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + output = (r.stdout or '') + (r.stderr or '') + return r.returncode, output.strip() + except (UnicodeDecodeError, LookupError): + continue + return -1, self.t('err_decode_failed') + except Exception as e: + return -1, str(e) + + def start_hotspot_action(self): + """打开热点设置并自动轮询检测""" + # 打开设置页面 + try: + subprocess.Popen( + 'start ms-settings:network-mobilehotspot', + shell=True, + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + except: + pass + self.log(self.t('log_hotspot_opening'), "INFO") + + # 后台轮询,查到为止(最多 30 秒) + def poll(): + for _ in range(15): + time.sleep(2) + ssid, pwd, status = self.get_hotspot_info() + self.refresh_hotspot_display() + if ssid and self._hotspot_started(status): + self.log(self.tf('log_hotspot_detected', ssid=ssid, password=pwd), "SUCCESS") + return + self.log(self.t('log_hotspot_not_detected'), "WARNING") + + threading.Thread(target=poll, daemon=True).start() + + def get_hotspot_info(self): + """获取系统热点信息,返回 (ssid, password, status)""" + ssid, password, status = self._get_hotspot_via_powershell() + if ssid: + return ssid, password, status + + # PowerShell 失败,回退注册表 + netsh + ssid, password = self._read_hotspot_registry() + status = "stopped" + try: + _, out = self._run_netsh('netsh wlan show hostednetwork') + for line in out.split('\n'): + s = line.strip() + if ('状态' in s or 'status' in s.lower()) and ('已启动' in s or 'started' in s.lower()): + status = "started" + if not ssid and 'ssid' in s.lower() and ':' in s: + val = s.split(':', 1)[-1].strip().strip('"') + if val and 'not set' not in val.lower(): + ssid = val + except: + pass + return ssid, password, status + + def _hotspot_started(self, status): + status_text = (status or "").lower() + return '已启动' in status_text or 'started' in status_text or 'on' in status_text or 'inoperation' in status_text + + def _get_hotspot_via_powershell(self): + """通过 PowerShell 获取 Windows 移动热点配置""" + try: + ps_cmd = ( + '$cp = [Windows.Networking.Connectivity.NetworkInformation,' + 'Windows.Networking.Connectivity,ContentType=WindowsRuntime]' + '::GetInternetConnectionProfile();' + '$tm = [Windows.Networking.NetworkOperators.NetworkOperatorTetheringManager,' + 'Windows.Networking.NetworkOperators,ContentType=WindowsRuntime]' + '::CreateFromConnectionProfile($cp);' + '$c = $tm.GetCurrentAccessPointConfiguration();' + 'Write-Output $c.Ssid; Write-Output $c.Passphrase;' + 'Write-Output $tm.TetheringOperationalState' + ) + r = subprocess.run( + ['powershell', '-NoProfile', '-Command', ps_cmd], + capture_output=True, text=True, timeout=10, + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + lines = [l.strip() for l in (r.stdout or '').split('\n') if l.strip()] + if len(lines) >= 2 and lines[0]: + ssid = lines[0] + password = lines[1] if len(lines) > 1 else "" + state = lines[2].lower() if len(lines) > 2 else "" + status = "started" if ('on' in state or 'inoperation' in state) else "stopped" + return ssid, password, status + except: + pass + return "", "", "stopped" + + def _read_hotspot_registry(self): + """从注册表读取 Windows 移动热点的 SSID 和密码""" + try: + import winreg + key = winreg.OpenKey( + winreg.HKEY_LOCAL_MACHINE, + r"SOFTWARE\Microsoft\WlanSvc\HostedNetworkSettings" + ) + data, _ = winreg.QueryValueEx(key, "HostedNetworkSettings") + winreg.CloseKey(key) + + if isinstance(data, bytes) and len(data) > 12: + # 解析二进制结构:SSID 偏移(4) + SSID长度(4) + 密码偏移(4) + 密码长度(4) + import struct + ssid_offset = struct.unpack_from(' 0 and ssid_offset + ssid_len * 2 <= len(data): + raw = data[ssid_offset:ssid_offset + ssid_len * 2] + ssid = raw.decode('utf-16-le', errors='replace').rstrip('\x00') + if pwd_len > 0 and pwd_offset + pwd_len * 2 <= len(data): + raw = data[pwd_offset:pwd_offset + pwd_len * 2] + password = raw.decode('utf-16-le', errors='replace').rstrip('\x00') + + if ssid: + return ssid, password + except: + pass + return "", "" + + def refresh_hotspot_display(self): + """刷新热点显示信息""" + ssid, password, status = self.get_hotspot_info() + self.run_on_ui_thread(self._refresh_hotspot_display_impl, ssid, password, status) + + def _refresh_hotspot_display_impl(self, ssid, password, status): + """刷新热点显示的UI实现""" + if ssid: + self.hotspot_ssid_label.config(text=self.tf('hotspot_name_value', ssid=ssid)) + else: + self.hotspot_ssid_label.config(text=self.t('hotspot_name_unset')) + if password: + self.hotspot_pwd_label.config(text=self.tf('hotspot_pwd_value', password=password)) + else: + self.hotspot_pwd_label.config(text=self.t('hotspot_pwd_default')) + started = self._hotspot_started(status) + status_text = self.t('hotspot_started') if started else self.t('hotspot_stopped') + self.hotspot_status_label.config( + text=self.tf('hotspot_status_value', status=status_text), + fg=self.colors['success'] if started else self.colors['warning'] + ) + + def run(self): + """运行程序""" + self.root.mainloop() + +def main(): + """主函数""" + if sys.version_info < (3, 6): + print("Error: Python 3.6 or later is required") + sys.exit(1) + + try: + app = ADKAPKGUI() + app.run() + except Exception as e: + print(f"Startup failed: {e}") + import traceback + traceback.print_exc() + messagebox.showerror("Error", f"Program failed to start: {e}") + +if __name__ == "__main__": + main() diff --git a/Mazda-EZ60/Mazda-EZ60_1.2_voice-assistant_backup.py b/Mazda-EZ60/Mazda-EZ60_1.2_voice-assistant_backup.py new file mode 100644 index 0000000..76f5a3b --- /dev/null +++ b/Mazda-EZ60/Mazda-EZ60_1.2_voice-assistant_backup.py @@ -0,0 +1,3037 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import os +import sys +import subprocess +import json +import threading +import re +import atexit +import base64 +import hashlib +import struct +import tempfile +import zlib +import tkinter as tk +from tkinter import ttk, scrolledtext, filedialog, messagebox, simpledialog +from pathlib import Path +from urllib.request import urlopen, Request +from urllib.error import URLError, HTTPError +from urllib.parse import urlencode +from datetime import datetime +import zipfile +try: + import pyzipper +except ImportError: + pyzipper = None +import shutil +import time +try: + from cryptography.hazmat.primitives.ciphers.aead import AESGCM +except ImportError: + AESGCM = None + + +def set_windows_app_id(): + if sys.platform != 'win32': + return + try: + import ctypes + app_id = 'YibinKeyi.MazdaEZ60.LanguageInstaller.1.2' + ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(app_id) + except Exception: + pass + + +def get_app_dir(): + return Path(sys.executable).resolve().parent if getattr(sys, 'frozen', False) else Path(__file__).resolve().parent + + +def resource_candidates(file_name): + base_dir = get_app_dir() + candidates = [] + if getattr(sys, 'frozen', False): + candidates.append(Path(getattr(sys, '_MEIPASS', base_dir)) / file_name) + candidates.extend([ + base_dir / file_name, + base_dir / 'tools' / file_name, + base_dir / 'shared' / file_name, + base_dir.parent / 'tools' / file_name, + base_dir.parent / 'shared' / file_name, + base_dir.parent / file_name, + ]) + unique = [] + for candidate in candidates: + if candidate not in unique: + unique.append(candidate) + return unique + + +def find_resource(file_name): + candidates = resource_candidates(file_name) + for candidate in candidates: + if candidate.exists(): + return candidate + return candidates[0] + + +def find_tool(file_name, fallback=None): + path = find_resource(file_name) + if path.exists(): + return str(path) + return fallback or str(path) +class ADKAPKGUI: + CACHE_DIR_NAME = "apps_cache_Mazda_EZ60" + + def __init__(self): + set_windows_app_id() + self.root = tk.Tk() + self.root.title("Mazda-EZ60_OS-1.2适用") + self.root.geometry("900x620") + self.root.resizable(True, True) + self.set_window_icon() + self.root.after(200, self.set_window_icon) + + # 设置颜色主题 + self.colors_dark = { + 'bg_dark': '#1e1e2e', + 'bg_light': '#2a2a3e', + 'accent': '#6c5ce7', + 'accent_hover': '#5b4bc4', + 'success': '#00b894', + 'error': '#d63031', + 'warning': '#fdcb6e', + 'info': '#0984e3', + 'text': '#dfe6e9', + 'text_secondary': '#b2bec3', + 'border': '#3d3d5e' + } + self.colors_light = { + 'bg_dark': '#f5f5f5', + 'bg_light': '#ffffff', + 'accent': '#6c5ce7', + 'accent_hover': '#5b4bc4', + 'success': '#00b894', + 'error': '#d63031', + 'warning': '#e17055', + 'info': '#0984e3', + 'text': '#2d3436', + 'text_secondary': '#636e72', + 'border': '#dfe6e9' + } + self.colors = dict(self.colors_dark) + self.theme = 'dark' + + # 多语言 + self.lang = 'zh' + self.T = { + 'zh': { + 'title': 'Mazda-EZ60_OS-1.2适用', + 'btn_permission': '🔓 获取权限', + 'btn_push': '📦 刷入语言包', + 'btn_install': '📱 安装App', + 'btn_language': '🌐 语言设置', + 'btn_timezone': '⏰ 时区设置', + 'btn_settings': '⚙️ 安卓设置', + 'btn_reboot': '🔄 重启设备', + 'btn_disable_upgrade': '❌ 禁用升级', + 'btn_clear_log': '🗑 清空日志', + 'btn_query_pwd': '查询密码', + 'device_label': '设备:', + 'vin_label': 'VIN码:', + 'auth_label': '授权:', + 'log_title': '📋 运行日志', + 'status_ready': '就绪', + 'status_connected': '已连接', + 'status_disconnected': '未连接', + 'status_detecting': '未检测', + 'vin_none': '未获取', + 'auth_none': '未验证', + 'auth_yes': '已授权', + 'auth_no': '未授权', + 'btn_refresh': '🔄 检查', + 'hint_factory': '🔧 关闭车辆WI-FI和4G网络,拨号获取的密码进入工程模式', + 'hotspot_icon': '📶', + 'hotspot_title': '电脑热点', + 'hotspot_start': '🔧 打开热点设置', + 'hint_icon': '💡', + 'hint_title': '使用提示', + 'theme_dark': '🌙 暗色', + 'theme_light': '☀️ 亮色', + 'lang_zh': '中', + 'lang_en': 'EN', + 'pwd_query_label': '工程密码查询:', + 'vin_placeholder': '请输入VIN', + 'vin_query_hint': '💡 请输入VIN或者VIN后八位查询。', + 'pwd_empty': '', + 'pwd_success': '密码: *#{password}#*', + 'pwd_failed': '失败: {message}', + 'pwd_request_failed': '请求失败', + 'hotspot_name_detecting': '名称: 检测中...', + 'hotspot_name_unset': '名称: 未配置', + 'hotspot_name_value': '名称: {ssid}', + 'hotspot_pwd_default': '密码: changan2024', + 'hotspot_pwd_value': '密码: {password}', + 'hotspot_status_off': '状态: 未启动', + 'hotspot_status_value': '状态: {status}', + 'hotspot_started': '已启动', + 'hotspot_stopped': '未启动', + 'hint_lines': [ + '1. 确保电脑已开启热点', + '2. 拨号进入工厂模式,点击调试工具', + '3. 需要云端认证时,连接右侧显示的电脑热点', + '4. 连接后点击车机“云端认证”按钮', + '5. 打开 ADB 后即可刷入语言包', + ], + 'log_lang_changed': '语言已切换为中文', + 'log_cleared': '日志已清空', + 'msg_warn_title': '警告', + 'msg_error_title': '错误', + 'msg_success_title': '成功', + 'msg_hint_title': '提示', + 'msg_device_not_connected_title': '设备未连接', + 'msg_device_not_connected': '请先连接设备并点击「检查」按钮刷新状态!', + 'msg_need_vin': '请先刷新设备状态并获取VIN码', + 'msg_auth_failed_title': '授权失败', + 'msg_device_unauthorized': '设备未授权', + 'msg_device_unauthorized_action': '设备未授权,无法执行此操作', + 'msg_data_prepare_failed': '资源初始化失败!', + 'msg_resource_prepare_failed': '资源准备失败!', + 'msg_resource_dir_missing': '资源目录未找到', + 'msg_input_vin': '请输入VIN码', + 'msg_done_title': '完成', + 'msg_confirm_permission_title': '确认获取权限', + 'msg_confirm_permission': '即将获取系统权限,过程中请勿断开数据连接或关闭程序。\n\n是否继续?', + 'msg_permission_done': '获取成功,设备正在重启。', + 'msg_reboot_title': '确认重启', + 'msg_reboot_confirm': '确定要重启设备吗?', + 'msg_disable_ota_title': '确认禁用升级', + 'msg_disable_ota_confirm': '⚠️ 警告:禁用系统升级后,将无法接收系统更新!\n\n是否确定要禁用系统升级应用?', + 'msg_disable_ota_success': '系统升级已成功禁用!', + 'msg_disable_ota_failed': '禁用失败:{output}', + 'file_select_apk_title': '选择APK文件', + 'filetype_apk': 'APK文件', + 'filetype_all': '所有文件', + 'msg_install_confirm_title': '确认安装', + 'msg_install_confirm_many': '已选择 {count} 个APK文件\n\n是否开始安装?', + 'msg_install_confirm_folder': '找到 {count} 个APK文件\n\n是否开始批量安装?', + 'msg_install_done_title': '安装完成', + 'msg_install_done_all': '成功安装 {count} 个APK!', + 'msg_install_partial_title': '部分成功', + 'msg_install_partial': '成功: {success}\n失败: {failed}', + 'msg_install_failed_title': '安装失败', + 'msg_install_failed_all': '所有APK安装失败!', + 'msg_apks_dir_missing': '未找到apks文件夹!\n请在程序目录下创建apks文件夹并放入APK文件。', + 'msg_apks_empty': 'apks文件夹中没有找到APK文件!', + 'quick_lang_title': '快捷语言设置', + 'quick_lang_header': '选择目标语言', + 'quick_lang_hint': '点击按钮即可将系统语言切换为对应语言,重启后生效', + 'quick_lang_system': '⚙️ 打开系统语言设置(手动选择)', + 'quick_lang_success_title': '设置成功', + 'quick_lang_success': '系统语言已设置为 {language}\n\n⚠️ 请重启设备使其生效。', + 'quick_lang_failed_title': '设置失败', + 'quick_lang_failed': '语言设置失败!', + 'quick_lang_names': ['🇨🇳 中文', '英 English', '俄 Русский', '法 Français', '西 Español', '葡 Português', '意 Italiano', '阿 العربية'], + 'debug_title': '调试模式', + 'debug_prompt': '请输入调试密码:', + 'debug_password_verifying': '正在校验调试模式密码...', + 'debug_verify_failed': '调试模式密码校验失败: {message}', + 'debug_status': '🔧 调试模式', + 'msg_debug_wrong_password': '密码错误', + 'status_debug': '🔧 调试模式', + 'progress_loading': '资源加载中', + 'progress_loaded': '资源加载完成', + 'progress_preparing': '正在准备资源', + 'progress_fetch_boot_key': '正在获取权限中', + 'progress_reboot_fastboot': '正在获取权限中', + 'progress_decrypt_init_boot': '正在获取权限中', + 'progress_flash_init_boot': '正在获取权限中', + 'progress_reboot_device': '正在获取权限中', + 'progress_flashing': '正在刷入', + 'progress_flash_done': '刷入完成', + 'progress_installing': '安装中', + 'progress_installing_name': '安装中 ({name})', + 'progress_install_done': '安装完成', + 'progress_done': '完成', + 'log_device_disconnected': '设备已断开连接', + 'log_device_connected': '设备已连接', + 'log_no_package': '资源文件缺失', + 'log_no_adb': '未找到adb命令,请将ADB文件放入本目录', + 'log_no_fastboot': '运行环境缺失', + 'log_vin': 'VIN: {vin}', + 'log_vin_unavailable': '无法获取VIN,请确认设备已进入工厂模式', + 'log_auth_checking': '正在验证授权状态...', + 'log_auth_success': '授权验证通过', + 'log_auth_failed': '授权验证失败', + 'log_debug_skip_auth': '调试模式: 跳过授权验证', + 'log_vehicle_name': '车辆名称: {vehicle}', + 'log_data_prepare_failed': '资源初始化失败', + 'log_boot_challenge_failed': '获取失败', + 'log_boot_key_failed': '获取失败', + 'log_boot_key_len_error': '获取失败', + 'log_boot_key_success': '正在获取权限中', + 'log_crypto_missing': '获取失败', + 'log_permission_resource_missing': '获取失败', + 'log_permission_resource_format_unsupported': '获取失败', + 'log_permission_resource_algorithm_unsupported': '获取失败', + 'log_permission_resource_decrypt_auth_failed': '获取失败', + 'log_permission_resource_decrypt_ready': '正在获取权限中', + 'log_permission_resource_decrypt_failed': '获取失败', + 'log_fastboot_wait': '正在获取权限,请不要关闭程序或断开数据连接!', + 'log_fastboot_missing': '获取失败', + 'log_fastboot_enter_failed': '获取失败', + 'log_init_boot_flash_failed': '获取失败', + 'log_init_boot_flash_success': '正在获取权限中', + 'log_fastboot_reboot_failed': '获取失败', + 'log_permission_success': '获取成功', + 'log_permission_failed': '获取失败', + 'log_temp_img_deleted': '临时文件已清理', + 'log_temp_img_delete_failed': '临时文件清理失败', + 'log_need_adb': '请先连接设备', + 'log_no_vehicle_name': '资源初始化失败', + 'log_package_missing': '资源文件缺失', + 'log_extract_password_missing': '资源初始化失败', + 'log_7za_missing': '运行环境缺失', + 'log_extracting': '资源准备中...', + 'log_apps_missing': '警告:未找到 apps 目录', + 'log_resource_invalid': '资源校验失败', + 'log_resource_ready': '资源准备完成', + 'log_resource_failed': '资源准备失败,请检查网络连接后重试', + 'log_cache_invalid': '资源缓存无效', + 'log_no_language_files': '未找到语言包文件', + 'log_flash_start': '开始刷入语言包,请勿断电或重启电脑和车机。', + 'log_install_success': '安装成功', + 'log_install_failed': '安装失败', + 'log_flash_item_failed': '语言包刷入失败: {current}/{total}', + 'log_flash_done_config': '语言包刷入完成,开始执行 Mazda-EZ60 安装后配置', + 'log_flash_partial_config': '语言包部分刷入成功,仍继续执行 Mazda-EZ60 安装后配置', + 'log_flash_failed_config': '语言包刷入失败,仍继续执行 Mazda-EZ60 安装后配置', + 'log_post_config_start': '正在执行 Mazda-EZ60 安装后配置...', + 'log_overlay_enabled': '配置项已完成', + 'log_overlay_failed': '配置项执行失败', + 'log_disabled_package': '清理项已完成', + 'log_disable_package_failed': '清理项执行失败', + 'log_post_config_done': 'Mazda-EZ60 安装后配置完成', + 'log_post_config_all_done': 'Mazda-EZ60 安装后配置全部完成,重启设备后生效', + 'log_post_config_partial': 'Mazda-EZ60 安装后配置部分失败,请查看日志', + 'log_batch_install_start': '开始批量安装 {count} 个APK...', + 'log_install_many_start': '开始安装 {count} 个APK...', + 'log_install_done_all': '安装完成:全部 {count} 个成功', + 'log_install_done_partial': '安装完成:{success}/{count} 成功', + 'log_install_failed_simple': '安装失败', + 'log_rebooting': '设备正在重启...', + 'log_disable_ota_cancelled': '已取消禁用升级操作', + 'log_disable_ota_success': '系统升级已禁用', + 'log_disable_ota_failed': '禁用系统升级失败', + 'log_pwd_success': '密码查询成功', + 'log_pwd_failed': '密码查询失败', + 'log_pwd_request_failed': '密码查询请求失败', + 'log_debug_off': '调试模式已关闭', + 'log_debug_on': '调试模式已开启 - 跳过授权和设备校验,显示详细ADB日志', + 'log_env_config_failed_admin': '环境配置失败,请以管理员身份运行', + 'log_env_config_failed': '环境配置失败', + 'log_env_config_failed_detail': '环境配置失败: {error}', + 'log_hotspot_opening': '已打开热点设置,正在检测热点...', + 'log_hotspot_detected': '检测到热点: {ssid} / {password}', + 'log_hotspot_not_detected': '未检测到热点,请确认已开启', + 'err_extract_wrong_password': '资源准备失败', + 'err_extract_data': '资源准备失败', + 'err_extract_headers': '资源准备失败', + 'err_extract_detail': '资源准备失败', + 'err_extract_code': '资源准备失败', + 'err_missing_apps': '资源目录异常', + 'err_empty_apps': '资源目录异常', + 'err_zero_apks': '资源文件异常', + 'err_cmd_timeout': '命令超时', + 'err_fastboot_timeout': '获取失败', + 'err_push_failed': 'push失败: {error}', + 'err_install_failed': 'install失败: {error}', + 'err_decode_failed': '解码失败', + 'msg_start_failed_title': '错误', + 'msg_start_failed': '程序启动失败: {error}', + 'print_python_required': '错误:需要Python 3.6或更高版本', + 'print_start_failed': '启动失败: {error}', + }, + 'en': { + 'title': 'Mazda-EZ60_OS-1.2适用', + 'btn_permission': '🔓 Unlock', + 'btn_push': '📦 Flash Lang Pkg', + 'btn_install': '📱 Install App', + 'btn_language': '🌐 Language', + 'btn_timezone': '⏰ Timezone', + 'btn_settings': '⚙️ Settings', + 'btn_reboot': '🔄 Reboot', + 'btn_disable_upgrade': '❌ Disable OTA', + 'btn_clear_log': '🗑 Clear Log', + 'btn_query_pwd': 'Query Pwd', + 'device_label': 'Device:', + 'vin_label': 'VIN:', + 'auth_label': 'Auth:', + 'log_title': '📋 Log', + 'status_ready': 'Ready', + 'status_connected': 'Connected', + 'status_disconnected': 'Disconnected', + 'status_detecting': 'Detecting', + 'vin_none': 'None', + 'auth_none': 'Unknown', + 'auth_yes': 'Authorized', + 'auth_no': 'Unauthorized', + 'btn_refresh': '🔄 Check', + 'hint_factory': '🔧 Turn off WiFi & 4G, enter factory mode with dial code', + 'hotspot_icon': '📶', + 'hotspot_title': 'Hotspot', + 'hotspot_start': '🔧 Open Hotspot Settings', + 'hint_icon': '💡', + 'hint_title': 'Tips', + 'theme_dark': '🌙 Dark', + 'theme_light': '☀️ Light', + 'lang_zh': '中', + 'lang_en': 'EN', + 'pwd_query_label': 'Factory password:', + 'vin_placeholder': 'Enter VIN', + 'vin_query_hint': '💡 Enter the VIN or the last 8 digits of the VIN to query.', + 'pwd_empty': '', + 'pwd_success': 'Password: *#{password}#*', + 'pwd_failed': 'Failed: {message}', + 'pwd_request_failed': 'Request failed', + 'hotspot_name_detecting': 'Name: detecting...', + 'hotspot_name_unset': 'Name: not configured', + 'hotspot_name_value': 'Name: {ssid}', + 'hotspot_pwd_default': 'Password: changan2024', + 'hotspot_pwd_value': 'Password: {password}', + 'hotspot_status_off': 'Status: stopped', + 'hotspot_status_value': 'Status: {status}', + 'hotspot_started': 'started', + 'hotspot_stopped': 'stopped', + 'hint_lines': [ + '1. Turn on the PC hotspot', + '2. Enter factory mode with the dial password and open debug tools', + '3. For cloud authentication, connect the head unit to the hotspot shown above', + '4. Tap “Cloud Authentication” on the head unit after connecting', + '5. Enable ADB, then flash the language package', + ], + 'log_lang_changed': 'Language switched to English', + 'log_cleared': 'Log cleared', + 'msg_warn_title': 'Warning', + 'msg_error_title': 'Error', + 'msg_success_title': 'Success', + 'msg_hint_title': 'Hint', + 'msg_device_not_connected_title': 'Device not connected', + 'msg_device_not_connected': 'Connect the device and click "Check" to refresh status first.', + 'msg_need_vin': 'Refresh device status and get VIN first', + 'msg_auth_failed_title': 'Authorization failed', + 'msg_device_unauthorized': 'Device is not authorized', + 'msg_device_unauthorized_action': 'Device is not authorized. This action cannot continue.', + 'msg_data_prepare_failed': 'Resource initialization failed!', + 'msg_resource_prepare_failed': 'Resource preparation failed!', + 'msg_resource_dir_missing': 'Resource directory not found', + 'msg_input_vin': 'Enter VIN', + 'msg_done_title': 'Done', + 'msg_confirm_permission_title': 'Confirm unlock', + 'msg_confirm_permission': 'The tool will get system permission. Do not disconnect the data cable or close the program during the process.\n\nContinue?', + 'msg_permission_done': 'Permission acquired. The device is rebooting.', + 'msg_reboot_title': 'Confirm reboot', + 'msg_reboot_confirm': 'Reboot the device now?', + 'msg_disable_ota_title': 'Confirm Disable OTA', + 'msg_disable_ota_confirm': 'Warning: after disabling OTA, the system will not receive updates.\n\nDisable the OTA app now?', + 'msg_disable_ota_success': 'System OTA has been disabled.', + 'msg_disable_ota_failed': 'Disable failed: {output}', + 'file_select_apk_title': 'Select APK files', + 'filetype_apk': 'APK files', + 'filetype_all': 'All files', + 'msg_install_confirm_title': 'Confirm install', + 'msg_install_confirm_many': 'Selected {count} APK file(s).\n\nStart installing?', + 'msg_install_confirm_folder': 'Found {count} APK file(s).\n\nStart batch install?', + 'msg_install_done_title': 'Install complete', + 'msg_install_done_all': 'Successfully installed {count} APK file(s).', + 'msg_install_partial_title': 'Partially complete', + 'msg_install_partial': 'Succeeded: {success}\nFailed: {failed}', + 'msg_install_failed_title': 'Install failed', + 'msg_install_failed_all': 'All APK installs failed.', + 'msg_apks_dir_missing': 'apks folder not found.\nCreate an apks folder next to the program and place APK files in it.', + 'msg_apks_empty': 'No APK files found in the apks folder.', + 'quick_lang_title': 'Quick Language', + 'quick_lang_header': 'Select Target Language', + 'quick_lang_hint': 'Tap a language to switch the system locale. Reboot to apply.', + 'quick_lang_system': '⚙️ Open system language settings', + 'quick_lang_success_title': 'Set Successfully', + 'quick_lang_success': 'System language has been set to {language}.\n\nReboot the device to apply.', + 'quick_lang_failed_title': 'Set Failed', + 'quick_lang_failed': 'Language setting failed.', + 'quick_lang_names': ['🇨🇳 Chinese', 'English', 'Russian', 'French', 'Spanish', 'Portuguese', 'Italian', 'Arabic'], + 'debug_title': 'Debug Mode', + 'debug_prompt': 'Enter debug password:', + 'debug_password_verifying': 'Verifying debug mode password...', + 'debug_verify_failed': 'Debug mode password verification failed: {message}', + 'debug_status': '🔧 Debug Mode', + 'msg_debug_wrong_password': 'Wrong password', + 'status_debug': '🔧 Debug mode', + 'progress_loading': 'Preparing resources', + 'progress_loaded': 'Resources ready', + 'progress_preparing': 'Preparing resources', + 'progress_fetch_boot_key': 'Getting permission', + 'progress_reboot_fastboot': 'Getting permission', + 'progress_decrypt_init_boot': 'Getting permission', + 'progress_flash_init_boot': 'Getting permission', + 'progress_reboot_device': 'Getting permission', + 'progress_flashing': 'Flashing', + 'progress_flash_done': 'Flash complete', + 'progress_installing': 'Installing', + 'progress_installing_name': 'Installing ({name})', + 'progress_install_done': 'Install complete', + 'progress_done': 'Done', + 'log_device_disconnected': 'Device disconnected', + 'log_device_connected': 'Device connected', + 'log_no_package': 'Resource file is missing', + 'log_no_adb': 'adb not found. Place ADB files in this folder.', + 'log_no_fastboot': 'Runtime environment is incomplete', + 'log_vin': 'VIN: {vin}', + 'log_vin_unavailable': 'Unable to read VIN. Confirm the device is in factory mode.', + 'log_auth_checking': 'Checking authorization...', + 'log_auth_success': 'Authorization passed', + 'log_auth_failed': 'Authorization failed', + 'log_debug_skip_auth': 'Debug mode: skipping authorization', + 'log_vehicle_name': 'Vehicle name: {vehicle}', + 'log_data_prepare_failed': 'Resource initialization failed', + 'log_boot_challenge_failed': 'Permission failed', + 'log_boot_key_failed': 'Permission failed', + 'log_boot_key_len_error': 'Permission failed', + 'log_boot_key_success': 'Getting permission', + 'log_crypto_missing': 'Permission failed', + 'log_permission_resource_missing': 'Permission failed', + 'log_permission_resource_format_unsupported': 'Permission failed', + 'log_permission_resource_algorithm_unsupported': 'Permission failed', + 'log_permission_resource_decrypt_auth_failed': 'Permission failed', + 'log_permission_resource_decrypt_ready': 'Getting permission', + 'log_permission_resource_decrypt_failed': 'Permission failed', + 'log_fastboot_wait': 'Getting permission. Do not close the program or disconnect the data cable.', + 'log_fastboot_missing': 'Permission failed', + 'log_fastboot_enter_failed': 'Permission failed', + 'log_init_boot_flash_failed': 'Permission failed', + 'log_init_boot_flash_success': 'Getting permission', + 'log_fastboot_reboot_failed': 'Permission failed', + 'log_permission_success': 'Permission acquired', + 'log_permission_failed': 'Permission failed', + 'log_temp_img_deleted': 'Temporary file cleaned', + 'log_temp_img_delete_failed': 'Failed to clean temporary file', + 'log_need_adb': 'Connect the device first.', + 'log_no_vehicle_name': 'Resource initialization failed', + 'log_package_missing': 'Resource file is missing', + 'log_extract_password_missing': 'Resource initialization failed', + 'log_7za_missing': 'Runtime environment is incomplete', + 'log_extracting': 'Preparing resources...', + 'log_apps_missing': 'Warning: apps directory not found', + 'log_resource_invalid': 'Resource validation failed', + 'log_resource_ready': 'Resources ready', + 'log_resource_failed': 'Resource preparation failed. Check the network and try again.', + 'log_cache_invalid': 'Resource cache is invalid', + 'log_no_language_files': 'No language package files found', + 'log_flash_start': 'Starting language package flashing. Do not power off or restart the computer or vehicle head unit.', + 'log_install_success': 'Install succeeded', + 'log_install_failed': 'Install failed', + 'log_flash_item_failed': 'Language package flash failed: {current}/{total}', + 'log_flash_done_config': 'Language packages flashed. Running Mazda-EZ60 post-install configuration.', + 'log_flash_partial_config': 'Some language packages flashed. Continuing Mazda-EZ60 post-install configuration.', + 'log_flash_failed_config': 'Language package flashing failed. Still running Mazda-EZ60 post-install configuration.', + 'log_post_config_start': 'Running Mazda-EZ60 post-install configuration...', + 'log_overlay_enabled': 'Configuration item completed', + 'log_overlay_failed': 'Configuration item failed', + 'log_disabled_package': 'Cleanup item completed', + 'log_disable_package_failed': 'Cleanup item failed', + 'log_post_config_done': 'Mazda-EZ60 post-install configuration complete', + 'log_post_config_all_done': 'Mazda-EZ60 post-install configuration complete. Reboot the device to apply.', + 'log_post_config_partial': 'Mazda-EZ60 post-install configuration partly failed. Check the log.', + 'log_batch_install_start': 'Starting batch install for {count} APK file(s)...', + 'log_install_many_start': 'Starting install for {count} APK file(s)...', + 'log_install_done_all': 'Install complete: all {count} succeeded', + 'log_install_done_partial': 'Install complete: {success}/{count} succeeded', + 'log_install_failed_simple': 'Install failed', + 'log_rebooting': 'Device is rebooting...', + 'log_disable_ota_cancelled': 'Disable OTA operation cancelled', + 'log_disable_ota_success': 'System OTA disabled', + 'log_disable_ota_failed': 'Disable OTA failed', + 'log_pwd_success': 'Password query succeeded', + 'log_pwd_failed': 'Password query failed', + 'log_pwd_request_failed': 'Password query request failed', + 'log_debug_off': 'Debug mode disabled', + 'log_debug_on': 'Debug mode enabled - authorization/device checks skipped, detailed ADB logs shown', + 'log_env_config_failed_admin': 'Environment configuration failed. Run as administrator.', + 'log_env_config_failed': 'Environment configuration failed', + 'log_env_config_failed_detail': 'Environment configuration failed: {error}', + 'log_hotspot_opening': 'Opened hotspot settings. Detecting hotspot...', + 'log_hotspot_detected': 'Hotspot detected: {ssid} / {password}', + 'log_hotspot_not_detected': 'Hotspot not detected. Make sure it is turned on.', + 'err_extract_wrong_password': 'Resource preparation failed', + 'err_extract_data': 'Resource preparation failed', + 'err_extract_headers': 'Resource preparation failed', + 'err_extract_detail': 'Resource preparation failed', + 'err_extract_code': 'Resource preparation failed', + 'err_missing_apps': 'Resource directory is invalid', + 'err_empty_apps': 'Resource directory is invalid', + 'err_zero_apks': 'Resource file is invalid', + 'err_cmd_timeout': 'Command timed out', + 'err_fastboot_timeout': 'Permission failed', + 'err_push_failed': 'push failed: {error}', + 'err_install_failed': 'install failed: {error}', + 'err_decode_failed': 'Decode failed', + 'msg_start_failed_title': 'Error', + 'msg_start_failed': 'Program failed to start: {error}', + 'print_python_required': 'Error: Python 3.6 or later is required', + 'print_start_failed': 'Startup failed: {error}', + } + } + + self.base_dir = get_app_dir() + self.adb = find_tool('adb.exe', 'adb') + self.fastboot = find_tool('fastboot.exe', 'fastboot') + self.sz = find_tool('7za.exe') + self.package_file = find_resource("package.bin") + self.permission_resource_file = find_resource("EZ60_resource.dat") + self.extract_password = None + self.permission_resource_key = None + self.apps_dir = None + self.temp_dir = None + self.api_url = "https://api.changan.softwindy.cn/api/authorizations/auth-check" + self.boot_challenge_api_url = "https://api.changan.softwindy.cn/api/authorizations/boot-challenge" + self.boot_key_api_url = "https://api.changan.softwindy.cn/api/authorizations/boot-key" + self.debug_password_api_url = "https://api.changan.softwindy.cn/api/authorizations/verify-debug-mode-password" + self.tool_version = "Mazda-EZ60_1.2/1.2.0" + self.vin = None + self.vehicle_name = "" + self.device_connected = False + self._refreshing = False # 防止并发刷新 + self.debug_mode = False # 调试模式 + self.mazda_overlay_packages = [ + "com.tinnove.launcher.overlay", + "com.tinnove.scenemode.overlay", + "com.incall.dvr.overlay", + ] + self.mazda_disable_packages = [ + "com.carinno.p1", + "com.wtcl.electronicdirections", + "com.ximalaya.ting.android.car", + "com.tinnove.netease.music", + "com.migu.miguplay.car", + "cn.cmvideo.car.play", + "com.tinnove.carshow", + "com.tinnove.changba", + "com.qiyi.video.iv", + "com.changan.appmarket", + "com.incall.apps.softmanager" + ] + atexit.register(self.cleanup_cache_on_exit) + + # 设置样式 + self.setup_styles() + self.setup_ui() + self.root.protocol("WM_DELETE_WINDOW", self.on_close) + self.center_window() + self._clear_extracted_cache() + + # 检查环境 + self.check_environment() + + # 启动设备状态监控 + self.start_device_monitor() + + def setup_styles(self): + """设置自定义样式""" + style = ttk.Style() + style.theme_use('clam') + + # 配置主颜色 + style.configure('TFrame', background=self.colors['bg_dark']) + style.configure('TLabel', background=self.colors['bg_dark'], foreground=self.colors['text']) + style.configure('TLabelframe', background=self.colors['bg_dark'], foreground=self.colors['text']) + style.configure('TLabelframe.Label', background=self.colors['bg_dark'], foreground=self.colors['accent']) + + # 配置进度条 + style.configure('TProgressbar', + background=self.colors['accent'], + troughcolor=self.colors['bg_light'], + borderwidth=0) + + def setup_ui(self): + """设置UI界面""" + # 配置根窗口 + self.root.configure(bg=self.colors['bg_dark']) + + # 创建主框架 + main_frame = tk.Frame(self.root, bg=self.colors['bg_dark']) + main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) + + # 左侧内容区 + left_frame = tk.Frame(main_frame, bg=self.colors['bg_dark']) + left_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + + # 右侧提示面板 + right_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1, width=235) + right_frame.pack(side=tk.RIGHT, fill=tk.Y, padx=(10, 0)) + right_frame.pack_propagate(False) + + # 顶部标题栏 + title_frame = tk.Frame(left_frame, bg=self.colors['bg_dark'], height=65) + title_frame.pack(fill=tk.X, pady=(0, 10)) + title_frame.pack_propagate(False) + + title_content_frame = tk.Frame(title_frame, bg=self.colors['bg_dark']) + title_content_frame.pack(fill=tk.X, expand=True) + + # 标题 + self.title_label = tk.Label(title_content_frame, + text="🚀 " + self.t('title'), + font=('Microsoft YaHei', 18, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.title_label.pack(side=tk.LEFT, expand=True, padx=(0, 10)) + + self.btn_lang_switch = tk.Button(title_content_frame, text=self.t('lang_en'), + command=self.toggle_lang, + font=('Microsoft YaHei', 9, 'bold'), + fg='white', + bg=self.colors['accent'], + activeforeground='white', + activebackground=self.colors['accent_hover'], + relief=tk.FLAT, + cursor='hand2', + width=7, + height=1) + self.btn_lang_switch.pack(side=tk.RIGHT, padx=(8, 4)) + + # 工程密码查询区域 + pwd_query_frame = tk.Frame(left_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + pwd_query_frame.pack(fill=tk.X, pady=(0, 5), padx=5) + + pwd_query_row = tk.Frame(pwd_query_frame, bg=self.colors['bg_light']) + pwd_query_row.pack(fill=tk.X) + + self.pwd_query_label = tk.Label(pwd_query_row, text=self.t('pwd_query_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.pwd_query_label.pack(side=tk.LEFT, padx=(10, 5), pady=5) + + self.vin_input = tk.Entry(pwd_query_row, + font=('Consolas', 9), + bg='#2d2d3d', + fg='#636e72', + insertbackground='white', + relief=tk.FLAT, + width=20) + self.vin_input.insert(0, self.t('vin_placeholder')) + self.vin_input.bind("", self._on_vin_input_focus_in) + self.vin_input.bind("", self._on_vin_input_focus_out) + self.vin_input.pack(side=tk.LEFT, padx=5, pady=5) + + self.btn_query_pwd = tk.Button(pwd_query_row, text=self.t('btn_query_pwd'), + command=self.query_password_by_vin, + font=('Microsoft YaHei', 8), + fg='white', + bg=self.colors['accent'], + relief=tk.FLAT, + cursor='hand2') + self.btn_query_pwd.pack(side=tk.LEFT, padx=5, pady=5) + + self.pwd_result_label = tk.Label(pwd_query_row, text="", + font=('Microsoft YaHei', 9, 'bold'), + fg=self.colors['success'], + bg=self.colors['bg_light']) + self.pwd_result_label.pack(side=tk.LEFT, padx=10, pady=5) + + self.vin_query_hint_label = tk.Label(pwd_query_frame, text=self.t('vin_query_hint'), + font=('Microsoft YaHei', 8, 'bold'), + fg=self.colors['warning'], + bg=self.colors['bg_light'], + anchor='w') + self.vin_query_hint_label.pack(fill=tk.X, padx=(10, 10), pady=(0, 6)) + + + # 工厂模式提示 + factory_hint_frame = tk.Frame(left_frame, bg=self.colors['bg_dark']) + factory_hint_frame.pack(fill=tk.X, pady=(0, 3)) + self.hint_label = tk.Label(factory_hint_frame, text=self.t('hint_factory'), + font=('Microsoft YaHei', 8), + fg=self.colors['warning'], + bg=self.colors['bg_dark']) + self.hint_label.pack(side=tk.LEFT, padx=2) + + # 按钮区域(两排,每排5个) + button_frame = tk.Frame(left_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + button_frame.pack(fill=tk.X, pady=(0, 10), padx=5) + + # 按钮样式参数 + btn_params = { + 'font': ('Microsoft YaHei', 9), + 'fg': 'white', + 'relief': tk.FLAT, + 'cursor': 'hand2', + 'height': 1, + 'width': 14 + } + + # 第一排按钮 + row1_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) + row1_frame.pack(pady=(8, 4)) + + self.btn_permission = tk.Button(row1_frame, text=self.t('btn_permission'), + command=self.prepare_ez60_permission, + bg=self.colors['warning'], + **btn_params) + self.btn_permission.pack(side=tk.LEFT, padx=4) + + self.btn_push = tk.Button(row1_frame, text=self.t('btn_push'), + command=self.push_all_apks, + bg=self.colors['accent'], + **btn_params) + self.btn_push.pack(side=tk.LEFT, padx=4) + + self.btn_install_all = tk.Button(row1_frame, text=self.t('btn_install'), + command=self.install_apps, + bg=self.colors['accent'], + **btn_params) + self.btn_install_all.pack(side=tk.LEFT, padx=4) + + self.btn_language = tk.Button(row1_frame, text=self.t('btn_language'), + command=self.open_language_quick_set, + bg=self.colors['accent'], + **btn_params) + self.btn_language.pack(side=tk.LEFT, padx=4) + + # 第二排按钮 + row2_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) + row2_frame.pack(pady=(4, 8)) + + self.btn_timezone = tk.Button(row2_frame, text=self.t('btn_timezone'), + command=self.open_timezone_settings, + bg=self.colors['accent'], + **btn_params) + self.btn_timezone.pack(side=tk.LEFT, padx=4) + + self.btn_settings = tk.Button(row2_frame, text=self.t('btn_settings'), + command=self.open_android_settings, + bg=self.colors['accent'], + **btn_params) + self.btn_settings.pack(side=tk.LEFT, padx=4) + + self.btn_reboot = tk.Button(row2_frame, text=self.t('btn_reboot'), + command=self.reboot_device, + bg=self.colors['warning'], + **btn_params) + self.btn_reboot.pack(side=tk.LEFT, padx=4) + + self.btn_exit = tk.Button(row2_frame, text=self.t('btn_disable_upgrade'), + command=self.on_disable_upgrade, + bg=self.colors['error'], + **btn_params) + self.btn_exit.pack(side=tk.LEFT, padx=4) + + # 设备状态栏(横条) + status_bar_frame = tk.Frame(left_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + status_bar_frame.pack(fill=tk.X, pady=(0, 5)) + + # 状态指示器 + status_indicator_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) + status_indicator_frame.pack(side=tk.LEFT, padx=10, pady=5) + + self.status_indicator = tk.Canvas(status_indicator_frame, width=10, height=10, + bg=self.colors['bg_light'], highlightthickness=0) + self.status_indicator.pack(side=tk.LEFT) + self.status_dot = self.status_indicator.create_oval(2, 2, 8, 8, fill='#636e72') + + self.device_label = tk.Label(status_indicator_frame, text=self.t('device_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.device_label.pack(side=tk.LEFT, padx=(5, 3)) + + self.device_status_label = tk.Label(status_indicator_frame, text=self.t('status_detecting'), + font=('Microsoft YaHei', 9, 'bold'), + fg='#636e72', + bg=self.colors['bg_light']) + self.device_status_label.pack(side=tk.LEFT) + + # VIN信息 + vin_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) + vin_frame.pack(side=tk.LEFT, padx=20, pady=5) + self.vin_label_title = tk.Label(vin_frame, text=self.t('vin_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.vin_label_title.pack(side=tk.LEFT) + self.vin_label = tk.Label(vin_frame, text=self.t('vin_none'), + font=('Microsoft YaHei', 9, 'bold'), + fg='#636e72', + bg=self.colors['bg_light']) + self.vin_label.pack(side=tk.LEFT, padx=(5, 0)) + + # 授权状态 + auth_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) + auth_frame.pack(side=tk.LEFT, padx=20, pady=5) + self.auth_label_title = tk.Label(auth_frame, text=self.t('auth_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.auth_label_title.pack(side=tk.LEFT) + self.auth_label = tk.Label(auth_frame, text=self.t('auth_none'), + font=('Microsoft YaHei', 9, 'bold'), + fg='#636e72', + bg=self.colors['bg_light']) + self.auth_label.pack(side=tk.LEFT, padx=(5, 0)) + + # 刷新按钮 + self.btn_refresh = tk.Button(status_bar_frame, text=self.t('btn_refresh'), + command=lambda: self.refresh_device_status(force=True), + font=('Microsoft YaHei', 8), + fg=self.colors['accent'], + bg=self.colors['bg_light'], + relief=tk.FLAT, + cursor='hand2') + self.btn_refresh.pack(side=tk.RIGHT, padx=10, pady=5) + + # 解压进度条框架 + progress_frame = tk.Frame(left_frame, bg=self.colors['bg_dark']) + progress_frame.pack(fill=tk.X, pady=(5, 5)) + + self.progress_label = tk.Label(progress_frame, text="", + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark']) + self.progress_label.pack() + + self.progress = ttk.Progressbar(progress_frame, mode='determinate', style='TProgressbar') + self.progress.pack(fill=tk.X, pady=(2, 0)) + + # 推送进度条 + self.push_progress_label = tk.Label(progress_frame, text="", + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark']) + + self.push_progress = ttk.Progressbar(progress_frame, mode='determinate', style='TProgressbar') + + # 日志区域(下方) + log_card = tk.Frame(left_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + log_card.pack(fill=tk.BOTH, expand=True, pady=(5, 0)) + + # 日志标题栏 + log_title_frame = tk.Frame(log_card, bg=self.colors['bg_dark'], height=30) + log_title_frame.pack(fill=tk.X) + log_title_frame.pack_propagate(False) + + self.log_title_label = tk.Label(log_title_frame, text=self.t('log_title'), + font=('Microsoft YaHei', 10, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.log_title_label.pack(side=tk.LEFT, padx=10) + + self.btn_clear = tk.Button(log_title_frame, text=self.t('btn_clear_log'), + command=self.clear_log, + font=('Microsoft YaHei', 8), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark'], + relief=tk.FLAT, + cursor='hand2') + self.btn_clear.pack(side=tk.RIGHT, padx=10) + + # 日志文本框 + text_frame = tk.Frame(log_card, bg=self.colors['bg_light']) + text_frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5) + + self.log_text = scrolledtext.ScrolledText(text_frame, + height=12, + wrap=tk.WORD, + font=('Consolas', 9), + bg='#2d2d3d', + fg='#e0e0e0', + insertbackground='white', + relief=tk.FLAT, + borderwidth=0) + self.log_text.pack(fill=tk.BOTH, expand=True) + + # 配置日志颜色标签 + self.log_text.tag_config('INFO', foreground='#74b9ff') + self.log_text.tag_config('SUCCESS', foreground='#55efc4') + self.log_text.tag_config('ERROR', foreground='#ff7675') + self.log_text.tag_config('WARNING', foreground='#ffeaa7') + self.log_text.tag_config('CMD', foreground='#a29bfe') + + # 底部状态栏 + bottom_status = tk.Frame(left_frame, bg=self.colors['bg_light'], height=22) + bottom_status.pack(fill=tk.X, pady=(5, 0)) + bottom_status.pack_propagate(False) + + self.status_text = tk.Label(bottom_status, text=self.t('status_ready'), + font=('Microsoft YaHei', 8), + fg=self.colors['text_secondary'], + bg=self.colors['bg_light']) + self.status_text.pack(side=tk.LEFT, padx=10) + + # 主题切换按钮 + self.btn_theme_switch = tk.Button(bottom_status, text=self.t('theme_dark'), + command=self.toggle_theme, + font=('Microsoft YaHei', 8), + fg=self.colors['accent'], + bg=self.colors['bg_light'], + relief=tk.FLAT, cursor='hand2') + self.btn_theme_switch.pack(side=tk.RIGHT, padx=5) + + # 调试模式快捷键 + self.root.bind('', self._toggle_debug) + + # ========== 右侧提示面板 ========== + # 热点信息卡片 + hotspot_card = tk.Frame(right_frame, bg=self.colors['bg_dark'], relief=tk.RAISED, bd=1) + hotspot_card.pack(fill=tk.X, padx=5, pady=(10, 5)) + + hotspot_title_row = tk.Frame(hotspot_card, bg=self.colors['bg_dark']) + hotspot_title_row.pack(anchor='w', fill=tk.X, padx=10, pady=(8, 5)) + + self.hotspot_icon_label = tk.Label(hotspot_title_row, text=self.t('hotspot_icon'), + font=('Segoe UI Emoji', 12), + fg=self.colors['accent'], + bg=self.colors['bg_dark'], + width=2, + anchor='center') + self.hotspot_icon_label.pack(side=tk.LEFT, padx=(0, 4)) + + self.hotspot_title_label = tk.Label(hotspot_title_row, text=self.t('hotspot_title'), + font=('Microsoft YaHei', 11, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark'], + anchor='w') + self.hotspot_title_label.pack(side=tk.LEFT, fill=tk.X, expand=True) + + self.hotspot_ssid_label = tk.Label(hotspot_card, text=self.t('hotspot_name_detecting'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_dark']) + self.hotspot_ssid_label.pack(anchor='w', padx=10, pady=2) + + self.hotspot_pwd_label = tk.Label(hotspot_card, text=self.t('hotspot_pwd_default'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_dark']) + self.hotspot_pwd_label.pack(anchor='w', padx=10, pady=2) + + self.hotspot_status_label = tk.Label(hotspot_card, text=self.t('hotspot_status_off'), + font=('Microsoft YaHei', 9), + fg=self.colors['warning'], + bg=self.colors['bg_dark']) + self.hotspot_status_label.pack(anchor='w', padx=10, pady=2) + + self.btn_hotspot = tk.Button(hotspot_card, text=self.t('hotspot_start'), + command=self.start_hotspot_action, + font=('Microsoft YaHei', 8), + fg='white', + bg=self.colors['accent'], + relief=tk.FLAT, + cursor='hand2') + self.btn_hotspot.pack(pady=8, padx=10, fill=tk.X) + + # 分隔线 + tk.Frame(right_frame, bg=self.colors['border'], height=1).pack(fill=tk.X, padx=8, pady=5) + + # 使用提示卡片 + hint_card = tk.Frame(right_frame, bg=self.colors['bg_dark'], relief=tk.RAISED, bd=1) + hint_card.pack(fill=tk.X, padx=5, pady=5) + + hint_title_row = tk.Frame(hint_card, bg=self.colors['bg_dark']) + hint_title_row.pack(anchor='w', fill=tk.X, padx=10, pady=(8, 5)) + + self.hint_icon_label = tk.Label(hint_title_row, text=self.t('hint_icon'), + font=('Segoe UI Emoji', 12), + fg=self.colors['warning'], + bg=self.colors['bg_dark'], + width=2, + anchor='center') + self.hint_icon_label.pack(side=tk.LEFT, padx=(0, 4)) + + self.hint_title_label = tk.Label(hint_title_row, text=self.t('hint_title'), + font=('Microsoft YaHei', 11, 'bold'), + fg=self.colors['warning'], + bg=self.colors['bg_dark'], + anchor='w') + self.hint_title_label.pack(side=tk.LEFT, fill=tk.X, expand=True) + + self.hint_lines_frame = tk.Frame(hint_card, bg=self.colors['bg_dark']) + self.hint_lines_frame.pack(fill=tk.X, padx=10, pady=(0, 10)) + self._render_hint_lines() + + # 绑定悬停效果 + self.bind_hover_effects() + + def bind_hover_effects(self): + """绑定按钮悬停效果""" + buttons = [self.btn_permission, self.btn_push, self.btn_install_all, + self.btn_language, self.btn_timezone, self.btn_settings, + self.btn_reboot, self.btn_clear, self.btn_exit, self.btn_query_pwd, + self.btn_hotspot] + + for btn in buttons: + original_bg = btn.cget('bg') + def on_enter(e, btn=btn, bg=original_bg): + btn.config(bg=self.lighten_color(bg)) + def on_leave(e, btn=btn, bg=original_bg): + btn.config(bg=bg) + btn.bind('', on_enter) + btn.bind('', on_leave) + + def lighten_color(self, color): + """调亮颜色""" + if color == self.colors['accent']: + return self.colors['accent_hover'] + elif color == self.colors['warning']: + return '#feca57' + elif color == self.colors['info']: + return '#0984e3' + elif color == self.colors['error']: + return '#e17055' + elif color == self.colors['success']: + return '#00a884' + return color + + def set_window_icon(self): + """Set the Tk window/taskbar icon at runtime; PyInstaller --icon only sets the exe file icon.""" + try: + icon_path = find_resource("app.ico") + if icon_path.exists(): + self.root.iconbitmap(str(icon_path)) + if sys.platform == 'win32': + import ctypes + hwnd = self.root.winfo_id() + image = ctypes.windll.user32.LoadImageW( + None, str(icon_path), 1, 0, 0, 0x00000010 + ) + if image: + ctypes.windll.user32.SendMessageW(hwnd, 0x0080, 0, image) + ctypes.windll.user32.SendMessageW(hwnd, 0x0080, 1, image) + except Exception: + pass + + def center_window(self): + """将窗口居中显示在屏幕上""" + self.root.update_idletasks() + screen_w = self.root.winfo_screenwidth() + screen_h = self.root.winfo_screenheight() + win_w = self.root.winfo_reqwidth() + win_h = self.root.winfo_reqheight() + x = (screen_w - win_w) // 2 + y = (screen_h - win_h) // 2 + self.root.geometry(f"+{x}+{y}") + + def run_on_ui_thread(self, func, *args, **kwargs): + """将函数调度到主线程执行,确保线程安全""" + self.root.after(0, lambda: func(*args, **kwargs)) + + def t(self, key): + return self.T.get(self.lang, self.T['zh']).get(key, key) + + def tf(self, key, **kwargs): + try: + return self.t(key).format(**kwargs) + except Exception: + return self.t(key) + + def is_placeholder_vin(self, value): + return value in ( + self.T['zh'].get('vin_placeholder'), + self.T['en'].get('vin_placeholder'), + ) + + def toggle_lang(self): + self.lang = 'en' if self.lang == 'zh' else 'zh' + self.btn_lang_switch.config(text=self.t('lang_en') if self.lang == 'zh' else self.t('lang_zh')) + self._refresh_ui_texts() + self.log(self.t('log_lang_changed'), "INFO") + + def toggle_theme(self): + if self.theme == 'dark': + self.colors = dict(self.colors_light) + self.theme = 'light' + self.btn_theme_switch.config(text=self.t('theme_dark')) + else: + self.colors = dict(self.colors_dark) + self.theme = 'dark' + self.btn_theme_switch.config(text=self.t('theme_light')) + self._apply_theme() + + def _apply_theme(self): + c = self.colors + self.root.configure(bg=c['bg_dark']) + style = ttk.Style() + style.configure('TFrame', background=c['bg_dark']) + style.configure('TLabel', background=c['bg_dark'], foreground=c['text']) + style.configure('TLabelframe', background=c['bg_dark'], foreground=c['text']) + style.configure('TLabelframe.Label', background=c['bg_dark'], foreground=c['accent']) + style.configure('TProgressbar', background=c['accent'], troughcolor=c['bg_light'], borderwidth=0) + self.log_text.tag_config('INFO', foreground='#74b9ff') + self.log_text.tag_config('SUCCESS', foreground='#55efc4') + self.log_text.tag_config('ERROR', foreground='#ff7675') + self.log_text.tag_config('WARNING', foreground='#ffeaa7') + self.log_text.tag_config('CMD', foreground='#a29bfe') + if self.theme == 'light': + self.log_text.configure(bg='#ffffff', fg='#2d3436') + else: + self.log_text.configure(bg='#2d2d3d', fg='#e0e0e0') + + def _render_hint_lines(self): + if not hasattr(self, 'hint_lines_frame'): + return + for child in self.hint_lines_frame.winfo_children(): + child.destroy() + for line in self.t('hint_lines'): + tk.Label(self.hint_lines_frame, + text=line, + font=('Microsoft YaHei', 8), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark'], + justify=tk.LEFT, + anchor='w', + wraplength=190).pack(anchor='w', fill=tk.X, pady=1) + + def _refresh_ui_texts(self): + t = self.t + widgets = [ + (getattr(self, 'title_label', None), 'title', None), + (getattr(self, 'pwd_query_label', None), 'pwd_query_label', None), + (getattr(self, 'btn_permission', None), 'btn_permission', None), + (getattr(self, 'btn_push', None), 'btn_push', None), + (getattr(self, 'btn_install_all', None), 'btn_install', None), + (getattr(self, 'btn_language', None), 'btn_language', None), + (getattr(self, 'btn_timezone', None), 'btn_timezone', None), + (getattr(self, 'btn_settings', None), 'btn_settings', None), + (getattr(self, 'btn_reboot', None), 'btn_reboot', None), + (getattr(self, 'btn_exit', None), 'btn_disable_upgrade', None), + (getattr(self, 'btn_clear', None), 'btn_clear_log', None), + (getattr(self, 'btn_query_pwd', None), 'btn_query_pwd', None), + (getattr(self, 'log_title_label', None), 'log_title', None), + (getattr(self, 'status_text', None), 'status_ready', None), + (getattr(self, 'device_label', None), 'device_label', None), + (getattr(self, 'vin_label_title', None), 'vin_label', None), + (getattr(self, 'auth_label_title', None), 'auth_label', None), + (getattr(self, 'btn_refresh', None), 'btn_refresh', None), + (getattr(self, 'hint_label', None), 'hint_factory', None), + (getattr(self, 'vin_query_hint_label', None), 'vin_query_hint', None), + (getattr(self, 'hotspot_icon_label', None), 'hotspot_icon', None), + (getattr(self, 'hotspot_title_label', None), 'hotspot_title', None), + (getattr(self, 'btn_hotspot', None), 'hotspot_start', None), + (getattr(self, 'hint_icon_label', None), 'hint_icon', None), + (getattr(self, 'hint_title_label', None), 'hint_title', None), + ] + for w, key, _ in widgets: + if not w: + continue + text = t(key) + if key == 'title': + text = "🚀 " + text + w.config(text=text) + self.btn_theme_switch.config(text=t('theme_light') if self.theme == 'dark' else t('theme_dark')) + self.btn_lang_switch.config(text=t('lang_en') if self.lang == 'zh' else t('lang_zh')) + if self.is_placeholder_vin(self.vin_input.get()): + self.vin_input.delete(0, tk.END) + self.vin_input.insert(0, t('vin_placeholder')) + self._render_hint_lines() + self.refresh_hotspot_display() + if self.vin: + self._update_device_status_impl(self.device_connected, self.vin, + getattr(self, '_last_authorized', False)) + + def _sanitize_user_log_message(self, message): + """Hide low-level commands, paths, package names, and APK names in normal logs. + VIN and vehicle names are operator-facing identifiers and are intentionally kept visible. + """ + text = str(message) + replacements = [ + (r'com\.[\w.\-]+', '相关应用'), + (r'cn\.[\w.\-]+', '相关应用'), + (r'[\w.\-]+\.apk', '文件'), + (r'[\w.\-]+\.img', '文件'), + (r'EZ60_resource\.dat', '资源文件'), + (r'package\.bin', '资源文件'), + (r'7za(?:\.exe)?', '资源工具'), + (r'adb(?:\.exe)?', '设备连接工具'), + (r'fastboot(?:\.exe)?', '设备工具'), + (r'init_boot', '系统资源'), + (r'pm\s+\S+', '系统操作'), + (r'cmd\s+overlay\s+\S+', '系统配置'), + (r'(? 0 + if has_app: + ok, reason = self._validate_extracted_apks() + if not ok: + self.log(self.tf('log_cache_invalid', reason=reason), "ERROR") + self._clear_extracted_cache() + return False + return has_app + + def _validate_extracted_apks(self): + if not self.apps_dir or not self.apps_dir.exists(): + return False, self.t('err_missing_apps') + apks = list(self.apps_dir.glob("*.apk")) + if not apks: + return False, self.t('err_empty_apps') + zero_apks = [apk.name for apk in apks if apk.stat().st_size <= 0] + if zero_apks: + preview = ", ".join(zero_apks[:5]) + suffix = "..." if len(zero_apks) > 5 else "" + return False, self.tf('err_zero_apks', files=f"{preview}{suffix}") + return True, "" + + def _cache_dir_path(self): + local_appdata = os.environ.get('LOCALAPPDATA', os.path.expanduser('~\\AppData\\Local')) + return Path(local_appdata) / ".cache" / "system" / ".android" / self.CACHE_DIR_NAME + + def _remove_dir_tree(self, path): + if not path or not path.exists(): + return + for _ in range(3): + try: + if sys.platform == 'win32': + subprocess.run( + f'attrib -r -s -h "{path}" /s /d', + shell=True, + capture_output=True, + creationflags=subprocess.CREATE_NO_WINDOW + ) + shutil.rmtree(path, ignore_errors=False) + return + except Exception: + time.sleep(0.3) + shutil.rmtree(path, ignore_errors=True) + + def _clear_extracted_cache(self): + cache_dirs = [] + if self.temp_dir: + cache_dirs.append(self.temp_dir) + cache_dirs.append(self._cache_dir_path()) + + seen = set() + for cache_dir in cache_dirs: + try: + resolved = cache_dir.resolve() + except Exception: + resolved = cache_dir + if resolved in seen: + continue + seen.add(resolved) + self._remove_dir_tree(cache_dir) + + time.sleep(0.2) + self.apps_dir = None + self.temp_dir = None + + def _schedule_cache_cleanup_after_exit(self): + if sys.platform != 'win32': + return + cache_dir = str(self._cache_dir_path()) + ps_command = ( + "Start-Sleep -Seconds 2; " + f"$p = '{cache_dir}'; " + "if (Test-Path -LiteralPath $p) { " + "attrib -r -s -h $p /s /d 2>$null; " + "Remove-Item -LiteralPath $p -Recurse -Force -ErrorAction SilentlyContinue " + "}" + ) + try: + subprocess.Popen( + ['powershell', '-NoProfile', '-ExecutionPolicy', 'Bypass', '-WindowStyle', 'Hidden', '-Command', ps_command], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + stdin=subprocess.DEVNULL, + creationflags=subprocess.CREATE_NO_WINDOW + ) + except Exception: + pass + + def cleanup_cache_on_exit(self): + self._clear_extracted_cache() + self._schedule_cache_cleanup_after_exit() + + def on_close(self): + self.cleanup_cache_on_exit() + self.root.destroy() + + def _format_extract_error(self, err_msg, return_code): + text = (err_msg or "").lower() + if any(marker in text for marker in ( + "wrong password", + "incorrect password", + "password is incorrect", + "data error in encrypted file", + "can not open encrypted archive", + )): + return self.t('err_extract_wrong_password') + if "data error" in text: + return self.t('err_extract_data') + if "headers error" in text or "unexpected end" in text: + return self.t('err_extract_headers') + if err_msg.strip(): + return self.tf('err_extract_detail', error=err_msg.strip()[:300]) + return self.tf('err_extract_code', code=return_code) + + def _decode_7z_output(self, *outputs): + """解码 7za 输出,兼容中文 Windows 控制台编码。""" + parts = [] + for output in outputs: + if not output: + continue + for enc in ('gbk', 'utf-8'): + try: + parts.append(output.decode(enc, errors='replace')) + break + except Exception: + continue + return ''.join(parts).strip() + + def _extract_7za_with_progress(self): + """流式运行 7za 并解析百分比输出。""" + cmd = [self.sz, 'x', str(self.package_file), f'-p{self.extract_password}', f'-o{self.temp_dir}', '-y'] + supports_progress = getattr(self, '_seven_zip_supports_progress_stream', lambda: False)() + if supports_progress: + cmd.extend(['-bsp1', '-bso0', '-bse1']) + + if getattr(self, 'debug_mode', False): + self.log(f"7ZA CMD: {subprocess.list2cmdline(cmd)}", "CMD") + + proc = subprocess.Popen( + cmd, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + stdin=subprocess.DEVNULL, + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + + output = bytearray() + progress_window = bytearray() + last_percent = -1 + + while True: + chunk = proc.stdout.read(1) if proc.stdout else b"" + if not chunk: + if proc.poll() is not None: + break + time.sleep(0.05) + continue + + output.extend(chunk) + progress_window.extend(chunk) + if len(progress_window) > 1024: + del progress_window[:-1024] + if not self.debug_mode and len(output) > 60000: + del output[:-60000] + + matches = re.findall(rb"(\d{1,3})%", bytes(progress_window[-512:])) + if matches: + percent = min(100, int(matches[-1])) + if percent != last_percent: + last_percent = percent + self.update_progress(percent, 100, self.t('progress_loading')) + + return_code = proc.wait() + decoded_output = self._decode_7z_output(bytes(output)) + + if getattr(self, 'debug_mode', False): + self.log(f"7ZA RET: {return_code}", "CMD" if return_code == 0 else "ERROR") + if decoded_output.strip(): + self.log(f"7ZA OUTPUT:\n{decoded_output.strip()}", "CMD" if return_code == 0 else "ERROR") + + return return_code, decoded_output + + def _seven_zip_supports_progress_stream(self): + """检测当前 7za 是否支持进度流参数。""" + try: + result = subprocess.run( + [self.sz], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + output = self._decode_7z_output(result.stdout, result.stderr) + return '-bs{o|e|p}' in output + except Exception: + return False + + def extract_package_silent(self): + """静默解压语言包(带进度)—— 逸动版仅处理 app 目录""" + if not self.package_file.exists(): + self.log(self.tf('log_package_missing', path=self.package_file), "ERROR") + return False + + if not self.extract_password: + self.log(self.t('log_extract_password_missing'), "ERROR") + return False + + if not os.path.exists(self.sz): + self.log(self.tf('log_7za_missing', path=self.sz), "ERROR") + return False + + try: + # 使用用户目录,无需管理员权限 + hidden_path = self._cache_dir_path().parent + hidden_path.mkdir(parents=True, exist_ok=True) + + self.temp_dir = self._cache_dir_path() + + # 如果已存在,先清理 + if self.temp_dir.exists(): + shutil.rmtree(self.temp_dir, ignore_errors=True) + time.sleep(0.5) + + self.temp_dir.mkdir(parents=True, exist_ok=True) + + # 设置隐藏属性(Windows) + if sys.platform == 'win32': + subprocess.run(f'attrib +h "{self.temp_dir.parent}"', shell=True, capture_output=True) + subprocess.run(f'attrib +h "{self.temp_dir}"', shell=True, capture_output=True) + + self.log(self.t('log_extracting'), "INFO") + + self.update_progress(0, 100, self.t('progress_loading')) + return_code, err_msg = self._extract_7za_with_progress() + if return_code != 0: + self.log(self._format_extract_error(err_msg, return_code), "ERROR") + self._clear_extracted_cache() + return False + self.update_progress(100, 100, self.t('progress_loaded')) + + # 查找 app 目录(逸动无 priv-app) + self.apps_dir = None + + app_candidates = list(self.temp_dir.rglob("apps")) + if app_candidates: + self.apps_dir = app_candidates[0] + + if not self.apps_dir: + self.log(self.t('log_apps_missing'), "WARNING") + self._clear_extracted_cache() + return False + + apk_count = len(list(self.apps_dir.glob("*.apk"))) + ok, reason = self._validate_extracted_apks() + if not ok: + self.log(self.tf('log_resource_invalid', reason=reason), "ERROR") + self._clear_extracted_cache() + return False + self.log(self.tf('log_resource_ready', count=apk_count), "SUCCESS") + return True + + except Exception as e: + if getattr(self, 'debug_mode', False): + self.log(self.tf('log_data_prepare_failed', error=str(e)), "ERROR") + import traceback + self.log(traceback.format_exc(), "ERROR") + else: + self.log(self.t('log_resource_failed'), "ERROR") + self._clear_extracted_cache() + return False + + def check_environment(self): + """检查环境""" + # 修改hosts文件 + self.modify_hosts() + # 刷新热点显示 + self.refresh_hotspot_display() + try: + result = subprocess.run(f'{self.adb} version', shell=True, capture_output=True, text=True) + if result.returncode == 0: + self.refresh_device_status() + if not self.package_file.exists(): + self.log(self.t('log_no_package'), "WARNING") + if not os.path.exists(self.fastboot): + self.log(self.t('log_no_fastboot'), "WARNING") + else: + self.log(self.t('log_no_adb'), "ERROR") + except FileNotFoundError: + self.log(self.t('log_no_adb'), "ERROR") + + def refresh_device_status(self, force=False): + """刷新设备状态 —— 逸动版使用 ca.car.vin 获取 VIN""" + # 防止并发刷新(手动点击「检查」时强制忽略锁) + if self._refreshing and not force: + return + self._refreshing = True + + def refresh(): + was_connected = self.device_connected + + # 检查设备连接 + result = subprocess.run(f'{self.adb} -d devices', shell=True, capture_output=True, text=True) + lines = result.stdout.strip().split('\n') + devices = [line for line in lines[1:] if line.strip() and 'device' in line and 'offline' not in line] + + if devices: + if not was_connected: + self.log(self.t('log_device_connected'), "SUCCESS") + + # 获取VIN —— 逸动车型使用 ca.car.vin + success, vin_output = self.run_adb_shell( + 'settings get system ca.car.vin') + vin = vin_output.strip() if success else '' + + if vin: + self.log(self.tf('log_vin', vin=vin), "SUCCESS") + authorized = self.check_authorization(vin) + self.update_device_status(True, vin, authorized) + else: + self.log(self.t('log_vin_unavailable'), "WARNING") + self.update_device_status(True, None, False) + else: + if was_connected: + self.log(self.t('log_device_disconnected'), "WARNING") + self.update_device_status(False) + + self._refreshing = False + + threading.Thread(target=refresh, daemon=True).start() + + def query_authorization_info(self, vin): + url = f"{self.api_url}?vin={vin}" + req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + payload = data.get('data', {}) if isinstance(data, dict) else {} + vehicle_name = payload.get('vehicleName') or payload.get('vehicle_name') or "" + vehicle_name = str(vehicle_name).strip() + if data.get('authorized') is True and vehicle_name: + self.vehicle_name = vehicle_name + return data.get('authorized') is True, vehicle_name, data + + def _post_json(self, url, payload, timeout=10): + body = json.dumps(payload).encode('utf-8') + req = Request( + url, + data=body, + method='POST', + headers={ + 'User-Agent': 'Mozilla/5.0', + 'Content-Type': 'application/json', + }, + ) + with urlopen(req, timeout=timeout) as response: + return json.loads(response.read().decode('utf-8')) + + def check_authorization(self, vin): + """检查授权""" + if self.debug_mode: + self.log(self.t('log_debug_skip_auth'), "WARNING") + return True + self.log(self.t('log_auth_checking'), "SUCCESS") + + try: + authorized, vehicle_name, _ = self.query_authorization_info(vin) + if authorized: + self.log(self.t('log_auth_success'), "SUCCESS") + if vehicle_name: + self.log(self.tf('log_vehicle_name', vehicle=vehicle_name), "SUCCESS") + return True + self.log(self.t('log_auth_failed'), "ERROR") + return False + + except Exception: + if self.debug_mode: + import traceback + self.log(traceback.format_exc(), "ERROR") + self.log(self.t('log_auth_failed'), "ERROR") + return False + + def fetch_package_password(self): + """从服务端获取资源包解压密码""" + if not self.vin: + self.log(self.t('log_need_adb'), "ERROR") + return False + + try: + vehicle_name = self.vehicle_name + if not vehicle_name: + authorized, vehicle_name, _ = self.query_authorization_info(self.vin) + if not authorized: + self.log(self.t('log_auth_failed'), "ERROR") + return False + if not vehicle_name: + self.log(self.t('log_no_vehicle_name'), "ERROR") + return False + + pwd_api_url = "https://api.changan.softwindy.cn/api/authorizations/package-key" + query = urlencode({ + "vin": self.vin, + "vehicleName": vehicle_name, + }) + url = f"{pwd_api_url}?{query}" + if self.debug_mode: + self.log(f"PACKAGE KEY URL: {url}", "CMD") + req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + + if data.get('success') and 'data' in data and 'password' in data['data']: + self.extract_password = data['data']['password'] + if self.debug_mode: + self.log("PACKAGE KEY: password received", "CMD") + return True + else: + if self.debug_mode: + self.log(f"PACKAGE KEY RESPONSE: {data}", "CMD") + self.log(self.tf('log_data_prepare_failed', error=data.get('message', 'unknown error')), "ERROR") + return False + + except Exception as e: + if self.debug_mode: + import traceback + self.log(traceback.format_exc(), "ERROR") + self.log(self.tf('log_data_prepare_failed', error=str(e)), "ERROR") + return False + + def push_single_apk(self, apk_path, apk_name): + """推送单个APK到设备并安装,返回 (成功, 错误信息)""" + temp_apk_path = f"/data/local/tmp/{apk_name}.apk" + + ok, err = self.run_adb_command(f'adb -d push "{apk_path}" {temp_apk_path}') + if not ok: + return False, self.tf('err_push_failed', error=err) + + ok, err = self.run_adb_shell(f'pm install -r -d {temp_apk_path}') + self.run_adb_shell(f'rm -f {temp_apk_path}') + if not ok: + return False, self.tf('err_install_failed', error=err) + + return True, "" + + def collect_boot_device_info(self): + info = { + "vin": self.vin or "", + "toolVersion": self.tool_version, + } + ok, output = self.run_adb_command('adb -d get-serialno') + if ok: + info["adbSerial"] = output.strip() + + props = { + "ro.serialno": "roSerialno", + "ro.boot.serialno": "roBootSerialno", + "ro.product.manufacturer": "manufacturer", + "ro.product.model": "model", + "ro.product.device": "device", + "ro.build.fingerprint": "fingerprint", + } + for prop, key in props.items(): + ok, output = self.run_adb_shell(f'getprop {prop}') + if ok: + info[key] = output.strip() + return {k: str(v).strip() for k, v in info.items() if str(v).strip()} + + def _decode_key_material(self, key_text): + text = str(key_text).strip() + if text.startswith("sha256:"): + return bytes.fromhex(text.split(":", 1)[1]) + if len(text) == 64 and all(c in '0123456789abcdefABCDEF' for c in text): + return bytes.fromhex(text) + padded = text + ("=" * (-len(text) % 4)) + return base64.urlsafe_b64decode(padded.encode('ascii')) + + def fetch_permission_resource_key(self): + """通过 boot challenge 协议获取 EZ60 init_boot 资源解密密钥。""" + if self.permission_resource_key: + return True + if not self.vin: + self.log(self.t('log_need_adb'), "ERROR") + return False + + try: + device_info = self.collect_boot_device_info() + challenge_data = self._post_json(self.boot_challenge_api_url, { + "vin": self.vin, + "toolVersion": self.tool_version, + "deviceInfo": device_info, + }) + challenge_payload = challenge_data.get('data', {}) if isinstance(challenge_data, dict) else {} + challenge_id = str(challenge_payload.get('challengeId') or '').strip() + nonce = str(challenge_payload.get('nonce') or '').strip() + if not challenge_data.get('success') or not challenge_id or not nonce: + self.log(self.tf('log_boot_challenge_failed', error=challenge_data.get('message', 'unknown error')), "ERROR") + return False + + key_data = self._post_json(self.boot_key_api_url, { + "vin": self.vin, + "challengeId": challenge_id, + "nonce": nonce, + "timestamp": int(time.time() * 1000), + "toolVersion": self.tool_version, + "deviceInfo": device_info, + }) + key_payload = key_data.get('data', {}) if isinstance(key_data, dict) else {} + key_text = key_payload.get('sessionKey') + if not key_data.get('success') or not key_text: + self.log(self.tf('log_boot_key_failed', error=key_data.get('message', 'unknown error')), "ERROR") + return False + key_bytes = self._decode_key_material(key_text) + if len(key_bytes) != 32: + self.log(self.t('log_boot_key_len_error'), "ERROR") + return False + self.permission_resource_key = key_bytes + self.log(self.t('log_boot_key_success'), "INFO") + return True + except Exception as e: + if self.debug_mode: + import traceback + self.log(traceback.format_exc(), "ERROR") + self.log(self.tf('log_boot_key_failed', error=str(e)), "ERROR") + return False + + def _parse_permission_resource_payload(self, blob): + if blob.startswith(b'EZ60R2\x00'): + header_len = struct.unpack('>I', blob[7:11])[0] + header_start = 11 + header_end = header_start + header_len + payload = json.loads(blob[header_start:header_end].decode('utf-8')) + ciphertext = blob[header_end:] + return payload, ciphertext + if blob.startswith(b'Q05R2\x00'): + header_len = struct.unpack('>I', blob[6:10])[0] + header_start = 10 + header_end = header_start + header_len + payload = json.loads(blob[header_start:header_end].decode('utf-8')) + ciphertext = blob[header_end:] + return payload, ciphertext + + payload = json.loads(blob.decode('utf-8')) + ciphertext = base64.urlsafe_b64decode(payload['ciphertext'] + "=" * (-len(payload['ciphertext']) % 4)) + return payload, ciphertext + + def decrypt_permission_resource_to_temp_file(self): + """解密 EZ60_resource.dat 到随机临时 img 文件,调用者必须尽快删除。""" + if AESGCM is None: + self.log(self.t('log_crypto_missing'), "ERROR") + return None + if not self.permission_resource_file.exists(): + self.log(self.tf('log_permission_resource_missing', path=self.permission_resource_file), "ERROR") + return None + if not self.fetch_permission_resource_key(): + return None + + try: + blob = self.permission_resource_file.read_bytes() + payload, ciphertext = self._parse_permission_resource_payload(blob) + if payload.get('format') not in ('ez60-resource-v2', 'q05-lidar-resource-v2', 'q05-lidar-resource-v1'): + self.log(self.t('log_permission_resource_format_unsupported'), "ERROR") + return None + if payload.get('cipher') != 'AES-256-GCM': + self.log(self.t('log_permission_resource_algorithm_unsupported'), "ERROR") + return None + + nonce = base64.urlsafe_b64decode(payload['nonce'] + "=" * (-len(payload['nonce']) % 4)) + aad = payload.get('aad', 'Mazda-EZ60 init_boot resource v1').encode('utf-8') + plain = AESGCM(self.permission_resource_key).decrypt(nonce, ciphertext, aad) + if payload.get('compression') == 'zlib': + plain = zlib.decompress(plain) + + expected_sha = payload.get('sha256', '').lower() + actual_sha = hashlib.sha256(plain).hexdigest() + if expected_sha and actual_sha != expected_sha: + self.log(self.t('log_permission_resource_decrypt_auth_failed'), "ERROR") + return None + + fd, temp_name = tempfile.mkstemp(prefix='ez60_', suffix='.img') + try: + with os.fdopen(fd, 'wb') as fp: + fp.write(plain) + fp.flush() + os.fsync(fp.fileno()) + finally: + plain = b'' + self.log(self.t('log_permission_resource_decrypt_ready'), "INFO") + return Path(temp_name) + except Exception as e: + if self.debug_mode: + import traceback + self.log(traceback.format_exc(), "ERROR") + self.log(self.tf('log_permission_resource_decrypt_failed', error=str(e) or e.__class__.__name__), "ERROR") + return None + + def secure_delete_file(self, path): + """尽力覆盖并删除临时镜像。""" + try: + p = Path(path) + if not p.exists(): + return + size = p.stat().st_size + with p.open('r+b') as fp: + first_chunk = min(size, 1024 * 1024) + fp.write(os.urandom(first_chunk)) + remaining = size - first_chunk + zero = b'\x00' * 1024 * 1024 + while remaining > 0: + chunk = min(remaining, len(zero)) + fp.write(zero[:chunk]) + remaining -= chunk + fp.flush() + os.fsync(fp.fileno()) + p.unlink() + self.log(self.t('log_temp_img_deleted'), "INFO") + except Exception as e: + self.log(self.tf('log_temp_img_delete_failed', error=e), "WARNING") + + def run_fastboot_command(self, args, timeout=60): + command = [self.fastboot] + list(args) + if self.debug_mode: + self.log("CMD: " + " ".join(f'"{x}"' if " " in str(x) else str(x) for x in command), "CMD") + try: + result = subprocess.run( + command, + capture_output=True, + text=True, + encoding='utf-8', + errors='replace', + timeout=timeout, + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + output = ((result.stdout or "") + "\n" + (result.stderr or "")).strip() + if result.returncode == 0: + return True, output + return False, output + except subprocess.TimeoutExpired: + return False, self.t('err_fastboot_timeout') + except Exception as e: + return False, str(e) + + def fastboot_device_connected(self, output): + for line in str(output or "").splitlines(): + parts = line.strip().split() + if len(parts) >= 2 and parts[1].lower() == "fastboot": + return True + return False + + def fastboot_output_has_okay(self, output): + text = str(output or "").upper() + return "OKAY" in text and "FAILED" not in text + + def wait_for_fastboot(self, timeout=180, interval=5): + deadline = time.time() + timeout + while time.time() < deadline: + ok, output = self.run_fastboot_command(['devices'], timeout=10) + if ok and self.fastboot_device_connected(output): + return True + time.sleep(interval) + return False + + def prepare_ez60_permission(self): + """获取权限:重启到 fastboot、刷入 init_boot、立即重启。""" + if not self.check_device_connection(): + return + if not self.vin: + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_need_vin')) + return + + answer = messagebox.askyesno( + self.t('msg_confirm_permission_title'), + self.t('msg_confirm_permission') + ) + if not answer: + return + + def worker(): + temp_img = None + permission_done = False + try: + if not self.check_authorization(self.vin): + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_auth_failed_title'), self.t('msg_device_unauthorized')) + ) + return + + self.show_progress(True, is_push=True) + self.update_progress(1, 5, self.t('progress_fetch_boot_key'), is_push=True) + if not self.fetch_permission_resource_key(): + return + + self.update_progress(2, 5, self.t('progress_reboot_fastboot'), is_push=True) + ok, output = self.run_adb_shell('reboot fastboot') + if not ok and self.debug_mode: + self.log(self.tf('log_fastboot_enter_failed', output=output), "CMD") + self.log(self.t('log_fastboot_wait'), "WARNING") + if not self.wait_for_fastboot(): + self.log(self.t('log_fastboot_missing'), "ERROR") + return + + self.update_progress(3, 5, self.t('progress_decrypt_init_boot'), is_push=True) + temp_img = self.decrypt_permission_resource_to_temp_file() + if not temp_img: + return + + self.update_progress(4, 5, self.t('progress_flash_init_boot'), is_push=True) + ok, output = self.run_fastboot_command(['flash', 'init_boot', str(temp_img)], timeout=120) + if not ok or not self.fastboot_output_has_okay(output): + self.log(self.tf('log_init_boot_flash_failed', output=output), "ERROR") + return + self.log(self.t('log_init_boot_flash_success'), "INFO") + + self.update_progress(5, 5, self.t('progress_reboot_device'), is_push=True) + ok, output = self.run_fastboot_command(['reboot'], timeout=30) + if ok: + permission_done = True + self.log(self.t('log_permission_success'), "SUCCESS") + self.run_on_ui_thread( + lambda: messagebox.showinfo(self.t('msg_done_title'), self.t('msg_permission_done')) + ) + else: + self.log(self.tf('log_fastboot_reboot_failed', output=output), "WARNING") + finally: + self.permission_resource_key = None + if temp_img: + self.secure_delete_file(temp_img) + self.show_progress(False, is_push=True) + if not permission_done: + self.log(self.t('log_permission_failed'), "ERROR") + + threading.Thread(target=worker, daemon=True).start() + + def _push_and_install(self, apk_path, apk_name): + """push → pm install → cleanup,供安装类方法复用""" + ok, _ = self.push_single_apk(apk_path, apk_name) + return ok + + def run_mazda_post_install_tasks(self): + """语言包安装完成后启用 Mazda overlay 并禁用指定应用。""" + self.log(self.t('log_post_config_start'), "INFO") + + overlay_ok = True + for package_name in self.mazda_overlay_packages: + ok, output = self.run_adb_shell(f'cmd overlay enable {package_name}') + if ok: + if self.debug_mode: + self.log(self.tf('log_overlay_enabled', package=package_name), "SUCCESS") + else: + overlay_ok = False + if self.debug_mode: + self.log(self.tf('log_overlay_failed', package=package_name, output=output), "ERROR") + + disabled_count = 0 + for package_name in self.mazda_disable_packages: + ok, output = self.run_adb_shell(f'pm disable-user {package_name}') + if ok: + disabled_count += 1 + if self.debug_mode: + self.log(self.tf('log_disabled_package', package=package_name), "SUCCESS") + else: + if self.debug_mode: + self.log(self.tf('log_disable_package_failed', package=package_name, output=output), "ERROR") + + if self.debug_mode: + self.log( + self.tf( + 'log_post_config_done', + overlay_count=len(self.mazda_overlay_packages), + disabled_count=disabled_count, + total_count=len(self.mazda_disable_packages), + ), + "INFO", + ) + return overlay_ok and disabled_count == len(self.mazda_disable_packages) + + def push_all_apks(self): + """推送APK并安装 —— 逸动版仅处理 app 目录,使用 pm install""" + # 检查设备连接(仅 UI 层检查在主线程,其余工作进后台线程) + if not self.check_device_connection(): + return + + if not self.vin: + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_need_vin')) + return + + def do_push_all(): + # 验证授权 + if not self.check_authorization(self.vin): + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_auth_failed_title'), self.t('msg_device_unauthorized')) + ) + return + + # 获取解压密码 + if not self.extract_password: + if not self.fetch_package_password(): + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_data_prepare_failed')) + ) + return + + # 解压 + if not self.check_package_extracted(): + self.log(self.t('log_extracting'), "INFO") + self.show_progress(True, is_push=False) + if not self.extract_package_silent(): + self.show_progress(False, is_push=False) + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_prepare_failed')) + ) + return + self.show_progress(False, is_push=False) + + if not self.apps_dir or not self.apps_dir.exists(): + self.run_on_ui_thread( + lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_dir_missing')) + ) + return + + # 开始刷入 + self.show_progress(True, is_push=True) + self.log(self.t('log_flash_start'), "SUCCESS") + self.run_adb_shell('mkdir -p /data/local/tmp') + self.run_adb_shell('setprop vecentek.model 1') + + all_apks = list(self.apps_dir.glob("*.apk")) + if not all_apks: + self.log(self.t('log_no_language_files'), "WARNING") + self.show_progress(False, is_push=True) + return + + total = len(all_apks) + success_count = 0 + for i, apk_path in enumerate(all_apks, 1): + apk_name = apk_path.stem + ok, _ = self.push_single_apk(apk_path, apk_name) + if ok: + if self.debug_mode: + self.log(self.tf('log_install_success', name=apk_name), "SUCCESS") + success_count += 1 + else: + if self.debug_mode: + self.log(self.tf('log_install_failed', name=apk_name), "ERROR") + else: + self.log(self.tf('log_flash_item_failed', current=i, total=total), "ERROR") + self.update_progress(i, total, self.t('progress_flashing'), is_push=True) + + self.update_progress(total, total, self.t('progress_flash_done'), is_push=True) + self.run_adb_shell('setprop vecentek.model 0') + + if success_count == total: + self.log(self.t('log_flash_done_config'), "SUCCESS") + elif success_count > 0: + self.log(self.t('log_flash_partial_config'), "WARNING") + else: + self.log(self.t('log_flash_failed_config'), "WARNING") + + if self.run_mazda_post_install_tasks(): + self.log(self.t('log_post_config_all_done'), "SUCCESS") + else: + self.log(self.t('log_post_config_partial'), "WARNING") + + self.show_progress(False, is_push=True) + + threading.Thread(target=do_push_all, daemon=True).start() + + def install_all_apks(self): + """批量安装APK — push → pm install → cleanup""" + if not self.check_device_connection(): + return + if not self.vin: + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_need_vin')) + return + if not self.check_authorization(self.vin): + messagebox.showerror(self.t('msg_auth_failed_title'), self.t('msg_device_unauthorized_action')) + return + + # 使用当前目录下的apks文件夹 + apk_dir = self.base_dir / "apks" + if not apk_dir.exists(): + apk_dir = find_resource("apks") + + # 检查apk文件夹是否存在 + if not apk_dir.exists(): + messagebox.showerror(self.t('msg_error_title'), self.t('msg_apks_dir_missing')) + self.log(self.t('msg_apks_dir_missing'), "ERROR") + return + + # 查找所有apk文件 + apk_files = list(apk_dir.glob("*.apk")) + if not apk_files: + messagebox.showerror(self.t('msg_error_title'), self.t('msg_apks_empty')) + self.log(self.t('msg_apks_empty'), "ERROR") + return + + # 询问是否确认安装 + result = messagebox.askyesno( + self.t('msg_install_confirm_title'), + self.tf('msg_install_confirm_folder', count=len(apk_files)) + ) + if not result: + return + + def install(): + self.show_progress(True, is_push=True) + total = len(apk_files) + self.log(self.tf('log_batch_install_start', count=total), "INFO") + + self.run_adb_shell('setprop vecentek.model 1') + + success_count = 0 + for i, apk_path in enumerate(apk_files, 1): + apk_name = apk_path.stem + self.update_progress(i, total, self.t('progress_installing'), is_push=True) + if self._push_and_install(apk_path, apk_name): + self.log(self.tf('log_install_success', name=apk_name), "SUCCESS") + success_count += 1 + else: + self.log(self.tf('log_install_failed', name=apk_name), "ERROR") + + self.run_adb_shell('setprop vecentek.model 0') + self.update_progress(total, total, self.t('progress_install_done'), is_push=True) + self.show_progress(False, is_push=True) + + if success_count == total: + self.run_on_ui_thread( + messagebox.showinfo, + self.t('msg_install_done_title'), + self.tf('msg_install_done_all', count=total) + ) + elif success_count > 0: + self.run_on_ui_thread( + messagebox.showwarning, + self.t('msg_install_partial_title'), + self.tf('msg_install_partial', success=success_count, failed=total - success_count) + ) + else: + self.log(self.t('log_install_failed_simple'), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_install_failed_title'), + self.t('msg_install_failed_all') + ) + + threading.Thread(target=install, daemon=True).start() + + def install_single_apk(self): + """安装单个APK — push → pm install → cleanup""" + if not self.check_device_connection(): + return + if not self.vin: + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_need_vin')) + return + if not self.check_authorization(self.vin): + messagebox.showerror(self.t('msg_auth_failed_title'), self.t('msg_device_unauthorized_action')) + return + + file_path = filedialog.askopenfilename( + title=self.t('file_select_apk_title'), + filetypes=[(self.t('filetype_apk'), "*.apk"), (self.t('filetype_all'), "*.*")] + ) + + if not file_path: + return + + def install(): + apk_name = Path(file_path).stem + self.show_progress(True, is_push=True) + self.update_progress(30, 100, self.t('progress_installing'), is_push=True) + + self.run_adb_shell('setprop vecentek.model 1') + success = self._push_and_install(file_path, apk_name) + self.run_adb_shell('setprop vecentek.model 0') + + self.update_progress(100, 100, self.t('progress_done'), is_push=True) + if success: + self.log(self.tf('log_install_success', name=apk_name), "SUCCESS") + else: + self.log(self.t('log_install_failed_simple'), "ERROR") + self.show_progress(False, is_push=True) + + threading.Thread(target=install, daemon=True).start() + + def open_language_settings(self): + """打开系统语言设置""" + if not self.check_device_connection(): + return + self.run_adb_shell('am start -a android.settings.LOCALE_SETTINGS') + + def open_language_quick_set(self): + """打开快捷语言设置弹窗""" + # 检查设备连接 + if not self.check_device_connection(): + return + + # 创建弹窗 + popup = tk.Toplevel(self.root) + popup.title(self.t('quick_lang_title')) + popup.geometry("520x320") + popup.configure(bg=self.colors['bg_dark']) + popup.resizable(False, False) + + # 居中显示 + popup.update_idletasks() + x = self.root.winfo_x() + (self.root.winfo_width() - 520) // 2 + y = self.root.winfo_y() + (self.root.winfo_height() - 320) // 2 + popup.geometry(f"+{x}+{y}") + popup.transient(self.root) + popup.grab_set() + + # 标题 + header = tk.Label(popup, text=self.t('quick_lang_header'), + font=('Microsoft YaHei', 13, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + header.pack(pady=(15, 10)) + + hint = tk.Label(popup, text=self.t('quick_lang_hint'), + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark']) + hint.pack(pady=(0, 12)) + + # 语言列表:(显示名, locale_code) + locale_codes = ["zh-CN", "en-US", "ru-RU", "fr-FR", "es-ES", "pt-BR", "it-IT", "ar-SA"] + languages = list(zip(self.t('quick_lang_names'), locale_codes)) + + # 创建按钮容器 + btn_frame = tk.Frame(popup, bg=self.colors['bg_dark']) + btn_frame.pack(pady=(0, 10)) + + btn_colors = [ + self.colors['accent'], self.colors['info'], + self.colors['success'], self.colors['warning'], + '#e17055', '#00b894', + '#6c5ce7', '#0984e3', + ] + + for i, (label, locale) in enumerate(languages): + row = i // 4 + col = i % 4 + + def make_cmd(loc=locale, lbl=label): + return lambda: self._quick_set_language(loc, lbl, popup) + + btn = tk.Button(btn_frame, text=label, + command=make_cmd(), + font=('Microsoft YaHei', 10), + fg='white', + bg=btn_colors[i], + relief=tk.FLAT, + cursor='hand2', + width=12, height=2) + btn.grid(row=row, column=col, padx=5, pady=5) + + # 底部分隔 + 打开系统设置入口 + sep = tk.Frame(popup, bg=self.colors['border'], height=1) + sep.pack(fill=tk.X, padx=20, pady=(8, 6)) + + sys_btn = tk.Button(popup, text=self.t('quick_lang_system'), + command=lambda: self._open_sys_and_close(popup), + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_light'], + relief=tk.FLAT, + cursor='hand2') + sys_btn.pack(pady=(0, 10)) + + def _quick_set_language(self, locale_code, language_name, popup): + """执行快捷语言设置""" + popup.destroy() + + def do_set(): + self.log(f"{self.t('progress_installing')}: {language_name} ({locale_code})", "INFO") + success, output = self.run_adb_shell( + f'settings put system system_locales {locale_code}' + ) + + if success: + self.log(f"✓ {language_name}", "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t('quick_lang_success_title'), + self.tf('quick_lang_success', language=language_name) + ) + else: + self.log(f"✗ {output}", "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('quick_lang_failed_title'), + self.tf('quick_lang_failed', output=output) + ) + + threading.Thread(target=do_set, daemon=True).start() + + def _open_sys_and_close(self, popup): + """关闭弹窗并打开系统语言设置""" + popup.destroy() + self.open_language_settings() + + def open_timezone_settings(self): + """打开时区设置""" + if not self.check_device_connection(): + return + self.run_adb_shell('am start -a android.settings.TIMEZONE_SETTINGS') + + def open_android_settings(self): + """打开安卓原生设置""" + if not self.check_device_connection(): + return + self.run_adb_shell('am start -a android.settings.SETTINGS') + + def reboot_device(self): + """重启设备""" + if not self.check_device_connection(): + return + if messagebox.askyesno(self.t('msg_reboot_title'), self.t('msg_reboot_confirm')): + self.run_adb_shell('reboot') + self.log(self.t('log_rebooting'), "INFO") + self.update_device_status(False) + + def on_disable_upgrade(self): + """禁用系统升级""" + # 检查设备连接 + if not self.check_device_connection(): + return + + # 弹窗确认 + result = messagebox.askyesno( + self.t('msg_disable_ota_title'), + self.t('msg_disable_ota_confirm') + ) + + if not result: + self.log(self.t('log_disable_ota_cancelled'), "INFO") + return + + def disable(): + self.show_progress(True, is_push=False) + success, output = self.run_adb_shell( + 'pm disable-user --user 0 com.incall.apps.softmanager') + + if success: + self.log(self.t('log_disable_ota_success'), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t('msg_success_title'), self.t('msg_disable_ota_success')) + else: + self.log(self.t('log_disable_ota_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.tf('msg_disable_ota_failed', output=output)) + + self.show_progress(False, is_push=False) + + threading.Thread(target=disable, daemon=True).start() + + def _on_vin_input_focus_in(self, event): + """输入框获得焦点时清除占位符""" + if self.is_placeholder_vin(self.vin_input.get()): + self.vin_input.delete(0, tk.END) + self.vin_input.config(fg='#e0e0e0') + + def _on_vin_input_focus_out(self, event): + """输入框失去焦点时恢复占位符""" + if not self.vin_input.get(): + self.vin_input.insert(0, self.t('vin_placeholder')) + self.vin_input.config(fg='#636e72') + + def query_password_by_vin(self): + """通过VIN查询密码""" + vin = self.vin_input.get().strip() + if not vin or self.is_placeholder_vin(vin): + messagebox.showwarning(self.t('msg_hint_title'), self.t('msg_input_vin')) + return + + def do_query(): + try: + api_url = "https://api.changan.softwindy.cn/api/authorizations/generate-password-by-vin" + url = f"{api_url}?vin={vin}" + req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + + def update_ui(): + if data.get('success'): + pwd = data.get('data', {}).get('devicePassword', 'unknown') + self.pwd_result_label.config( + text=self.tf('pwd_success', password=pwd), + fg=self.colors['success'] + ) + self.log(self.tf('log_pwd_success', vin=vin, password=pwd), "SUCCESS") + else: + msg = data.get('message', 'failed') + self.pwd_result_label.config( + text=self.tf('pwd_failed', message=msg), + fg=self.colors['error'] + ) + self.log(self.tf('log_pwd_failed', message=msg), "ERROR") + + self.run_on_ui_thread(update_ui) + + except Exception as e: + def update_ui_error(): + self.pwd_result_label.config( + text=self.t('pwd_request_failed'), + fg=self.colors['error'] + ) + self.log(self.tf('log_pwd_request_failed', error=str(e)), "ERROR") + self.run_on_ui_thread(update_ui_error) + + threading.Thread(target=do_query, daemon=True).start() + + def _toggle_debug(self, event=None): + """切换调试模式(隐藏入口,Ctrl+Shift+D)""" + if self.debug_mode: + self.debug_mode = False + self.log(self.t('log_debug_off'), "WARNING") + self.status_text.config(text=self.t('status_ready')) + self.refresh_device_status() + return + + pwd = simpledialog.askstring(self.t('debug_title'), self.t('debug_prompt'), show='*', parent=self.root) + if not pwd: + return + + self.log(self.t('debug_password_verifying'), "WARNING") + + def verify(): + valid, message = self.verify_debug_mode_password(pwd) + if valid: + def enable_debug(): + self.debug_mode = True + self.update_device_status(True, "", True) + self.log(self.t('log_debug_on'), "WARNING") + self.status_text.config(text=self.t('debug_status')) + self.run_on_ui_thread(enable_debug) + else: + def show_failed(): + msg = message or self.t('msg_debug_wrong_password') + self.log(self.tf('debug_verify_failed', message=msg), "WARNING") + messagebox.showwarning(self.t('msg_error_title'), msg) + self.run_on_ui_thread(show_failed) + + threading.Thread(target=verify, daemon=True).start() + + def verify_debug_mode_password(self, password): + try: + data = self._post_json(self.debug_password_api_url, {"password": password}) + if data.get('success') is True and data.get('valid') is True: + return True, data.get('message', '') + return False, data.get('message') or self.t('msg_debug_wrong_password') + except Exception as e: + return False, str(e) + + def install_apps(self): + """安装App — 支持单选或多选APK文件""" + if not self.check_device_connection(): + return + if not self.vin and not self.debug_mode: + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_need_vin')) + return + if not self.check_authorization(self.vin): + return + + file_paths = filedialog.askopenfilenames( + title=self.t('file_select_apk_title'), + filetypes=[(self.t('filetype_apk'), "*.apk"), (self.t('filetype_all'), "*.*")] + ) + if not file_paths: + return + + count = len(file_paths) + result = messagebox.askyesno( + self.t('msg_install_confirm_title'), + self.tf('msg_install_confirm_many', count=count) + ) + if not result: + return + + def install(): + self.show_progress(True, is_push=True) + self.log(self.tf('log_install_many_start', count=count), "INFO") + self.run_adb_shell('setprop vecentek.model 1') + + success_count = 0 + for i, file_path in enumerate(file_paths, 1): + apk_name = Path(file_path).stem + self.update_progress(i, count, self.tf('progress_installing_name', name=apk_name), is_push=True) + if self._push_and_install(file_path, apk_name): + self.log(f"✓ {apk_name}.apk", "SUCCESS") + success_count += 1 + else: + self.log(f"✗ {apk_name}.apk", "ERROR") + + self.run_adb_shell('setprop vecentek.model 0') + self.update_progress(count, count, self.t('progress_install_done'), is_push=True) + self.show_progress(False, is_push=True) + + if success_count == count: + self.log(self.tf('log_install_done_all', count=count), "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t('msg_install_done_title'), + self.tf('msg_install_done_all', count=count) + ) + elif success_count > 0: + self.log(self.tf('log_install_done_partial', success=success_count, count=count), "WARNING") + self.run_on_ui_thread( + messagebox.showwarning, + self.t('msg_install_partial_title'), + self.tf('msg_install_partial', success=success_count, failed=count - success_count) + ) + else: + self.log(self.t('log_install_failed_simple'), "ERROR") + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_install_failed_title'), + self.t('msg_install_failed_all') + ) + + threading.Thread(target=install, daemon=True).start() + + # ============================================================ + # hosts 文件修改 + # ============================================================ + + def modify_hosts(self): + """修改hosts文件,添加云端认证DNS映射""" + hosts_path = r"C:\Windows\System32\drivers\etc\hosts" + host_ip = "103.236.55.140" + host_name = "spm.auto-pai.com" + entry = f"{host_ip} {host_name}" + + try: + try: + with open(hosts_path, 'r', encoding='utf-8') as f: + lines = f.readlines() + except UnicodeDecodeError: + with open(hosts_path, 'r', encoding='gbk', errors='replace') as f: + lines = f.readlines() + + new_lines = [] + found_target = False + changed = False + for line in lines: + stripped = line.strip() + if not stripped or stripped.startswith('#'): + new_lines.append(line) + continue + + body, _, _ = line.partition('#') + parts = body.split() + if len(parts) >= 2 and host_name.lower() in [p.lower() for p in parts[1:]]: + if not found_target: + if parts[0] != host_ip or len(parts) != 2: + changed = True + new_lines.append(f"{entry}\n") + found_target = True + else: + changed = True + continue + + new_lines.append(line) + + if found_target and not changed: + return True + + if not found_target: + if not new_lines or (new_lines[-1] and not new_lines[-1].endswith(('\n', '\r'))): + new_lines.append('\n') + new_lines.append(f"{entry}\n") + + with open(hosts_path, 'w', encoding='utf-8', newline='') as f: + f.writelines(new_lines) + return True + except PermissionError: + self.log(self.t('log_env_config_failed_admin'), "WARNING") + return False + except Exception as e: + if self.debug_mode: + self.log(self.tf('log_env_config_failed_detail', error=str(e)), "WARNING") + else: + self.log(self.t('log_env_config_failed'), "WARNING") + return False + + def _run_netsh(self, command): + """执行 netsh 命令,返回 (returncode, output)""" + try: + for enc in ['utf-8', 'gbk']: + try: + r = subprocess.run( + command, + shell=True, + capture_output=True, + text=True, + encoding=enc, + errors='replace', + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + output = (r.stdout or '') + (r.stderr or '') + return r.returncode, output.strip() + except (UnicodeDecodeError, LookupError): + continue + return -1, self.t('err_decode_failed') + except Exception as e: + return -1, str(e) + + def start_hotspot_action(self): + """打开热点设置并自动轮询检测""" + # 打开设置页面 + try: + subprocess.Popen( + 'start ms-settings:network-mobilehotspot', + shell=True, + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + except: + pass + self.log(self.t('log_hotspot_opening'), "INFO") + + # 后台轮询,查到为止(最多 30 秒) + def poll(): + for _ in range(15): + time.sleep(2) + ssid, pwd, status = self.get_hotspot_info() + self.refresh_hotspot_display() + if ssid and self._hotspot_started(status): + self.log(self.tf('log_hotspot_detected', ssid=ssid, password=pwd), "SUCCESS") + return + self.log(self.t('log_hotspot_not_detected'), "WARNING") + + threading.Thread(target=poll, daemon=True).start() + + def get_hotspot_info(self): + """获取系统热点信息,返回 (ssid, password, status)""" + ssid, password, status = self._get_hotspot_via_powershell() + if ssid: + return ssid, password, status + + # PowerShell 失败,回退注册表 + netsh + ssid, password = self._read_hotspot_registry() + status = "stopped" + try: + _, out = self._run_netsh('netsh wlan show hostednetwork') + for line in out.split('\n'): + s = line.strip() + if ('状态' in s or 'status' in s.lower()) and ('已启动' in s or 'started' in s.lower()): + status = "started" + if not ssid and 'ssid' in s.lower() and ':' in s: + val = s.split(':', 1)[-1].strip().strip('"') + if val and 'not set' not in val.lower(): + ssid = val + except: + pass + return ssid, password, status + + def _hotspot_started(self, status): + status_text = (status or "").lower() + return '已启动' in status_text or 'started' in status_text or 'on' in status_text or 'inoperation' in status_text + + def _get_hotspot_via_powershell(self): + """通过 PowerShell 获取 Windows 移动热点配置""" + try: + ps_cmd = ( + '$cp = [Windows.Networking.Connectivity.NetworkInformation,' + 'Windows.Networking.Connectivity,ContentType=WindowsRuntime]' + '::GetInternetConnectionProfile();' + '$tm = [Windows.Networking.NetworkOperators.NetworkOperatorTetheringManager,' + 'Windows.Networking.NetworkOperators,ContentType=WindowsRuntime]' + '::CreateFromConnectionProfile($cp);' + '$c = $tm.GetCurrentAccessPointConfiguration();' + 'Write-Output $c.Ssid; Write-Output $c.Passphrase;' + 'Write-Output $tm.TetheringOperationalState' + ) + r = subprocess.run( + ['powershell', '-NoProfile', '-Command', ps_cmd], + capture_output=True, text=True, timeout=10, + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + lines = [l.strip() for l in (r.stdout or '').split('\n') if l.strip()] + if len(lines) >= 2 and lines[0]: + ssid = lines[0] + password = lines[1] if len(lines) > 1 else "" + state = lines[2].lower() if len(lines) > 2 else "" + status = "started" if ('on' in state or 'inoperation' in state) else "stopped" + return ssid, password, status + except: + pass + return "", "", "stopped" + + def _read_hotspot_registry(self): + """从注册表读取 Windows 移动热点的 SSID 和密码""" + try: + import winreg + key = winreg.OpenKey( + winreg.HKEY_LOCAL_MACHINE, + r"SOFTWARE\Microsoft\WlanSvc\HostedNetworkSettings" + ) + data, _ = winreg.QueryValueEx(key, "HostedNetworkSettings") + winreg.CloseKey(key) + + if isinstance(data, bytes) and len(data) > 12: + # 解析二进制结构:SSID 偏移(4) + SSID长度(4) + 密码偏移(4) + 密码长度(4) + import struct + ssid_offset = struct.unpack_from(' 0 and ssid_offset + ssid_len * 2 <= len(data): + raw = data[ssid_offset:ssid_offset + ssid_len * 2] + ssid = raw.decode('utf-16-le', errors='replace').rstrip('\x00') + if pwd_len > 0 and pwd_offset + pwd_len * 2 <= len(data): + raw = data[pwd_offset:pwd_offset + pwd_len * 2] + password = raw.decode('utf-16-le', errors='replace').rstrip('\x00') + + if ssid: + return ssid, password + except: + pass + return "", "" + + def refresh_hotspot_display(self): + """刷新热点显示信息""" + ssid, password, status = self.get_hotspot_info() + self.run_on_ui_thread(self._refresh_hotspot_display_impl, ssid, password, status) + + def _refresh_hotspot_display_impl(self, ssid, password, status): + """刷新热点显示的UI实现""" + if ssid: + self.hotspot_ssid_label.config(text=self.tf('hotspot_name_value', ssid=ssid)) + else: + self.hotspot_ssid_label.config(text=self.t('hotspot_name_unset')) + if password: + self.hotspot_pwd_label.config(text=self.tf('hotspot_pwd_value', password=password)) + else: + self.hotspot_pwd_label.config(text=self.t('hotspot_pwd_default')) + started = self._hotspot_started(status) + status_text = self.t('hotspot_started') if started else self.t('hotspot_stopped') + self.hotspot_status_label.config( + text=self.tf('hotspot_status_value', status=status_text), + fg=self.colors['success'] if started else self.colors['warning'] + ) + + def run(self): + """运行程序""" + self.root.mainloop() + +def main(): + """主函数""" + if sys.version_info < (3, 6): + print("Error: Python 3.6 or later is required") + sys.exit(1) + + try: + app = ADKAPKGUI() + app.run() + except Exception as e: + print(f"Startup failed: {e}") + import traceback + traceback.print_exc() + messagebox.showerror("Error", f"Program failed to start: {e}") + +if __name__ == "__main__": + main() diff --git a/Mazda-EZ60/Mazda_EZ60-Language-Install_v1.0.py b/Mazda-EZ60/Mazda_EZ60-Language-Install_v1.0.py new file mode 100644 index 0000000..b9ad237 --- /dev/null +++ b/Mazda-EZ60/Mazda_EZ60-Language-Install_v1.0.py @@ -0,0 +1,2446 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import os +import sys +import subprocess +import json +import re +import threading +import tkinter as tk +import atexit +from tkinter import ttk, scrolledtext, filedialog, messagebox, simpledialog +from pathlib import Path +from urllib.request import urlopen, Request +from urllib.error import URLError, HTTPError +from urllib.parse import urlencode +from datetime import datetime +import zipfile +try: + import pyzipper +except ImportError: + pyzipper = None +import shutil +import time + + +def get_app_dir(): + return Path(sys.executable).resolve().parent if getattr(sys, 'frozen', False) else Path(__file__).resolve().parent + + +def resource_candidates(file_name): + base_dir = get_app_dir() + candidates = [] + if getattr(sys, 'frozen', False): + candidates.append(Path(getattr(sys, '_MEIPASS', base_dir)) / file_name) + candidates.extend([ + base_dir / file_name, + base_dir / 'tools' / file_name, + base_dir / 'shared' / file_name, + base_dir.parent / 'tools' / file_name, + base_dir.parent / 'shared' / file_name, + base_dir.parent / file_name, + ]) + unique = [] + for candidate in candidates: + if candidate not in unique: + unique.append(candidate) + return unique + + +def find_resource(file_name): + candidates = resource_candidates(file_name) + for candidate in candidates: + if candidate.exists(): + return candidate + return candidates[0] + + +def find_tool(file_name, fallback=None): + path = find_resource(file_name) + if path.exists(): + return str(path) + return fallback or str(path) + + +def set_windows_app_user_model_id(): + if sys.platform != 'win32': + return + try: + import ctypes + ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID( + "yibin.keyi.mazda.ez60.language.installer" + ) + except Exception: + pass + + +class ADKAPKGUI: + CACHE_DIR_NAME = "apps_cache_Mazda_EZ60_1_0" + PACKAGE_KEY_VEHICLE_NAME = "EZ60_1.0" + + def __init__(self): + set_windows_app_user_model_id() + self.root = tk.Tk() + self.root.title("长安语言安装工具") + self.root.geometry("650x640") + self.root.resizable(True, True) + self.set_window_icon() + + # 固定颜色 + self.colors = { + 'bg_dark': '#1e1e2e', + 'bg_light': '#2a2a3e', + 'accent': '#6c5ce7', + 'accent_hover': '#5b4bc4', + 'success': '#00b894', + 'error': '#d63031', + 'warning': '#fdcb6e', + 'info': '#0984e3', + 'text': '#dfe6e9', + 'text_secondary': '#b2bec3', + 'border': '#3d3d5e' + } + + # 多语言 + self.lang = 'zh' + self.T = { + 'zh': { + 'title': '马自达EZ60刷机工具_OS-1.0', + 'btn_root': '🔓 获取权限', + 'btn_push': '📦 刷入语言包', + 'btn_install': '📱 安装App', + 'btn_language': '🌐 语言设置', + 'btn_timezone': '⏰ 时区设置', + 'btn_settings': '⚙️ 安卓设置', + 'btn_reboot': '🔄 重启设备', + 'btn_disable_upgrade': '❌ 禁用升级', + 'btn_clear_log': '🗑 清空日志', + 'btn_query_pwd': '查询密码', + 'btn_debug_extract': '解压测试', + 'device_label': '设备:', + 'vin_label': 'VIN码:', + 'auth_label': '授权:', + 'log_title': '📋 运行日志', + 'status_ready': '就绪', + 'status_connected': '已连接', + 'status_disconnected': '未连接', + 'status_detecting': '未检测', + 'vin_none': '未获取', + 'auth_none': '未验证', + 'auth_yes': '已授权', + 'auth_no': '未授权', + 'btn_refresh': '🔄 检查', + 'hint_factory': '🔧 关闭车辆WI-FI和4G网络,拨号获取的密码进入工程模式', + 'warn_no_device': '设备未连接', + 'warn_connect_first': '请先连接设备并点击「检查」按钮刷新状态!', + 'warn_no_vin': '请先刷新设备状态并获取VIN码', + 'err_auth_fail': '授权失败', + 'err_device_not_auth': '设备未授权', + 'err_resource_fail': '资源准备失败!', + 'err_no_resource_dir': '资源目录未找到', + 'info_flash_start': '开始刷入语言包...', + 'info_flash_done': '语言包刷入完成,重启设备后生效', + 'info_flash_fail': '语言包刷入失败', + 'warn_no_apk': '未找到语言包文件', + 'info_installing': '安装中...', + 'info_install_done': '安装完成', + 'info_log_cleared': '日志已清空', + 'confirm_reboot': '确定要重启设备吗?', + 'info_rebooting': '设备正在重启...', + 'warn_device_disconnected': '设备已断开连接', + 'info_device_connected': '设备已连接', + 'info_checking_auth': '正在验证授权状态...', + 'info_auth_pass': '✅ 授权验证通过!', + 'info_auth_fail': '❌ 授权验证失败', + 'info_preparing': '正在准备资源...', + 'err_no_package': '错误:未找到资源包', + 'err_no_password': '错误:解压密码未设置', + 'err_no_7za': '错误:未找到 7za.exe', + 'err_extract_fail': '解压失败', + 'info_extracting': '资源准备中...', + 'info_extract_done': '资源准备完成', + 'err_extract_user': '资源准备失败,请检查网络连接后重试', + 'warn_no_app_dir': '警告:未找到 app/priv-app 目录', + 'progress_resource_loading': '资源准备中...', + 'progress_resource_done': '资源准备完成', + 'progress_extracting_percent': '资源准备中 {percent}%', + 'progress_flashing': '正在刷入', + 'progress_flash_done': '刷入完成', + 'progress_aborted': '已终止', + 'progress_installing': '安装中', + 'progress_installing_name': '安装中 ({name})', + 'progress_done': '完成', + 'lang_zh': '中', + 'lang_en': 'EN', + 'switch_lang': '语言 / Language', + 'pwd_query_label': '工程密码查询:', + 'vin_placeholder': '请输入VIN', + 'pwd_success': '密码: *#{password}#*', + 'pwd_failed': '失败: {message}', + 'pwd_request_failed': '请求失败', + 'tip_1': '1. 安装语言过程中请保持车辆和电脑的电量充足,不可中途停止。', + 'tip_2': '2. 获取权限以后,车辆自动重启以后再进入语言刷入。', + 'tip_3': '3. 部分语言需要重启后生效,可以一切工作完成以后再重启。', + 'warn_flash_warning': '⚠️ 重要提示', + 'warn_flash_msg': '刷入过程中请勿:\n ● 重启车机\n ● 退出本程序\n ● 关闭电脑\n\n否则可能导致车机系统损坏!', + 'err_wrong_password': '请检查密码是否正确', + 'title_pop_lang': '快捷语言设置', + 'quick_lang_header': '选择目标语言', + 'quick_lang_hint': '点击按钮即可将系统语言切换为对应语言,重启后生效', + 'quick_lang_system': '⚙️ 打开系统语言设置(手动选择)', + 'msg_warn_title': '警告', + 'msg_error_title': '错误', + 'msg_done_title': '完成', + 'msg_success_title': '成功', + 'msg_auth_failed_title': '授权失败', + 'msg_device_unauthorized': '设备未授权', + 'msg_input_vin': '请输入VIN码', + 'msg_resource_prepare_failed': '资源准备失败!', + 'msg_resource_dir_missing': '资源目录未找到', + 'msg_no_apk_in_folder': '所选文件夹中没有APK文件!', + 'msg_confirm_install_title': '确认安装', + 'msg_confirm_install_many': '已选择 {count} 个APK文件\n\n是否开始安装?', + 'msg_confirm_install_folder': '找到 {count} 个APK文件\n\n是否开始批量安装?', + 'msg_install_success_many': '成功安装 {count} 个APK!', + 'msg_install_partial': '成功: {success}\n失败: {failed}', + 'msg_install_all_failed': '所有APK安装失败!', + 'msg_install_exception': '安装过程异常:{error}', + 'msg_quick_lang_success': '系统语言已设置为 {language}\n\n⚠️ 请重启设备使其生效。', + 'msg_quick_lang_failed': '语言设置失败!\n\n{output}', + 'msg_disable_confirm_title': '确认禁用升级', + 'msg_disable_confirm': '⚠️ 警告:禁用系统升级后,将无法接收系统更新!\n\n是否确定要禁用系统升级应用?', + 'msg_disable_success': '系统升级已成功禁用!', + 'msg_disable_failed': '禁用失败:{output}', + 'msg_reboot_confirm_title': '确认重启', + 'file_apk': 'APK文件', + 'file_all': '所有文件', + 'dialog_select_apk': '选择APK文件', + 'dialog_select_apk_folder': '选择包含APK文件的文件夹', + 'unknown_error': '未知错误', + 'status_debug': '调试模式', + 'debug_password_prompt': '请输入调试密码:', + 'debug_password_verifying': '正在校验调试密码...', + 'debug_wrong_password': '密码错误', + 'debug_verify_failed': '调试密码校验失败: {message}', + 'debug_need_enable': '请先按 Ctrl+Shift+D 进入调试模式', + 'debug_need_vin': '调试解压测试需要 VIN。请先连接设备刷新,或在调试模式中手动设置 VIN。', + 'log_debug_on': '🔧 调试模式已开启 - 跳过授权和设备校验,显示详细ADB日志', + 'log_debug_off': '调试模式已关闭', + 'log_lang_switched': '语言已切换为中文', + 'log_cache_invalid': '已解压缓存无效: {reason}', + 'log_cache_reuse_invalid': '缓存资源无效,已清理: {reason}', + 'log_package_missing': '未找到资源包文件: {path}', + 'log_adb_missing': '未找到adb命令,请将ADB文件放入本目录', + 'log_device_connected': '设备已连接', + 'log_device_disconnected': '设备已断开连接', + 'log_current_vin': '当前VIN: {vin}', + 'log_vin_unavailable': '无法读取VIN', + 'log_refresh_failed': '刷新设备状态失败: {error}', + 'log_auth_skip_debug': '调试模式:跳过授权', + 'log_auth_checking': '正在验证授权状态...', + 'log_auth_ok': '授权验证通过', + 'log_auth_failed': '授权验证失败', + 'log_vehicle_name': '车型名称: {name}', + 'log_adb_required': '请先连接 ADB 并获取 VIN', + 'log_data_prepare_failed_detail': '资源准备失败: {error}', + 'log_extract_password_missing': '错误:解压密码未设置', + 'log_7za_missing': '错误:未找到 7za.exe ({path})', + 'log_extracted_resource_invalid': '解压后的资源无效: {reason}。已停止刷入,请检查解压密码或资源包。', + 'log_extract_done': '资源准备完成', + 'log_extract_exception': '资源准备失败: {error}', + 'err_extract_wrong_password': '解压密码错误,请重新确认 package.bin 密码', + 'err_extract_data': '资源包数据错误,可能是密码错误或 package.bin 损坏', + 'err_extract_corrupt': '资源包损坏或不完整,请检查 package.bin', + 'err_extract_failed': '解压失败: {error}', + 'err_extract_failed_code': '解压失败 (返回码 {code}),请检查密码是否正确', + 'log_root_failed': '获取失败', + 'log_permission_failed': '获取失败', + 'log_permission_running': '正在获取权限中', + 'log_reboot_failed': '重启失败', + 'log_permission_ok': '获取成功', + 'log_flash_readonly': '请先点击「获取权限」获取权限后再试', + 'log_flash_complete_count': '刷入完成,共 {count} 个语言包', + 'log_flash_effect_after_reboot': '语言包已刷入完成,重启设备后生效,您可在适当时候重启', + 'log_flash_partial': '部分刷入成功({success}/{total})', + 'log_install_start': '开始安装 {count} 个APK...', + 'log_install_done_all': '安装完成:全部 {count} 个成功', + 'log_install_done_partial': '安装完成:{success}/{total} 成功', + 'log_install_failed': '安装失败', + 'log_install_exception': '安装过程异常: {error}', + 'log_install_success_item': '✓ {name}', + 'log_install_failed_item': '✗ {name}', + 'log_menu_key_ready': '辅助组件已安装', + 'log_menu_key_install_failed': '辅助组件安装失败', + 'log_menu_key_permission_failed': '辅助组件权限设置失败', + 'log_quick_lang_setting': '正在设置系统语言为: {language} ({locale})', + 'log_quick_lang_success': '✓ 语言已设置为 {language}', + 'log_quick_lang_failed': '✗ 语言设置失败: {output}', + 'log_rebooting': '设备正在重启...', + 'log_disable_cancelled': '已取消禁用升级操作', + 'log_disable_success': '系统升级已禁用', + 'log_disable_failed': '禁用系统升级失败', + 'log_preclean_start': '正在清理预置应用...', + 'log_preclean_done': '预置应用清理完成', + 'log_preclean_partial': '预置应用部分清理失败', + 'log_preclean_item_done': '清理项已完成: {package}', + 'log_preclean_item_failed': '清理项执行失败: {package}', + 'log_package_key_failed': 'package-key 获取失败', + 'log_package_extract_success': '资源准备完成', + 'log_package_extract_failed': 'package.bin 解压测试失败', + 'log_pwd_success': '密码查询成功', + 'log_pwd_failed': '密码查询失败: {message}', + 'log_pwd_request_failed': '密码查询请求失败: {error}', + 'err_no_usable_apk': '未找到可用 APK', + 'err_zero_apk': '发现 0KB APK: {files}', + 'err_push_failed': 'push失败: {error}', + 'err_cp_failed': 'cp失败: {error}', + }, + 'en': { + 'title': 'Mazda EZ60 Flash Tool_OS-1.0', + 'btn_root': '🔓 Get Root', + 'btn_push': '📦 Flash Lang Pkg', + 'btn_install': '📱 Install App', + 'btn_language': '🌐 Language', + 'btn_timezone': '⏰ Timezone', + 'btn_settings': '⚙️ Settings', + 'btn_reboot': '🔄 Reboot', + 'btn_disable_upgrade': '❌ Disable OTA', + 'btn_clear_log': '🗑 Clear Log', + 'btn_query_pwd': 'Query Pwd', + 'btn_debug_extract': 'Extract', + 'device_label': 'Device:', + 'vin_label': 'VIN:', + 'auth_label': 'Auth:', + 'log_title': '📋 Log', + 'status_ready': 'Ready', + 'status_connected': 'Connected', + 'status_disconnected': 'Disconnected', + 'status_detecting': 'Detecting', + 'vin_none': 'None', + 'auth_none': 'Unknown', + 'auth_yes': 'Authorized', + 'auth_no': 'Unauthorized', + 'btn_refresh': '🔄 Check', + 'hint_factory': '🔧 Turn off WiFi & 4G, enter factory mode with dial code', + 'warn_no_device': 'Device not connected', + 'warn_connect_first': 'Please connect device and click Check button!', + 'warn_no_vin': 'Please refresh device status and get VIN', + 'err_auth_fail': 'Authorization failed', + 'err_device_not_auth': 'Device not authorized', + 'err_resource_fail': 'Resource preparation failed!', + 'err_no_resource_dir': 'Resource directory not found', + 'info_flash_start': 'Starting language pack flashing...', + 'info_flash_done': 'Flashing complete, reboot device to take effect', + 'info_flash_fail': 'Flashing failed', + 'warn_no_apk': 'No APK files found', + 'info_installing': 'Installing...', + 'info_install_done': 'Install complete', + 'info_log_cleared': 'Log cleared', + 'confirm_reboot': 'Are you sure you want to reboot?', + 'info_rebooting': 'Device rebooting...', + 'warn_device_disconnected': 'Device disconnected', + 'info_device_connected': 'Device connected', + 'info_checking_auth': 'Verifying authorization...', + 'info_auth_pass': '✅ Authorization passed!', + 'info_auth_fail': '❌ Authorization failed', + 'info_preparing': 'Preparing resources...', + 'err_no_package': 'Error: package.bin not found', + 'err_no_password': 'Error: password not set', + 'err_no_7za': 'Error: 7za.exe not found', + 'err_extract_fail': 'Extraction failed', + 'info_extracting': 'Preparing resources...', + 'info_extract_done': 'Resource preparation complete', + 'err_extract_user': 'Resource preparation failed, check network and retry', + 'warn_no_app_dir': 'Warning: app/priv-app directory not found', + 'progress_resource_loading': 'Preparing resources...', + 'progress_resource_done': 'Resources ready', + 'progress_extracting_percent': 'Preparing resources {percent}%', + 'progress_flashing': 'Flashing', + 'progress_flash_done': 'Flash complete', + 'progress_aborted': 'Aborted', + 'progress_installing': 'Installing', + 'progress_installing_name': 'Installing ({name})', + 'progress_done': 'Done', + 'lang_zh': '中', + 'lang_en': 'EN', + 'switch_lang': 'Language', + 'pwd_query_label': 'Factory password:', + 'vin_placeholder': 'Enter VIN', + 'pwd_success': 'Password: *#{password}#*', + 'pwd_failed': 'Failed: {message}', + 'pwd_request_failed': 'Request failed', + 'tip_1': '1. Keep the vehicle and PC powered during language installation.', + 'tip_2': '2. After permission is obtained, wait for the vehicle to reboot before flashing.', + 'tip_3': '3. Some languages take effect after reboot; reboot after all work is finished.', + 'warn_flash_warning': '⚠️ Warning', + 'warn_flash_msg': 'During flashing, DO NOT:\n ● Reboot vehicle\n ● Close this app\n ● Power off PC\n\nSystem damage may occur!', + 'err_wrong_password': 'Please check password', + 'title_pop_lang': 'Quick Language Setting', + 'quick_lang_header': 'Select target language', + 'quick_lang_hint': 'Click a button to set the system language. Reboot to apply.', + 'quick_lang_system': '⚙️ Open system language settings', + 'msg_warn_title': 'Warning', + 'msg_error_title': 'Error', + 'msg_done_title': 'Done', + 'msg_success_title': 'Success', + 'msg_auth_failed_title': 'Authorization failed', + 'msg_device_unauthorized': 'Device unauthorized', + 'msg_input_vin': 'Enter VIN', + 'msg_resource_prepare_failed': 'Resource preparation failed!', + 'msg_resource_dir_missing': 'Resource directory not found', + 'msg_no_apk_in_folder': 'No APK files found in the selected folder!', + 'msg_confirm_install_title': 'Confirm install', + 'msg_confirm_install_many': '{count} APK files selected.\n\nStart installation?', + 'msg_confirm_install_folder': '{count} APK files found.\n\nStart batch installation?', + 'msg_install_success_many': '{count} APKs installed successfully!', + 'msg_install_partial': 'Success: {success}\nFailed: {failed}', + 'msg_install_all_failed': 'All APK installations failed!', + 'msg_install_exception': 'Installation error: {error}', + 'msg_quick_lang_success': 'System language set to {language}.\n\n⚠️ Reboot the device to apply.', + 'msg_quick_lang_failed': 'Language setting failed!\n\n{output}', + 'msg_disable_confirm_title': 'Confirm Disable OTA', + 'msg_disable_confirm': '⚠️ Warning: after disabling OTA, the system will no longer receive updates.\n\nDisable the OTA app?', + 'msg_disable_success': 'System upgrade has been disabled!', + 'msg_disable_failed': 'Disable failed: {output}', + 'msg_reboot_confirm_title': 'Confirm reboot', + 'file_apk': 'APK files', + 'file_all': 'All files', + 'dialog_select_apk': 'Select APK file', + 'dialog_select_apk_folder': 'Select a folder containing APK files', + 'unknown_error': 'unknown error', + 'status_debug': 'Debug mode', + 'debug_password_prompt': 'Enter debug password:', + 'debug_password_verifying': 'Verifying debug password...', + 'debug_wrong_password': 'Wrong password', + 'debug_verify_failed': 'Debug password verification failed: {message}', + 'debug_need_enable': 'Press Ctrl+Shift+D first.', + 'debug_need_vin': 'Extract test needs a VIN. Refresh a connected device or set VIN in debug mode.', + 'log_debug_on': '🔧 Debug mode enabled - authorization and device checks are skipped, detailed ADB logs are shown', + 'log_debug_off': 'Debug mode disabled', + 'log_lang_switched': 'Language switched to English', + 'log_cache_invalid': 'Extract cache invalid: {reason}', + 'log_cache_reuse_invalid': 'Cached resources invalid and cleaned: {reason}', + 'log_package_missing': 'Resource package not found: {path}', + 'log_adb_missing': 'adb not found. Put ADB files in this directory.', + 'log_device_connected': 'Device connected', + 'log_device_disconnected': 'Device disconnected', + 'log_current_vin': 'Current VIN: {vin}', + 'log_vin_unavailable': 'Unable to read VIN', + 'log_refresh_failed': 'Refresh device status failed: {error}', + 'log_auth_skip_debug': 'Debug mode: skip authorization', + 'log_auth_checking': 'Checking authorization...', + 'log_auth_ok': 'Authorization passed', + 'log_auth_failed': 'Authorization failed', + 'log_vehicle_name': 'Vehicle name: {name}', + 'log_adb_required': 'Connect ADB and get VIN first', + 'log_data_prepare_failed_detail': 'Resource preparation failed: {error}', + 'log_extract_password_missing': 'Extraction password is not set', + 'log_7za_missing': '7za.exe not found: {path}', + 'log_extracted_resource_invalid': 'Extracted resources are invalid: {reason}. Flashing stopped. Check the password or package.', + 'log_extract_done': 'Resources ready', + 'log_extract_exception': 'Resource preparation failed: {error}', + 'err_extract_wrong_password': 'Incorrect extraction password. Check the package.bin password.', + 'err_extract_data': 'Package data error. The password may be wrong or package.bin may be damaged.', + 'err_extract_corrupt': 'Package is damaged or incomplete. Check package.bin.', + 'err_extract_failed': 'Extraction failed: {error}', + 'err_extract_failed_code': 'Extraction failed (exit code {code}). Check whether the password is correct.', + 'log_root_failed': 'Permission failed', + 'log_permission_failed': 'Permission failed', + 'log_permission_running': 'Getting permission', + 'log_reboot_failed': 'Reboot failed', + 'log_permission_ok': 'Permission granted', + 'log_flash_readonly': 'Click Get Root first, then try again', + 'log_flash_complete_count': 'Flashing complete, {count} language packages', + 'log_flash_effect_after_reboot': 'Language package flashed. Reboot the device when convenient.', + 'log_flash_partial': 'Partially flashed ({success}/{total})', + 'log_install_start': 'Installing {count} APKs...', + 'log_install_done_all': 'Installation complete: all {count} succeeded', + 'log_install_done_partial': 'Installation complete: {success}/{total} succeeded', + 'log_install_failed': 'Installation failed', + 'log_install_exception': 'Installation error: {error}', + 'log_install_success_item': '✓ {name}', + 'log_install_failed_item': '✗ {name}', + 'log_menu_key_ready': 'Helper component installed', + 'log_menu_key_install_failed': 'Helper component installation failed', + 'log_menu_key_permission_failed': 'Helper component permission setup failed', + 'log_quick_lang_setting': 'Setting system language to: {language} ({locale})', + 'log_quick_lang_success': '✓ Language set to {language}', + 'log_quick_lang_failed': '✗ Language setting failed: {output}', + 'log_rebooting': 'Device rebooting...', + 'log_disable_cancelled': 'Disable OTA cancelled', + 'log_disable_success': 'System upgrade disabled', + 'log_disable_failed': 'Failed to disable system upgrade', + 'log_preclean_start': 'Cleaning preinstalled apps...', + 'log_preclean_done': 'Preinstalled apps cleaned', + 'log_preclean_partial': 'Some preinstalled apps failed to clean', + 'log_preclean_item_done': 'Cleanup item completed: {package}', + 'log_preclean_item_failed': 'Cleanup item failed: {package}', + 'log_package_key_failed': 'package-key fetch failed', + 'log_package_extract_success': 'Resources ready', + 'log_package_extract_failed': 'package.bin extract test failed', + 'log_pwd_success': 'Password query succeeded', + 'log_pwd_failed': 'Password query failed: {message}', + 'log_pwd_request_failed': 'Password query request failed: {error}', + 'err_no_usable_apk': 'No usable APK found', + 'err_zero_apk': '0KB APK found: {files}', + 'err_push_failed': 'push failed: {error}', + 'err_cp_failed': 'cp failed: {error}', + } + } + + # 从 exe/py 所在目录查找资源文件 + self.base_dir = get_app_dir() + self.adb = find_tool('adb.exe', 'adb') + self.sz = find_tool('7za.exe') + self.package_file = self._find_package_file() + self.extract_password = None + self.apps_dir = None + self.priv_apps_dir = None + self.menu_key_apk = None + self.temp_dir = None + self.api_url = "https://api.changan.softwindy.cn/api/authorizations/auth-check" + self.debug_password_api_url = "https://api.changan.softwindy.cn/api/authorizations/verify-debug-mode-password" + self.vin = None + self.vehicle_name = "" + self.device_connected = False + self._refreshing = False # 防止并发刷新 + self.debug_mode = False # 调试模式 + self.mazda_disable_packages = [ + "com.carinno.p1", + "com.wtcl.electronicdirections", + "com.ximalaya.ting.android.car", + "com.tinnove.netease.music", + "com.migu.miguplay.car", + "cn.cmvideo.car.play", + "com.tinnove.carshow", + "com.tinnove.changba", + "com.qiyi.video.iv", + "com.changan.appmarket", + "com.incall.apps.softmanager", + ] + atexit.register(self.cleanup_cache_on_exit) + + # 设置样式 + self.setup_styles() + self.setup_ui() + self.root.after(200, self.set_window_icon) + self.center_window() + + # 检查环境 + self.check_environment() + + # 启动设备状态监控 + self.start_device_monitor() + + def set_window_icon(self): + """Set the Tk window/taskbar icon at runtime; PyInstaller --icon only sets the exe file icon.""" + try: + icon_path = find_resource("app.ico") + if icon_path.exists(): + self.root.iconbitmap(str(icon_path)) + self._set_windows_hwnd_icon(icon_path) + except Exception: + pass + + def _set_windows_hwnd_icon(self, icon_path): + if sys.platform != 'win32': + return + try: + import ctypes + user32 = ctypes.windll.user32 + hwnd = self.root.winfo_id() + image_icon = 1 + lr_loadfromfile = 0x00000010 + wm_seticon = 0x0080 + icon_small = 0 + icon_big = 1 + path = str(icon_path) + small = user32.LoadImageW(None, path, image_icon, 16, 16, lr_loadfromfile) + big = user32.LoadImageW(None, path, image_icon, 32, 32, lr_loadfromfile) + if small: + user32.SendMessageW(hwnd, wm_seticon, icon_small, small) + if big: + user32.SendMessageW(hwnd, wm_seticon, icon_big, big) + except Exception: + pass + + def setup_styles(self): + """设置自定义样式""" + style = ttk.Style() + style.theme_use('clam') + + # 配置主颜色 + style.configure('TFrame', background=self.colors['bg_dark']) + style.configure('TLabel', background=self.colors['bg_dark'], foreground=self.colors['text']) + style.configure('TLabelframe', background=self.colors['bg_dark'], foreground=self.colors['text']) + style.configure('TLabelframe.Label', background=self.colors['bg_dark'], foreground=self.colors['accent']) + + # 配置进度条 + style.configure('TProgressbar', + background=self.colors['accent'], + troughcolor=self.colors['bg_light'], + borderwidth=0) + + def setup_ui(self): + """设置UI界面""" + # 配置根窗口 + self.root.title(self.t('title')) + self.root.configure(bg=self.colors['bg_dark']) + + # 创建主框架 + main_frame = tk.Frame(self.root, bg=self.colors['bg_dark']) + main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) + + # 顶部标题栏 + title_frame = tk.Frame(main_frame, bg=self.colors['bg_dark'], height=45) + title_frame.pack(fill=tk.X, pady=(0, 10)) + title_frame.pack_propagate(False) + + # 标题 + title_inner = tk.Frame(title_frame, bg=self.colors['bg_dark']) + title_inner.place(relx=0.5, rely=0.5, anchor='center') + self.title_icon_label = tk.Label(title_inner, + text="🚗", + font=('Microsoft YaHei', 17, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.title_icon_label.grid(row=0, column=0, padx=(0, 8), sticky='e') + self.title_label = tk.Label(title_inner, + text=self.t('title'), + font=('Microsoft YaHei', 18, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.title_label.grid(row=0, column=1, sticky='w') + + self.btn_lang_switch = tk.Button(title_frame, text="EN", + command=self.toggle_lang, + font=('Microsoft YaHei', 9, 'bold'), + fg='white', + bg=self.colors['accent'], + activebackground=self.colors['accent_hover'], + activeforeground='white', + relief=tk.FLAT, + cursor='hand2', + width=8, + height=1) + self.btn_lang_switch.place(relx=1.0, rely=0.5, x=-2, anchor='e') + + # 工程密码查询区域 + pwd_query_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + pwd_query_frame.pack(fill=tk.X, pady=(0, 5), padx=5) + + self.pwd_query_label = tk.Label(pwd_query_frame, text=self.t('pwd_query_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.pwd_query_label.pack(side=tk.LEFT, padx=(10, 5), pady=5) + + self.vin_input = tk.Entry(pwd_query_frame, + font=('Consolas', 9), + bg='#2d2d3d', + fg='#636e72', + insertbackground='white', + relief=tk.FLAT, + width=20) + self.vin_input.insert(0, self.t('vin_placeholder')) + self.vin_input.bind("", self._on_vin_input_focus_in) + self.vin_input.bind("", self._on_vin_input_focus_out) + self.vin_input.pack(side=tk.LEFT, padx=5, pady=5) + + self.btn_query_pwd = tk.Button(pwd_query_frame, text=self.t('btn_query_pwd'), + command=self.query_password_by_vin, + font=('Microsoft YaHei', 8), + fg='white', + bg=self.colors['accent'], + activebackground=self.colors['accent_hover'], + activeforeground='white', + relief=tk.FLAT, + cursor='hand2') + self.btn_query_pwd.pack(side=tk.LEFT, padx=5, pady=5) + + self.pwd_result_label = tk.Label(pwd_query_frame, text="", + font=('Microsoft YaHei', 9, 'bold'), + fg=self.colors['success'], + bg=self.colors['bg_light']) + self.pwd_result_label.pack(side=tk.LEFT, padx=10, pady=5) + + # 按钮区域(两排,每排5个) + button_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + button_frame.pack(fill=tk.X, pady=(0, 10), padx=5) + + # 按钮样式参数 + btn_params = { + 'font': ('Microsoft YaHei', 9), + 'fg': 'white', + 'relief': tk.FLAT, + 'cursor': 'hand2', + 'height': 1, + 'width': 14 + } + + # 第一排按钮 + row1_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) + row1_frame.pack(pady=(8, 4)) + + self.btn_root = tk.Button(row1_frame, text="🔓 获取权限", + command=self.get_root_permission, + bg=self.colors['success'], + **btn_params) + self.btn_root.pack(side=tk.LEFT, padx=4) + + self.btn_push = tk.Button(row1_frame, text="📦 刷入语言包", + command=self.push_all_apks, + bg=self.colors['accent'], + **btn_params) + self.btn_push.pack(side=tk.LEFT, padx=4) + + self.btn_install_all = tk.Button(row1_frame, text="📱 安装App", + command=self.install_apps, + bg=self.colors['accent'], + **btn_params) + self.btn_install_all.pack(side=tk.LEFT, padx=4) + + self.btn_language = tk.Button(row1_frame, text="🌐 语言设置", + command=self.open_language_quick_set, + bg=self.colors['accent'], + **btn_params) + self.btn_language.pack(side=tk.LEFT, padx=4) + + # 第二排按钮 + row2_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) + row2_frame.pack(pady=(4, 8)) + + self.btn_timezone = tk.Button(row2_frame, text="⏰ 时区设置", + command=self.open_timezone_settings, + bg=self.colors['accent'], + **btn_params) + self.btn_timezone.pack(side=tk.LEFT, padx=4) + + self.btn_settings = tk.Button(row2_frame, text="⚙️ 安卓设置", + command=self.open_android_settings, + bg=self.colors['accent'], + **btn_params) + self.btn_settings.pack(side=tk.LEFT, padx=4) + + self.btn_reboot = tk.Button(row2_frame, text="🔄 重启设备", + command=self.reboot_device, + bg=self.colors['warning'], + **btn_params) + self.btn_reboot.pack(side=tk.LEFT, padx=4) + + self.btn_exit = tk.Button(row2_frame, text="❌ 禁用升级", + command=self.on_disable_upgrade, + bg=self.colors['error'], + **btn_params) + self.btn_exit.pack(side=tk.LEFT, padx=4) + + self.debug_button_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) + self.btn_debug_extract = tk.Button(self.debug_button_frame, text=self.t('btn_debug_extract'), + command=self.debug_test_package_extract, + bg=self.colors['info'], + **btn_params) + self.btn_debug_extract.pack(side=tk.LEFT, padx=4) + + # 设备状态栏(横条) + status_bar_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + status_bar_frame.pack(fill=tk.X, pady=(0, 5)) + + # 状态指示器 + status_indicator_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) + status_indicator_frame.pack(side=tk.LEFT, padx=10, pady=5) + + self.status_indicator = tk.Canvas(status_indicator_frame, width=10, height=10, + bg=self.colors['bg_light'], highlightthickness=0) + self.status_indicator.pack(side=tk.LEFT) + self.status_dot = self.status_indicator.create_oval(2, 2, 8, 8, fill='#636e72') + + self.device_label = tk.Label(status_indicator_frame, text="设备:", + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.device_label.pack(side=tk.LEFT, padx=(5, 3)) + + self.device_status_label = tk.Label(status_indicator_frame, text=self.t('status_detecting'), + font=('Microsoft YaHei', 9, 'bold'), + fg='#636e72', + bg=self.colors['bg_light'], + anchor='w', width=4) + self.device_status_label.pack(side=tk.LEFT) + + # VIN信息 + vin_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) + vin_frame.pack(side=tk.LEFT, padx=20, pady=5) + self.vin_label_title = tk.Label(vin_frame, text="VIN码:", + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.vin_label_title.pack(side=tk.LEFT) + self.vin_label = tk.Label(vin_frame, text=self.t('vin_none'), + font=('Microsoft YaHei', 9, 'bold'), + fg='#636e72', + bg=self.colors['bg_light'], + anchor='w', width=17) + self.vin_label.pack(side=tk.LEFT, padx=(5, 0)) + + # 授权状态 + auth_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) + auth_frame.pack(side=tk.LEFT, padx=20, pady=5) + self.auth_label_title = tk.Label(auth_frame, text="授权:", + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.auth_label_title.pack(side=tk.LEFT) + self.auth_label = tk.Label(auth_frame, text=self.t('auth_none'), + font=('Microsoft YaHei', 9, 'bold'), + fg='#636e72', + bg=self.colors['bg_light'], + anchor='w', width=4) + self.auth_label.pack(side=tk.LEFT, padx=(5, 0)) + + # 刷新按钮 + self.btn_refresh = tk.Button(status_bar_frame, text="🔄 检查", + command=self.refresh_device_status, + font=('Microsoft YaHei', 8), + fg=self.colors['accent'], + bg=self.colors['bg_light'], + relief=tk.FLAT, + cursor='hand2') + self.btn_refresh.pack(side=tk.RIGHT, padx=10, pady=5) + + # 提示信息区域(设备状态下方) + tips_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + tips_frame.pack(fill=tk.X, pady=(5, 5), padx=5) + + tips = [self.t('tip_1'), self.t('tip_2'), self.t('tip_3')] + + for i, tip in enumerate(tips): + tip_row = tk.Frame(tips_frame, bg=self.colors['bg_light']) + tip_row.pack(fill=tk.X, padx=10, pady=(5 if i == 0 else 0, 5 if i == len(tips) - 1 else 0)) + label = tk.Label(tip_row, text=tip, + font=('Microsoft YaHei', 9), + fg=self.colors['warning'], + bg=self.colors['bg_light'], + wraplength=600, + justify=tk.LEFT) + label.pack(side=tk.LEFT) + setattr(self, f'tip_label_{i + 1}', label) + + # 解压进度条框架 + progress_frame = tk.Frame(main_frame, bg=self.colors['bg_dark']) + progress_frame.pack(fill=tk.X, pady=(5, 5)) + + self.progress_label = tk.Label(progress_frame, text="", + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark']) + self.progress_label.pack() + + self.progress = ttk.Progressbar(progress_frame, mode='determinate', style='TProgressbar') + self.progress.pack(fill=tk.X, pady=(2, 0)) + + # 推送进度条 + self.push_progress_label = tk.Label(progress_frame, text="", + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark']) + + self.push_progress = ttk.Progressbar(progress_frame, mode='determinate', style='TProgressbar') + + # 日志区域(下方) + log_card = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + log_card.pack(fill=tk.BOTH, expand=True, pady=(5, 0)) + + # 日志标题栏 + log_title_frame = tk.Frame(log_card, bg=self.colors['bg_dark'], height=30) + log_title_frame.pack(fill=tk.X) + log_title_frame.pack_propagate(False) + + self.log_title_label = tk.Label(log_title_frame, text="📋 运行日志", + font=('Microsoft YaHei', 10, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.log_title_label.pack(side=tk.LEFT, padx=10) + + self.btn_clear = tk.Button(log_title_frame, text="🗑 清空日志", + command=self.clear_log, + font=('Microsoft YaHei', 8), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark'], + relief=tk.FLAT, + cursor='hand2') + self.btn_clear.pack(side=tk.RIGHT, padx=10) + + # 日志文本框 + text_frame = tk.Frame(log_card, bg=self.colors['bg_light']) + text_frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5) + + self.log_text = scrolledtext.ScrolledText(text_frame, + height=12, + wrap=tk.WORD, + font=('Consolas', 9), + bg='#2d2d3d', + fg='#e0e0e0', + insertbackground='white', + relief=tk.FLAT, + borderwidth=0) + self.log_text.pack(fill=tk.BOTH, expand=True) + + # 配置日志颜色标签 + self.log_text.tag_config('INFO', foreground='#74b9ff') + self.log_text.tag_config('SUCCESS', foreground='#55efc4') + self.log_text.tag_config('ERROR', foreground='#ff7675') + self.log_text.tag_config('WARNING', foreground='#ffeaa7') + self.log_text.tag_config('CMD', foreground='#a29bfe') + + # 底部状态栏 + bottom_status = tk.Frame(main_frame, bg=self.colors['bg_light'], height=22) + bottom_status.pack(fill=tk.X, pady=(5, 0)) + bottom_status.pack_propagate(False) + + self.status_text = tk.Label(bottom_status, text="就绪", + font=('Microsoft YaHei', 8), + fg=self.colors['text_secondary'], + bg=self.colors['bg_light']) + self.status_text.pack(side=tk.LEFT, padx=10) + + # 调试模式快捷键 + self.root.bind('', self._toggle_debug) + self.root.bind('', self._debug_test_extract) + self.root.protocol("WM_DELETE_WINDOW", self.on_close) + + # 绑定悬停效果 + self.bind_hover_effects() + + def bind_hover_effects(self): + """绑定按钮悬停效果""" + buttons = [self.btn_root, self.btn_push, self.btn_install_all, + self.btn_language, self.btn_timezone, self.btn_settings, + self.btn_reboot, self.btn_clear, self.btn_exit, + self.btn_debug_extract] + + for btn in buttons: + original_bg = btn.cget('bg') + def on_enter(e, btn=btn, bg=original_bg): + btn.config(bg=self.lighten_color(bg)) + def on_leave(e, btn=btn, bg=original_bg): + btn.config(bg=bg) + btn.bind('', on_enter) + btn.bind('', on_leave) + + def lighten_color(self, color): + """调亮颜色""" + if color == self.colors['accent']: + return self.colors['accent_hover'] + elif color == self.colors['warning']: + return '#feca57' + elif color == self.colors['info']: + return '#0984e3' + elif color == self.colors['error']: + return '#e17055' + elif color == self.colors['success']: + return '#00a884' + return color + + def center_window(self): + """将窗口居中显示在屏幕上""" + self.root.update_idletasks() + screen_w = self.root.winfo_screenwidth() + screen_h = self.root.winfo_screenheight() + win_w = self.root.winfo_reqwidth() + win_h = self.root.winfo_reqheight() + x = (screen_w - win_w) // 2 + y = (screen_h - win_h) // 2 + self.root.geometry(f"+{x}+{y}") + + def run_on_ui_thread(self, func, *args, **kwargs): + """将函数调度到主线程执行,确保线程安全""" + self.root.after(0, lambda: func(*args, **kwargs)) + + def _adb_cmd(self): + return subprocess.list2cmdline([self.adb]) + + def _find_package_file(self): + return find_resource("package.bin") + + def t(self, key): + """获取翻译文本""" + return self.T.get(self.lang, self.T['zh']).get(key, key) + + def tf(self, key, **kwargs): + try: + return self.t(key).format(**kwargs) + except Exception: + return self.t(key) + + def is_placeholder_vin(self, value): + return value in ( + self.T['zh'].get('vin_placeholder'), + self.T['en'].get('vin_placeholder'), + ) + + def toggle_lang(self): + """切换语言""" + self.lang = 'en' if self.lang == 'zh' else 'zh' + self.btn_lang_switch.config(text=self.t('lang_en') if self.lang == 'zh' else self.t('lang_zh')) + self._refresh_ui_texts() + self.log(self.t('log_lang_switched'), "INFO") + + def _refresh_ui_texts(self): + """刷新所有UI文本""" + t = self.t + self.root.title(t('title')) + widgets = [ + (getattr(self, 'title_label', None), 'title', None), + (getattr(self, 'btn_root', None), 'btn_root', None), + (getattr(self, 'btn_push', None), 'btn_push', None), + (getattr(self, 'btn_install_all', None), 'btn_install', None), + (getattr(self, 'btn_language', None), 'btn_language', None), + (getattr(self, 'btn_timezone', None), 'btn_timezone', None), + (getattr(self, 'btn_settings', None), 'btn_settings', None), + (getattr(self, 'btn_reboot', None), 'btn_reboot', None), + (getattr(self, 'btn_exit', None), 'btn_disable_upgrade', None), + (getattr(self, 'btn_debug_extract', None), 'btn_debug_extract', None), + (getattr(self, 'btn_query_pwd', None), 'btn_query_pwd', None), + (getattr(self, 'btn_clear', None), 'btn_clear_log', None), + (getattr(self, 'pwd_query_label', None), 'pwd_query_label', None), + (getattr(self, 'log_title_label', None), 'log_title', None), + (getattr(self, 'device_label', None), 'device_label', None), + (getattr(self, 'vin_label_title', None), 'vin_label', None), + (getattr(self, 'auth_label_title', None), 'auth_label', None), + (getattr(self, 'btn_refresh', None), 'btn_refresh', None), + (getattr(self, 'hint_label', None), 'hint_factory', None), + (getattr(self, 'tip_label_1', None), 'tip_1', None), + (getattr(self, 'tip_label_2', None), 'tip_2', None), + (getattr(self, 'tip_label_3', None), 'tip_3', None), + ] + for w, key, _ in widgets: + if w: + w.config(text=t(key)) + if getattr(self, 'status_text', None): + self.status_text.config(text=t('status_debug') if self.debug_mode else t('status_ready')) + self.btn_lang_switch.config(text=t('lang_en') if self.lang == 'zh' else t('lang_zh')) + if getattr(self, 'vin_input', None) and self.is_placeholder_vin(self.vin_input.get()): + self.vin_input.delete(0, tk.END) + self.vin_input.insert(0, t('vin_placeholder')) + self._update_device_status_impl( + self.device_connected, + self.vin, + getattr(self, '_last_authorized', False) + ) + + def set_debug_buttons_visible(self, visible): + if not hasattr(self, 'debug_button_frame'): + return + if visible: + self.debug_button_frame.pack(pady=(0, 8)) + else: + self.debug_button_frame.pack_forget() + + def _log_impl(self, message, level="INFO"): + """日志写入的实际实现(必须在主线程调用)""" + timestamp = datetime.now().strftime("%H:%M:%S") + log_entry = f"[{timestamp}] [{level}] {message}\n" + self.log_text.insert(tk.END, log_entry, level) + self.log_text.see(tk.END) + + def log(self, message, level="INFO"): + """添加日志(线程安全)""" + self.run_on_ui_thread(self._log_impl, message, level) + + def clear_log(self): + """清空日志""" + self.log_text.delete(1.0, tk.END) + self.log(self.t('info_log_cleared'), "INFO") + + def _show_progress_impl(self, show=True, is_push=False): + """显示/隐藏进度条的实际实现(必须在主线程调用)""" + if is_push: + if show: + self.push_progress_label.pack() + self.push_progress.pack(fill=tk.X, pady=(2, 0)) + self.push_progress['value'] = 0 + else: + self.push_progress_label.pack_forget() + self.push_progress.pack_forget() + else: + if show: + self.progress_label.pack() + self.progress.pack(fill=tk.X, pady=(2, 0)) + self.progress['value'] = 0 + else: + self.progress_label.pack_forget() + self.progress.pack_forget() + + def show_progress(self, show=True, is_push=False): + """显示/隐藏进度条(线程安全)""" + self.run_on_ui_thread(self._show_progress_impl, show, is_push) + + def _update_progress_impl(self, value, max_value=100, label="", is_push=False): + """更新进度条的实际实现(必须在主线程调用)""" + if is_push: + percent = (value / max_value) * 100 + self.push_progress['value'] = percent + self.push_progress_label.config(text=f"{label}: {value}/{max_value} ({percent:.1f}%)") + else: + percent = (value / max_value) * 100 + self.progress['value'] = percent + self.progress_label.config(text=f"{label}: {value}/{max_value} ({percent:.1f}%)") + self.root.update_idletasks() + + def update_progress(self, value, max_value=100, label="", is_push=False): + """更新进度条(线程安全)""" + self.run_on_ui_thread(self._update_progress_impl, value, max_value, label, is_push) + + def update_device_status(self, connected, vin=None, authorized=False): + """更新设备状态显示(线程安全:立即设状态变量,UI走主线程)""" + self.device_connected = connected + if vin is not None: + self.vin = vin + self.run_on_ui_thread(self._update_device_status_impl, connected, vin, authorized) + + def _update_device_status_impl(self, connected, vin, authorized): + """设备状态UI更新的实际实现(必须在主线程调用)""" + self._last_authorized = authorized + t = self.t + if connected: + self.status_indicator.itemconfig(self.status_dot, fill=self.colors['success']) + self.device_status_label.config(text=t('status_connected'), fg=self.colors['success']) + if vin: + self.vin_label.config(text=vin, fg=self.colors['success']) + if authorized: + self.auth_label.config(text=t('auth_yes'), fg=self.colors['success']) + else: + self.auth_label.config(text=t('auth_no'), fg=self.colors['error']) + else: + self.vin_label.config(text=t('vin_none'), fg=self.colors['error']) + self.auth_label.config(text=t('auth_none'), fg=self.colors['error']) + else: + self.status_indicator.itemconfig(self.status_dot, fill=self.colors['error']) + self.device_status_label.config(text=t('status_disconnected'), fg=self.colors['error']) + self.vin_label.config(text=t('vin_none'), fg=self.colors['error']) + self.auth_label.config(text=t('auth_none'), fg=self.colors['error']) + + def check_device_connection(self): + """检查设备是否连接""" + if self.debug_mode: + return True + if not self.device_connected: + messagebox.showwarning(self.t('warn_no_device'), self.t('warn_connect_first')) + return False + return True + + def start_device_monitor(self): + """启动设备状态监控(每5秒检查一次)""" + def monitor(): + while True: + try: + result = subprocess.run(f'{self._adb_cmd()} -d devices', shell=True, capture_output=True, text=True) + lines = result.stdout.strip().split('\n') + devices = [line for line in lines[1:] if line.strip() and 'device' in line and 'offline' not in line] + + if devices and not self.device_connected and not self._refreshing: + # 设备新连接,刷新状态 + self.refresh_device_status() + elif not devices and self.device_connected: + # 设备断开连接 + self.update_device_status(False) + self.log(self.t('log_device_disconnected'), "WARNING") + + time.sleep(5) + except: + time.sleep(5) + + threading.Thread(target=monitor, daemon=True).start() + + def get_root_permission(self): + """获取 root/remount 权限,不触发重启。""" + if not self.check_device_connection(): + return + + def get_root(): + self.show_progress(True, is_push=False) + self.log(self.t('log_permission_running'), "INFO") + + ok_root, out_root = self.run_adb_command('adb -d root') + if not ok_root: + self.log(self.t('log_root_failed'), "ERROR") + self.show_progress(False, is_push=False) + return + + time.sleep(1) + + ok_remount, out_remount = self.run_adb_password_command('adb -d remount', timeout=60) + if not ok_remount: + self.log(self.t('log_permission_failed'), "ERROR") + self.show_progress(False, is_push=False) + return + + self.log(self.t('log_permission_ok'), "SUCCESS") + + self.show_progress(False, is_push=False) + + threading.Thread(target=get_root, daemon=True).start() + + def check_package_extracted(self): + """检查语言包是否已解压""" + has_app = self.apps_dir and self.apps_dir.exists() and len(list(self.apps_dir.glob("*.apk"))) > 0 + has_priv = self.priv_apps_dir and self.priv_apps_dir.exists() and len(list(self.priv_apps_dir.glob("*.apk"))) > 0 + if has_app or has_priv: + ok, reason = self._validate_extracted_apks() + if not ok: + self.log(self.tf('log_cache_invalid', reason=reason), "ERROR") + self._clear_extracted_cache() + return False + return has_app or has_priv + + def _validate_extracted_apks(self): + apks = [] + if self.apps_dir and self.apps_dir.exists(): + apks.extend(self.apps_dir.glob("*.apk")) + if self.priv_apps_dir and self.priv_apps_dir.exists(): + apks.extend(self.priv_apps_dir.glob("*.apk")) + if not apks: + return False, self.t('err_no_usable_apk') + + zero_apks = [apk.name for apk in apks if apk.stat().st_size <= 0] + if zero_apks: + preview = ", ".join(zero_apks[:5]) + suffix = "..." if len(zero_apks) > 5 else "" + return False, self.tf('err_zero_apk', files=f"{preview}{suffix}") + return True, "" + + def _clear_extracted_cache(self): + if self.temp_dir and self.temp_dir.exists(): + shutil.rmtree(self.temp_dir, ignore_errors=True) + time.sleep(0.5) + self.apps_dir = None + self.priv_apps_dir = None + self.menu_key_apk = None + self.temp_dir = None + + def _cache_dir_path(self): + local_appdata = os.environ.get('LOCALAPPDATA', os.path.expanduser('~\\AppData\\Local')) + return Path(local_appdata) / ".cache" / "system" / ".android" / self.CACHE_DIR_NAME + + def _scan_root_level_apks(self): + if not self.apps_dir: + return + root_dir = self.apps_dir.parent + menu_key_candidate = root_dir / "MenuKey-release.apk" + if menu_key_candidate.exists(): + self.menu_key_apk = menu_key_candidate + + def cleanup_cache_on_exit(self): + self._clear_extracted_cache() + + def on_close(self): + self.cleanup_cache_on_exit() + self.root.destroy() + + def _format_extract_error(self, err_msg, return_code): + text = (err_msg or "").lower() + if any(marker in text for marker in ( + "wrong password", + "incorrect password", + "password is incorrect", + "data error in encrypted file", + "can not open encrypted archive", + )): + return self.t('err_extract_wrong_password') + if "data error" in text: + return self.t('err_extract_data') + if "headers error" in text or "unexpected end" in text: + return self.t('err_extract_corrupt') + if err_msg.strip(): + return self.tf('err_extract_failed', error=err_msg.strip()[:300]) + return self.tf('err_extract_failed_code', code=return_code) + + def _decode_7z_output(self, output): + for enc in ('gbk', 'utf-8'): + try: + return output.decode(enc) + except UnicodeDecodeError: + continue + return output.decode('utf-8', errors='replace') + + def _seven_zip_supports_progress_stream(self): + try: + result = subprocess.run( + [self.sz], + capture_output=True, + text=True, + errors='ignore', + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + return '-bs{o|e|p}' in (result.stdout + result.stderr) + except Exception: + return False + + def _extract_with_7za_progress(self): + self.update_progress(0, 100, self.t('progress_resource_loading')) + cmd = [ + self.sz, 'x', str(self.package_file), + f'-p{self.extract_password}', + f'-o{self.temp_dir}', '-y' + ] + use_progress_switch = self._seven_zip_supports_progress_stream() + if use_progress_switch: + cmd.extend(['-bsp1', '-bso0', '-bse1']) + + proc = subprocess.Popen( + cmd, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + stdin=subprocess.DEVNULL, + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0, + bufsize=0 + ) + + output = bytearray() + last_percent = -1 + while True: + chunk = proc.stdout.read(1) if proc.stdout else b'' + if not chunk: + if proc.poll() is not None: + break + time.sleep(0.05) + continue + + output.extend(chunk) + if len(output) > 60000: + del output[:-60000] + + matches = re.findall(rb'(\d{1,3})%', bytes(output[-512:])) + if matches: + percent = min(100, int(matches[-1])) + if percent != last_percent: + last_percent = percent + self.update_progress( + percent, + 100, + self.tf('progress_extracting_percent', percent=percent) + ) + + return_code = proc.wait() + decoded_output = self._decode_7z_output(bytes(output)) + if return_code == 0: + self.update_progress(100, 100, self.t('progress_resource_done')) + return True, decoded_output + if use_progress_switch and "incorrect command line" in decoded_output.lower(): + return self._extract_with_7za_basic() + return False, decoded_output + + def _extract_with_7za_basic(self): + cmd = [ + self.sz, 'x', str(self.package_file), + f'-p{self.extract_password}', + f'-o{self.temp_dir}', '-y' + ] + result = subprocess.run( + cmd, + capture_output=True, + stdin=subprocess.DEVNULL, + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + decoded_output = self._decode_7z_output(result.stdout + result.stderr) + if result.returncode == 0: + self.update_progress(100, 100, self.t('progress_resource_done')) + return True, decoded_output + return False, decoded_output + + def extract_package_silent(self): + """Extract package.bin silently with progress.""" + if not self.package_file.exists(): + self.log(self.tf('log_package_missing', path=self.package_file), "ERROR") + return False + + if not self.extract_password: + self.log(self.t('log_extract_password_missing'), "ERROR") + return False + + if not os.path.exists(self.sz): + self.log(self.tf('log_7za_missing', path=self.sz), "ERROR") + return False + + try: + hidden_path = self._cache_dir_path().parent + hidden_path.mkdir(parents=True, exist_ok=True) + + self.temp_dir = self._cache_dir_path() + + if self.temp_dir.exists(): + shutil.rmtree(self.temp_dir, ignore_errors=True) + time.sleep(0.5) + + self.temp_dir.mkdir(parents=True, exist_ok=True) + + if sys.platform == 'win32': + subprocess.run(f'attrib +h "{self.temp_dir.parent}"', shell=True, capture_output=True) + subprocess.run(f'attrib +h "{self.temp_dir}"', shell=True, capture_output=True) + + self.log(self.t('info_extracting'), "INFO") + + ok, err_msg = self._extract_with_7za_progress() + if not ok: + self.log(self._format_extract_error(err_msg, 1), "ERROR") + self._clear_extracted_cache() + return False + + self.apps_dir = None + self.priv_apps_dir = None + self.menu_key_apk = None + + app_candidates = list(self.temp_dir.rglob("app")) or list(self.temp_dir.rglob("apps")) + if app_candidates: + self.apps_dir = app_candidates[0] + self._scan_root_level_apks() + + priv_app_candidates = list(self.temp_dir.rglob("priv-app")) or list(self.temp_dir.rglob("priv-apps")) + if priv_app_candidates: + self.priv_apps_dir = priv_app_candidates[0] + + if not self.apps_dir and not self.priv_apps_dir: + self.log(self.t('warn_no_app_dir'), "WARNING") + self._clear_extracted_cache() + return False + + ok, reason = self._validate_extracted_apks() + if not ok: + self.log(self.tf('log_extracted_resource_invalid', reason=reason), "ERROR") + self._clear_extracted_cache() + return False + self.log(self.t('log_extract_done'), "SUCCESS") + return True + + except Exception as e: + if getattr(self, 'debug_mode', False): + self.log(self.tf('log_extract_exception', error=str(e)), "ERROR") + import traceback + self.log(traceback.format_exc(), "ERROR") + else: + self.log(self.t('err_extract_user'), "ERROR") + self._clear_extracted_cache() + return False + + def check_environment(self): + """检查环境""" + try: + result = subprocess.run(f'{self._adb_cmd()} version', shell=True, capture_output=True, text=True) + if result.returncode == 0: + self.refresh_device_status() + if not self.package_file.exists(): + self.log(self.tf('log_package_missing', path=self.package_file), "WARNING") + else: + self._try_reuse_extracted() + else: + self.log(self.t('log_adb_missing'), "ERROR") + except FileNotFoundError: + self.log(self.t('log_adb_missing'), "ERROR") + + def _try_reuse_extracted(self): + """检查磁盘上是否已有解压好的资源,有则直接复用""" + cache_dir = self._cache_dir_path() + if not cache_dir.exists(): + return + + app_candidates = list(cache_dir.rglob("app")) or list(cache_dir.rglob("apps")) + priv_candidates = list(cache_dir.rglob("priv-app")) or list(cache_dir.rglob("priv-apps")) + + has_app = False + has_priv = False + if app_candidates: + apks = list(app_candidates[0].glob("*.apk")) + has_app = len(apks) > 0 + if priv_candidates: + apks = list(priv_candidates[0].glob("*.apk")) + has_priv = len(apks) > 0 + + if has_app or has_priv: + if has_app: + self.apps_dir = app_candidates[0] + self._scan_root_level_apks() + if has_priv: + self.priv_apps_dir = priv_candidates[0] + self.temp_dir = cache_dir + ok, reason = self._validate_extracted_apks() + if not ok: + self.log(self.tf('log_cache_reuse_invalid', reason=reason), "WARNING") + self._clear_extracted_cache() + return + # self.log("已复用缓存的资源文件", "INFO") + + def refresh_device_status(self): + """Refresh device status.""" + if self._refreshing: + return + self._refreshing = True + + def refresh(): + try: + was_connected = self.device_connected + + result = subprocess.run(f'{self._adb_cmd()} -d devices', shell=True, capture_output=True, text=True) + lines = result.stdout.strip().splitlines() + devices = [line for line in lines[1:] if line.strip() and 'device' in line and 'offline' not in line] + + if devices: + if not was_connected: + self.log(self.t('log_device_connected'), "SUCCESS") + + vin = '' + vin_ok, vin_output = self.run_adb_shell('settings get system ca.car.vin') + if vin_ok: + vin = vin_output.strip() + if not vin or vin == 'null': + vin = '' + if vin: + self.log(self.tf('log_current_vin', vin=vin), "INFO") + authorized = self.check_authorization(vin) + self.update_device_status(True, vin, authorized) + else: + self.log(self.t('log_vin_unavailable'), "WARNING") + self.update_device_status(True, None, False) + else: + if was_connected: + self.log(self.t('log_device_disconnected'), "WARNING") + self.update_device_status(False) + except Exception as e: + self.log(self.tf('log_refresh_failed', error=str(e)), "ERROR") + finally: + self._refreshing = False + + threading.Thread(target=refresh, daemon=True).start() + + def check_authorization(self, vin): + """Check authorization.""" + if getattr(self, 'debug_mode', False): + self.log(self.t('log_auth_skip_debug'), "WARNING") + return True + self.log(self.t('log_auth_checking'), "INFO") + try: + authorized, vehicle_name, _ = self.query_authorization_info(vin) + if authorized: + self.log(self.t('log_auth_ok'), "SUCCESS") + if vehicle_name: + self.vehicle_name = vehicle_name + self.log(self.tf('log_vehicle_name', name=vehicle_name), "INFO") + return True + else: + self.log(self.t('log_auth_failed'), "ERROR") + return False + + except Exception: + self.log(self.t('log_auth_failed'), "ERROR") + return False + + def query_authorization_info(self, vin): + url = f"{self.api_url}?{urlencode({'vin': vin})}" + req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + + payload = data.get('data', {}) if isinstance(data, dict) else {} + vehicle_name = payload.get('vehicleName') or payload.get('vehicle_name') or "" + vehicle_name = str(vehicle_name).strip() + if data.get('authorized') is True and vehicle_name: + self.vehicle_name = vehicle_name + return data.get('authorized') is True, vehicle_name, data + + def fetch_package_password(self): + """Fetch package password from server.""" + if not self.vin: + self.log(self.t('log_adb_required'), "ERROR") + return False + + try: + pwd_api_url = "https://api.changan.softwindy.cn/api/authorizations/package-key" + url = f"{pwd_api_url}?{urlencode({'vin': self.vin, 'vehicleName': self.PACKAGE_KEY_VEHICLE_NAME})}" + req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + + if data.get('success') and 'data' in data and 'password' in data['data']: + self.extract_password = data['data']['password'] + return True + else: + self.log(self.tf('log_data_prepare_failed_detail', error=data.get('message', self.t('unknown_error'))), "ERROR") + return False + + except Exception as e: + self.log(self.tf('log_data_prepare_failed_detail', error=str(e)), "ERROR") + return False + + def run_adb_command(self, command): + """执行 adb 命令,静默执行,仅返回结果""" + command = command.replace('adb', self._adb_cmd(), 1) + if self.debug_mode: + self.log(f"CMD: {command}", "CMD") + try: + result = subprocess.run(command, shell=True, capture_output=True, text=True, encoding='utf-8') + if self.debug_mode: + out = result.stdout.strip() + err = result.stderr.strip() + if out: + self.log(f" -> {out[:300]}", "CMD") + if err: + self.log(f" !! {err[:300]}", "ERROR") + if result.returncode == 0: + output = result.stdout.strip() + err = result.stderr.strip() + if err: + output = f"{output}\n{err}".strip() + return True, output + else: + return False, result.stderr.strip() + except Exception as e: + return False, str(e) + + def run_adb_password_command(self, command, timeout=30): + """执行需要设备验证密码的 adb 命令,并自动输入 adb36987。""" + command = command.replace('adb', self._adb_cmd(), 1) + if self.debug_mode: + self.log(f"CMD: {command}", "CMD") + try: + proc = subprocess.Popen( + command, + shell=True, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + encoding='utf-8', + errors='replace' + ) + stdout, stderr = proc.communicate(input='adb36987\n', timeout=timeout) + combined = (stdout or "") + if stderr: + combined += ("\n" if combined else "") + stderr + + output_lines = [] + for line in combined.splitlines(): + stripped = line.strip() + lower = stripped.lower() + if 'please input verify password' in lower: + continue + if stripped == 'verify success!': + continue + output_lines.append(line) + output = "\n".join(output_lines).strip() + + if self.debug_mode: + self.log(f"CMD RET: {proc.returncode}", "CMD") + if output: + self.log(f"CMD OUTPUT:\n{output[:1000]}", "CMD") + if proc.returncode == 0: + return True, output + return False, output + except subprocess.TimeoutExpired: + proc.kill() + proc.communicate() + return False, "command timeout" + except Exception as e: + return False, str(e) + + def run_adb_shell(self, shell_command): + """执行 adb shell 命令,自动静默输入设备密码 adb36987。""" + command = f'{self._adb_cmd()} -d shell {shell_command}' + if self.debug_mode: + self.log(f"CMD: adb shell {shell_command}", "CMD") + try: + proc = subprocess.Popen( + command, + shell=True, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + encoding='utf-8', + errors='replace' + ) + stdout, stderr = proc.communicate(input='adb36987\n', timeout=30) + combined = (stdout or "") + if stderr: + combined += ("\n" if combined else "") + stderr + + output_lines = [] + for line in combined.splitlines(): + stripped = line.strip() + lower = stripped.lower() + if 'please input verify password' in lower: + continue + if stripped == 'verify success!': + continue + output_lines.append(line) + output = "\n".join(output_lines).strip() + + if self.debug_mode: + self.log(f"CMD RET: {proc.returncode}", "CMD") + if output: + self.log(f"CMD OUTPUT:\n{output[:1000]}", "CMD") + if proc.returncode == 0: + return True, output + return False, output + except subprocess.TimeoutExpired: + proc.kill() + proc.communicate() + return False, "command timeout" + except Exception as e: + return False, str(e) + + def grant_menu_key_overlay_permission(self): + package_name = "com.magicianguo.virtualkey" + commands = [ + f"appops set --user 0 {package_name} SYSTEM_ALERT_WINDOW allow", + f"appops set --user 10 {package_name} SYSTEM_ALERT_WINDOW allow", + ] + failed = [] + for command in commands: + ok, output = self.run_adb_shell(command) + if not ok: + failed.append(output or command) + + if failed: + fallback_ok, fallback_output = self.run_adb_shell( + f"appops set {package_name} SYSTEM_ALERT_WINDOW allow" + ) + if not fallback_ok: + if self.debug_mode: + self.log(f"MenuKey overlay permission failed: {'; '.join(failed)}; {fallback_output}", "ERROR") + return False + + return True + + def install_apk_file_with_current_model(self, apk_path): + """Use the same APK install path as the Install App button.""" + apk_path = Path(apk_path) + remote_path = f"/data/local/tmp/{apk_path.name}" + push_ok, push_err = self.run_adb_command(f'adb -d push "{apk_path}" {remote_path}') + if not push_ok: + return False, push_err + + install_ok, install_err = self.run_adb_shell(f'pm install -r -d "{remote_path}"') + self.run_adb_shell(f'rm -f "{remote_path}"') + return install_ok, install_err + + def install_menu_key_before_flash(self): + """Install root-level MenuKey-release.apk and grant overlay permission.""" + menu_key_apk = self.menu_key_apk + if not menu_key_apk and self.apps_dir and self.apps_dir.exists(): + candidate = self.apps_dir.parent / "MenuKey-release.apk" + if candidate.exists(): + menu_key_apk = candidate + self.menu_key_apk = candidate + + if not menu_key_apk or not menu_key_apk.exists(): + if self.debug_mode: + self.log("MenuKey-release.apk not found, skip install", "CMD") + return True + + try: + self.run_adb_shell('setprop vecentek.model 1') + + install_ok, install_err = self.install_apk_file_with_current_model(menu_key_apk) + if not install_ok: + if self.debug_mode: + self.log(f"MenuKey install failed: {install_err}", "ERROR") + self.log(self.t('log_menu_key_install_failed'), "ERROR") + return False + finally: + self.run_adb_shell('setprop vecentek.model 0') + + if not self.grant_menu_key_overlay_permission(): + self.log(self.t('log_menu_key_permission_failed'), "WARNING") + else: + self.log(self.t('log_menu_key_ready'), "SUCCESS") + + return True + + def push_single_apk(self, apk_path, apk_name, target_type="app"): + """推送单个APK到系统分区,返回 (成功, 错误信息)""" + temp_apk_path = f"/data/local/tmp/{apk_name}.apk" + target_dir = f"/system/priv-app/{apk_name}" if target_type == "priv-app" else f"/system/app/{apk_name}" + target_apk_path = f"{target_dir}/{apk_name}.apk" + + ok, err = self.run_adb_command(f'adb -d push "{apk_path}" {temp_apk_path}') + if not ok: + return False, self.tf('err_push_failed', error=err) + + self.run_adb_shell(f'mkdir -p {target_dir}') + ok, err = self.run_adb_shell(f'cp {temp_apk_path} {target_apk_path}') + self.run_adb_shell(f'rm -f {temp_apk_path}') + if not ok: + return False, self.tf('err_cp_failed', error=err) + + return True, "" + + def disable_system_upgrade_for_flash(self): + success, output = self.run_adb_shell('pm disable-user --user 0 com.incall.apps.softmanager') + if success: + self.log(self.t('log_disable_success'), "SUCCESS") + return True + self.log(self.t('log_disable_failed'), "ERROR") + return False + + def ensure_root_ready_for_flash(self): + """刷入前确认 adbd 已经处于 root 状态。""" + ok, output = self.run_adb_command('adb -d root') + if ok and 'adbd is already running as root' in (output or '').lower(): + return True + self.log(self.t('log_flash_readonly'), "ERROR") + return False + + def clean_preinstalled_apps_for_flash(self): + """刷入语言包前清理 Mazda 预置应用。""" + self.log(self.t('log_preclean_start'), "INFO") + success_count = 0 + for package_name in self.mazda_disable_packages: + ok, output = self.run_adb_shell(f'pm disable-user {package_name}') + if ok: + success_count += 1 + if self.debug_mode: + self.log(self.tf('log_preclean_item_done', package=package_name), "SUCCESS") + elif self.debug_mode: + self.log(self.tf('log_preclean_item_failed', package=package_name), "ERROR") + + if success_count == len(self.mazda_disable_packages): + self.log(self.t('log_preclean_done'), "SUCCESS") + return True + + self.log(self.t('log_preclean_partial'), "WARNING") + return success_count > 0 + + def push_all_apks(self): + """推送APK到系统分区(支持app和priv-app)""" + if not self.check_device_connection(): + return + if not self.vin and not self.debug_mode: + messagebox.showwarning(self.t('msg_warn_title'), self.t('warn_no_vin')) + return + + messagebox.showwarning(self.t('warn_flash_warning'), self.t('warn_flash_msg')) + + def do_push_all(): + if not self.check_authorization(self.vin): + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_auth_failed_title'), self.t('msg_device_unauthorized'))) + return + if not self.ensure_root_ready_for_flash(): + self.run_on_ui_thread(lambda: messagebox.showwarning(self.t('msg_warn_title'), self.t('log_flash_readonly'))) + return + if not self.clean_preinstalled_apps_for_flash(): + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_error_title'), self.t('log_preclean_partial'))) + return + if not self.disable_system_upgrade_for_flash(): + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_disable_failed'))) + return + if not self.extract_password: + if not self.fetch_package_password(): + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_prepare_failed'))) + return + if not self.check_package_extracted(): + self.show_progress(True, is_push=False) + if not self.extract_package_silent(): + self.show_progress(False, is_push=False) + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_prepare_failed'))) + return + self.show_progress(False, is_push=False) + + if (not self.apps_dir or not self.apps_dir.exists()) and \ + (not self.priv_apps_dir or not self.priv_apps_dir.exists()): + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_dir_missing'))) + return + + self.show_progress(True, is_push=True) + self.run_adb_shell('mkdir -p /data/local/tmp') + self.install_menu_key_before_flash() + + all_apks = [] + if self.apps_dir and self.apps_dir.exists(): + for apk in self.apps_dir.glob("*.apk"): + all_apks.append((apk, "app")) + if self.priv_apps_dir and self.priv_apps_dir.exists(): + for apk in self.priv_apps_dir.glob("*.apk"): + all_apks.append((apk, "priv-app")) + + if not all_apks: + # 缓存可能过期,强制重新解压 + self.apps_dir = None + self.priv_apps_dir = None + self.temp_dir = None + if not self.fetch_package_password() or not self.extract_package_silent(): + self.log(self.t('warn_no_apk'), "WARNING") + self.show_progress(False, is_push=True) + return + # 重新收集 + all_apks = [] + if self.apps_dir and self.apps_dir.exists(): + for apk in self.apps_dir.glob("*.apk"): + all_apks.append((apk, "app")) + if self.priv_apps_dir and self.priv_apps_dir.exists(): + for apk in self.priv_apps_dir.glob("*.apk"): + all_apks.append((apk, "priv-app")) + if not all_apks: + self.log(self.t('warn_no_apk'), "WARNING") + self.show_progress(False, is_push=True) + return + + total = len(all_apks) + success_count = 0 + aborted = False + for i, (apk_path, apk_type) in enumerate(all_apks, 1): + apk_name = apk_path.stem + ok, err = self.push_single_apk(apk_path, apk_name, apk_type) + if ok: + success_count += 1 + else: + if "Read-only file system" in err: + self.log(self.t('log_flash_readonly'), "ERROR") + aborted = True + break + self.update_progress(i, total, self.t('progress_flashing'), is_push=True) + + self.update_progress(total, total, self.t('progress_flash_done') if not aborted else self.t('progress_aborted'), is_push=True) + + if success_count == total: + self.log(self.tf('log_flash_complete_count', count=total), "SUCCESS") + self.log(self.t('log_flash_effect_after_reboot'), "WARNING") + elif success_count > 0: + self.log(self.tf('log_flash_partial', success=success_count, total=total), "WARNING") + if not aborted: + self.log(self.t('log_flash_effect_after_reboot'), "WARNING") + + self.show_progress(False, is_push=True) + + threading.Thread(target=do_push_all, daemon=True).start() + + def install_all_apks(self): + """批量安装APK — 手动选择文件夹""" + if not self.check_device_connection(): + return + + apk_dir = filedialog.askdirectory(title=self.t('dialog_select_apk_folder')) + if not apk_dir: + return + + apk_files = list(Path(apk_dir).glob("*.apk")) + if not apk_files: + messagebox.showerror(self.t('msg_error_title'), self.t('msg_no_apk_in_folder')) + return + + result = messagebox.askyesno( + self.t('msg_confirm_install_title'), + self.tf('msg_confirm_install_folder', count=len(apk_files)) + ) + if not result: + return + + def install(): + self.show_progress(True, is_push=True) + total = len(apk_files) + self.log(self.tf('log_install_start', count=total), "INFO") + success_count = 0 + try: + self.run_adb_shell('setprop vecentek.model 1') + + for i, apk_path in enumerate(apk_files, 1): + self.update_progress(i, total, self.t('progress_installing'), is_push=True) + temp_apk_path = f"/data/local/tmp/{apk_path.name}" + push_ok, _ = self.run_adb_command(f'adb -d push "{apk_path}" {temp_apk_path}') + success = False + if push_ok: + success, _ = self.run_adb_shell(f'pm install -r -d "{temp_apk_path}"') + self.run_adb_shell(f'rm -f "{temp_apk_path}"') + if success: + success_count += 1 + + self.update_progress(total, total, self.t('progress_done'), is_push=True) + + if success_count == total: + self.log(self.tf('log_install_done_all', count=total), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t('info_install_done'), self.tf('msg_install_success_many', count=total)) + elif success_count > 0: + self.log(self.tf('log_install_done_partial', success=success_count, total=total), "WARNING") + self.run_on_ui_thread(messagebox.showwarning, self.t('info_install_done'), self.tf('msg_install_partial', success=success_count, failed=total - success_count)) + else: + self.log(self.t('log_install_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('log_install_failed'), self.t('msg_install_all_failed')) + except Exception as e: + self.log(self.tf('log_install_exception', error=str(e)), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('log_install_failed'), self.tf('msg_install_exception', error=str(e))) + finally: + self.run_adb_shell('setprop vecentek.model 0') + self.show_progress(False, is_push=True) + + threading.Thread(target=install, daemon=True).start() + + def install_single_apk(self): + """安装单个APK""" + # 检查设备连接 + if not self.check_device_connection(): + return + + file_path = filedialog.askopenfilename( + title=self.t('dialog_select_apk'), + filetypes=[(self.t('file_apk'), "*.apk"), (self.t('file_all'), "*.*")] + ) + + if not file_path: + return + + def install(): + self.show_progress(True, is_push=True) + self.update_progress(50, 100, self.t('progress_installing'), is_push=True) + try: + self.run_adb_shell('setprop vecentek.model 1') + temp_apk_path = f"/data/local/tmp/{Path(file_path).name}" + push_ok, _ = self.run_adb_command(f'adb -d push "{file_path}" {temp_apk_path}') + success = False + if push_ok: + success, _ = self.run_adb_shell(f'pm install -r -d "{temp_apk_path}"') + self.run_adb_shell(f'rm -f "{temp_apk_path}"') + self.update_progress(100, 100, self.t('progress_done'), is_push=True) + if success: + self.log(self.t('info_install_done'), "SUCCESS") + else: + self.log(self.t('log_install_failed'), "ERROR") + except Exception as e: + self.log(self.tf('log_install_exception', error=str(e)), "ERROR") + finally: + self.run_adb_shell('setprop vecentek.model 0') + self.show_progress(False, is_push=True) + + threading.Thread(target=install, daemon=True).start() + + def open_language_settings(self): + """打开系统语言设置""" + if not self.check_device_connection(): + return + self.run_adb_shell('am start -a android.settings.LOCALE_SETTINGS') + + def open_language_quick_set(self): + """打开快捷语言设置弹窗""" + # 检查设备连接 + if not self.check_device_connection(): + return + + # 创建弹窗 + popup = tk.Toplevel(self.root) + popup.title(self.t('title_pop_lang')) + popup.geometry("520x320") + popup.configure(bg=self.colors['bg_dark']) + popup.resizable(False, False) + + # 居中显示 + popup.update_idletasks() + x = self.root.winfo_x() + (self.root.winfo_width() - 520) // 2 + y = self.root.winfo_y() + (self.root.winfo_height() - 320) // 2 + popup.geometry(f"+{x}+{y}") + popup.transient(self.root) + popup.grab_set() + + # 标题 + header = tk.Label(popup, text=self.t('quick_lang_header'), + font=('Microsoft YaHei', 13, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + header.pack(pady=(15, 10)) + + hint = tk.Label(popup, text=self.t('quick_lang_hint'), + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark']) + hint.pack(pady=(0, 12)) + + # 语言列表:(显示名, locale_code) + languages = [ + ("🇨🇳 中文", "zh-CN"), + ("英 English", "en-US"), + ("俄 Русский", "ru-RU"), + ("法 Français", "fr-FR"), + ("西 Español", "es-ES"), + ("葡 Português", "pt-BR"), + ("意 Italiano", "it-IT"), + ("阿 العربية", "ar-SA"), + ] + # 创建按钮容器 + btn_frame = tk.Frame(popup, bg=self.colors['bg_dark']) + btn_frame.pack(pady=(0, 10)) + + btn_colors = [ + self.colors['accent'], self.colors['info'], + self.colors['success'], self.colors['warning'], + '#e17055', '#00b894', + '#6c5ce7', '#0984e3', + ] + + for i, (label, locale) in enumerate(languages): + row = i // 4 + col = i % 4 + + def make_cmd(loc=locale, lbl=label): + return lambda: self._quick_set_language(loc, lbl, popup) + + btn = tk.Button(btn_frame, text=label, + command=make_cmd(), + font=('Microsoft YaHei', 10), + fg='white', + bg=btn_colors[i], + relief=tk.FLAT, + cursor='hand2', + width=12, height=2) + btn.grid(row=row, column=col, padx=5, pady=5) + + # 底部分隔 + 打开系统设置入口 + sep = tk.Frame(popup, bg=self.colors['border'], height=1) + sep.pack(fill=tk.X, padx=20, pady=(8, 6)) + + sys_btn = tk.Button(popup, text=self.t('quick_lang_system'), + command=lambda: self._open_sys_and_close(popup), + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_light'], + relief=tk.FLAT, + cursor='hand2') + sys_btn.pack(pady=(0, 10)) + + def _quick_set_language(self, locale_code, language_name, popup): + """执行快捷语言设置""" + popup.destroy() + + def do_set(): + self.log(self.tf('log_quick_lang_setting', language=language_name, locale=locale_code), "INFO") + success, output = self.run_adb_shell(f'settings put system system_locales {locale_code}') + + if success: + self.log(self.tf('log_quick_lang_success', language=language_name), "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t('msg_success_title'), + self.tf('msg_quick_lang_success', language=language_name) + ) + else: + self.log(self.tf('log_quick_lang_failed', output=output), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.tf('msg_quick_lang_failed', output=output)) + + threading.Thread(target=do_set, daemon=True).start() + + def _open_sys_and_close(self, popup): + """关闭弹窗并打开系统语言设置""" + popup.destroy() + self.open_language_settings() + + def open_timezone_settings(self): + """打开时区设置""" + if not self.check_device_connection(): + return + self.run_adb_shell('am start -a android.settings.TIMEZONE_SETTINGS') + + def open_android_settings(self): + """打开安卓原生设置""" + if not self.check_device_connection(): + return + self.run_adb_shell('am start -a android.settings.SETTINGS') + + def reboot_device(self): + """重启设备""" + if not self.check_device_connection(): + return + if messagebox.askyesno(self.t('msg_reboot_confirm_title'), self.t('confirm_reboot')): + def do_restart_framework(): + self.log(self.t('log_rebooting'), "INFO") + root_ok, root_output = self.run_adb_password_command('adb -d root', timeout=30) + if not root_ok: + if self.debug_mode: + self.log(f"adb root failed: {root_output}", "ERROR") + self.log(self.t('log_reboot_failed'), "ERROR") + return + + time.sleep(2) + stop_ok, stop_output = self.run_adb_shell('stop') + start_ok, start_output = self.run_adb_shell('start') + if stop_ok and start_ok: + self.update_device_status(False) + else: + if self.debug_mode: + if not stop_ok: + self.log(f"adb shell stop failed: {stop_output}", "ERROR") + if not start_ok: + self.log(f"adb shell start failed: {start_output}", "ERROR") + self.log(self.t('log_reboot_failed'), "ERROR") + + threading.Thread(target=do_restart_framework, daemon=True).start() + + def on_disable_upgrade(self): + """禁用系统升级""" + # 检查设备连接 + if not self.check_device_connection(): + return + + # 弹窗确认 + result = messagebox.askyesno( + self.t('msg_disable_confirm_title'), + self.t('msg_disable_confirm') + ) + + if not result: + self.log(self.t('log_disable_cancelled'), "INFO") + return + + def disable(): + self.show_progress(True, is_push=False) + success, output = self.run_adb_shell('pm disable-user --user 0 com.incall.apps.softmanager') + if success: + self.log(self.t('log_disable_success'), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t('msg_success_title'), self.t('msg_disable_success')) + else: + self.log(self.t('log_disable_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.tf('msg_disable_failed', output=output)) + self.show_progress(False, is_push=False) + + threading.Thread(target=disable, daemon=True).start() + + def _on_vin_input_focus_in(self, event): + """输入框获得焦点时清除占位符""" + if self.is_placeholder_vin(self.vin_input.get()): + self.vin_input.delete(0, tk.END) + self.vin_input.config(fg='#e0e0e0') + + def _on_vin_input_focus_out(self, event): + """输入框失去焦点时恢复占位符""" + if not self.vin_input.get(): + self.vin_input.insert(0, self.t('vin_placeholder')) + self.vin_input.config(fg='#636e72') + + def query_password_by_vin(self): + """通过VIN查询工程密码""" + vin = self.vin_input.get().strip() + if not vin or self.is_placeholder_vin(vin): + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_input_vin')) + return + + def do_query(): + try: + api_url = "https://api.changan.softwindy.cn/api/authorizations/generate-password-by-vin" + url = f"{api_url}?{urlencode({'vin': vin})}" + req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + + def update_ui(): + if data.get('success'): + pwd = data.get('data', {}).get('devicePassword', 'unknown') + self.pwd_result_label.config( + text=self.tf('pwd_success', password=pwd), + fg=self.colors['success'] + ) + self.log(self.t('log_pwd_success'), "SUCCESS") + else: + msg = data.get('message', 'failed') + self.pwd_result_label.config( + text=self.tf('pwd_failed', message=msg), + fg=self.colors['error'] + ) + self.log(self.tf('log_pwd_failed', message=msg), "ERROR") + + self.run_on_ui_thread(update_ui) + + except Exception as e: + def update_ui_error(): + self.pwd_result_label.config( + text=self.t('pwd_request_failed'), + fg=self.colors['error'] + ) + self.log(self.tf('log_pwd_request_failed', error=str(e)), "ERROR") + self.run_on_ui_thread(update_ui_error) + + threading.Thread(target=do_query, daemon=True).start() + + def _toggle_debug(self, event=None): + """切换调试模式(隐藏入口,Ctrl+Shift+D)""" + if self.debug_mode: + self.debug_mode = False + self.log(self.t('log_debug_off'), "WARNING") + self.status_text.config(text=self.t('status_ready')) + self.set_debug_buttons_visible(False) + self.refresh_device_status() + return + + pwd = simpledialog.askstring(self.t('status_debug'), self.t('debug_password_prompt'), show='*', parent=self.root) + if not pwd: + return + + self.log(self.t('debug_password_verifying'), "INFO") + + def verify(): + valid, message = self.verify_debug_mode_password(pwd) + if valid: + def enable_debug(): + self.debug_mode = True + self.update_device_status(True, "", True) + self.log(self.t('log_debug_on'), "WARNING") + self.status_text.config(text=self.t('status_debug')) + self.set_debug_buttons_visible(True) + self.run_on_ui_thread(enable_debug) + else: + def show_failed(): + msg = message or self.t('debug_wrong_password') + self.log(self.tf('debug_verify_failed', message=msg), "WARNING") + messagebox.showwarning(self.t('msg_error_title'), msg) + self.run_on_ui_thread(show_failed) + + threading.Thread(target=verify, daemon=True).start() + + def verify_debug_mode_password(self, password): + try: + payload = json.dumps({"password": password}).encode('utf-8') + req = Request( + self.debug_password_api_url, + data=payload, + method='POST', + headers={ + 'Content-Type': 'application/json', + 'User-Agent': 'Mozilla/5.0', + } + ) + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + if data.get('success') is True and data.get('valid') is True: + return True, data.get('message', '') + return False, data.get('message') or self.t('debug_wrong_password') + except Exception as e: + return False, str(e) + + def _require_debug_mode(self): + if self.debug_mode: + return True + messagebox.showwarning(self.t('status_debug'), self.t('debug_need_enable')) + return False + + def install_apps(self): + """安装App — 支持单选或多选APK文件""" + if not self.check_device_connection(): + return + if not self.vin and not self.debug_mode: + messagebox.showwarning(self.t('msg_warn_title'), self.t('warn_no_vin')) + return + + file_paths = filedialog.askopenfilenames( + title=self.t('dialog_select_apk'), + filetypes=[(self.t('file_apk'), "*.apk"), (self.t('file_all'), "*.*")] + ) + if not file_paths: + return + + count = len(file_paths) + result = messagebox.askyesno( + self.t('msg_confirm_install_title'), + self.tf('msg_confirm_install_many', count=count) + ) + if not result: + return + + def install(): + if not self.check_authorization(self.vin): + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_auth_failed_title'), + self.t('msg_device_unauthorized') + ) + return + + self.show_progress(True, is_push=True) + self.log(self.tf('log_install_start', count=count), "INFO") + success_count = 0 + try: + self.run_adb_shell('setprop vecentek.model 1') + + for i, file_path in enumerate(file_paths, 1): + apk_name = Path(file_path).name + self.update_progress(i, count, self.tf('progress_installing_name', name=apk_name), is_push=True) + success, _ = self.install_apk_file_with_current_model(file_path) + if success: + self.log(self.tf('log_install_success_item', name=apk_name), "SUCCESS") + success_count += 1 + else: + self.log(self.tf('log_install_failed_item', name=apk_name), "ERROR") + + self.update_progress(count, count, self.t('progress_done'), is_push=True) + + if success_count == count: + self.log(self.tf('log_install_done_all', count=count), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t('info_install_done'), self.tf('msg_install_success_many', count=count)) + elif success_count > 0: + self.log(self.tf('log_install_done_partial', success=success_count, total=count), "WARNING") + self.run_on_ui_thread(messagebox.showwarning, self.t('info_install_done'), self.tf('msg_install_partial', success=success_count, failed=count - success_count)) + else: + self.log(self.t('log_install_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('log_install_failed'), self.t('msg_install_all_failed')) + except Exception as e: + self.log(self.tf('log_install_exception', error=str(e)), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('log_install_failed'), self.tf('msg_install_exception', error=str(e))) + finally: + self.run_adb_shell('setprop vecentek.model 0') + self.show_progress(False, is_push=True) + + threading.Thread(target=install, daemon=True).start() + + def _debug_test_extract(self, event=None): + self.debug_test_package_extract() + + def debug_test_package_extract(self): + """Debug-only package extraction test using package-key.""" + if not self._require_debug_mode(): + return + + if not self.vin: + vin = simpledialog.askstring(self.t('status_debug'), 'VIN:', parent=self.root) + if vin: + self.vin = vin.strip().upper() + if not self.vin: + messagebox.showwarning(self.t('status_debug'), self.t('debug_need_vin')) + return + + def do_extract(): + old_password = self.extract_password + try: + self.log(self.t('info_extracting'), "INFO") + self.extract_password = None + if not self.fetch_package_password(): + self.log(self.t('log_package_key_failed'), "ERROR") + return + self.show_progress(True, is_push=False) + if self.extract_package_silent(): + self.log(self.t('log_package_extract_success'), "SUCCESS") + else: + self.log(self.t('log_package_extract_failed'), "ERROR") + finally: + self.extract_password = old_password + self.show_progress(False, is_push=False) + + threading.Thread(target=do_extract, daemon=True).start() + + def run(self): + """运行程序""" + self.root.mainloop() + +def main(): + """主函数""" + if sys.version_info < (3, 6): + print("错误:需要Python 3.6或更高版本") + sys.exit(1) + + try: + app = ADKAPKGUI() + app.run() + except Exception as e: + print(f"启动失败: {e}") + import traceback + traceback.print_exc() + messagebox.showerror("错误", f"程序启动失败: {e}") + +if __name__ == "__main__": + main() + diff --git a/Mazda-EZ60/Mazda_EZ60-Language-Install_v1.0_direct_push.py b/Mazda-EZ60/Mazda_EZ60-Language-Install_v1.0_direct_push.py new file mode 100644 index 0000000..93d6177 --- /dev/null +++ b/Mazda-EZ60/Mazda_EZ60-Language-Install_v1.0_direct_push.py @@ -0,0 +1,2443 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import os +import sys +import subprocess +import json +import re +import threading +import tkinter as tk +import atexit +from tkinter import ttk, scrolledtext, filedialog, messagebox, simpledialog +from pathlib import Path +from urllib.request import urlopen, Request +from urllib.error import URLError, HTTPError +from urllib.parse import urlencode +from datetime import datetime +import zipfile +try: + import pyzipper +except ImportError: + pyzipper = None +import shutil +import time + + +def get_app_dir(): + return Path(sys.executable).resolve().parent if getattr(sys, 'frozen', False) else Path(__file__).resolve().parent + + +def resource_candidates(file_name): + base_dir = get_app_dir() + candidates = [] + if getattr(sys, 'frozen', False): + candidates.append(Path(getattr(sys, '_MEIPASS', base_dir)) / file_name) + candidates.extend([ + base_dir / file_name, + base_dir / 'tools' / file_name, + base_dir / 'shared' / file_name, + base_dir.parent / 'tools' / file_name, + base_dir.parent / 'shared' / file_name, + base_dir.parent / file_name, + ]) + unique = [] + for candidate in candidates: + if candidate not in unique: + unique.append(candidate) + return unique + + +def find_resource(file_name): + candidates = resource_candidates(file_name) + for candidate in candidates: + if candidate.exists(): + return candidate + return candidates[0] + + +def find_tool(file_name, fallback=None): + path = find_resource(file_name) + if path.exists(): + return str(path) + return fallback or str(path) + + +def set_windows_app_user_model_id(): + if sys.platform != 'win32': + return + try: + import ctypes + ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID( + "yibin.keyi.mazda.ez60.language.installer" + ) + except Exception: + pass + + +class ADKAPKGUI: + CACHE_DIR_NAME = "apps_cache_Mazda_EZ60_1_0" + PACKAGE_KEY_VEHICLE_NAME = "EZ60_1.0" + + def __init__(self): + set_windows_app_user_model_id() + self.root = tk.Tk() + self.root.title("长安语言安装工具") + self.root.geometry("650x640") + self.root.resizable(True, True) + self.set_window_icon() + + # 固定颜色 + self.colors = { + 'bg_dark': '#1e1e2e', + 'bg_light': '#2a2a3e', + 'accent': '#6c5ce7', + 'accent_hover': '#5b4bc4', + 'success': '#00b894', + 'error': '#d63031', + 'warning': '#fdcb6e', + 'info': '#0984e3', + 'text': '#dfe6e9', + 'text_secondary': '#b2bec3', + 'border': '#3d3d5e' + } + + # 多语言 + self.lang = 'zh' + self.T = { + 'zh': { + 'title': '马自达EZ60刷机工具_OS-1.0', + 'btn_root': '🔓 获取权限', + 'btn_push': '📦 刷入语言包', + 'btn_install': '📱 安装App', + 'btn_language': '🌐 语言设置', + 'btn_timezone': '⏰ 时区设置', + 'btn_settings': '⚙️ 安卓设置', + 'btn_reboot': '🔄 重启设备', + 'btn_disable_upgrade': '❌ 禁用升级', + 'btn_clear_log': '🗑 清空日志', + 'btn_query_pwd': '查询密码', + 'btn_debug_extract': '解压测试', + 'device_label': '设备:', + 'vin_label': 'VIN码:', + 'auth_label': '授权:', + 'log_title': '📋 运行日志', + 'status_ready': '就绪', + 'status_connected': '已连接', + 'status_disconnected': '未连接', + 'status_detecting': '未检测', + 'vin_none': '未获取', + 'auth_none': '未验证', + 'auth_yes': '已授权', + 'auth_no': '未授权', + 'btn_refresh': '🔄 检查', + 'hint_factory': '🔧 关闭车辆WI-FI和4G网络,拨号获取的密码进入工程模式', + 'warn_no_device': '设备未连接', + 'warn_connect_first': '请先连接设备并点击「检查」按钮刷新状态!', + 'warn_no_vin': '请先刷新设备状态并获取VIN码', + 'err_auth_fail': '授权失败', + 'err_device_not_auth': '设备未授权', + 'err_resource_fail': '资源准备失败!', + 'err_no_resource_dir': '资源目录未找到', + 'info_flash_start': '开始刷入语言包...', + 'info_flash_done': '语言包刷入完成,重启设备后生效', + 'info_flash_fail': '语言包刷入失败', + 'warn_no_apk': '未找到语言包文件', + 'info_installing': '安装中...', + 'info_install_done': '安装完成', + 'info_log_cleared': '日志已清空', + 'confirm_reboot': '确定要重启设备吗?', + 'info_rebooting': '设备正在重启...', + 'warn_device_disconnected': '设备已断开连接', + 'info_device_connected': '设备已连接', + 'info_checking_auth': '正在验证授权状态...', + 'info_auth_pass': '✅ 授权验证通过!', + 'info_auth_fail': '❌ 授权验证失败', + 'info_preparing': '正在准备资源...', + 'err_no_package': '错误:未找到资源包', + 'err_no_password': '错误:解压密码未设置', + 'err_no_7za': '错误:未找到 7za.exe', + 'err_extract_fail': '解压失败', + 'info_extracting': '资源准备中...', + 'info_extract_done': '资源准备完成', + 'err_extract_user': '资源准备失败,请检查网络连接后重试', + 'warn_no_app_dir': '警告:未找到 app/priv-app 目录', + 'progress_resource_loading': '资源准备中...', + 'progress_resource_done': '资源准备完成', + 'progress_extracting_percent': '资源准备中 {percent}%', + 'progress_flashing': '正在刷入', + 'progress_flash_done': '刷入完成', + 'progress_aborted': '已终止', + 'progress_installing': '安装中', + 'progress_installing_name': '安装中 ({name})', + 'progress_done': '完成', + 'lang_zh': '中', + 'lang_en': 'EN', + 'switch_lang': '语言 / Language', + 'pwd_query_label': '工程密码查询:', + 'vin_placeholder': '请输入VIN', + 'pwd_success': '密码: *#{password}#*', + 'pwd_failed': '失败: {message}', + 'pwd_request_failed': '请求失败', + 'tip_1': '1. 安装语言过程中请保持车辆和电脑的电量充足,不可中途停止。', + 'tip_2': '2. 获取权限以后,车辆自动重启以后再进入语言刷入。', + 'tip_3': '3. 部分语言需要重启后生效,可以一切工作完成以后再重启。', + 'warn_flash_warning': '⚠️ 重要提示', + 'warn_flash_msg': '刷入过程中请勿:\n ● 重启车机\n ● 退出本程序\n ● 关闭电脑\n\n否则可能导致车机系统损坏!', + 'err_wrong_password': '请检查密码是否正确', + 'title_pop_lang': '快捷语言设置', + 'quick_lang_header': '选择目标语言', + 'quick_lang_hint': '点击按钮即可将系统语言切换为对应语言,重启后生效', + 'quick_lang_system': '⚙️ 打开系统语言设置(手动选择)', + 'msg_warn_title': '警告', + 'msg_error_title': '错误', + 'msg_done_title': '完成', + 'msg_success_title': '成功', + 'msg_auth_failed_title': '授权失败', + 'msg_device_unauthorized': '设备未授权', + 'msg_input_vin': '请输入VIN码', + 'msg_resource_prepare_failed': '资源准备失败!', + 'msg_resource_dir_missing': '资源目录未找到', + 'msg_no_apk_in_folder': '所选文件夹中没有APK文件!', + 'msg_confirm_install_title': '确认安装', + 'msg_confirm_install_many': '已选择 {count} 个APK文件\n\n是否开始安装?', + 'msg_confirm_install_folder': '找到 {count} 个APK文件\n\n是否开始批量安装?', + 'msg_install_success_many': '成功安装 {count} 个APK!', + 'msg_install_partial': '成功: {success}\n失败: {failed}', + 'msg_install_all_failed': '所有APK安装失败!', + 'msg_install_exception': '安装过程异常:{error}', + 'msg_quick_lang_success': '系统语言已设置为 {language}\n\n⚠️ 请重启设备使其生效。', + 'msg_quick_lang_failed': '语言设置失败!\n\n{output}', + 'msg_disable_confirm_title': '确认禁用升级', + 'msg_disable_confirm': '⚠️ 警告:禁用系统升级后,将无法接收系统更新!\n\n是否确定要禁用系统升级应用?', + 'msg_disable_success': '系统升级已成功禁用!', + 'msg_disable_failed': '禁用失败:{output}', + 'msg_reboot_confirm_title': '确认重启', + 'file_apk': 'APK文件', + 'file_all': '所有文件', + 'dialog_select_apk': '选择APK文件', + 'dialog_select_apk_folder': '选择包含APK文件的文件夹', + 'unknown_error': '未知错误', + 'status_debug': '调试模式', + 'debug_password_prompt': '请输入调试密码:', + 'debug_password_verifying': '正在校验调试密码...', + 'debug_wrong_password': '密码错误', + 'debug_verify_failed': '调试密码校验失败: {message}', + 'debug_need_enable': '请先按 Ctrl+Shift+D 进入调试模式', + 'debug_need_vin': '调试解压测试需要 VIN。请先连接设备刷新,或在调试模式中手动设置 VIN。', + 'log_debug_on': '🔧 调试模式已开启 - 跳过授权和设备校验,显示详细ADB日志', + 'log_debug_off': '调试模式已关闭', + 'log_lang_switched': '语言已切换为中文', + 'log_cache_invalid': '已解压缓存无效: {reason}', + 'log_cache_reuse_invalid': '缓存资源无效,已清理: {reason}', + 'log_package_missing': '未找到资源包文件: {path}', + 'log_adb_missing': '未找到adb命令,请将ADB文件放入本目录', + 'log_device_connected': '设备已连接', + 'log_device_disconnected': '设备已断开连接', + 'log_current_vin': '当前VIN: {vin}', + 'log_vin_unavailable': '无法读取VIN', + 'log_refresh_failed': '刷新设备状态失败: {error}', + 'log_auth_skip_debug': '调试模式:跳过授权', + 'log_auth_checking': '正在验证授权状态...', + 'log_auth_ok': '授权验证通过', + 'log_auth_failed': '授权验证失败', + 'log_vehicle_name': '车型名称: {name}', + 'log_adb_required': '请先连接 ADB 并获取 VIN', + 'log_data_prepare_failed_detail': '资源准备失败: {error}', + 'log_extract_password_missing': '错误:解压密码未设置', + 'log_7za_missing': '错误:未找到 7za.exe ({path})', + 'log_extracted_resource_invalid': '解压后的资源无效: {reason}。已停止刷入,请检查解压密码或资源包。', + 'log_extract_done': '资源准备完成', + 'log_extract_exception': '资源准备失败: {error}', + 'err_extract_wrong_password': '解压密码错误,请重新确认 package.bin 密码', + 'err_extract_data': '资源包数据错误,可能是密码错误或 package.bin 损坏', + 'err_extract_corrupt': '资源包损坏或不完整,请检查 package.bin', + 'err_extract_failed': '解压失败: {error}', + 'err_extract_failed_code': '解压失败 (返回码 {code}),请检查密码是否正确', + 'log_root_failed': '获取失败', + 'log_permission_failed': '获取失败', + 'log_permission_running': '正在获取权限中', + 'log_reboot_failed': '重启失败', + 'log_permission_ok': '获取成功', + 'log_flash_readonly': '请先点击「获取权限」获取权限后再试', + 'log_flash_complete_count': '刷入完成,共 {count} 个语言包', + 'log_flash_effect_after_reboot': '语言包已刷入完成,重启设备后生效,您可在适当时候重启', + 'log_flash_partial': '部分刷入成功({success}/{total})', + 'log_flash_failed_item_detail': '刷入失败: {name} - {error}', + 'log_install_start': '开始安装 {count} 个APK...', + 'log_install_done_all': '安装完成:全部 {count} 个成功', + 'log_install_done_partial': '安装完成:{success}/{total} 成功', + 'log_install_failed': '安装失败', + 'log_install_exception': '安装过程异常: {error}', + 'log_install_success_item': '✓ {name}', + 'log_install_failed_item': '✗ {name}', + 'log_menu_key_ready': '辅助组件已安装', + 'log_menu_key_install_failed': '辅助组件安装失败', + 'log_menu_key_permission_failed': '辅助组件权限设置失败', + 'log_quick_lang_setting': '正在设置系统语言为: {language} ({locale})', + 'log_quick_lang_success': '✓ 语言已设置为 {language}', + 'log_quick_lang_failed': '✗ 语言设置失败: {output}', + 'log_rebooting': '设备正在重启...', + 'log_disable_cancelled': '已取消禁用升级操作', + 'log_disable_success': '系统升级已禁用', + 'log_disable_failed': '禁用系统升级失败', + 'log_preclean_start': '正在清理预置应用...', + 'log_preclean_done': '预置应用清理完成', + 'log_preclean_partial': '预置应用部分清理失败', + 'log_preclean_item_done': '清理项已完成: {package}', + 'log_preclean_item_failed': '清理项执行失败: {package}', + 'log_package_key_failed': 'package-key 获取失败', + 'log_package_extract_success': '资源准备完成', + 'log_package_extract_failed': 'package.bin 解压测试失败', + 'log_pwd_success': '密码查询成功', + 'log_pwd_failed': '密码查询失败: {message}', + 'log_pwd_request_failed': '密码查询请求失败: {error}', + 'err_no_usable_apk': '未找到可用 APK', + 'err_zero_apk': '发现 0KB APK: {files}', + 'err_push_failed': 'push失败: {error}', + 'err_cp_failed': 'cp失败: {error}', + }, + 'en': { + 'title': 'Mazda EZ60 Flash Tool_OS-1.0', + 'btn_root': '🔓 Get Root', + 'btn_push': '📦 Flash Lang Pkg', + 'btn_install': '📱 Install App', + 'btn_language': '🌐 Language', + 'btn_timezone': '⏰ Timezone', + 'btn_settings': '⚙️ Settings', + 'btn_reboot': '🔄 Reboot', + 'btn_disable_upgrade': '❌ Disable OTA', + 'btn_clear_log': '🗑 Clear Log', + 'btn_query_pwd': 'Query Pwd', + 'btn_debug_extract': 'Extract', + 'device_label': 'Device:', + 'vin_label': 'VIN:', + 'auth_label': 'Auth:', + 'log_title': '📋 Log', + 'status_ready': 'Ready', + 'status_connected': 'Connected', + 'status_disconnected': 'Disconnected', + 'status_detecting': 'Detecting', + 'vin_none': 'None', + 'auth_none': 'Unknown', + 'auth_yes': 'Authorized', + 'auth_no': 'Unauthorized', + 'btn_refresh': '🔄 Check', + 'hint_factory': '🔧 Turn off WiFi & 4G, enter factory mode with dial code', + 'warn_no_device': 'Device not connected', + 'warn_connect_first': 'Please connect device and click Check button!', + 'warn_no_vin': 'Please refresh device status and get VIN', + 'err_auth_fail': 'Authorization failed', + 'err_device_not_auth': 'Device not authorized', + 'err_resource_fail': 'Resource preparation failed!', + 'err_no_resource_dir': 'Resource directory not found', + 'info_flash_start': 'Starting language pack flashing...', + 'info_flash_done': 'Flashing complete, reboot device to take effect', + 'info_flash_fail': 'Flashing failed', + 'warn_no_apk': 'No APK files found', + 'info_installing': 'Installing...', + 'info_install_done': 'Install complete', + 'info_log_cleared': 'Log cleared', + 'confirm_reboot': 'Are you sure you want to reboot?', + 'info_rebooting': 'Device rebooting...', + 'warn_device_disconnected': 'Device disconnected', + 'info_device_connected': 'Device connected', + 'info_checking_auth': 'Verifying authorization...', + 'info_auth_pass': '✅ Authorization passed!', + 'info_auth_fail': '❌ Authorization failed', + 'info_preparing': 'Preparing resources...', + 'err_no_package': 'Error: package.bin not found', + 'err_no_password': 'Error: password not set', + 'err_no_7za': 'Error: 7za.exe not found', + 'err_extract_fail': 'Extraction failed', + 'info_extracting': 'Preparing resources...', + 'info_extract_done': 'Resource preparation complete', + 'err_extract_user': 'Resource preparation failed, check network and retry', + 'warn_no_app_dir': 'Warning: app/priv-app directory not found', + 'progress_resource_loading': 'Preparing resources...', + 'progress_resource_done': 'Resources ready', + 'progress_extracting_percent': 'Preparing resources {percent}%', + 'progress_flashing': 'Flashing', + 'progress_flash_done': 'Flash complete', + 'progress_aborted': 'Aborted', + 'progress_installing': 'Installing', + 'progress_installing_name': 'Installing ({name})', + 'progress_done': 'Done', + 'lang_zh': '中', + 'lang_en': 'EN', + 'switch_lang': 'Language', + 'pwd_query_label': 'Factory password:', + 'vin_placeholder': 'Enter VIN', + 'pwd_success': 'Password: *#{password}#*', + 'pwd_failed': 'Failed: {message}', + 'pwd_request_failed': 'Request failed', + 'tip_1': '1. Keep the vehicle and PC powered during language installation.', + 'tip_2': '2. After permission is obtained, wait for the vehicle to reboot before flashing.', + 'tip_3': '3. Some languages take effect after reboot; reboot after all work is finished.', + 'warn_flash_warning': '⚠️ Warning', + 'warn_flash_msg': 'During flashing, DO NOT:\n ● Reboot vehicle\n ● Close this app\n ● Power off PC\n\nSystem damage may occur!', + 'err_wrong_password': 'Please check password', + 'title_pop_lang': 'Quick Language Setting', + 'quick_lang_header': 'Select target language', + 'quick_lang_hint': 'Click a button to set the system language. Reboot to apply.', + 'quick_lang_system': '⚙️ Open system language settings', + 'msg_warn_title': 'Warning', + 'msg_error_title': 'Error', + 'msg_done_title': 'Done', + 'msg_success_title': 'Success', + 'msg_auth_failed_title': 'Authorization failed', + 'msg_device_unauthorized': 'Device unauthorized', + 'msg_input_vin': 'Enter VIN', + 'msg_resource_prepare_failed': 'Resource preparation failed!', + 'msg_resource_dir_missing': 'Resource directory not found', + 'msg_no_apk_in_folder': 'No APK files found in the selected folder!', + 'msg_confirm_install_title': 'Confirm install', + 'msg_confirm_install_many': '{count} APK files selected.\n\nStart installation?', + 'msg_confirm_install_folder': '{count} APK files found.\n\nStart batch installation?', + 'msg_install_success_many': '{count} APKs installed successfully!', + 'msg_install_partial': 'Success: {success}\nFailed: {failed}', + 'msg_install_all_failed': 'All APK installations failed!', + 'msg_install_exception': 'Installation error: {error}', + 'msg_quick_lang_success': 'System language set to {language}.\n\n⚠️ Reboot the device to apply.', + 'msg_quick_lang_failed': 'Language setting failed!\n\n{output}', + 'msg_disable_confirm_title': 'Confirm Disable OTA', + 'msg_disable_confirm': '⚠️ Warning: after disabling OTA, the system will no longer receive updates.\n\nDisable the OTA app?', + 'msg_disable_success': 'System upgrade has been disabled!', + 'msg_disable_failed': 'Disable failed: {output}', + 'msg_reboot_confirm_title': 'Confirm reboot', + 'file_apk': 'APK files', + 'file_all': 'All files', + 'dialog_select_apk': 'Select APK file', + 'dialog_select_apk_folder': 'Select a folder containing APK files', + 'unknown_error': 'unknown error', + 'status_debug': 'Debug mode', + 'debug_password_prompt': 'Enter debug password:', + 'debug_password_verifying': 'Verifying debug password...', + 'debug_wrong_password': 'Wrong password', + 'debug_verify_failed': 'Debug password verification failed: {message}', + 'debug_need_enable': 'Press Ctrl+Shift+D first.', + 'debug_need_vin': 'Extract test needs a VIN. Refresh a connected device or set VIN in debug mode.', + 'log_debug_on': '🔧 Debug mode enabled - authorization and device checks are skipped, detailed ADB logs are shown', + 'log_debug_off': 'Debug mode disabled', + 'log_lang_switched': 'Language switched to English', + 'log_cache_invalid': 'Extract cache invalid: {reason}', + 'log_cache_reuse_invalid': 'Cached resources invalid and cleaned: {reason}', + 'log_package_missing': 'Resource package not found: {path}', + 'log_adb_missing': 'adb not found. Put ADB files in this directory.', + 'log_device_connected': 'Device connected', + 'log_device_disconnected': 'Device disconnected', + 'log_current_vin': 'Current VIN: {vin}', + 'log_vin_unavailable': 'Unable to read VIN', + 'log_refresh_failed': 'Refresh device status failed: {error}', + 'log_auth_skip_debug': 'Debug mode: skip authorization', + 'log_auth_checking': 'Checking authorization...', + 'log_auth_ok': 'Authorization passed', + 'log_auth_failed': 'Authorization failed', + 'log_vehicle_name': 'Vehicle name: {name}', + 'log_adb_required': 'Connect ADB and get VIN first', + 'log_data_prepare_failed_detail': 'Resource preparation failed: {error}', + 'log_extract_password_missing': 'Extraction password is not set', + 'log_7za_missing': '7za.exe not found: {path}', + 'log_extracted_resource_invalid': 'Extracted resources are invalid: {reason}. Flashing stopped. Check the password or package.', + 'log_extract_done': 'Resources ready', + 'log_extract_exception': 'Resource preparation failed: {error}', + 'err_extract_wrong_password': 'Incorrect extraction password. Check the package.bin password.', + 'err_extract_data': 'Package data error. The password may be wrong or package.bin may be damaged.', + 'err_extract_corrupt': 'Package is damaged or incomplete. Check package.bin.', + 'err_extract_failed': 'Extraction failed: {error}', + 'err_extract_failed_code': 'Extraction failed (exit code {code}). Check whether the password is correct.', + 'log_root_failed': 'Permission failed', + 'log_permission_failed': 'Permission failed', + 'log_permission_running': 'Getting permission', + 'log_reboot_failed': 'Reboot failed', + 'log_permission_ok': 'Permission granted', + 'log_flash_readonly': 'Click Get Root first, then try again', + 'log_flash_complete_count': 'Flashing complete, {count} language packages', + 'log_flash_effect_after_reboot': 'Language package flashed. Reboot the device when convenient.', + 'log_flash_partial': 'Partially flashed ({success}/{total})', + 'log_flash_failed_item_detail': 'Flash failed: {name} - {error}', + 'log_install_start': 'Installing {count} APKs...', + 'log_install_done_all': 'Installation complete: all {count} succeeded', + 'log_install_done_partial': 'Installation complete: {success}/{total} succeeded', + 'log_install_failed': 'Installation failed', + 'log_install_exception': 'Installation error: {error}', + 'log_install_success_item': '✓ {name}', + 'log_install_failed_item': '✗ {name}', + 'log_menu_key_ready': 'Helper component installed', + 'log_menu_key_install_failed': 'Helper component installation failed', + 'log_menu_key_permission_failed': 'Helper component permission setup failed', + 'log_quick_lang_setting': 'Setting system language to: {language} ({locale})', + 'log_quick_lang_success': '✓ Language set to {language}', + 'log_quick_lang_failed': '✗ Language setting failed: {output}', + 'log_rebooting': 'Device rebooting...', + 'log_disable_cancelled': 'Disable OTA cancelled', + 'log_disable_success': 'System upgrade disabled', + 'log_disable_failed': 'Failed to disable system upgrade', + 'log_preclean_start': 'Cleaning preinstalled apps...', + 'log_preclean_done': 'Preinstalled apps cleaned', + 'log_preclean_partial': 'Some preinstalled apps failed to clean', + 'log_preclean_item_done': 'Cleanup item completed: {package}', + 'log_preclean_item_failed': 'Cleanup item failed: {package}', + 'log_package_key_failed': 'package-key fetch failed', + 'log_package_extract_success': 'Resources ready', + 'log_package_extract_failed': 'package.bin extract test failed', + 'log_pwd_success': 'Password query succeeded', + 'log_pwd_failed': 'Password query failed: {message}', + 'log_pwd_request_failed': 'Password query request failed: {error}', + 'err_no_usable_apk': 'No usable APK found', + 'err_zero_apk': '0KB APK found: {files}', + 'err_push_failed': 'push failed: {error}', + 'err_cp_failed': 'cp failed: {error}', + } + } + + # 从 exe/py 所在目录查找资源文件 + self.base_dir = get_app_dir() + self.adb = find_tool('adb.exe', 'adb') + self.sz = find_tool('7za.exe') + self.package_file = self._find_package_file() + self.extract_password = None + self.apps_dir = None + self.priv_apps_dir = None + self.menu_key_apk = None + self.temp_dir = None + self.api_url = "https://api.changan.softwindy.cn/api/authorizations/auth-check" + self.debug_password_api_url = "https://api.changan.softwindy.cn/api/authorizations/verify-debug-mode-password" + self.vin = None + self.vehicle_name = "" + self.device_connected = False + self._refreshing = False # 防止并发刷新 + self.debug_mode = False # 调试模式 + self.mazda_disable_packages = [ + "com.carinno.p1", + "com.wtcl.electronicdirections", + "com.ximalaya.ting.android.car", + "com.tinnove.netease.music", + "com.migu.miguplay.car", + "cn.cmvideo.car.play", + "com.tinnove.carshow", + "com.tinnove.changba", + "com.qiyi.video.iv", + "com.changan.appmarket", + "com.incall.apps.softmanager", + ] + atexit.register(self.cleanup_cache_on_exit) + + # 设置样式 + self.setup_styles() + self.setup_ui() + self.root.after(200, self.set_window_icon) + self.center_window() + + # 检查环境 + self.check_environment() + + # 启动设备状态监控 + self.start_device_monitor() + + def set_window_icon(self): + """Set the Tk window/taskbar icon at runtime; PyInstaller --icon only sets the exe file icon.""" + try: + icon_path = find_resource("app.ico") + if icon_path.exists(): + self.root.iconbitmap(str(icon_path)) + self._set_windows_hwnd_icon(icon_path) + except Exception: + pass + + def _set_windows_hwnd_icon(self, icon_path): + if sys.platform != 'win32': + return + try: + import ctypes + user32 = ctypes.windll.user32 + hwnd = self.root.winfo_id() + image_icon = 1 + lr_loadfromfile = 0x00000010 + wm_seticon = 0x0080 + icon_small = 0 + icon_big = 1 + path = str(icon_path) + small = user32.LoadImageW(None, path, image_icon, 16, 16, lr_loadfromfile) + big = user32.LoadImageW(None, path, image_icon, 32, 32, lr_loadfromfile) + if small: + user32.SendMessageW(hwnd, wm_seticon, icon_small, small) + if big: + user32.SendMessageW(hwnd, wm_seticon, icon_big, big) + except Exception: + pass + + def setup_styles(self): + """设置自定义样式""" + style = ttk.Style() + style.theme_use('clam') + + # 配置主颜色 + style.configure('TFrame', background=self.colors['bg_dark']) + style.configure('TLabel', background=self.colors['bg_dark'], foreground=self.colors['text']) + style.configure('TLabelframe', background=self.colors['bg_dark'], foreground=self.colors['text']) + style.configure('TLabelframe.Label', background=self.colors['bg_dark'], foreground=self.colors['accent']) + + # 配置进度条 + style.configure('TProgressbar', + background=self.colors['accent'], + troughcolor=self.colors['bg_light'], + borderwidth=0) + + def setup_ui(self): + """设置UI界面""" + # 配置根窗口 + self.root.title(self.t('title')) + self.root.configure(bg=self.colors['bg_dark']) + + # 创建主框架 + main_frame = tk.Frame(self.root, bg=self.colors['bg_dark']) + main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) + + # 顶部标题栏 + title_frame = tk.Frame(main_frame, bg=self.colors['bg_dark'], height=45) + title_frame.pack(fill=tk.X, pady=(0, 10)) + title_frame.pack_propagate(False) + + # 标题 + title_inner = tk.Frame(title_frame, bg=self.colors['bg_dark']) + title_inner.place(relx=0.5, rely=0.5, anchor='center') + self.title_icon_label = tk.Label(title_inner, + text="🚗", + font=('Microsoft YaHei', 17, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.title_icon_label.grid(row=0, column=0, padx=(0, 8), sticky='e') + self.title_label = tk.Label(title_inner, + text=self.t('title'), + font=('Microsoft YaHei', 18, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.title_label.grid(row=0, column=1, sticky='w') + + self.btn_lang_switch = tk.Button(title_frame, text="EN", + command=self.toggle_lang, + font=('Microsoft YaHei', 9, 'bold'), + fg='white', + bg=self.colors['accent'], + activebackground=self.colors['accent_hover'], + activeforeground='white', + relief=tk.FLAT, + cursor='hand2', + width=8, + height=1) + self.btn_lang_switch.place(relx=1.0, rely=0.5, x=-2, anchor='e') + + # 工程密码查询区域 + pwd_query_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + pwd_query_frame.pack(fill=tk.X, pady=(0, 5), padx=5) + + self.pwd_query_label = tk.Label(pwd_query_frame, text=self.t('pwd_query_label'), + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.pwd_query_label.pack(side=tk.LEFT, padx=(10, 5), pady=5) + + self.vin_input = tk.Entry(pwd_query_frame, + font=('Consolas', 9), + bg='#2d2d3d', + fg='#636e72', + insertbackground='white', + relief=tk.FLAT, + width=20) + self.vin_input.insert(0, self.t('vin_placeholder')) + self.vin_input.bind("", self._on_vin_input_focus_in) + self.vin_input.bind("", self._on_vin_input_focus_out) + self.vin_input.pack(side=tk.LEFT, padx=5, pady=5) + + self.btn_query_pwd = tk.Button(pwd_query_frame, text=self.t('btn_query_pwd'), + command=self.query_password_by_vin, + font=('Microsoft YaHei', 8), + fg='white', + bg=self.colors['accent'], + activebackground=self.colors['accent_hover'], + activeforeground='white', + relief=tk.FLAT, + cursor='hand2') + self.btn_query_pwd.pack(side=tk.LEFT, padx=5, pady=5) + + self.pwd_result_label = tk.Label(pwd_query_frame, text="", + font=('Microsoft YaHei', 9, 'bold'), + fg=self.colors['success'], + bg=self.colors['bg_light']) + self.pwd_result_label.pack(side=tk.LEFT, padx=10, pady=5) + + # 按钮区域(两排,每排5个) + button_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + button_frame.pack(fill=tk.X, pady=(0, 10), padx=5) + + # 按钮样式参数 + btn_params = { + 'font': ('Microsoft YaHei', 9), + 'fg': 'white', + 'relief': tk.FLAT, + 'cursor': 'hand2', + 'height': 1, + 'width': 14 + } + + # 第一排按钮 + row1_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) + row1_frame.pack(pady=(8, 4)) + + self.btn_root = tk.Button(row1_frame, text="🔓 获取权限", + command=self.get_root_permission, + bg=self.colors['success'], + **btn_params) + self.btn_root.pack(side=tk.LEFT, padx=4) + + self.btn_push = tk.Button(row1_frame, text="📦 刷入语言包", + command=self.push_all_apks, + bg=self.colors['accent'], + **btn_params) + self.btn_push.pack(side=tk.LEFT, padx=4) + + self.btn_install_all = tk.Button(row1_frame, text="📱 安装App", + command=self.install_apps, + bg=self.colors['accent'], + **btn_params) + self.btn_install_all.pack(side=tk.LEFT, padx=4) + + self.btn_language = tk.Button(row1_frame, text="🌐 语言设置", + command=self.open_language_quick_set, + bg=self.colors['accent'], + **btn_params) + self.btn_language.pack(side=tk.LEFT, padx=4) + + # 第二排按钮 + row2_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) + row2_frame.pack(pady=(4, 8)) + + self.btn_timezone = tk.Button(row2_frame, text="⏰ 时区设置", + command=self.open_timezone_settings, + bg=self.colors['accent'], + **btn_params) + self.btn_timezone.pack(side=tk.LEFT, padx=4) + + self.btn_settings = tk.Button(row2_frame, text="⚙️ 安卓设置", + command=self.open_android_settings, + bg=self.colors['accent'], + **btn_params) + self.btn_settings.pack(side=tk.LEFT, padx=4) + + self.btn_reboot = tk.Button(row2_frame, text="🔄 重启设备", + command=self.reboot_device, + bg=self.colors['warning'], + **btn_params) + self.btn_reboot.pack(side=tk.LEFT, padx=4) + + self.btn_exit = tk.Button(row2_frame, text="❌ 禁用升级", + command=self.on_disable_upgrade, + bg=self.colors['error'], + **btn_params) + self.btn_exit.pack(side=tk.LEFT, padx=4) + + self.debug_button_frame = tk.Frame(button_frame, bg=self.colors['bg_light']) + self.btn_debug_extract = tk.Button(self.debug_button_frame, text=self.t('btn_debug_extract'), + command=self.debug_test_package_extract, + bg=self.colors['info'], + **btn_params) + self.btn_debug_extract.pack(side=tk.LEFT, padx=4) + + # 设备状态栏(横条) + status_bar_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + status_bar_frame.pack(fill=tk.X, pady=(0, 5)) + + # 状态指示器 + status_indicator_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) + status_indicator_frame.pack(side=tk.LEFT, padx=10, pady=5) + + self.status_indicator = tk.Canvas(status_indicator_frame, width=10, height=10, + bg=self.colors['bg_light'], highlightthickness=0) + self.status_indicator.pack(side=tk.LEFT) + self.status_dot = self.status_indicator.create_oval(2, 2, 8, 8, fill='#636e72') + + self.device_label = tk.Label(status_indicator_frame, text="设备:", + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.device_label.pack(side=tk.LEFT, padx=(5, 3)) + + self.device_status_label = tk.Label(status_indicator_frame, text=self.t('status_detecting'), + font=('Microsoft YaHei', 9, 'bold'), + fg='#636e72', + bg=self.colors['bg_light'], + anchor='w', width=4) + self.device_status_label.pack(side=tk.LEFT) + + # VIN信息 + vin_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) + vin_frame.pack(side=tk.LEFT, padx=20, pady=5) + self.vin_label_title = tk.Label(vin_frame, text="VIN码:", + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.vin_label_title.pack(side=tk.LEFT) + self.vin_label = tk.Label(vin_frame, text=self.t('vin_none'), + font=('Microsoft YaHei', 9, 'bold'), + fg='#636e72', + bg=self.colors['bg_light'], + anchor='w', width=17) + self.vin_label.pack(side=tk.LEFT, padx=(5, 0)) + + # 授权状态 + auth_frame = tk.Frame(status_bar_frame, bg=self.colors['bg_light']) + auth_frame.pack(side=tk.LEFT, padx=20, pady=5) + self.auth_label_title = tk.Label(auth_frame, text="授权:", + font=('Microsoft YaHei', 9), + fg=self.colors['text'], + bg=self.colors['bg_light']) + self.auth_label_title.pack(side=tk.LEFT) + self.auth_label = tk.Label(auth_frame, text=self.t('auth_none'), + font=('Microsoft YaHei', 9, 'bold'), + fg='#636e72', + bg=self.colors['bg_light'], + anchor='w', width=4) + self.auth_label.pack(side=tk.LEFT, padx=(5, 0)) + + # 刷新按钮 + self.btn_refresh = tk.Button(status_bar_frame, text="🔄 检查", + command=self.refresh_device_status, + font=('Microsoft YaHei', 8), + fg=self.colors['accent'], + bg=self.colors['bg_light'], + relief=tk.FLAT, + cursor='hand2') + self.btn_refresh.pack(side=tk.RIGHT, padx=10, pady=5) + + # 提示信息区域(设备状态下方) + tips_frame = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + tips_frame.pack(fill=tk.X, pady=(5, 5), padx=5) + + tips = [self.t('tip_1'), self.t('tip_2'), self.t('tip_3')] + + for i, tip in enumerate(tips): + tip_row = tk.Frame(tips_frame, bg=self.colors['bg_light']) + tip_row.pack(fill=tk.X, padx=10, pady=(5 if i == 0 else 0, 5 if i == len(tips) - 1 else 0)) + label = tk.Label(tip_row, text=tip, + font=('Microsoft YaHei', 9), + fg=self.colors['warning'], + bg=self.colors['bg_light'], + wraplength=600, + justify=tk.LEFT) + label.pack(side=tk.LEFT) + setattr(self, f'tip_label_{i + 1}', label) + + # 解压进度条框架 + progress_frame = tk.Frame(main_frame, bg=self.colors['bg_dark']) + progress_frame.pack(fill=tk.X, pady=(5, 5)) + + self.progress_label = tk.Label(progress_frame, text="", + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark']) + self.progress_label.pack() + + self.progress = ttk.Progressbar(progress_frame, mode='determinate', style='TProgressbar') + self.progress.pack(fill=tk.X, pady=(2, 0)) + + # 推送进度条 + self.push_progress_label = tk.Label(progress_frame, text="", + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark']) + + self.push_progress = ttk.Progressbar(progress_frame, mode='determinate', style='TProgressbar') + + # 日志区域(下方) + log_card = tk.Frame(main_frame, bg=self.colors['bg_light'], relief=tk.RAISED, bd=1) + log_card.pack(fill=tk.BOTH, expand=True, pady=(5, 0)) + + # 日志标题栏 + log_title_frame = tk.Frame(log_card, bg=self.colors['bg_dark'], height=30) + log_title_frame.pack(fill=tk.X) + log_title_frame.pack_propagate(False) + + self.log_title_label = tk.Label(log_title_frame, text="📋 运行日志", + font=('Microsoft YaHei', 10, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + self.log_title_label.pack(side=tk.LEFT, padx=10) + + self.btn_clear = tk.Button(log_title_frame, text="🗑 清空日志", + command=self.clear_log, + font=('Microsoft YaHei', 8), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark'], + relief=tk.FLAT, + cursor='hand2') + self.btn_clear.pack(side=tk.RIGHT, padx=10) + + # 日志文本框 + text_frame = tk.Frame(log_card, bg=self.colors['bg_light']) + text_frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5) + + self.log_text = scrolledtext.ScrolledText(text_frame, + height=12, + wrap=tk.WORD, + font=('Consolas', 9), + bg='#2d2d3d', + fg='#e0e0e0', + insertbackground='white', + relief=tk.FLAT, + borderwidth=0) + self.log_text.pack(fill=tk.BOTH, expand=True) + + # 配置日志颜色标签 + self.log_text.tag_config('INFO', foreground='#74b9ff') + self.log_text.tag_config('SUCCESS', foreground='#55efc4') + self.log_text.tag_config('ERROR', foreground='#ff7675') + self.log_text.tag_config('WARNING', foreground='#ffeaa7') + self.log_text.tag_config('CMD', foreground='#a29bfe') + + # 底部状态栏 + bottom_status = tk.Frame(main_frame, bg=self.colors['bg_light'], height=22) + bottom_status.pack(fill=tk.X, pady=(5, 0)) + bottom_status.pack_propagate(False) + + self.status_text = tk.Label(bottom_status, text="就绪", + font=('Microsoft YaHei', 8), + fg=self.colors['text_secondary'], + bg=self.colors['bg_light']) + self.status_text.pack(side=tk.LEFT, padx=10) + + # 调试模式快捷键 + self.root.bind('', self._toggle_debug) + self.root.bind('', self._debug_test_extract) + self.root.protocol("WM_DELETE_WINDOW", self.on_close) + + # 绑定悬停效果 + self.bind_hover_effects() + + def bind_hover_effects(self): + """绑定按钮悬停效果""" + buttons = [self.btn_root, self.btn_push, self.btn_install_all, + self.btn_language, self.btn_timezone, self.btn_settings, + self.btn_reboot, self.btn_clear, self.btn_exit, + self.btn_debug_extract] + + for btn in buttons: + original_bg = btn.cget('bg') + def on_enter(e, btn=btn, bg=original_bg): + btn.config(bg=self.lighten_color(bg)) + def on_leave(e, btn=btn, bg=original_bg): + btn.config(bg=bg) + btn.bind('', on_enter) + btn.bind('', on_leave) + + def lighten_color(self, color): + """调亮颜色""" + if color == self.colors['accent']: + return self.colors['accent_hover'] + elif color == self.colors['warning']: + return '#feca57' + elif color == self.colors['info']: + return '#0984e3' + elif color == self.colors['error']: + return '#e17055' + elif color == self.colors['success']: + return '#00a884' + return color + + def center_window(self): + """将窗口居中显示在屏幕上""" + self.root.update_idletasks() + screen_w = self.root.winfo_screenwidth() + screen_h = self.root.winfo_screenheight() + win_w = self.root.winfo_reqwidth() + win_h = self.root.winfo_reqheight() + x = (screen_w - win_w) // 2 + y = (screen_h - win_h) // 2 + self.root.geometry(f"+{x}+{y}") + + def run_on_ui_thread(self, func, *args, **kwargs): + """将函数调度到主线程执行,确保线程安全""" + self.root.after(0, lambda: func(*args, **kwargs)) + + def _adb_cmd(self): + return subprocess.list2cmdline([self.adb]) + + def _find_package_file(self): + return find_resource("package.bin") + + def t(self, key): + """获取翻译文本""" + return self.T.get(self.lang, self.T['zh']).get(key, key) + + def tf(self, key, **kwargs): + try: + return self.t(key).format(**kwargs) + except Exception: + return self.t(key) + + def is_placeholder_vin(self, value): + return value in ( + self.T['zh'].get('vin_placeholder'), + self.T['en'].get('vin_placeholder'), + ) + + def toggle_lang(self): + """切换语言""" + self.lang = 'en' if self.lang == 'zh' else 'zh' + self.btn_lang_switch.config(text=self.t('lang_en') if self.lang == 'zh' else self.t('lang_zh')) + self._refresh_ui_texts() + self.log(self.t('log_lang_switched'), "INFO") + + def _refresh_ui_texts(self): + """刷新所有UI文本""" + t = self.t + self.root.title(t('title')) + widgets = [ + (getattr(self, 'title_label', None), 'title', None), + (getattr(self, 'btn_root', None), 'btn_root', None), + (getattr(self, 'btn_push', None), 'btn_push', None), + (getattr(self, 'btn_install_all', None), 'btn_install', None), + (getattr(self, 'btn_language', None), 'btn_language', None), + (getattr(self, 'btn_timezone', None), 'btn_timezone', None), + (getattr(self, 'btn_settings', None), 'btn_settings', None), + (getattr(self, 'btn_reboot', None), 'btn_reboot', None), + (getattr(self, 'btn_exit', None), 'btn_disable_upgrade', None), + (getattr(self, 'btn_debug_extract', None), 'btn_debug_extract', None), + (getattr(self, 'btn_query_pwd', None), 'btn_query_pwd', None), + (getattr(self, 'btn_clear', None), 'btn_clear_log', None), + (getattr(self, 'pwd_query_label', None), 'pwd_query_label', None), + (getattr(self, 'log_title_label', None), 'log_title', None), + (getattr(self, 'device_label', None), 'device_label', None), + (getattr(self, 'vin_label_title', None), 'vin_label', None), + (getattr(self, 'auth_label_title', None), 'auth_label', None), + (getattr(self, 'btn_refresh', None), 'btn_refresh', None), + (getattr(self, 'hint_label', None), 'hint_factory', None), + (getattr(self, 'tip_label_1', None), 'tip_1', None), + (getattr(self, 'tip_label_2', None), 'tip_2', None), + (getattr(self, 'tip_label_3', None), 'tip_3', None), + ] + for w, key, _ in widgets: + if w: + w.config(text=t(key)) + if getattr(self, 'status_text', None): + self.status_text.config(text=t('status_debug') if self.debug_mode else t('status_ready')) + self.btn_lang_switch.config(text=t('lang_en') if self.lang == 'zh' else t('lang_zh')) + if getattr(self, 'vin_input', None) and self.is_placeholder_vin(self.vin_input.get()): + self.vin_input.delete(0, tk.END) + self.vin_input.insert(0, t('vin_placeholder')) + self._update_device_status_impl( + self.device_connected, + self.vin, + getattr(self, '_last_authorized', False) + ) + + def set_debug_buttons_visible(self, visible): + if not hasattr(self, 'debug_button_frame'): + return + if visible: + self.debug_button_frame.pack(pady=(0, 8)) + else: + self.debug_button_frame.pack_forget() + + def _log_impl(self, message, level="INFO"): + """日志写入的实际实现(必须在主线程调用)""" + timestamp = datetime.now().strftime("%H:%M:%S") + log_entry = f"[{timestamp}] [{level}] {message}\n" + self.log_text.insert(tk.END, log_entry, level) + self.log_text.see(tk.END) + + def log(self, message, level="INFO"): + """添加日志(线程安全)""" + self.run_on_ui_thread(self._log_impl, message, level) + + def clear_log(self): + """清空日志""" + self.log_text.delete(1.0, tk.END) + self.log(self.t('info_log_cleared'), "INFO") + + def _show_progress_impl(self, show=True, is_push=False): + """显示/隐藏进度条的实际实现(必须在主线程调用)""" + if is_push: + if show: + self.push_progress_label.pack() + self.push_progress.pack(fill=tk.X, pady=(2, 0)) + self.push_progress['value'] = 0 + else: + self.push_progress_label.pack_forget() + self.push_progress.pack_forget() + else: + if show: + self.progress_label.pack() + self.progress.pack(fill=tk.X, pady=(2, 0)) + self.progress['value'] = 0 + else: + self.progress_label.pack_forget() + self.progress.pack_forget() + + def show_progress(self, show=True, is_push=False): + """显示/隐藏进度条(线程安全)""" + self.run_on_ui_thread(self._show_progress_impl, show, is_push) + + def _update_progress_impl(self, value, max_value=100, label="", is_push=False): + """更新进度条的实际实现(必须在主线程调用)""" + if is_push: + percent = (value / max_value) * 100 + self.push_progress['value'] = percent + self.push_progress_label.config(text=f"{label}: {value}/{max_value} ({percent:.1f}%)") + else: + percent = (value / max_value) * 100 + self.progress['value'] = percent + self.progress_label.config(text=f"{label}: {value}/{max_value} ({percent:.1f}%)") + self.root.update_idletasks() + + def update_progress(self, value, max_value=100, label="", is_push=False): + """更新进度条(线程安全)""" + self.run_on_ui_thread(self._update_progress_impl, value, max_value, label, is_push) + + def update_device_status(self, connected, vin=None, authorized=False): + """更新设备状态显示(线程安全:立即设状态变量,UI走主线程)""" + self.device_connected = connected + if vin is not None: + self.vin = vin + self.run_on_ui_thread(self._update_device_status_impl, connected, vin, authorized) + + def _update_device_status_impl(self, connected, vin, authorized): + """设备状态UI更新的实际实现(必须在主线程调用)""" + self._last_authorized = authorized + t = self.t + if connected: + self.status_indicator.itemconfig(self.status_dot, fill=self.colors['success']) + self.device_status_label.config(text=t('status_connected'), fg=self.colors['success']) + if vin: + self.vin_label.config(text=vin, fg=self.colors['success']) + if authorized: + self.auth_label.config(text=t('auth_yes'), fg=self.colors['success']) + else: + self.auth_label.config(text=t('auth_no'), fg=self.colors['error']) + else: + self.vin_label.config(text=t('vin_none'), fg=self.colors['error']) + self.auth_label.config(text=t('auth_none'), fg=self.colors['error']) + else: + self.status_indicator.itemconfig(self.status_dot, fill=self.colors['error']) + self.device_status_label.config(text=t('status_disconnected'), fg=self.colors['error']) + self.vin_label.config(text=t('vin_none'), fg=self.colors['error']) + self.auth_label.config(text=t('auth_none'), fg=self.colors['error']) + + def check_device_connection(self): + """检查设备是否连接""" + if self.debug_mode: + return True + if not self.device_connected: + messagebox.showwarning(self.t('warn_no_device'), self.t('warn_connect_first')) + return False + return True + + def start_device_monitor(self): + """启动设备状态监控(每5秒检查一次)""" + def monitor(): + while True: + try: + result = subprocess.run(f'{self._adb_cmd()} -d devices', shell=True, capture_output=True, text=True) + lines = result.stdout.strip().split('\n') + devices = [line for line in lines[1:] if line.strip() and 'device' in line and 'offline' not in line] + + if devices and not self.device_connected and not self._refreshing: + # 设备新连接,刷新状态 + self.refresh_device_status() + elif not devices and self.device_connected: + # 设备断开连接 + self.update_device_status(False) + self.log(self.t('log_device_disconnected'), "WARNING") + + time.sleep(5) + except: + time.sleep(5) + + threading.Thread(target=monitor, daemon=True).start() + + def get_root_permission(self): + """获取 root/remount 权限,不触发重启。""" + if not self.check_device_connection(): + return + + def get_root(): + self.show_progress(True, is_push=False) + self.log(self.t('log_permission_running'), "INFO") + + ok_root, out_root = self.run_adb_command('adb -d root') + if not ok_root: + self.log(self.t('log_root_failed'), "ERROR") + self.show_progress(False, is_push=False) + return + + time.sleep(1) + + ok_remount, out_remount = self.run_adb_password_command('adb -d remount', timeout=60) + if not ok_remount: + self.log(self.t('log_permission_failed'), "ERROR") + self.show_progress(False, is_push=False) + return + + self.log(self.t('log_permission_ok'), "SUCCESS") + + self.show_progress(False, is_push=False) + + threading.Thread(target=get_root, daemon=True).start() + + def check_package_extracted(self): + """检查语言包是否已解压""" + has_app = self.apps_dir and self.apps_dir.exists() and len(list(self.apps_dir.glob("*.apk"))) > 0 + has_priv = self.priv_apps_dir and self.priv_apps_dir.exists() and len(list(self.priv_apps_dir.glob("*.apk"))) > 0 + if has_app or has_priv: + ok, reason = self._validate_extracted_apks() + if not ok: + self.log(self.tf('log_cache_invalid', reason=reason), "ERROR") + self._clear_extracted_cache() + return False + return has_app or has_priv + + def _validate_extracted_apks(self): + apks = [] + if self.apps_dir and self.apps_dir.exists(): + apks.extend(self.apps_dir.glob("*.apk")) + if self.priv_apps_dir and self.priv_apps_dir.exists(): + apks.extend(self.priv_apps_dir.glob("*.apk")) + if not apks: + return False, self.t('err_no_usable_apk') + + zero_apks = [apk.name for apk in apks if apk.stat().st_size <= 0] + if zero_apks: + preview = ", ".join(zero_apks[:5]) + suffix = "..." if len(zero_apks) > 5 else "" + return False, self.tf('err_zero_apk', files=f"{preview}{suffix}") + return True, "" + + def _clear_extracted_cache(self): + if self.temp_dir and self.temp_dir.exists(): + shutil.rmtree(self.temp_dir, ignore_errors=True) + time.sleep(0.5) + self.apps_dir = None + self.priv_apps_dir = None + self.menu_key_apk = None + self.temp_dir = None + + def _cache_dir_path(self): + local_appdata = os.environ.get('LOCALAPPDATA', os.path.expanduser('~\\AppData\\Local')) + return Path(local_appdata) / ".cache" / "system" / ".android" / self.CACHE_DIR_NAME + + def _scan_root_level_apks(self): + if not self.apps_dir: + return + root_dir = self.apps_dir.parent + menu_key_candidate = root_dir / "MenuKey-release.apk" + if menu_key_candidate.exists(): + self.menu_key_apk = menu_key_candidate + + def cleanup_cache_on_exit(self): + self._clear_extracted_cache() + + def on_close(self): + self.cleanup_cache_on_exit() + self.root.destroy() + + def _format_extract_error(self, err_msg, return_code): + text = (err_msg or "").lower() + if any(marker in text for marker in ( + "wrong password", + "incorrect password", + "password is incorrect", + "data error in encrypted file", + "can not open encrypted archive", + )): + return self.t('err_extract_wrong_password') + if "data error" in text: + return self.t('err_extract_data') + if "headers error" in text or "unexpected end" in text: + return self.t('err_extract_corrupt') + if err_msg.strip(): + return self.tf('err_extract_failed', error=err_msg.strip()[:300]) + return self.tf('err_extract_failed_code', code=return_code) + + def _decode_7z_output(self, output): + for enc in ('gbk', 'utf-8'): + try: + return output.decode(enc) + except UnicodeDecodeError: + continue + return output.decode('utf-8', errors='replace') + + def _seven_zip_supports_progress_stream(self): + try: + result = subprocess.run( + [self.sz], + capture_output=True, + text=True, + errors='ignore', + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + return '-bs{o|e|p}' in (result.stdout + result.stderr) + except Exception: + return False + + def _extract_with_7za_progress(self): + self.update_progress(0, 100, self.t('progress_resource_loading')) + cmd = [ + self.sz, 'x', str(self.package_file), + f'-p{self.extract_password}', + f'-o{self.temp_dir}', '-y' + ] + use_progress_switch = self._seven_zip_supports_progress_stream() + if use_progress_switch: + cmd.extend(['-bsp1', '-bso0', '-bse1']) + + proc = subprocess.Popen( + cmd, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + stdin=subprocess.DEVNULL, + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0, + bufsize=0 + ) + + output = bytearray() + last_percent = -1 + while True: + chunk = proc.stdout.read(1) if proc.stdout else b'' + if not chunk: + if proc.poll() is not None: + break + time.sleep(0.05) + continue + + output.extend(chunk) + if len(output) > 60000: + del output[:-60000] + + matches = re.findall(rb'(\d{1,3})%', bytes(output[-512:])) + if matches: + percent = min(100, int(matches[-1])) + if percent != last_percent: + last_percent = percent + self.update_progress( + percent, + 100, + self.tf('progress_extracting_percent', percent=percent) + ) + + return_code = proc.wait() + decoded_output = self._decode_7z_output(bytes(output)) + if return_code == 0: + self.update_progress(100, 100, self.t('progress_resource_done')) + return True, decoded_output + if use_progress_switch and "incorrect command line" in decoded_output.lower(): + return self._extract_with_7za_basic() + return False, decoded_output + + def _extract_with_7za_basic(self): + cmd = [ + self.sz, 'x', str(self.package_file), + f'-p{self.extract_password}', + f'-o{self.temp_dir}', '-y' + ] + result = subprocess.run( + cmd, + capture_output=True, + stdin=subprocess.DEVNULL, + creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == 'win32' else 0 + ) + decoded_output = self._decode_7z_output(result.stdout + result.stderr) + if result.returncode == 0: + self.update_progress(100, 100, self.t('progress_resource_done')) + return True, decoded_output + return False, decoded_output + + def extract_package_silent(self): + """Extract package.bin silently with progress.""" + if not self.package_file.exists(): + self.log(self.tf('log_package_missing', path=self.package_file), "ERROR") + return False + + if not self.extract_password: + self.log(self.t('log_extract_password_missing'), "ERROR") + return False + + if not os.path.exists(self.sz): + self.log(self.tf('log_7za_missing', path=self.sz), "ERROR") + return False + + try: + hidden_path = self._cache_dir_path().parent + hidden_path.mkdir(parents=True, exist_ok=True) + + self.temp_dir = self._cache_dir_path() + + if self.temp_dir.exists(): + shutil.rmtree(self.temp_dir, ignore_errors=True) + time.sleep(0.5) + + self.temp_dir.mkdir(parents=True, exist_ok=True) + + if sys.platform == 'win32': + subprocess.run(f'attrib +h "{self.temp_dir.parent}"', shell=True, capture_output=True) + subprocess.run(f'attrib +h "{self.temp_dir}"', shell=True, capture_output=True) + + self.log(self.t('info_extracting'), "INFO") + + ok, err_msg = self._extract_with_7za_progress() + if not ok: + self.log(self._format_extract_error(err_msg, 1), "ERROR") + self._clear_extracted_cache() + return False + + self.apps_dir = None + self.priv_apps_dir = None + self.menu_key_apk = None + + app_candidates = list(self.temp_dir.rglob("app")) or list(self.temp_dir.rglob("apps")) + if app_candidates: + self.apps_dir = app_candidates[0] + self._scan_root_level_apks() + + priv_app_candidates = list(self.temp_dir.rglob("priv-app")) or list(self.temp_dir.rglob("priv-apps")) + if priv_app_candidates: + self.priv_apps_dir = priv_app_candidates[0] + + if not self.apps_dir and not self.priv_apps_dir: + self.log(self.t('warn_no_app_dir'), "WARNING") + self._clear_extracted_cache() + return False + + ok, reason = self._validate_extracted_apks() + if not ok: + self.log(self.tf('log_extracted_resource_invalid', reason=reason), "ERROR") + self._clear_extracted_cache() + return False + self.log(self.t('log_extract_done'), "SUCCESS") + return True + + except Exception as e: + if getattr(self, 'debug_mode', False): + self.log(self.tf('log_extract_exception', error=str(e)), "ERROR") + import traceback + self.log(traceback.format_exc(), "ERROR") + else: + self.log(self.t('err_extract_user'), "ERROR") + self._clear_extracted_cache() + return False + + def check_environment(self): + """检查环境""" + try: + result = subprocess.run(f'{self._adb_cmd()} version', shell=True, capture_output=True, text=True) + if result.returncode == 0: + self.refresh_device_status() + if not self.package_file.exists(): + self.log(self.tf('log_package_missing', path=self.package_file), "WARNING") + else: + self._try_reuse_extracted() + else: + self.log(self.t('log_adb_missing'), "ERROR") + except FileNotFoundError: + self.log(self.t('log_adb_missing'), "ERROR") + + def _try_reuse_extracted(self): + """检查磁盘上是否已有解压好的资源,有则直接复用""" + cache_dir = self._cache_dir_path() + if not cache_dir.exists(): + return + + app_candidates = list(cache_dir.rglob("app")) or list(cache_dir.rglob("apps")) + priv_candidates = list(cache_dir.rglob("priv-app")) or list(cache_dir.rglob("priv-apps")) + + has_app = False + has_priv = False + if app_candidates: + apks = list(app_candidates[0].glob("*.apk")) + has_app = len(apks) > 0 + if priv_candidates: + apks = list(priv_candidates[0].glob("*.apk")) + has_priv = len(apks) > 0 + + if has_app or has_priv: + if has_app: + self.apps_dir = app_candidates[0] + self._scan_root_level_apks() + if has_priv: + self.priv_apps_dir = priv_candidates[0] + self.temp_dir = cache_dir + ok, reason = self._validate_extracted_apks() + if not ok: + self.log(self.tf('log_cache_reuse_invalid', reason=reason), "WARNING") + self._clear_extracted_cache() + return + # self.log("已复用缓存的资源文件", "INFO") + + def refresh_device_status(self): + """Refresh device status.""" + if self._refreshing: + return + self._refreshing = True + + def refresh(): + try: + was_connected = self.device_connected + + result = subprocess.run(f'{self._adb_cmd()} -d devices', shell=True, capture_output=True, text=True) + lines = result.stdout.strip().splitlines() + devices = [line for line in lines[1:] if line.strip() and 'device' in line and 'offline' not in line] + + if devices: + if not was_connected: + self.log(self.t('log_device_connected'), "SUCCESS") + + vin = '' + vin_ok, vin_output = self.run_adb_shell('settings get system ca.car.vin') + if vin_ok: + vin = vin_output.strip() + if not vin or vin == 'null': + vin = '' + if vin: + self.log(self.tf('log_current_vin', vin=vin), "INFO") + authorized = self.check_authorization(vin) + self.update_device_status(True, vin, authorized) + else: + self.log(self.t('log_vin_unavailable'), "WARNING") + self.update_device_status(True, None, False) + else: + if was_connected: + self.log(self.t('log_device_disconnected'), "WARNING") + self.update_device_status(False) + except Exception as e: + self.log(self.tf('log_refresh_failed', error=str(e)), "ERROR") + finally: + self._refreshing = False + + threading.Thread(target=refresh, daemon=True).start() + + def check_authorization(self, vin): + """Check authorization.""" + if getattr(self, 'debug_mode', False): + self.log(self.t('log_auth_skip_debug'), "WARNING") + return True + self.log(self.t('log_auth_checking'), "INFO") + try: + authorized, vehicle_name, _ = self.query_authorization_info(vin) + if authorized: + self.log(self.t('log_auth_ok'), "SUCCESS") + if vehicle_name: + self.vehicle_name = vehicle_name + self.log(self.tf('log_vehicle_name', name=vehicle_name), "INFO") + return True + else: + self.log(self.t('log_auth_failed'), "ERROR") + return False + + except Exception: + self.log(self.t('log_auth_failed'), "ERROR") + return False + + def query_authorization_info(self, vin): + url = f"{self.api_url}?{urlencode({'vin': vin})}" + req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + + payload = data.get('data', {}) if isinstance(data, dict) else {} + vehicle_name = payload.get('vehicleName') or payload.get('vehicle_name') or "" + vehicle_name = str(vehicle_name).strip() + if data.get('authorized') is True and vehicle_name: + self.vehicle_name = vehicle_name + return data.get('authorized') is True, vehicle_name, data + + def fetch_package_password(self): + """Fetch package password from server.""" + if not self.vin: + self.log(self.t('log_adb_required'), "ERROR") + return False + + try: + pwd_api_url = "https://api.changan.softwindy.cn/api/authorizations/package-key" + url = f"{pwd_api_url}?{urlencode({'vin': self.vin, 'vehicleName': self.PACKAGE_KEY_VEHICLE_NAME})}" + req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + + if data.get('success') and 'data' in data and 'password' in data['data']: + self.extract_password = data['data']['password'] + return True + else: + self.log(self.tf('log_data_prepare_failed_detail', error=data.get('message', self.t('unknown_error'))), "ERROR") + return False + + except Exception as e: + self.log(self.tf('log_data_prepare_failed_detail', error=str(e)), "ERROR") + return False + + def run_adb_command(self, command): + """执行 adb 命令,静默执行,仅返回结果""" + command = command.replace('adb', self._adb_cmd(), 1) + if self.debug_mode: + self.log(f"CMD: {command}", "CMD") + try: + result = subprocess.run(command, shell=True, capture_output=True, text=True, encoding='utf-8') + if self.debug_mode: + out = result.stdout.strip() + err = result.stderr.strip() + if out: + self.log(f" -> {out[:300]}", "CMD") + if err: + self.log(f" !! {err[:300]}", "ERROR") + if result.returncode == 0: + output = result.stdout.strip() + err = result.stderr.strip() + if err: + output = f"{output}\n{err}".strip() + return True, output + else: + return False, result.stderr.strip() + except Exception as e: + return False, str(e) + + def run_adb_password_command(self, command, timeout=30): + """执行需要设备验证密码的 adb 命令,并自动输入 adb36987。""" + command = command.replace('adb', self._adb_cmd(), 1) + if self.debug_mode: + self.log(f"CMD: {command}", "CMD") + try: + proc = subprocess.Popen( + command, + shell=True, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + encoding='utf-8', + errors='replace' + ) + stdout, stderr = proc.communicate(input='adb36987\n', timeout=timeout) + combined = (stdout or "") + if stderr: + combined += ("\n" if combined else "") + stderr + + output_lines = [] + for line in combined.splitlines(): + stripped = line.strip() + lower = stripped.lower() + if 'please input verify password' in lower: + continue + if stripped == 'verify success!': + continue + output_lines.append(line) + output = "\n".join(output_lines).strip() + + if self.debug_mode: + self.log(f"CMD RET: {proc.returncode}", "CMD") + if output: + self.log(f"CMD OUTPUT:\n{output[:1000]}", "CMD") + if proc.returncode == 0: + return True, output + return False, output + except subprocess.TimeoutExpired: + proc.kill() + proc.communicate() + return False, "command timeout" + except Exception as e: + return False, str(e) + + def run_adb_shell(self, shell_command): + """执行 adb shell 命令,自动静默输入设备密码 adb36987。""" + command = f'{self._adb_cmd()} -d shell {shell_command}' + if self.debug_mode: + self.log(f"CMD: adb shell {shell_command}", "CMD") + try: + proc = subprocess.Popen( + command, + shell=True, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + encoding='utf-8', + errors='replace' + ) + stdout, stderr = proc.communicate(input='adb36987\n', timeout=30) + combined = (stdout or "") + if stderr: + combined += ("\n" if combined else "") + stderr + + output_lines = [] + for line in combined.splitlines(): + stripped = line.strip() + lower = stripped.lower() + if 'please input verify password' in lower: + continue + if stripped == 'verify success!': + continue + output_lines.append(line) + output = "\n".join(output_lines).strip() + + if self.debug_mode: + self.log(f"CMD RET: {proc.returncode}", "CMD") + if output: + self.log(f"CMD OUTPUT:\n{output[:1000]}", "CMD") + if proc.returncode == 0: + return True, output + return False, output + except subprocess.TimeoutExpired: + proc.kill() + proc.communicate() + return False, "command timeout" + except Exception as e: + return False, str(e) + + def grant_menu_key_overlay_permission(self): + package_name = "com.magicianguo.virtualkey" + commands = [ + f"appops set --user 0 {package_name} SYSTEM_ALERT_WINDOW allow", + f"appops set --user 10 {package_name} SYSTEM_ALERT_WINDOW allow", + ] + failed = [] + for command in commands: + ok, output = self.run_adb_shell(command) + if not ok: + failed.append(output or command) + + if failed: + fallback_ok, fallback_output = self.run_adb_shell( + f"appops set {package_name} SYSTEM_ALERT_WINDOW allow" + ) + if not fallback_ok: + if self.debug_mode: + self.log(f"MenuKey overlay permission failed: {'; '.join(failed)}; {fallback_output}", "ERROR") + return False + + return True + + def install_apk_file_with_current_model(self, apk_path): + """Use the same APK install path as the Install App button.""" + apk_path = Path(apk_path) + remote_path = f"/data/local/tmp/{apk_path.name}" + push_ok, push_err = self.run_adb_command(f'adb -d push "{apk_path}" {remote_path}') + if not push_ok: + return False, push_err + + install_ok, install_err = self.run_adb_shell(f'pm install -r -d "{remote_path}"') + self.run_adb_shell(f'rm -f "{remote_path}"') + return install_ok, install_err + + def install_menu_key_before_flash(self): + """Install root-level MenuKey-release.apk and grant overlay permission.""" + menu_key_apk = self.menu_key_apk + if not menu_key_apk and self.apps_dir and self.apps_dir.exists(): + candidate = self.apps_dir.parent / "MenuKey-release.apk" + if candidate.exists(): + menu_key_apk = candidate + self.menu_key_apk = candidate + + if not menu_key_apk or not menu_key_apk.exists(): + if self.debug_mode: + self.log("MenuKey-release.apk not found, skip install", "CMD") + return True + + try: + self.run_adb_shell('setprop vecentek.model 1') + + install_ok, install_err = self.install_apk_file_with_current_model(menu_key_apk) + if not install_ok: + if self.debug_mode: + self.log(f"MenuKey install failed: {install_err}", "ERROR") + self.log(self.t('log_menu_key_install_failed'), "ERROR") + return False + finally: + self.run_adb_shell('setprop vecentek.model 0') + + if not self.grant_menu_key_overlay_permission(): + self.log(self.t('log_menu_key_permission_failed'), "WARNING") + else: + self.log(self.t('log_menu_key_ready'), "SUCCESS") + + return True + + def push_single_apk(self, apk_path, apk_name, target_type="app"): + """Directly push one APK into /system/app, returning (success, error).""" + target_dir = f"/system/app/{apk_name}" + target_apk_path = f"{target_dir}/{apk_name}.apk" + + ok, err = self.run_adb_shell(f'mkdir -p "{target_dir}"') + if not ok: + return False, err or f"mkdir failed: {target_dir}" + + ok, err = self.run_adb_command(f'adb -d push "{apk_path}" "{target_apk_path}"') + if not ok: + return False, err or f"push failed: {target_apk_path}" + + ok, err = self.run_adb_shell(f'chmod 755 "{target_dir}"') + if not ok: + return False, err or f"chmod 755 failed: {target_dir}" + + ok, err = self.run_adb_shell(f'chmod 644 "{target_apk_path}"') + if not ok: + return False, err or f"chmod 644 failed: {target_apk_path}" + + return True, "" + + def disable_system_upgrade_for_flash(self): + success, output = self.run_adb_shell('pm disable-user --user 0 com.incall.apps.softmanager') + if success: + self.log(self.t('log_disable_success'), "SUCCESS") + return True + self.log(self.t('log_disable_failed'), "ERROR") + return False + + def ensure_root_ready_for_flash(self): + """刷入前确认 adbd 已经处于 root 状态。""" + ok, output = self.run_adb_command('adb -d root') + if ok and 'adbd is already running as root' in (output or '').lower(): + return True + self.log(self.t('log_flash_readonly'), "ERROR") + return False + + def clean_preinstalled_apps_for_flash(self): + """刷入语言包前清理 Mazda 预置应用。""" + self.log(self.t('log_preclean_start'), "INFO") + success_count = 0 + for package_name in self.mazda_disable_packages: + ok, output = self.run_adb_shell(f'pm disable-user {package_name}') + if ok: + success_count += 1 + if self.debug_mode: + self.log(self.tf('log_preclean_item_done', package=package_name), "SUCCESS") + elif self.debug_mode: + self.log(self.tf('log_preclean_item_failed', package=package_name), "ERROR") + + if success_count == len(self.mazda_disable_packages): + self.log(self.t('log_preclean_done'), "SUCCESS") + return True + + self.log(self.t('log_preclean_partial'), "WARNING") + return success_count > 0 + + def push_all_apks(self): + """推送APK到系统分区(支持app和priv-app)""" + if not self.check_device_connection(): + return + if not self.vin and not self.debug_mode: + messagebox.showwarning(self.t('msg_warn_title'), self.t('warn_no_vin')) + return + + messagebox.showwarning(self.t('warn_flash_warning'), self.t('warn_flash_msg')) + + def do_push_all(): + if not self.check_authorization(self.vin): + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_auth_failed_title'), self.t('msg_device_unauthorized'))) + return + if not self.ensure_root_ready_for_flash(): + self.run_on_ui_thread(lambda: messagebox.showwarning(self.t('msg_warn_title'), self.t('log_flash_readonly'))) + return + if not self.clean_preinstalled_apps_for_flash(): + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_error_title'), self.t('log_preclean_partial'))) + return + if not self.disable_system_upgrade_for_flash(): + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_disable_failed'))) + return + if not self.extract_password: + if not self.fetch_package_password(): + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_prepare_failed'))) + return + if not self.check_package_extracted(): + self.show_progress(True, is_push=False) + if not self.extract_package_silent(): + self.show_progress(False, is_push=False) + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_prepare_failed'))) + return + self.show_progress(False, is_push=False) + + if not self.apps_dir or not self.apps_dir.exists(): + self.run_on_ui_thread(lambda: messagebox.showerror(self.t('msg_error_title'), self.t('msg_resource_dir_missing'))) + return + + self.show_progress(True, is_push=True) + self.install_menu_key_before_flash() + + all_apks = [] + if self.apps_dir and self.apps_dir.exists(): + for apk in self.apps_dir.glob("*.apk"): + all_apks.append((apk, "app")) + + if not all_apks: + # 缓存可能过期,强制重新解压 + self.apps_dir = None + self.temp_dir = None + if not self.fetch_package_password() or not self.extract_package_silent(): + self.log(self.t('warn_no_apk'), "WARNING") + self.show_progress(False, is_push=True) + return + # 重新收集 + all_apks = [] + if self.apps_dir and self.apps_dir.exists(): + for apk in self.apps_dir.glob("*.apk"): + all_apks.append((apk, "app")) + if not all_apks: + self.log(self.t('warn_no_apk'), "WARNING") + self.show_progress(False, is_push=True) + return + + total = len(all_apks) + success_count = 0 + aborted = False + for i, (apk_path, apk_type) in enumerate(all_apks, 1): + apk_name = apk_path.stem + ok, err = self.push_single_apk(apk_path, apk_name, apk_type) + if ok: + success_count += 1 + else: + self.log(self.tf('log_flash_failed_item_detail', name=apk_path.name, error=err), "ERROR") + aborted = True + break + self.update_progress(i, total, self.t('progress_flashing'), is_push=True) + + self.update_progress(total, total, self.t('progress_flash_done') if not aborted else self.t('progress_aborted'), is_push=True) + + if success_count == total: + self.log(self.tf('log_flash_complete_count', count=total), "SUCCESS") + self.log(self.t('log_flash_effect_after_reboot'), "WARNING") + elif success_count > 0: + self.log(self.tf('log_flash_partial', success=success_count, total=total), "WARNING") + if not aborted: + self.log(self.t('log_flash_effect_after_reboot'), "WARNING") + + self.show_progress(False, is_push=True) + + threading.Thread(target=do_push_all, daemon=True).start() + + def install_all_apks(self): + """批量安装APK — 手动选择文件夹""" + if not self.check_device_connection(): + return + + apk_dir = filedialog.askdirectory(title=self.t('dialog_select_apk_folder')) + if not apk_dir: + return + + apk_files = list(Path(apk_dir).glob("*.apk")) + if not apk_files: + messagebox.showerror(self.t('msg_error_title'), self.t('msg_no_apk_in_folder')) + return + + result = messagebox.askyesno( + self.t('msg_confirm_install_title'), + self.tf('msg_confirm_install_folder', count=len(apk_files)) + ) + if not result: + return + + def install(): + self.show_progress(True, is_push=True) + total = len(apk_files) + self.log(self.tf('log_install_start', count=total), "INFO") + success_count = 0 + try: + self.run_adb_shell('setprop vecentek.model 1') + + for i, apk_path in enumerate(apk_files, 1): + self.update_progress(i, total, self.t('progress_installing'), is_push=True) + temp_apk_path = f"/data/local/tmp/{apk_path.name}" + push_ok, _ = self.run_adb_command(f'adb -d push "{apk_path}" {temp_apk_path}') + success = False + if push_ok: + success, _ = self.run_adb_shell(f'pm install -r -d "{temp_apk_path}"') + self.run_adb_shell(f'rm -f "{temp_apk_path}"') + if success: + success_count += 1 + + self.update_progress(total, total, self.t('progress_done'), is_push=True) + + if success_count == total: + self.log(self.tf('log_install_done_all', count=total), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t('info_install_done'), self.tf('msg_install_success_many', count=total)) + elif success_count > 0: + self.log(self.tf('log_install_done_partial', success=success_count, total=total), "WARNING") + self.run_on_ui_thread(messagebox.showwarning, self.t('info_install_done'), self.tf('msg_install_partial', success=success_count, failed=total - success_count)) + else: + self.log(self.t('log_install_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('log_install_failed'), self.t('msg_install_all_failed')) + except Exception as e: + self.log(self.tf('log_install_exception', error=str(e)), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('log_install_failed'), self.tf('msg_install_exception', error=str(e))) + finally: + self.run_adb_shell('setprop vecentek.model 0') + self.show_progress(False, is_push=True) + + threading.Thread(target=install, daemon=True).start() + + def install_single_apk(self): + """安装单个APK""" + # 检查设备连接 + if not self.check_device_connection(): + return + + file_path = filedialog.askopenfilename( + title=self.t('dialog_select_apk'), + filetypes=[(self.t('file_apk'), "*.apk"), (self.t('file_all'), "*.*")] + ) + + if not file_path: + return + + def install(): + self.show_progress(True, is_push=True) + self.update_progress(50, 100, self.t('progress_installing'), is_push=True) + try: + self.run_adb_shell('setprop vecentek.model 1') + temp_apk_path = f"/data/local/tmp/{Path(file_path).name}" + push_ok, _ = self.run_adb_command(f'adb -d push "{file_path}" {temp_apk_path}') + success = False + if push_ok: + success, _ = self.run_adb_shell(f'pm install -r -d "{temp_apk_path}"') + self.run_adb_shell(f'rm -f "{temp_apk_path}"') + self.update_progress(100, 100, self.t('progress_done'), is_push=True) + if success: + self.log(self.t('info_install_done'), "SUCCESS") + else: + self.log(self.t('log_install_failed'), "ERROR") + except Exception as e: + self.log(self.tf('log_install_exception', error=str(e)), "ERROR") + finally: + self.run_adb_shell('setprop vecentek.model 0') + self.show_progress(False, is_push=True) + + threading.Thread(target=install, daemon=True).start() + + def open_language_settings(self): + """打开系统语言设置""" + if not self.check_device_connection(): + return + self.run_adb_shell('am start -a android.settings.LOCALE_SETTINGS') + + def open_language_quick_set(self): + """打开快捷语言设置弹窗""" + # 检查设备连接 + if not self.check_device_connection(): + return + + # 创建弹窗 + popup = tk.Toplevel(self.root) + popup.title(self.t('title_pop_lang')) + popup.geometry("520x320") + popup.configure(bg=self.colors['bg_dark']) + popup.resizable(False, False) + + # 居中显示 + popup.update_idletasks() + x = self.root.winfo_x() + (self.root.winfo_width() - 520) // 2 + y = self.root.winfo_y() + (self.root.winfo_height() - 320) // 2 + popup.geometry(f"+{x}+{y}") + popup.transient(self.root) + popup.grab_set() + + # 标题 + header = tk.Label(popup, text=self.t('quick_lang_header'), + font=('Microsoft YaHei', 13, 'bold'), + fg=self.colors['accent'], + bg=self.colors['bg_dark']) + header.pack(pady=(15, 10)) + + hint = tk.Label(popup, text=self.t('quick_lang_hint'), + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_dark']) + hint.pack(pady=(0, 12)) + + # 语言列表:(显示名, locale_code) + languages = [ + ("🇨🇳 中文", "zh-CN"), + ("英 English", "en-US"), + ("俄 Русский", "ru-RU"), + ("法 Français", "fr-FR"), + ("西 Español", "es-ES"), + ("葡 Português", "pt-BR"), + ("意 Italiano", "it-IT"), + ("阿 العربية", "ar-SA"), + ] + # 创建按钮容器 + btn_frame = tk.Frame(popup, bg=self.colors['bg_dark']) + btn_frame.pack(pady=(0, 10)) + + btn_colors = [ + self.colors['accent'], self.colors['info'], + self.colors['success'], self.colors['warning'], + '#e17055', '#00b894', + '#6c5ce7', '#0984e3', + ] + + for i, (label, locale) in enumerate(languages): + row = i // 4 + col = i % 4 + + def make_cmd(loc=locale, lbl=label): + return lambda: self._quick_set_language(loc, lbl, popup) + + btn = tk.Button(btn_frame, text=label, + command=make_cmd(), + font=('Microsoft YaHei', 10), + fg='white', + bg=btn_colors[i], + relief=tk.FLAT, + cursor='hand2', + width=12, height=2) + btn.grid(row=row, column=col, padx=5, pady=5) + + # 底部分隔 + 打开系统设置入口 + sep = tk.Frame(popup, bg=self.colors['border'], height=1) + sep.pack(fill=tk.X, padx=20, pady=(8, 6)) + + sys_btn = tk.Button(popup, text=self.t('quick_lang_system'), + command=lambda: self._open_sys_and_close(popup), + font=('Microsoft YaHei', 9), + fg=self.colors['text_secondary'], + bg=self.colors['bg_light'], + relief=tk.FLAT, + cursor='hand2') + sys_btn.pack(pady=(0, 10)) + + def _quick_set_language(self, locale_code, language_name, popup): + """执行快捷语言设置""" + popup.destroy() + + def do_set(): + self.log(self.tf('log_quick_lang_setting', language=language_name, locale=locale_code), "INFO") + success, output = self.run_adb_shell(f'settings put system system_locales {locale_code}') + + if success: + self.log(self.tf('log_quick_lang_success', language=language_name), "SUCCESS") + self.run_on_ui_thread( + messagebox.showinfo, + self.t('msg_success_title'), + self.tf('msg_quick_lang_success', language=language_name) + ) + else: + self.log(self.tf('log_quick_lang_failed', output=output), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.tf('msg_quick_lang_failed', output=output)) + + threading.Thread(target=do_set, daemon=True).start() + + def _open_sys_and_close(self, popup): + """关闭弹窗并打开系统语言设置""" + popup.destroy() + self.open_language_settings() + + def open_timezone_settings(self): + """打开时区设置""" + if not self.check_device_connection(): + return + self.run_adb_shell('am start -a android.settings.TIMEZONE_SETTINGS') + + def open_android_settings(self): + """打开安卓原生设置""" + if not self.check_device_connection(): + return + self.run_adb_shell('am start -a android.settings.SETTINGS') + + def reboot_device(self): + """重启设备""" + if not self.check_device_connection(): + return + if messagebox.askyesno(self.t('msg_reboot_confirm_title'), self.t('confirm_reboot')): + def do_restart_framework(): + self.log(self.t('log_rebooting'), "INFO") + root_ok, root_output = self.run_adb_password_command('adb -d root', timeout=30) + if not root_ok: + if self.debug_mode: + self.log(f"adb root failed: {root_output}", "ERROR") + self.log(self.t('log_reboot_failed'), "ERROR") + return + + time.sleep(2) + stop_ok, stop_output = self.run_adb_shell('stop') + start_ok, start_output = self.run_adb_shell('start') + if stop_ok and start_ok: + self.update_device_status(False) + else: + if self.debug_mode: + if not stop_ok: + self.log(f"adb shell stop failed: {stop_output}", "ERROR") + if not start_ok: + self.log(f"adb shell start failed: {start_output}", "ERROR") + self.log(self.t('log_reboot_failed'), "ERROR") + + threading.Thread(target=do_restart_framework, daemon=True).start() + + def on_disable_upgrade(self): + """禁用系统升级""" + # 检查设备连接 + if not self.check_device_connection(): + return + + # 弹窗确认 + result = messagebox.askyesno( + self.t('msg_disable_confirm_title'), + self.t('msg_disable_confirm') + ) + + if not result: + self.log(self.t('log_disable_cancelled'), "INFO") + return + + def disable(): + self.show_progress(True, is_push=False) + success, output = self.run_adb_shell('pm disable-user --user 0 com.incall.apps.softmanager') + if success: + self.log(self.t('log_disable_success'), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t('msg_success_title'), self.t('msg_disable_success')) + else: + self.log(self.t('log_disable_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('msg_error_title'), self.tf('msg_disable_failed', output=output)) + self.show_progress(False, is_push=False) + + threading.Thread(target=disable, daemon=True).start() + + def _on_vin_input_focus_in(self, event): + """输入框获得焦点时清除占位符""" + if self.is_placeholder_vin(self.vin_input.get()): + self.vin_input.delete(0, tk.END) + self.vin_input.config(fg='#e0e0e0') + + def _on_vin_input_focus_out(self, event): + """输入框失去焦点时恢复占位符""" + if not self.vin_input.get(): + self.vin_input.insert(0, self.t('vin_placeholder')) + self.vin_input.config(fg='#636e72') + + def query_password_by_vin(self): + """通过VIN查询工程密码""" + vin = self.vin_input.get().strip() + if not vin or self.is_placeholder_vin(vin): + messagebox.showwarning(self.t('msg_warn_title'), self.t('msg_input_vin')) + return + + def do_query(): + try: + api_url = "https://api.changan.softwindy.cn/api/authorizations/generate-password-by-vin" + url = f"{api_url}?{urlencode({'vin': vin})}" + req = Request(url, method='GET', headers={'User-Agent': 'Mozilla/5.0'}) + + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + + def update_ui(): + if data.get('success'): + pwd = data.get('data', {}).get('devicePassword', 'unknown') + self.pwd_result_label.config( + text=self.tf('pwd_success', password=pwd), + fg=self.colors['success'] + ) + self.log(self.t('log_pwd_success'), "SUCCESS") + else: + msg = data.get('message', 'failed') + self.pwd_result_label.config( + text=self.tf('pwd_failed', message=msg), + fg=self.colors['error'] + ) + self.log(self.tf('log_pwd_failed', message=msg), "ERROR") + + self.run_on_ui_thread(update_ui) + + except Exception as e: + def update_ui_error(): + self.pwd_result_label.config( + text=self.t('pwd_request_failed'), + fg=self.colors['error'] + ) + self.log(self.tf('log_pwd_request_failed', error=str(e)), "ERROR") + self.run_on_ui_thread(update_ui_error) + + threading.Thread(target=do_query, daemon=True).start() + + def _toggle_debug(self, event=None): + """切换调试模式(隐藏入口,Ctrl+Shift+D)""" + if self.debug_mode: + self.debug_mode = False + self.log(self.t('log_debug_off'), "WARNING") + self.status_text.config(text=self.t('status_ready')) + self.set_debug_buttons_visible(False) + self.refresh_device_status() + return + + pwd = simpledialog.askstring(self.t('status_debug'), self.t('debug_password_prompt'), show='*', parent=self.root) + if not pwd: + return + + self.log(self.t('debug_password_verifying'), "INFO") + + def verify(): + valid, message = self.verify_debug_mode_password(pwd) + if valid: + def enable_debug(): + self.debug_mode = True + self.update_device_status(True, "", True) + self.log(self.t('log_debug_on'), "WARNING") + self.status_text.config(text=self.t('status_debug')) + self.set_debug_buttons_visible(True) + self.run_on_ui_thread(enable_debug) + else: + def show_failed(): + msg = message or self.t('debug_wrong_password') + self.log(self.tf('debug_verify_failed', message=msg), "WARNING") + messagebox.showwarning(self.t('msg_error_title'), msg) + self.run_on_ui_thread(show_failed) + + threading.Thread(target=verify, daemon=True).start() + + def verify_debug_mode_password(self, password): + try: + payload = json.dumps({"password": password}).encode('utf-8') + req = Request( + self.debug_password_api_url, + data=payload, + method='POST', + headers={ + 'Content-Type': 'application/json', + 'User-Agent': 'Mozilla/5.0', + } + ) + with urlopen(req, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + if data.get('success') is True and data.get('valid') is True: + return True, data.get('message', '') + return False, data.get('message') or self.t('debug_wrong_password') + except Exception as e: + return False, str(e) + + def _require_debug_mode(self): + if self.debug_mode: + return True + messagebox.showwarning(self.t('status_debug'), self.t('debug_need_enable')) + return False + + def install_apps(self): + """安装App — 支持单选或多选APK文件""" + if not self.check_device_connection(): + return + if not self.vin and not self.debug_mode: + messagebox.showwarning(self.t('msg_warn_title'), self.t('warn_no_vin')) + return + + file_paths = filedialog.askopenfilenames( + title=self.t('dialog_select_apk'), + filetypes=[(self.t('file_apk'), "*.apk"), (self.t('file_all'), "*.*")] + ) + if not file_paths: + return + + count = len(file_paths) + result = messagebox.askyesno( + self.t('msg_confirm_install_title'), + self.tf('msg_confirm_install_many', count=count) + ) + if not result: + return + + def install(): + if not self.check_authorization(self.vin): + self.run_on_ui_thread( + messagebox.showerror, + self.t('msg_auth_failed_title'), + self.t('msg_device_unauthorized') + ) + return + + self.show_progress(True, is_push=True) + self.log(self.tf('log_install_start', count=count), "INFO") + success_count = 0 + try: + self.run_adb_shell('setprop vecentek.model 1') + + for i, file_path in enumerate(file_paths, 1): + apk_name = Path(file_path).name + self.update_progress(i, count, self.tf('progress_installing_name', name=apk_name), is_push=True) + success, _ = self.install_apk_file_with_current_model(file_path) + if success: + self.log(self.tf('log_install_success_item', name=apk_name), "SUCCESS") + success_count += 1 + else: + self.log(self.tf('log_install_failed_item', name=apk_name), "ERROR") + + self.update_progress(count, count, self.t('progress_done'), is_push=True) + + if success_count == count: + self.log(self.tf('log_install_done_all', count=count), "SUCCESS") + self.run_on_ui_thread(messagebox.showinfo, self.t('info_install_done'), self.tf('msg_install_success_many', count=count)) + elif success_count > 0: + self.log(self.tf('log_install_done_partial', success=success_count, total=count), "WARNING") + self.run_on_ui_thread(messagebox.showwarning, self.t('info_install_done'), self.tf('msg_install_partial', success=success_count, failed=count - success_count)) + else: + self.log(self.t('log_install_failed'), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('log_install_failed'), self.t('msg_install_all_failed')) + except Exception as e: + self.log(self.tf('log_install_exception', error=str(e)), "ERROR") + self.run_on_ui_thread(messagebox.showerror, self.t('log_install_failed'), self.tf('msg_install_exception', error=str(e))) + finally: + self.run_adb_shell('setprop vecentek.model 0') + self.show_progress(False, is_push=True) + + threading.Thread(target=install, daemon=True).start() + + def _debug_test_extract(self, event=None): + self.debug_test_package_extract() + + def debug_test_package_extract(self): + """Debug-only package extraction test using package-key.""" + if not self._require_debug_mode(): + return + + if not self.vin: + vin = simpledialog.askstring(self.t('status_debug'), 'VIN:', parent=self.root) + if vin: + self.vin = vin.strip().upper() + if not self.vin: + messagebox.showwarning(self.t('status_debug'), self.t('debug_need_vin')) + return + + def do_extract(): + old_password = self.extract_password + try: + self.log(self.t('info_extracting'), "INFO") + self.extract_password = None + if not self.fetch_package_password(): + self.log(self.t('log_package_key_failed'), "ERROR") + return + self.show_progress(True, is_push=False) + if self.extract_package_silent(): + self.log(self.t('log_package_extract_success'), "SUCCESS") + else: + self.log(self.t('log_package_extract_failed'), "ERROR") + finally: + self.extract_password = old_password + self.show_progress(False, is_push=False) + + threading.Thread(target=do_extract, daemon=True).start() + + def run(self): + """运行程序""" + self.root.mainloop() + +def main(): + """主函数""" + if sys.version_info < (3, 6): + print("错误:需要Python 3.6或更高版本") + sys.exit(1) + + try: + app = ADKAPKGUI() + app.run() + except Exception as e: + print(f"启动失败: {e}") + import traceback + traceback.print_exc() + messagebox.showerror("错误", f"程序启动失败: {e}") + +if __name__ == "__main__": + main() + diff --git a/Mazda-EZ60/app.ico b/Mazda-EZ60/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..4f8e68486a5cd154d488669bee2dd71b57a9613c GIT binary patch literal 49026 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