将红米K40s手机上的照片、视频、截图、微信媒体等文件自动同步到你的 Azure Blob Storage 账户。
- 📷 自动同步 — 定时扫描新照片/视频并上传到 Azure
- 🔄 手动同步 — 一键触发全量同步(忽略网络限制)
- 📁 Storage Explorer 友好 — 保留手机原始目录结构,方便在电脑上浏览
- 🔒 安全存储 — SAS Token 使用 Android Keystore 加密存储
- 📶 智能网络策略 — WiFi 同步全部,移动数据仅小文件
- 🔋 MIUI 适配 — 引导关闭电池优化、开启自启动
在 Azure Storage Explorer 中看到的结构:
你的容器/
├── DCIM/
│ └── Camera/
│ ├── IMG_20260424_135328.jpg
│ └── IMG_20260424_140521.jpg
├── Pictures/
│ ├── Screenshots/
│ │ └── Screenshot_xxx.png
│ └── WeiXin/
│ └── mmexport_xxx.jpg
├── Download/
│ └── document.pdf
└── Movies/
└── VID_xxx.mp4
- 登录 Azure Portal (fefjiang@live.com)
- 创建存储账户(或使用已有的):
- 名称: 如
fefjiangbackup - 区域: 就近选择(如 East Asia)
- 冗余: LRS(本地冗余,最便宜)
- 访问层: Hot 或 Cool(Cool 更便宜,适合备份)
- 名称: 如
- 在存储账户中创建 Blob 容器:
- 名称: 如
phone-backup - 访问级别: Private
- 名称: 如
- 进入 Blob 容器 → 共享访问令牌
- 配置:
- 权限: 勾选
Read、Create、Write、Delete、List - 开始时间: 现在
- 过期时间: 建议 1 年
- 允许的协议: 仅 HTTPS
- 权限: 勾选
- 点击「生成 SAS 令牌和 URL」
- 复制 Blob SAS URL(格式:
https://xxx.blob.core.windows.net/phone-backup?sp=rcwdl&st=...&sig=...)
- 用 Android Studio 打开本项目
- 连接手机,运行
app模块 - 或者执行:
./gradlew assembleDebug生成 APK 安装
若要构建签名后的 release APK,请通过 Gradle 属性或环境变量提供签名信息:
RELEASE_STORE_FILERELEASE_STORE_PASSWORDRELEASE_KEY_ALIASRELEASE_KEY_PASSWORD
示例:
./gradlew assembleRelease \
-PRELEASE_STORE_FILE=release.jks \
-PRELEASE_STORE_PASSWORD=*** \
-PRELEASE_KEY_ALIAS=*** \
-PRELEASE_KEY_PASSWORD=***- 打开 PhotoSync → 设置
- 粘贴上一步的 SAS URL
- 点击「测试连接」确认成功
- 调整同步策略(间隔、网络条件、文件类型)
- 红米用户: 点击「电池优化」和「自启动管理」进行设置
| 组件 | 技术 |
|---|---|
| UI | Jetpack Compose + Material3 |
| 后台同步 | WorkManager + setForeground() |
| 文件发现 | MediaStore API (Scoped Storage 兼容) |
| Azure 上传 | OkHttp + Azure Blob REST API |
| 本地数据库 | Room (同步状态追踪) |
| 加密存储 | EncryptedSharedPreferences |
| 设置 | DataStore Preferences |
| 网络状态 | 自动同步 | 手动同步 |
|---|---|---|
| WiFi | ✅ 全部文件 | ✅ 全部文件 |
| 移动数据 | ✅ 全部文件 | |
| 无网络 | ❌ 跳过 | ❌ 跳过 |
由于 Android 沙箱机制,本应用无法访问微信的私有数据(聊天记录数据库等)。 可以同步的是微信保存到公共存储的媒体文件(如保存到相册的图片/视频)。
完整微信聊天记录备份建议使用微信自带的「聊天记录迁移与备份」功能。
- Android Studio Ladybug 或更新版本
- JDK 17
- Android SDK 35
MIT