# 更新日志 (Changelog)

本项目遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/) 规范。

## [Unreleased]

### 修复
- **修复"已导出"路径不显示的问题**：导出完成的日志模板 `h_4267eb34`（含 `%1$s` 占位符）在调用时未传入导出路径实参，导致界面显示 `已导出: %1$s` 而非真实路径。已在三种导出方式（原包同目录 / SAF / 默认目录）的回调处补齐 exportDesc 实参

### 计划中
- 待补充：更多广告特征订阅源、批量处理、命令行模式

## [3.5] - 2026-08-27

### 新增
- Flutter 去广告增强：新增"置空广告方法"代码功能，支持强制赋值返回值为 `null`、强制赋值返回值为 `true`、强制赋值返回值为 `false` 三种处理方式

### 优化
- **导出 APK 体积优化**：统一各打包路径压缩等级为最高 9 级（`Deflater.BEST_COMPRESSION`），`.so` 采取"跟随原包压缩状态"策略——仅保留原包即未压缩的 native 库为 STORED（维持 mmap 页对齐），其余用最高等级 DEFLATE 压缩，避免 APK 膨胀（实测处理后体积由 52MB+ 降至 36MB 内）
- 过签/数据复用流程（DataMultiplexing）同步启用最高压缩等级，确保全流程输出体积一致最小

### 修复
- 修复 `ApkProcessor` 原压缩状态集合 `originalStoredEntries` 声明为只读 `Set` 导致编译失败的问题（改为 `MutableSet`）

## [3.4] - 2026-08-23

### 新增
- **多国语言切换功能**：设置页新增语言选择入口，支持在应用内直接切换语言并立即生效（无需跟随系统、无需重启）
- **支持 17 种语言**：简体中文 / 繁體中文 / English / 日本語 / 한국어 / Español / Français / Deutsch / Italiano / Português / Русский / हिन्दी / Tiếng Việt / ไทย / Bahasa Indonesia / العربية / Türkçe，覆盖全球绝大多数用户，并支持"跟随系统"
- 界面全量外生化：所有布局、菜单、弹窗、对话框、提示、日志文案统一改为字符串资源，各语言资源文件严格对齐，长文本均可自动换行完整显示
- 新增 `App` 应用入口，核心引擎（无 Context 处）通过全局本地化上下文随语言切换输出，保证所有日志、Toast、弹窗文字同步更新
- 语言选择列表以各语言原生显示名呈现，选中项高亮，切换后自动持久化

### 优化
- 标题栏、输入框标签、弹窗提示等长文本改为自动换行完整显示，杜绝省略号截断（涵盖俄语等长单词语言）

### 修复
- 修复多语言资源 `strings.xml` 根元素结构错误与区域函数声明顺序问题，保证多语言编译通过
- **修复切换语言后无法去广告处理 APK 的问题**：
  - 解包完成日志模板 `h_fbfccfde`（含 `%1$s/%2$s/%3$s` 三个占位符）在调用时只传入 1 个参数，导致任意语言下 `String.format` 抛 `MissingFormatArgumentException: Format specifier '%2$s'`，处理流程在"解包(2/5)"阶段即中断。已补齐文件数 / DEX 数 / 耗时三个实参
  - Flutter 汇总日志模板 `h_8d698916`（含 `%1$s/%2$s/%3$s` 三个占位符）调用时只传入 2 个参数，导致在"Flutter 处理(3.5/5)"阶段抛出 `Format specifier '%3$s'`。已补齐 libapp 数量 / 替换数 / 耗时三个实参
  - 两次问题均因模板占位符数量多于调用实参所致，现已用精确括号配平解析器全量核对所有 `getString` 调用与默认及 18 个语言目录的占位符数量，确认无其他实参不足的调用点

## [3.2] - 2026-08-22

### 新增
- 广告特征订阅源"添加订阅"支持第三种方式：直接粘贴广告特征配置 JSON 文本（以 `{` 开头，自动校验合法性），与口令、直链链接并列
- 添加订阅输入框支持多行滚动，方便粘贴完整配置内容

## [3.1] - 2026-08-19

### 修复
- 修复设置页"DEX字符串广告特征"问号按钮点击无反应的问题（补充缺失的帮助信息条目）

### 新增
- 启用 GitHub Discussions 讨论区，社区交流更便捷
- 配置 GitHub Pages 项目主页：https://sillycats.github.io/ApkAdRemoverEditor/
- 新增 release-drafter 自动生成更新日志：按 PR 标签分类生成结构化发布说明，发布时自动使用
- 配置 GitHub Actions 自动构建：push / PR 自动编译 Debug 与 Release 包，打 `v*` 标签自动发布 Release
- 补全开源文档：贡献指南、行为准则、安全政策、第三方许可声明、Issue / PR 模板
- 修正开源声明许可证信息，与 MIT License 保持一致并补全版权声明

## [3.0] - 2026-08-19

### 新增
- **MT 管理器式 KillerApplication 注入过签**：注入含 12 个内部类的钩子类为独立 DEX，改写 Application 父类，运行时反射回填原包签名，普通 / 原包双模式去除签名效验
- **过签 SO 智能注入**：自动识别目标 APK 的 ABI 架构，仅写入已存在的目录（arm64-v8a / armeabi-v7a 等）；无 lib 目录则全架构写入（含 x86 / x86_64）
- **钩子类名可自定义**：KillerApplication 名称自由修改，内置 12 个内部类基于 dexlib2 自动同步重命名，避免特征被检测
- **注入参数全面可自定义**：原包路径 / 解压路径 / So库名 / 钩子类名 / 签名信息 / 入口名称，留空自动读取真实值
- 移植开源项目 ApkDataMultiplexing，实现**数据复用优化**：过签包（如 LSPatch 产物）复用原包数据段，最多减小约 50% 体积
- **重命名嵌套 APK 识别**：原包被重命名为无后缀或任意后缀（如 `assets/base`、`assets/base.dat`）也能准确识别并复用优化
- **DEX 体积优化**：移除调试信息（行号/局部变量表/参数名），再减小 5%~15% 体积，不影响运行功能
- 优化后采用 **V2V3SchemeSigner 专用签名**，保证复用优化在签名后有效；失败自动回退常规签名
- 关于页面补全开源项目与参考代码信息、功能特性列表

### 变化
- 数据复用优化与常规签名流程整合，处理结果始终可安装
- 去除签名效验默认关闭，用户按需开启

## [2.6] - 2026-08-16

### 安全
- 修复 Zip 解包路径穿越漏洞（Zip Slip），杜绝恶意 APK 越界写文件
- 解压增加大小上限，防止恶意压缩包撑爆磁盘
- 修复十六进制解析越界、二进制读写边界校验
- 更新检查/公告弹窗增加安全判定，页面销毁后不再弹出

### 性能
- 大幅优化 APK 打包：大文件（.so/.png 等）改为一次性读取、边读边算 CRC，消除重复 I/O
- 大文件编辑（二进制/Smali）改为协程异步读写，告别主线程卡顿
- 更新包下载缓冲提升至 64KB，进度条 300ms 节流刷新
- 日志着色颜色预取 + 滚动节流；文件列表改用 DiffUtil 增量刷新

### 界面
- 修复暗色模式弹窗样式缺失
- 文件图标全面替换为统一风格自定义图标
- 屏幕常亮逻辑合并优化；完善可达性描述

## [2.3] - 更早版本

- 基础版本：一键去广告、解包、打包、签名、设置自定义广告特征等核心能力