Skip to content

Latest commit

 

History

History
128 lines (97 loc) · 3.85 KB

File metadata and controls

128 lines (97 loc) · 3.85 KB

PhotoSync - Android 手机备份到 Azure Blob Storage

将红米K40s手机上的照片、视频、截图、微信媒体等文件自动同步到你的 Azure Blob Storage 账户。

功能特性

  • 📷 自动同步 — 定时扫描新照片/视频并上传到 Azure
  • 🔄 手动同步 — 一键触发全量同步(忽略网络限制)
  • 📁 Storage Explorer 友好 — 保留手机原始目录结构,方便在电脑上浏览
  • 🔒 安全存储 — SAS Token 使用 Android Keystore 加密存储
  • 📶 智能网络策略 — WiFi 同步全部,移动数据仅小文件
  • 🔋 MIUI 适配 — 引导关闭电池优化、开启自启动

Azure Blob 中的目录结构

在 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

快速开始

1. 创建 Azure 存储

  1. 登录 Azure Portal (fefjiang@live.com)
  2. 创建存储账户(或使用已有的):
    • 名称: 如 fefjiangbackup
    • 区域: 就近选择(如 East Asia)
    • 冗余: LRS(本地冗余,最便宜)
    • 访问层: Hot 或 Cool(Cool 更便宜,适合备份)
  3. 在存储账户中创建 Blob 容器:
    • 名称: 如 phone-backup
    • 访问级别: Private

2. 生成 SAS Token

  1. 进入 Blob 容器 → 共享访问令牌
  2. 配置:
    • 权限: 勾选 ReadCreateWriteDeleteList
    • 开始时间: 现在
    • 过期时间: 建议 1 年
    • 允许的协议: 仅 HTTPS
  3. 点击「生成 SAS 令牌和 URL」
  4. 复制 Blob SAS URL(格式: https://xxx.blob.core.windows.net/phone-backup?sp=rcwdl&st=...&sig=...

3. 安装应用

  1. 用 Android Studio 打开本项目
  2. 连接手机,运行 app 模块
  3. 或者执行: ./gradlew assembleDebug 生成 APK 安装

3.1 发布版签名(可选)

若要构建签名后的 release APK,请通过 Gradle 属性或环境变量提供签名信息:

  • RELEASE_STORE_FILE
  • RELEASE_STORE_PASSWORD
  • RELEASE_KEY_ALIAS
  • RELEASE_KEY_PASSWORD

示例:

./gradlew assembleRelease \
  -PRELEASE_STORE_FILE=release.jks \
  -PRELEASE_STORE_PASSWORD=*** \
  -PRELEASE_KEY_ALIAS=*** \
  -PRELEASE_KEY_PASSWORD=***

4. 配置应用

  1. 打开 PhotoSync → 设置
  2. 粘贴上一步的 SAS URL
  3. 点击「测试连接」确认成功
  4. 调整同步策略(间隔、网络条件、文件类型)
  5. 红米用户: 点击「电池优化」和「自启动管理」进行设置

技术架构

组件 技术
UI Jetpack Compose + Material3
后台同步 WorkManager + setForeground()
文件发现 MediaStore API (Scoped Storage 兼容)
Azure 上传 OkHttp + Azure Blob REST API
本地数据库 Room (同步状态追踪)
加密存储 EncryptedSharedPreferences
设置 DataStore Preferences

同步策略

网络状态 自动同步 手动同步
WiFi ✅ 全部文件 ✅ 全部文件
移动数据 ⚠️ 仅 ≤5MB ✅ 全部文件
无网络 ❌ 跳过 ❌ 跳过

关于微信数据

由于 Android 沙箱机制,本应用无法访问微信的私有数据(聊天记录数据库等)。 可以同步的是微信保存到公共存储的媒体文件(如保存到相册的图片/视频)。

完整微信聊天记录备份建议使用微信自带的「聊天记录迁移与备份」功能。

编译要求

  • Android Studio Ladybug 或更新版本
  • JDK 17
  • Android SDK 35

License

MIT