Known Issues / 风险登记

May 21, 2026 · View on GitHub

表格按"严重度(P0/P1/P2)"排序;解决后移到底部"已关闭"区。

Open

ID严重度描述出现版本缓解负责人计划修复
KI-001P2react-native-htmlview@0.16.0 仍依赖 deprecated PropTypes,需要 patches/ 兜底0.80.x → 0.85.0(沿用)patches 修补TBD后续替换为 react-native-render-html
KI-002P2@react-native-community/masked-view 已不再维护,社区推荐迁移到 @react-native-masked-view/masked-view0.80.x → 0.85.0(沿用)当前 patches 兼容TBD与 React Navigation v7 迁移合并执行
KI-003P2react-native-i18n 走自建 fork,未来维护风险高long-term沿用 forkTBD评估迁移到 react-i18next 单一栈
KI-004P1RN 0.85.3 是最新 patch 但发布 < 15 天(红线),本轮升级取 0.85.0;待 0.85.3 满 15 天(约 2026-05-29 之后)再做 patch 升级0.85.xRFC §1.1.4 例外流程;正常等冷却期AI/Owner2026-05-29 后评估 0.85.3
KI-005P2RN 0.85 推荐 Java 17 + Kotlin 2.1,已同步升级 build.gradle / app/build.gradle;本机 JDK 必须 ≥ 17 才能构建 Android(本机 OpenJDK 21 满足)0.85.0CI / 开发机统一 JDK 17+TBD文档已写入 upgrade-rn.md
KI-015P2RN 模板自带 tests/App-test.js 整 App 树渲染在 RN 0.85 + 项目三方栈(drawer-layout / i18n / root-toast / htmlview / lottie 等)下需要堆十几个 ESM transformIgnore 例外 + native module mock 才能 jest renderer.create(),性价比低。已 it.skip 并改用 Metro bundle smoke + Android 模拟器实跑 + utils/dao/store 单测等价覆盖。0.85.0跳过该 suite;其他 26 个单测全绿TBD下一轮按需引入 RNTL 重写为组件级测试
KI-017P2scripts/check-package-age.jsgit+https://... / URL / file: 形式的依赖一律返回 null → status skip,覆盖了 package.json 里 3 个 fork 的 git 依赖(react-native-i18n / react-native-spinkit-fix-new / react-native-version-number-fix-new),15 天冷却红线对它们形同虚设。同时 execSync('npm view ...') 用 shell 字符串拼接,遇到 >=1.0.0 <2.0.0 这种含空格的复合 range 会被 shell 解析错乱。0.85.0当前 3 个 git 依赖均为长期托管 fork,短期内不动;其它依赖均为 exact / ^semver 形态,不命中危险 rangeTBDexecFileSync 数组形式 + git+ 来源走 GitHub API commit author date 兜底
KI-018P3仓库根 build.gradleandroid/init.gradle 都声明了 aliyun mirror,存在重复定义;init.gradle 没有被任何脚本(如 scripts/use-node.sh)默认通过 --init-script 注入,需要开发者手动 ./gradlew --init-script android/init.gradle <task> 才能生效0.85.0当前 build.gradle 内的 aliyun mirror 已经覆盖主链路;init.gradle 仅作可选兜底TBD二选一:要么删掉 init.gradle,要么写到 gradle.properties org.gradle.daemon.idletimeout 旁的 --init-script 默认注入脚本
KI-020P3.github/workflows/ci.yml 的 Build job 与 Generate APK job 都跑 npx react-native build-android --mode=release,RN 0.85 默认走 bundleRelease(不触发 verifyReleaseResources),所以 patch 损坏 / lib 资源问题在 bundle 路径下被静默吞掉,只有 release 路径下 assembleRelease 才报错。建议把 Build job 也改成跑 :app:assembleRelease 或追加一步 :react-native-spinkit-fix-new:verifyReleaseResources :react-native-version-number-fix-new:verifyReleaseResources 强制覆盖0.85.0暂用本地 assembleRelease 在发版前做闸口;KI-019 修复后两条线一致TBD后续把 CI 步骤合并 / 加 verifyReleaseResources 显式调用
KI-021P1android/build.gradlebuildscript.repositories / allprojects.repositoriesmaven.aliyun.com 镜像放在 google() / mavenCentral() 之前,GitHub Actions runner 在境外访问 aliyun CDN 偶发 502 Bad Gateway(CI run 26210555137 实证:Could not resolve com.google.code.gson:gson:2.11.0Received status code 502,叠加 68 个相同失败)。aliyun 一旦 502,Gradle 不会自动 fallback 到下一个 repo,导致整个构建挂掉0.85.0已修复:把 google() / mavenCentral() 提到 aliyun 之前作为主源,aliyun 镜像降级为国内开发机的兜底/加速。境外 CI runner 走官方源、国内开发机仍能命中 aliyun 缓存AI2026-05-21

