将飞牛中将相册备份到 Google相册

介绍

基于 Google Photos Uploader 二次修改,新增本地原文件不会被删除支持排除指定子目录等功能。

链路: 手机 -> 上传飞牛 -> 上传 Google 相册。可达到不占用 Google相册空间,实现原画备份。

配置

docker-compose 配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
services:
gphotos-uploader-custom:
image: my-gphotos-uploader:latest
container_name: gphotos-uploader
network_mode: "container:openwrt"
restart: unless-stopped
environment:
- WATCHED_FOLDER=/data
# androidId= 开头的 AUTH_DATA
- AUTH_DATA=androidId=...
# 例如:排除 NAS 的回收站、缩略图文件夹、以及名为 RAW 的原片文件夹
- EXCLUDE_FOLDERS=@Recycle,#recycle,@eaDir,thumb,RAW,Temporary
# 设置代理(可选项)
- http_proxy=http://Clash:密码@127.0.0.1:7893
- https_proxy=http://Clash:密码@127.0.0.1:7893
volumes:
# 将飞牛本地的照片目录挂载到容器的 /data
- /vol1/1000/照片:/data

详情可参考:rexyan/Google-Photos-Uploader

获取 AUTH DATA

比较麻烦的是如何获取 AUTH_DATA,并且有一些坑

软件准备

需要准备两个 APK:

1
app.revanced.android.gms-250932006-user-signed.apk

以及 Morphe patched Google Photos:

1
google-photos-arm64-v8a-morphe-patches-v7.78.0.920664585.apk

这里建议使用 Morphe 7.78.0.920664585

之前尝试:googlephotos-revanced-v7.88.0.964383857-all.apk 虽然能够安装运行,但实际抓日志时只有:userinfo.profile 没有出现:photos.native 因此不适合这一套 AUTH_DATA 获取方法。

还需要准备一个安卓模拟器。

全部的安装包在:Release 模拟器以及apk文件 · rexyan/Google-Photos-Uploader

安装 BlueStacks 使用 Android 13

17878086972081787808696252.png

BlueStacks Android 版本要求

打开:

1
BlueStacks Multi-instance Manager

创建:

1
2
3
Fresh instance
→ Android 13
→ 64-bit

推荐配置:

1
2
CPU:4 核
内存:4GB 或以上

创建并启动新实例。

安装 gms 和 google photos

17878087402091787808739690.png

17878087762141787808776187.png

在模拟器的 Android 13 环境中安装 gms 和 google photos。并且在设置中开启 ADB 调试

进入:

1
C:\Program Files\BlueStacks_nxt

执行:

1
.\HD-Adb.exe devices

如果新实例对应端口是:

1
127.0.0.1:5556

可以手动连接:

1
.\HD-Adb.exe connect 127.0.0.1:5556

然后确认 Android 版本:

1
.\HD-Adb.exe -s 127.0.0.1:5556 shell getprop ro.build.version.release

应该返回 13

抓取日志

建议先清空日志:

1
.\HD-Adb.exe -s 127.0.0.1:5556 logcat -c

然后监听:

1
.\HD-Adb.exe -s 127.0.0.1:5556 logcat | FINDSTR /I "photos.native"

不要关闭这个窗口。

如果想看更完整的认证过程,也可以另外开一个 CMD:

1
.\HD-Adb.exe -s 127.0.0.1:5556 logcat | FINDSTR /I "GmsHttpFormClient"

登录 Google 账号

打开 BlueStacks 中的 microG Limited Services,如果已经登录过 Google 账号,建议先删除。然后打开 Google Photos / 相簿。重新添加 Google 账号。登录完成后,可以进入 Google Photos → 设置 → 备份。等待几秒。

注意: 如果网络无法联通,只需在 Windows 上使用 Clash Verge 等软件,然后开启 Tun 模式即可。

获取 AUTH DATA

成功后会看到类似:

1
2
3
4
GmsAuthManagerSvc: getToken:
scope:oauth2:openid
https://www.googleapis.com/auth/mobileapps.native
https://www.googleapis.com/auth/photos.native

更重要的是会出现:

1
GmsHttpFormClient: androidId=...

例如结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
androidId=xxxxxxxxxxxxxxxx
&app=com.google.android.apps.photos
&client_sig=...
&callerPkg=com.google.android.apps.photos
&callerSig=...
&device_country=tw
&Email=...
&google_play_services_version=250932000
&lang=zh_TW_%23Hant
&oauth2_foreground=1
&operatorCountry=tw
&sdk_version=33
&service=oauth2%3Aopenid%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fmobileapps.native%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fphotos.native
&source=android
&Token=...

同时还能看到:

1
grantedScopes=https://www.googleapis.com/auth/photos.native ...

这说明 photos.native scope 已经成功获取。

只复制从 androidId= 开始,一直到 Token=… 结束的整串内容。也就是说 AUTH_DATA 应该是:

1
androidId=...&app=com.google.android.apps.photos&...&service=...photos.native&source=android&Token=...

效果

17878064062081787806405734.png

17878066532071787806652856.png

17878089232081787808922710.png

可以看到已经使用原始画质进行备份,且此内容不会占用账号存储空间。