## 1. 原生 Core 依赖接入

- [x] 1.1 插件 `android/build.gradle`：加 Maven 仓库 `https://jfrog.takuad.com/artifactory/china_sdk` + `flatDir { dirs 'libs' }`；对 Core 用 `compileOnly "com.anythink.sdk:core-taku:6.5.73.3"`
- [x] 1.2 example 宿主 `example/android/app/build.gradle`：用 `implementation`（或 api）引完整 Core（init 真跑需要），同样加 Maven 仓库
- [x] 1.3 编译确认 Core 符号可解析（`com.anythink.core.api.*` 不再报缺失）

## 2. L2 Codegen Spec 扩展（`src/specs/NativeATBridge.ts`）

- [x] 2.1 加 init 模块方法：`initAnyThinkSDK`、`start`、`getSDKVersionName`、`setLogEnabled`、`setChannelStr`、`setCustomDataDic`、`setPlacementCustomData`（参数为结构化对象，见 §下行格式）
- [x] 2.2 加 GDPR/调试：`getGDPRLevel`(Promise)、`setDataConsentSet`、`showGDPRConsentDialog`、`showDebuggerUI`、`putFilter`(filterSpec=object)、`removeFilters`
- [x] 2.3 加 `getConstants()`（暴露 8 callName）+ `addListener`/`removeListeners`（NativeEventEmitter 占位，不可省）

## 3. L3 Android — 初始化路由 `ATInitManager`

- [x] 3.1 创建 `android/.../init/ATInitManager.java`：路由 init / start / 日志 / 渠道 / customMap / GDPR / putFilter
- [x] 3.2 init 内调 `setSystemDevFragmentType("rn")`（os_fw=5）+ 日志双开（`ATSDK.setNetworkLogDebug` + `MsgTools.setLogDebug`，TAG `ATRNBridge`）
- [x] 3.3 未 init 调广告桥方法 → reject `SDK_NOT_INITIALIZED`（错误常量入 `Const`）

## 4. L3 Android — 事件发送 `ATReactNativeEventEmitter`

- [x] 4.1 创建 `android/.../event/ATReactNativeEventEmitter.java`：8 callName、统一 payload `{callbackName, placementID, extraDic, requestMessage}`
- [x] 4.2 **emit 一律主线程**：emit 前 `Looper.getMainLooper()` 兜底 `Handler(mainLooper).post`
- [x] 4.3 init 成功/失败经 `InitCallName` 发事件（本期至少这一条全链路）

## 5. 移植工具类 + 下行数据格式

- [x] 5.1 移植 `BridgeJsonMapUtil.java`（仅改包名 `com.anythink.reactnative.utils`，解析逻辑不动）
- [x] 5.2 写 `readableMapToJsonString` 工具（替代 Flutter `flutterMapToJsonString`）：复杂嵌套参数 `ReadableMap→JSON字符串→BridgeJsonMapUtil.*FromJson(str)`
- [x] 5.3 简单参数（customMap/extraDic）`ReadableMap→HashMap` 直转，不经 BridgeJsonMapUtil；`policyJson` 保持 string 透传

## 6. L1 TypeScript

- [x] 6.1 `src/core/ATSDK.ts`：init/start/getSDKVersionName、setNetworkLogDebug/isNetworkLogDebug、setChannel/initCustomMap/initPlacementCustomMap、getGDPRDataLevel/showGDPRConsentDialog、showDebuggerUI、putFilter/removeFilters（对外传结构化对象）
- [x] 6.2 `src/events/ATAdEvents.ts`：单例订阅 8 callName、按 placementID 分发到 setAdListener、payload 解析（extraDic/requestMessage→AdError）
- [x] 6.3 `src/constants/Const.ts`（callName/callbackName/错误码，与 Android `Const.java` 对齐）、`src/types/`（ATAdInfo/AdError/ATAdEventPayload）
- [x] 6.4 `src/index.tsx` 导出 `ATSDK` / `ATAdEvents`（替换 phase-0 占位）

## 7. iOS（本期仅 stub + 打 log，真实实现 iOS 同事后补）

- [x] 7.1 `ios/Classes/Init/ATInitManager.m`：init/日志/渠道/GDPR/putFilter 各方法**空实现 + NSLog 打 log**（证明路由通）
- [x] 7.2 `ios/Classes/ATReactNativeEventEmitter.m`：结构就位，sendCallback **必须保留 `if(![NSThread isMainThread]) dispatch_async(dispatch_get_main_queue())` 守护**
- [x] 7.3 `ATReactNativeBridge.mm` 路由各 init/event 方法到上述 stub；getSDKVersionName 接 stub
- [x] 7.4 iOS 仅需 `pod install` + 编译过 + 调用时 log 可见（不验真实 init）

## 8. Example

- [x] 8.1 `example/src/config/sdkConfig.ts`：appId=`a62b013be01931`、appKey=`c3d0d2a9a9d451b07e62b509659f7c97`、placement 与 app-china placementId.json 同源
- [x] 8.2 `example/src/managers/InitManager.ts`：顺序固定 setNetworkLogDebug → GlobalAdListeners.install → init
- [x] 8.3 `EventLogPanel`：至少打印一条 Init callback（格式 `[time] {placementId} | {callbackName} | {payload}`）

## 9. 验证（双端编译 + 链路 + 单测）

- [x] 9.1 Android：`yarn example android` 编译绿、init 无 crash、logcat 见 `ATRNBridge` + Init callback（P1-F01/F02/F06）
- [ ] 9.2 os_fw=5 抓包确认（P1-F05）；getSDKVersionName 返回真实版本（P1-F03）
- [x] 9.3 iOS：`pod install` + `yarn example ios` 编译过、调用时 NSLog 路由可见（P1 iOS 范围）
- [x] 9.4 单测：`ATAdEvents` Init payload 分发（P1-Q02）、行覆盖 ≥80%（P1-Q04）、TurboModule mock initAnyThinkSDK 参数（P1-Q01）
- [x] 9.5 增量质量门禁：prettier + tsc + android compile + sync-const-check（P1-Q05）
- [x] 9.6 对照验收 §四 P1-F/D/Q/C 逐条 ✓；更新实施规范 §十二 Phase 1 → ✅