Closed

ID严重度描述关闭版本关闭原因关闭日期
KI-006P0RN 0.85 / Metro 0.84 要求 Node ≥ 20(Array.prototype.toReversed 等 ES2023)0.85.0已通过项目级 Node 隔离方案解决:.nvmrc(20.19.4)+ package.json#engines + .npmrc engine-strict=true + scripts/use-node.sh(用 n exec 注入子进程 PATH,不动全局)。实测:项目内 npm run node:check → v20.19.4,npm run bundle:android:smoke → 4.7MB bundle ✔,npm run bundle:ios:smoke → 4.7MB bundle ✔;DevEco-Studio 内嵌 node 18 完全不受影响。进一步@react-native-community/cli@20.1.3 engines >=20.19.4,所以 .nvmrc 从 20.18.1 升到 20.19.4。2026-05-21
KI-007P1已通过 Metro bundle:android:smoke / bundle:ios:smoke 双产物(各 4.7MB)端到端验证 JS 依赖图 + RN 0.85 + react 19.2.3 在 production 模式下能完整 transform。Android 原生层已实测:模拟器 Pixel_7 / API 36 / arm64-v8a 上 ./gradlew assembleDebug 成功(676 task,APK 219MB),adb install + monkey 启动后 Running "GSYGithubApp" {fabric:true},登录页 OAuth 入口正常渲染。0.85.0Android 实跑通过2026-05-21
KI-008P0RN 0.85 二进制 ABI 静默 breaking 1com.facebook.react.views.text.TextAttributeProps.UNSET 在 Kotlin 2.1.20 K2 编译器中无法被 import TextAttributeProps.UNSET(companion 成员直接 import)解析;命中 lottie-react-native@7.3.0LottieAnimationViewPropertyManager.kt:230.85.0已用 patches/lottie-react-native+7.3.0.patch 修复:把 import 改为 com.facebook.react.common.ReactConstants.UNSET(在 ReactConstants.kt:20 定义为 -1,与原值等价)。第八轮构建实测过 ✓2026-05-21
KI-014P2iOS smoke:pod install 一次跑通 93 pods(hermes-engine / RNReanimated 4.3 / RNScreens 4.24 / RNGestureHandler 2.31 / RNWorklets 0.8.3),xcodebuild Debug-iphonesimulator BUILD SUCCEEDED(修掉 project.pbxproj 残留的 -fmodule-map-file=DoubleConversion.modulemap 等老式 OTHER_CFLAGS / libDoubleConversion.a 死引用)。xcrun simctl install + simctl launch 起来 → WelcomePage → MainTabs / DynamicPage 正常渲染 GitHub received_events FlatList,token 登录链路 E2E 与 Android 等价闭环。0.85.0iOS 端实跑通过(fabric:true);DynamicPage 渲染 8 条动态卡片成功(截图 /tmp/ios_smoke_main.png 实证)2026-05-21
KI-016P1iOS Debug build 启动 SIGSEGV @ NULL:crash report 第 8 线程栈定位为 -[RealmReactModule injectModuleIntoJSGlobal] + 160facebook::jsi::Object::Object(facebook::jsi::Runtime&) + 32。根因:realm@20.1.0 / binding/apple/RealmReactModule.mm:67-69 写法 auto &rt = *static_cast<facebook::jsi::Runtime *>(bridge.runtime); 在 RN 0.85 + NEW_ARCH (bridgeless) 下 [RCTBridge currentBridge] 返回 nil,*static_cast<...>(nil) → 段错。0.85.0根因升级关闭(v5.0.1):升级 realm 20.1.0 → 20.2.0(ADR-0004),realm 20.2.0 #7029 把 ObjC RealmReactModule.mm 取 bridge.runtime 的逻辑整体改为 pure C++ TurboModule,bridgeless 下不再走 [RCTBridge currentBridge] → 段错根除。删 patches/realm+20.1.0.patch 防御性绷带,app/dao/db/index.js 从 lazy require + 双层 noop 简化为正常 import Realm from 'realm' + 单层 try/catch logger.warn。Android emulator 装机实测 logcat Realm: setDefaultRealmFileDirectory + Absolute path: /data/data/com.gsygithubapp/files、pid alive、0 fatal ✓2026-05-21
KI-009P0RN 0.85 二进制 ABI 静默 breaking 2:RN 0.85 把 hermes-engine prefab 模块从 libhermes 改名为 hermesvm(见 hermes-engine/build.gradle.kts:441)。react-native-worklets@0.4.1 link hermes-engine::libhermes 失败0.85.0升级 worklets 0.4.1 → 0.8.3(2026-05-04,已满冷却 ✓) + reanimated 4.0.1 → 4.3.0(2026-03-25 ✓)。worklets 0.8.3 自身条件兼容 hermesvm/libhermes。第八轮构建实测过 ✓2026-05-21
KI-010P0RN 0.85 二进制 ABI 静默 breaking 3facebook::react::ShadowNode::Shared 类型不再公开导出(YogaLayoutableShadowNode::Shared 仍在)。react-native-screens@4.13.1 的 C++ 头文件用了 ShadowNode::Shared0.85.0升级 screens 4.13.1 → 4.24.0(2026-02-23,满 87 天 ✓)。第八轮构建实测过 ✓2026-05-21
KI-011P0RN 0.85 二进制 ABI 静默 breaking 4shadowNodeFromValue 的返回类型从 std::shared_ptr<const ShadowNode> 改为 std::vector<std::shared_ptr<const ShadowNode>>react-native-gesture-handler@2.27.2cpp-adapter.cpp 在新类型上调用 getTraits() / getComponentName() 失败0.85.0升级 gesture-handler 2.27.2 → 2.31.2(2026-05-04,满冷却 ✓)。第八轮构建实测过 ✓2026-05-21
KI-012P0React 版本错配:RN 0.85.0 内部 react-native-renderer 锁定 19.2.3,但 package.json 声明 react: 19.2.5,运行时报 Incompatible React versions + TypeError: Cannot read property 'default' of undefined at PanGestureHandler 红屏0.85.0package.jsonreact / react-test-renderer 从 19.2.5 降到 19.2.3,跟 RN 0.85.0 内置 renderer 对齐。Metro reset cache 后实测 Running "GSYGithubApp" {fabric:true} ✓,登录页正常渲染2026-05-21
KI-019P0patch-package 双重静默失效patches/react-native-spinkit-fix-new+1.1.4.patchpatches/react-native-version-number-fix-new+0.3.6.patch 同时存在两个 bug:(a) 早期手写 patch 头部为 --- a/x.orig +++ a/x(应为 --- a/x +++ a/x),patch-package 找不到 .orig 文件 静默 skip 不报错;(b) 用 npx patch-package <pkg> 重新生成时,因 node_modules 子目录里堆了 android/build/.transforms/ / bundleLib*Dex/ 等 Gradle 中间产物,被 patch-package 当成 "新文件" 全量打入 patch,单 patch 体积膨胀到 ~4.8MB / 5.4 万行,CI 干净环境 npm install 后 patch-package apply 失败bundleReleaseassembleRelease 双线挂掉)。本机有缓存 build/ 时反而能通过,制造 "本地通过 / CI 失败" 假象0.85.0双修:(1) 头部 --- a/x 路径正确;(2) 重新生成 patch 前先 rm -rf node_modules/<pkg>/android/build 清掉构建产物,再 npx patch-package <pkg>。修复后 spinkit patch 4.8MB→2KB、version-number-fix-new 4.8MB→1.4KB。grep -l '\.orig' patches/*.patch → 0 命中、grep -l '\.transforms' patches/*.patch → 0 命中。本地 rm -rf node_modules && bash scripts/use-node.sh npm install 全新 install + npx react-native build-android --mode=release BUILD SUCCESSFUL 3m10s ✓2026-05-21
KI-022P0AGP 8.x namespace 与 Java 实际 package 错配:v5.0.0 第三次 CI run(commit c72e34cGenerate APK 阶段失败:PackageList.java:87: error: cannot find symbol class RNVersionNumberPackage location: package com.reactnativeversioncheck。根因:patches/react-native-version-number-fix-new+0.3.6.patch 在为 AGP 8.x 加上 namespace "com.reactnativeversioncheck"时拍脑袋取了一个新 namespace,但 node_modules/react-native-version-number-fix-new/android/src/main/java/com/apsl/versionnumber/RNVersionNumberPackage.java 第 1 行 package com.apsl.versionnumber; 才是真实 Java package。RN autolinking 在 PackageList.java 生成 import com.reactnativeversioncheck.RNVersionNumberPackage; 时按 namespace 推断 import 路径 → 编译期找不到符号。本地 build/ 缓存有旧 PackageList.java 时反而误通过 → "本地通过 / CI 失败"假象再次出现。属于 KI-019 复盘后第 4 个 patch-package 暗坑。0.85.0patches/react-native-version-number-fix-new+0.3.6.patch 把 namespace 改回 com.apsl.versionnumber(与 Java 实际 package 一致)。同时 sanity check spinkit:patches/react-native-spinkit-fix-new+1.1.4.patch namespace com.react.rnspinkitRNSpinkitPackage.java 实际 package 一致 ✓。rm -rf node_modules && bash scripts/use-node.sh npm install + cd android && ./gradlew clean assembleRelease BUILD SUCCESSFUL in 2m51s,APK 42MB versionName 5.0.0,emulator 装机 pid alive / 0 fatal logcat / 登录页正常渲染(/tmp/gsy_release_v5_login.png)。同时把 checklist.md §8.1 加 namespace ↔ Java package 一致校验闸口2026-05-21
KI-013P2Android 15+/16 (API 35+/36) 模拟器首启弹 This app isn't 16 KB compatible. ELF alignment check failed. 系统对话框;点 OK 后系统用 page-size 兼容模式跑,不影响功能精确根因(v5.0.0 实测)unzip -j app-release.apk 'lib/arm64-v8a/*.so' + NDK llvm-readelf -lW <so> | grep LOAD 校验 18 个 .so 的 LOAD segment Align —— 17 个 .so(RN 自身 + reanimated/gesture/screens/spinkit/hermes/fbjni/...)全部 Align=0x4000 (16KB) ✅,librealm.so 一个 Align=0x1000 (4KB) ❌ —— realm@20.1.0 是当前唯一不合规 .so,realm 20.x 没在它的 ndk-build/CMake 里加 -Wl,-z,max-page-size=163840.85.0根因升级关闭(v5.0.1):升级 realm 20.1.0 → 20.2.0(ADR-0004),realm 20.2.0 #7019 在 ndk-build / CMake 里加 -Wl,-z,max-page-size=16384 → 出厂 librealm.so LOAD Align 直接 0x4000(16KB)。本地 cd android && ./gradlew assembleRelease BUILD SUCCESSFUL 9s,llvm-readelf -lW lib/arm64-v8a/librealm.so | grep LOAD 三段全 0x4000 ✓;APK 内 18/18 .so 全部 16KB 合规、0 BAD ✓。emulator 装机后无 16KB 系统对话框、无 fatal、realm 默认目录正常初始化 ✓2026-05-21