From 6e8fb52d1aa8ca0533f970d5b72eaefa12d47037 Mon Sep 17 00:00:00 2001 From: Song <168455@qq.com> Date: Mon, 6 Jul 2026 19:35:55 +0800 Subject: [PATCH] Add README --- README.md | 121 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..65671d5 --- /dev/null +++ b/README.md @@ -0,0 +1,121 @@ +# a2i + +把安卓手机上的通知(短信、验证码、微信、QQ、Telegram 等)实时转发到 iOS,通过 [Bark](https://github.com/Finb/Bark) 推送到 iPhone / iPad。在 iOS 上点击通知,还能一键跳转到对应的 App。 + +适用于把主力安卓机的消息同步到 iOS 设备,不漏验证码、不漏重要聊天。 + +## 主要功能 + +- **系统级通知监听**:接入 Android 通知监听服务,覆盖所有发出通知的 App。 +- **Bark 推送**:支持官方 Bark 服务和自建 Bark Server,可保存多个服务器并随时切换。 +- **验证码自动提取**:自动识别通知中的验证码,收到即复制,也可点击复制。 +- **通知优化**: + - 广告关键词过滤(内置 + 自定义) + - 持续性通知过滤(音乐、下载、通话等 ongoing) + - 内容脱敏与去重 + - 微信 / QQ / Telegram 专项优化(发送者作标题、按会话分组、重要消息提级、跳转 iOS 对应 App) +- **应用级规则**:黑名单 / 白名单两种模式,可按 App 单独控制是否转发。 +- **失败自动重试**:发送失败的通知进入待重发队列,由 WorkManager 定期重试,也可手动触发。 +- **本地日志**:保留最近 300 条处理记录,方便排查为什么某条通知被过滤或发送失败。 +- **图标导出**:一键导出已安装 App 的图标,便于部署到 Bark 图床,让通知带上来源图标。 + +## 快速开始 + +### 1. 安装 + +从 [Releases](../../releases) 下载最新 APK,安装到安卓手机(需 Android 14 / API 34 及以上)。 + +### 2. 配置 Bark + +1. 在 iOS 上安装 [Bark](https://apps.apple.com/us/app/bark-customed-push/id1613210986)。 +2. 打开 Bark,复制你的专属推送地址,形如 `https://api.day.app/你的Key`。 +3. 在 a2i 的「设置」中添加服务器: + - 名称:随意,例如「我的 iPhone」 + - 服务器地址:`https://api.day.app`(自建则填自建地址) + - Device Key:Bark 地址中的那段 Key + +### 3. 授权通知监听 + +打开 a2i,首页会提示「需要授权通知监听」。点击「前往系统授权」,在系统的通知访问设置中开启 a2i。 + +> 授权是一次性的,卸载后重新安装需要再次授权。 + +### 4. 开启转发 + +回到首页,打开「通知转发」开关。此时安卓收到的通知就会按规则推送到 iOS。 + +## 使用建议 + +- **只想收验证码**:进入「过滤」页,开启「验证码自动提取」,把「广告过滤」等按需开启;再到「应用」页切到白名单模式,只勾选短信类 App。 +- **想同步聊天**:保持黑名单模式(默认),在「过滤」页开启「微信 / QQ / Telegram 优化」。 +- **通知没推过来**:先看「日志」页,每条通知(无论转发、过滤还是失败)都会记录原因。 +- **想让通知带图标**:参考下方「应用图标」一节。 + +## 应用图标 + +Bark 的 `icon` 字段需要一个公网可访问的图片 URL。a2i 支持把已安装 App 的图标批量导出到你选择的目录,方便上传到你自己的图床。 + +规则:转发时 `icon = 图标 URL 前缀 + 安卓包名 + .png`。在「设置 → 应用图标」里: + +1. 填写图标 URL 前缀,例如 `https://你的图床域名/icons/`。 +2. 选择一个目录,点「导出图标」,会把所有 App 图标以 `包名.png` 的形式导出。 +3. 把导出的图片上传到你的图床对应目录。 + +留空前缀则不显示图标。 + +## 技术栈 + +- Kotlin + Jetpack Compose(Material 3) +- AndroidX DataStore(持久化设置与日志) +- OkHttp(Bark 推送) +- WorkManager(失败重试) +- Navigation Compose(单 Activity 多页面) +- 最低 Android 14(API 34),目标 Android 16(API 36) + +## 本地构建 + +需要 JDK 17 和 Android SDK。 + +```bash +# 设置环境变量(按你的安装路径) +export JAVA_HOME=/path/to/jdk-17 +export ANDROID_HOME=/path/to/android-sdk + +# 构建 debug APK +./gradlew assembleDebug + +# 构建可分发的 release APK +./gradlew assembleRelease +``` + +产物位置: + +- debug:`app/build/outputs/apk/debug/app-debug.apk` +- release:`app/build/outputs/apk/release/app-release.apk` + +安装到已连接的设备: + +```bash +adb install -r app/build/outputs/apk/release/app-release.apk +``` + +## 工作原理 + +``` +Android 系统通知 + └─ NotifyListenerService 接收 + └─ NotificationProcessor 处理流水线 + ├─ 全局开关 / ongoing 过滤 / 黑白名单 + ├─ 空内容、脱敏、噪音、系统状态过滤 + ├─ 广告关键词过滤 + ├─ 去重(5 秒窗口) + ├─ 验证码提取 + └─ 微信 / QQ / Telegram 专项解析 + └─ BarkClient 推送到 Bark Server + └─ 失败 → 待重发队列 → RetryWorker 定期重试 + └─ 写入本地日志(最近 300 条) +``` + +## License + +本项目仅供个人使用。 \ No newline at end of file