Skip to content

Repository files navigation

Super Drag(抖音 / 小红书 / 小黑盒超级拖放原型)

中文 | English

在抖音、小红书或小黑盒的可见视频/图片上原地长按,拖入右侧“保存”区即可保存当前画面。作品标题/正文或评论文字可拖到“复制”,也可拖到“存图”生成白底黑字图片;评论配图拖到“保存”。

这是 Root + Zygisk/Vector 模块方案。它优先在目标 App 进程内部读取真正的 TextureView / ImageView / SurfaceView;播放器 Surface 没有可读 Buffer 时,才由 Super Drag 自己的 root 桥截取合成画面、临时隐藏上层 UI 并按播放器区域裁剪。

已实现的最小链路

长按内容 → 取消原生长按 → 识别作品文案/视频帧/主图/评论文字/评论图片 → 显示右侧操作区 → 同指拖入并松手 → 保存、复制或生成文字图片

环节 实现
注入 libxposed API 102;作用域为抖音、小红书、小黑盒三个包
手势 Hook Activity.dispatchTouchEvent;小红书静止 300 ms、其余 400 ms 触发,移动超过 slop 则取消
作品文案 识别抖音正文、小红书标题/正文、小黑盒标题/正文,可复制或保存为白底黑字图片
评论文字 按各 App 的评论列表/正文结构识别,可复制或保存为白底黑字图片
评论图片 识别评论列表内的大图/表情,过滤小头像,直接读取 Drawable 后保存
取帧 TextureView.getBitmap() / ImageView.Drawable / SurfaceView + PixelCopy;失败时 root 屏幕取帧
去 UI 直接取渲染层;root 回退时隐藏目标路径外的同级 View 两帧,再裁成 SurfaceView 区域
拖放 向 DecorView 临时加入右侧保存区并调用 startDragAndDrop()
保存 Pictures/SuperDrag/SuperDrag_yyyyMMdd_HHmmss.jpg,JPEG 质量 95
root 隔离 Magisk 只授权 com.superdrag.app;目标 App 本体不获得 root,截图 Provider 只接受模块和白名单目标包 UID

当前验证环境

  • MuMu 模拟器 1:Android 12 / API 32,x86_64 + ARM Native Bridge,1080×1920
  • Root:Kitsune Mask 31 system mode(MuMu 内置 Root 关闭)
  • 框架:NeoZygisk 2.3 + Vector 2.2 / libxposed API 102
  • 抖音:官网 APK 40.1.0,包名 com.ss.android.ugc.aweme
  • 小红书:9.43.1,包名 com.xingin.xhs
  • 小黑盒:1.3.393,包名 com.max.xiaoheihe

构建与安装

要求:JDK 17+、Android SDK platform 34+。

git clone https://github.com/cakeni/super-drag.git
cd super-drag
.\gradlew.bat :app:assembleDebug
adb install -r .\app\build\outputs\apk\debug\app-debug.apk

在 Vector 中启用模块,并把作用域设为三个目标 App 的用户 0:

su -c /data/adb/modules/zygisk_vector/cli modules enable com.superdrag.app
su -c /data/adb/modules/zygisk_vector/cli scope set com.superdrag.app com.ss.android.ugc.aweme/0 com.xingin.xhs/0 com.max.xiaoheihe/0

随后强制停止并重新打开目标 App。检查日志:

su -c /data/adb/modules/zygisk_vector/cli log cat
adb logcat -s SuperDrag

应能看到:

loaded into process: com.ss.android.ugc.aweme, api=102
hooking com.ss.android.ugc.aweme (longPress=400ms)

首次使用先打开 Super Drag → SurfaceView 视频页 → 授权/测试 root 取帧,在 Magisk 中只允许 Super Drag。公开取帧路径不需要调用 su,这一步是为部分 Surface 播放器的回退路径预授权。

已完成验证

  • TextureView:静止长按后同指拖入保存区并落盘
  • SurfaceView + PixelCopy:同指拖放并落盘
  • 两类保存图均不含实验页上层按钮/文字
  • SurfaceView root 回退:保存 720×1509,实验页顶部提示和底部按钮均未入图
  • 拖到保存区外不会误保存
  • Android 15 冷启动后 su、Zygisk、Vector 自动工作
  • 抖音 40.1.0 在 x86_64 AVD 上通过 ARM 转译启动
  • Vector 在抖音主进程和子进程加载模块;主进程完成 hook
  • 抖音真实视频暂停后同指拖放:命中 ImageView 帧并保存 828×1472;顶部频道、右侧按钮、文案和底栏均未入图
  • 抖音作品文案:推荐流 desc 与详情页 tv_desc 均可拖入“复制”
  • 抖音真实评论文字:拖入“复制”后粘贴验证内容完整
  • 抖音真实评论配图:命中 217×291 附件并独立保存,未混入头像或评论 UI
  • 评论头像、日期和空白区域不穿透到底层视频
  • 小红书:视频暂停帧 1080×1920、图文主图 1200×1600、评论文字及 210×280 评论配图均完成保存/复制闭环
  • 小红书作品文案:视频正文及图文标题/正文均可拖入“复制”
  • 小红书原生视频/图文长按菜单已被接管;评论 BottomSheet 的原生长按直接重定向到超级拖放
  • 小黑盒:图文主图 662×1440、视频暂停帧 1080×607、主评论文字及 216×216 评论配图均完成保存/复制闭环
  • 小黑盒作品文案:推荐流与详情页标题/正文均可拖入“复制”
  • 文字存图:文字面板同时提供“复制/存图”,小黑盒真实正文已生成 1080×604 白底黑字 JPEG 并落盘
  • 抖音页面实际命中 SurfaceView 时的 root 回退仍需逐页面人工验证;自动实验页已通过
  • HyperOS Root 真机验证

边界

  • 不 Root 时,第三方 App 不能跨进程 Hook 目标 App、读取其播放器 Surface,也不能强迫它主动提供 ClipData;只能退化成无障碍 + 屏幕截图,因此通常会包含 UI,达不到本项目的“干净帧 + 同指拖放”。
  • 小米/Android 的标准拖放 API 只解决应用自己发起拖拽的情况,不能让外部普通 App 给未适配的内容 App 补上这个交互。
  • 此原型不绕过下载限制、DRM 或隐私同意;仅处理用户设备当前可正常显示的画面。请只保存你有权保存的内容。
  • 文字图片最多排版 60 行,超出部分以省略号结束,避免超长文本生成过大的 Bitmap。
  • 若页面不使用标准 TextureView、SurfaceView 或 ImageView,日志会显示 no render view found,届时需要针对该播放器页面单独适配。
  • ARM64 App 通过 Native Bridge 跑在 x86_64 模拟器上时,第三方原生库仍可能偶发崩溃/ANR;这是模拟器转译边界,不是拖放手势本身。真机应使用与设备 ABI 匹配的版本。

许可证

MIT

About

Android Root/Xposed 超级拖放:支持抖音、小红书、小黑盒的图片、视频帧、评论与文字存图

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages