HapeLee 2 mēneši atpakaļ
vecāks
revīzija
56d96de1ac
2 mainītis faili ar 11 papildinājumiem un 4 dzēšanām
  1. 6 3
      AGENTS.md
  2. 5 1
      CLAUDE.md

+ 6 - 3
AGENTS.md

@@ -172,9 +172,12 @@ KMP 任务名在模块实际创建后才存在;不要假装运行尚未定义
 ## 重要项目约束
 ## 重要项目约束
 
 
 - 不将 jsoup 升级到 1.16.2 以上;新版行为会影响 `AnalyzeByJSoup.kt` 与 JsoupXpath。
 - 不将 jsoup 升级到 1.16.2 以上;新版行为会影响 `AnalyzeByJSoup.kt` 与 JsoupXpath。
-- 应用代码不依赖 Hutool;Hutool 仅作为书源 JS 的运行时加密库保留在 classpath(书源会直接调用
-  `Packages.cn.hutool.*`),版本固定 5.8.22 勿升级。应用内部加密、编码与日期使用现有 JCA、
-  `java.time` 和 `help/crypto/CryptoUtils.kt` 路径,KMP 抽取时再通过能力契约替换 JVM API。
+- 应用代码仅在两处依赖 Hutool:①作为书源 JS 的运行时加密库保留在 classpath(书源直接调用
+  `Packages.cn.hutool.*`);②`help/crypto/CryptoUtils.kt` 的 base64 **解码**统一走
+  `cn.hutool.core.codec.Base64.decode`,以兼容缺 `=` 填充等宽松输入(Kotlin
+  `kotlin.io.encoding.Base64` 严格填充会导致部分书源取章名/正文回归)。版本固定 5.8.22 勿升级。
+  应用内部加密主体仍用现有 JCA(`javax.crypto`/`java.security`)与 `help/crypto` 路径,KMP 抽取时
+  再通过能力契约替换 JVM API。
 - 代码 namespace 为 `io.legado.app`,Android `applicationId` 为 `io.legato.kazusa`,不要混用。
 - 代码 namespace 为 `io.legado.app`,Android `applicationId` 为 `io.legato.kazusa`,不要混用。
 - 当前 minSdk 26、target/compile SDK 37;Release 启用 R8 与资源压缩,`noR8` 变体用于排障。
 - 当前 minSdk 26、target/compile SDK 37;Release 启用 R8 与资源压缩,`noR8` 变体用于排障。
 - Rhino 书源/RSS/TTS 规则、Android 服务、Web 服务和阅读器渲染属于高行为风险平台能力,迁移前必须建立兼容测试或
 - Rhino 书源/RSS/TTS 规则、Android 服务、Web 服务和阅读器渲染属于高行为风险平台能力,迁移前必须建立兼容测试或

+ 5 - 1
CLAUDE.md

@@ -368,7 +368,11 @@ Book sources, RSS sources, and HTTP TTS use JavaScript rules. `initRhino()` in `
 ## Important Constraints
 ## Important Constraints
 
 
 - **Do not update jsoup** beyond 1.16.2 — a breaking change in newer versions (see [jsoup#2017](https://github.com/jhy/jsoup/pull/2017)) affects `AnalyzeByJSoup.kt` and the JsoupXpath library
 - **Do not update jsoup** beyond 1.16.2 — a breaking change in newer versions (see [jsoup#2017](https://github.com/jhy/jsoup/pull/2017)) affects `AnalyzeByJSoup.kt` and the JsoupXpath library
-- Hutool dependency removed — crypto/编码/日期工具已替换为 JCA (`javax.crypto`/`java.security`) 与 `java.time`,新增内部工具在 `help/crypto/CryptoUtils.kt`
+- Hutool is back on the classpath at 5.8.22 (do not upgrade). Book-source JS calls it via
+  `Packages.cn.hutool.*`; app-internal **base64 decoding** in `help/crypto/CryptoUtils.kt` also
+  routes through `cn.hutool.core.codec.Base64.decode` for lenient input compatibility (Kotlin
+  `kotlin.io.encoding.Base64` is strict about `=` padding). App crypto otherwise uses JCA (
+  `javax.crypto`/`java.security`); new internal tools live in `help/crypto/CryptoUtils.kt`
 - Package name discrepancy: code namespace is `io.legado.app` but `applicationId` is `io.legato.kazusa`
 - Package name discrepancy: code namespace is `io.legado.app` but `applicationId` is `io.legato.kazusa`
 - Min SDK 26, target SDK 37, compile SDK 37
 - Min SDK 26, target SDK 37, compile SDK 37
 - Release builds enable R8 minification + resource shrinking; `noR8` variant disables both for crash debugging
 - Release builds enable R8 minification + resource shrinking; `noR8` variant disables both for crash debugging