Duo Fold
0.6.1 · GitHub
More about this app
System-wide iPhone Duo-style fold illusion that reprojects the whole screen from device motion with OpenGL ES, powered by Shizuku.
DuoFold for Android
A system-wide iPhone Duo-style folding illusion for regular Android phones — no foldable hardware and no root required.
DuoFold turns the entire Android display into a motion-driven spatial surface. As you tilt your phone left/right or forward/backward, the current screen is reprojected in real time with perspective, translation, blur, lighting, and depth effects. The motion pauses when the phone stops and reverses naturally when you tilt it back.
English · 简体中文
Demo
▶ Watch the latest real-device demo (~23 s)
More test videos
▶ Watch the full test video (~30 s)
▶ Watch the short demo clip (~6 s)
Screenshots
Download
- Android 14 and newer: download
DuoFold-0.6.0-Android14-and-newer.apkfrom the Latest Release. - Android 10–13: download
DuoFold-0.6.0-Android10-13.apkfrom the same Latest Release.
Features
- Treats the entire active Android screen as one continuous spatial surface and applies perspective, translation, frosted blur, and lighting effects.
- Uses device motion sensors to drive the effect in real time. Stop moving the phone and the animation stops; tilt in the opposite direction and it reverses naturally.
- Left/right motion is enabled by default. Optional Z-axis sensing · forward/back tilt adds front/back motion, with diagonal movement blended continuously.
- Automatically adapts to portrait and landscape orientation and maps sensor axes to the current display coordinates.
- Does not modify launcher layouts or third-party app UIs; the effect is rendered over whatever interface you are currently using.
- On Android 14+, the effect can be stopped with a three-finger touch, the notification action, or by returning to DuoFold. The compatibility build uses the notification stop action.
Animation effects (v0.6.0)
Choose a style in the app's Animation effects card. Changes are saved and applied immediately while the effect is running. Classic Frosted remains the default, and Z-axis sensing remains disabled by default in both Android builds.
| Style | Tilt and hover behavior |
|---|---|
| Classic Frosted · default | Original distance blur, grain, and shading; the frosted appearance remains while the phone is still. |
| Edge Fade | Keeps the anchored edge clearer while the opening edge gradually blurs and darkens. |
| Soft Depth | Uses softer weighted sampling and lighter shading for a subtle glass depth effect. |
| Hover Clear | Blurs during motion, then clears gradually after the phone has remained still for about half a second. |
| Clear Projection | Keeps the folding perspective without added blur or shading. |
| Lens Bokeh | Uses an independent 30° camera projection, a sharp near edge, quadratic far-edge blur, 16-tap disc bokeh, and continuous texture prefiltering. |
The first five styles share the classic projection. Lens Bokeh uses independent two-axis edge rotation and camera projection; Android 14+ touch coordinates follow that projection. Horizontal tilt is capped at 60°, forward/back tilt at 80°, and Spatial strength controls the aperture intensity.
Android 10/11 still use the static base frame captured when the effect starts; choosing another style does not make capture live on those versions.
Requirements
- The standard build requires Android 14 or newer. The compatibility build supports Android 10 and newer.
- Shizuku must be installed and running.
- No root required.
- Tested on Xiaomi 15 / Android 16. Screen-capture and overlay restrictions may vary between Android vendors.
Setup
- Download the matching build from the Latest Release: use the standard build on Android 14+ and the compatibility build on Android 10–13.
- Open Shizuku and start its service using wireless debugging or ADB, following Shizuku's instructions.
- Open DuoFold and tap 01 Connect & authorize Shizuku, then allow access in the authorization dialog.
- Tap 02 Enable screen-effect accessibility service, find DuoFold, and enable the service.
- Hold the phone naturally while facing the screen and tap 03 Try for 10 seconds. Tilt the phone left and right to see the folding illusion.
- Adjust Maximum tilt angle and Spatial strength to your preference. Z-axis sensing is disabled by default in both builds; enable Z-axis sensing · forward/back tilt only if you want front/back motion. Changes apply the next time the effect starts.
- Tap 04 Enable global effect. If you change your grip, return to the app and tap Recalibrate current grip.
- Android 14+ can stop the effect with a three-finger touch or the notification action. Android 10–13 uses the notification stop action.
If the accessibility service appears connected but the effect does not start, toggle the accessibility service off and on once. On some Xiaomi systems, touch correction also requires USB debugging (Security settings) in Developer options.
How it works
DuoFold uses Shizuku to access the current display image and passes it through local memory to an OpenGL ES renderer. The game rotation vector and gyroscope are used to calculate relative device pose. If those sensors are unavailable, the compatibility build falls back to the gravity sensor or accelerometer. The frame is reconstructed according to the current display orientation, and calibration updates automatically after portrait/landscape changes.
The capture service detects AOSP and vendor ROM variants of ScreenCapture, ScreenCaptureInternal, and legacy SurfaceControl, then selects an available backend. This includes Android 16 custom ROMs where getInternalDisplayToken() is absent.
Default parameters use an 80° maximum tilt angle, 100% spatial strength, 6–32 blur samples, and 40 ms gyroscope prediction. To limit power consumption, capture width is capped at 1080 px and updates are capped at 30 FPS.
Privacy and limitations
- The app has no Internet permission. During normal use, screen images are neither saved nor uploaded.
- The effect overlay is excluded from system screenshots to prevent recursive screen capture.
- Android 10/11 lack the per-layer exclusion API. On those versions, the compatibility build captures one real frame when the effect starts and then uses sensors to manipulate that frame in real time. Restarting the effect or rotating the display refreshes the base frame.
- Android 10–13 do not support the accessibility touch-coordinate correction API introduced in Android 14. If interaction becomes difficult while tilted, return to the calibrated pose first.
- Protected or screenshot-blocked content may appear black.
- DuoFold changes only the final displayed image. It does not rearrange icons, text, or components inside third-party apps.
- Extended use increases GPU load and battery consumption.
Build from source
JDK 17 and Android SDK 36 are required:
./gradlew :app:assembleStandardDebug :app:assembleCompatDebug :motion:test
The Android 14+ standard build is generated at app/build/outputs/apk/standard/debug/app-standard-debug.apk. The Android 10+ compatibility build is generated at app/build/outputs/apk/compat/debug/app-compat-debug.apk.
The project contains two modules: app handles Shizuku integration, accessibility services, screen capture, and OpenGL ES rendering; motion handles pose-axis mapping, filtering, and projection math and can run independent JVM unit tests.
Author
License
Released under the MIT License. Third-party license notices are available at app/src/main/assets/THIRD_PARTY_NOTICES.txt.
简体中文
Duo Fold for Android
在普通 Android 设备上实现 iPhone Duo 风格的整屏翻折动效,无需折叠屏硬件,也无需 Root。界面会跟随手机的左右、前后倾斜实时投影,可暂停、反向移动,并支持横竖屏方向映射。
最新实机演示
更多测试视频
软件截图
下载
- **Android 14 及以上:**从 Latest Release 下载
DuoFold-0.6.0-Android14-and-newer.apk。 - **Android 10–13:**从同一个 Latest Release 下载
DuoFold-0.6.0-Android10-13.apk。
功能
- 将正在使用的整个 Android 屏幕作为连续空间进行透视、位移、磨砂与明暗处理。
- 使用手机姿态传感器实时控制动画,停住手机时画面同步停住,反向倾斜时动画反向播放。
- 默认响应左右翻转;开启“Z 轴感应 · 前后倾斜”后,同时响应前后方向,斜向动作会连续合成。
- 自动适配横屏和竖屏,并将传感器方向映射到当前屏幕坐标。
- 不修改桌面或第三方应用布局,可在当前正在使用的界面上显示效果。
- Android 14+ 可用三指触屏、通知栏操作或返回 Duo Fold 停止效果;兼容版使用通知栏停止按钮。
动画效果选择(0.6.0)
在应用内的“动画效果”卡片中选择方案。选择自动保存,正在运行时也会立即应用;默认保持原有的经典磨砂。两种 Android 构建共用这些选项,Z 轴仍默认关闭。
| 方案 | 倾斜与悬停表现 |
|---|---|
| 经典磨砂 · 默认 | 保留原有的距离模糊、颗粒和暗部,停住后保持磨砂。 |
| 边缘渐隐 | 固定边缘更清楚,展开侧逐渐模糊、变暗,停住后保持渐变。 |
| 柔和景深 | 柔和加权采样、较轻暗部,停住后保留轻微玻璃感。 |
| 悬停清晰 | 移动时模糊,停住约半秒后逐渐清晰;保持透视位置,再次移动恢复模糊。 |
| 清透投影 | 保留翻折透视,关闭磨砂和额外暗部。 |
| 镜头散景 | 独立的 30° 镜头透视,近边清晰、远边按距离平方化开;16 点圆盘散景与连续纹理预过滤,悬停保持景深。 |
前五个方案共用经典投影。“镜头散景”使用独立的双轴边缘旋转与镜头投影,Android 14+ 的触控坐标同步使用该投影;左右方向最多 60°、前后方向最多 80°,空间强度对应光圈强度。默认仍选中经典磨砂,切换后保存用户选择。
Android 10/11 仍使用开启时取得的静态底图,选择其他动画不会使底图变成实时画面。
使用要求
- 标准版需要 Android 14 或更高版本;兼容版最低支持 Android 10。
- Shizuku 已安装并运行。
- 无需 Root。
- 已在 Xiaomi 15、Android 16 上完成实机测试。其他厂商系统对屏幕捕获和悬浮层的限制可能不同。
使用教程
- 从 Latest Release 下载对应版本:Android 14 及以上使用标准版,Android 10–13 使用兼容版。
- 打开 Shizuku,按其提示通过无线调试或电脑 ADB 启动服务。
- 打开 Duo Fold,点击“01 连接并授权 Shizuku”,在授权窗口中允许访问。
- 点击“02 开启屏幕效果辅助服务”,找到 Duo Fold 并启用服务。
- 正对屏幕,以自然握姿点击“03 体验 10 秒”。左右倾斜手机即可查看翻折效果。
- 根据手感调整“最大倾斜角度”和“空间强度”。两个版本的 Z 轴感应均默认关闭;需要前后方向时再打开“Z 轴感应 · 前后倾斜”。参数在下一次开启效果时生效。
- 点击“04 开启全局效果”。需要更换握姿时返回应用,点击“重新校准当前握姿”。
- Android 14+ 可三指同时触屏或使用通知栏停止按钮退出;Android 10–13 使用通知栏停止按钮。
如果辅助服务显示已连接但无法启动效果,请重新打开一次辅助服务开关。部分 Xiaomi 系统在修正触控时还需要打开开发者选项中的“USB 调试(安全设置)”。
工作方式
Duo Fold 通过 Shizuku 获取当前显示画面,在本机内存中交给 OpenGL ES 投影。游戏旋转矢量与陀螺仪用于计算相对姿态;没有这些传感器时,兼容版会使用重力计或加速度计。画面根据当前显示方向重建,横竖屏切换后自动重新校准。
画面服务会自动识别 AOSP 与厂商 ROM 的 ScreenCapture、ScreenCaptureInternal 和旧版 SurfaceControl 接口,并按系统实际提供的接口降级,兼容 Android 16 定制系统移除 getInternalDisplayToken() 的情况。
默认参数使用 80° 最大倾斜角度、100% 空间强度、6–32 个模糊采样和 40 ms 陀螺仪预测。为控制功耗,捕获宽度上限为 1080 像素,更新上限为每秒 30 次。
隐私与限制
- 应用没有网络权限,正常使用时不保存、不上传屏幕画面。
- 效果层会从系统截图中排除,避免画面被重复捕获。
- Android 10/11 缺少单图层排除接口,兼容版会在开启时获取一帧真实画面,再让传感器实时控制这一帧的翻折;重新开启或旋转屏幕时会刷新底图。
- Android 10–13 不支持 Android 14 新增的辅助服务触摸坐标修正接口,倾斜后操作界面时可先回到校准姿态。
- 受保护或禁止截屏的界面可能显示黑色。
- 应用只改变最终显示效果,不会重新排列第三方应用内部的图标、文字或组件。
- 长时间使用会增加 GPU 负载与耗电。
从源码构建
需要 JDK 17 和 Android SDK 36:
./gradlew :app:assembleStandardDebug :app:assembleCompatDebug :motion:test
Android 14+ 标准版位于 app/build/outputs/apk/standard/debug/app-standard-debug.apk;Android 10+ 兼容版位于 app/build/outputs/apk/compat/debug/app-compat-debug.apk。
项目包含两个模块:app 负责 Shizuku、辅助服务、画面捕获和 OpenGL ES 渲染;motion 负责姿态轴映射、滤波与投影数学,可独立运行 JVM 单元测试。
作者
许可证
项目以 MIT License 发布。第三方许可证声明见 app/src/main/assets/THIRD_PARTY_NOTICES.txt。
How Shizuku is used
Can reproject the live screen into a motion driven fold effect and remap touches via `privileged capture and input injection` through Shizuku.
This is an AI-assisted analysis of Shizuku-related usages in the app's public source code. It is best effort, so it may not catch every single usage.
How this app uses Shizuku
Shizuku runs a privileged companion service that supplies the live screen image and corrected touch handling for the fold illusion.
- Capture live screen: the whole display is captured frame by frame through Shizuku and drawn into a full screen overlay that is reprojected with OpenGL ES as the device tilts, so the user sees a folding perspective effect.
- Remap screen touches: touches on the folded image are mapped back to the original screen positions and reinjected through Shizuku, so taps and gestures land where the effect shows them.
- Hide effect overlay: the app's own overlay layer is excluded from capture through Shizuku, so the effect does not record itself or recurse.
Android APIs or commands used
android.view.IWindowManager.captureDisplayandroid.window.ScreenCapture.captureDisplayandroid.view.SurfaceControl.captureDisplayandroid.view.SurfaceControl.screenshotandroid.hardware.input.InputManagerGlobal.injectInputEventandroid.hardware.input.InputManager.injectInputEventandroid.view.SurfaceControl$Transaction.setSkipScreenshotandroid.view.SurfaceControl.getInternalDisplayTokenandroid.view.SurfaceControl.getPhysicalDisplayIdsandroid.view.SurfaceControl.getPhysicalDisplayTokenandroid.os.ServiceManager.getServiceandroid.view.IWindowManager$Stub.asInterface
Notable details
The effect stops and returns to the normal display when protected video or other secure content appears, since that content is not captured.
Changelog
What's new for version 0.6.1
本次更新
针对社区反馈的四个 issue 的修复与改进:
- 修复连接系统画面服务卡住的问题(#3):应用更新后 Shizuku 用户服务缓存失效会导致一直显示"正在连接"。现在会自动重启用户服务,连接超时 15 秒自动重试,并在 Shizuku 返回空绑定/绑定死亡时给出明确的解决提示。
- 息屏后自动恢复效果(#4):息屏时挂起效果并恢复原始触控,解锁后约半秒自动重新开启,无需再回到应用手动开启。手动停止、10 秒体验或出错退出不会被自动恢复。
- Android 17 兼容性加固(#1):屏幕捕获接口改为动态扫描可用签名,内容策略、图层排除、安全内容检测均有回退方案,单一隐藏 API 变动不再导致整个会话失败;诊断信息新增系统版本。
- 新增英文界面(#2):跟随系统语言,中文系统显示中文,其他语言自动切换为英文,涵盖主界面、通知、全部状态与错误提示。
下载
| 安装包 | 适用系统 |
|---|---|
DuoFold-0.6.1-Android14-and-newer.apk |
Android 14 及以上,支持实时整屏效果与触控坐标修正 |
DuoFold-0.6.1-Android10-13.apk |
Android 10–13 兼容版 |
安装后需要运行 Shizuku,并在系统设置中开启 DuoFold 的屏幕效果辅助服务。无需 Root。
Android 10/11 使用启动效果时取得的静态底图;Android 10–13 不支持 Android 14 新增的辅助服务触摸坐标修正。受保护或禁止截屏的画面可能显示为黑色。
SHA-256
3708582d5aab03f41e49d3ddafdff9a5b53585781a0147adb8dca5596b75b2c2 DuoFold-0.6.1-Android14-and-newer.apk
094587f4628cf1ca0e0a8fa623a285161eac1fcd70373552f912db225cc30255 DuoFold-0.6.1-Android10-13.apk
English
Version 0.6.1 fixes four community-reported issues:
- Fixed the capture service connection getting stuck (#3): after an app update, Shizuku could keep restarting a stale user service. The service version is now bumped, binds time out after 15 seconds with automatic retries, and null/binding-dead callbacks surface actionable guidance instead of hanging.
- Auto-resume after screen off/unlock (#4): the effect suspends when the screen turns off and restarts automatically shortly after unlock. Manual stops, the 10-second trial, and error exits are not auto-resumed.
- Android 17 compatibility hardening (#1): capture APIs are resolved by scanning available signatures at runtime, with fallbacks for content policy, layer exclusion, and secure-content detection, so a single hidden-API change no longer kills the session. Diagnostics now include the OS level.
- English UI (#2): the app now follows the system language — Chinese stays Chinese, everything else gets English, covering the main screen, notifications, and all status/error messages.
| APK | System |
|---|---|
DuoFold-0.6.1-Android14-and-newer.apk |
Android 14+ |
DuoFold-0.6.1-Android10-13.apk |
Android 10–13 |
Shizuku and the DuoFold accessibility service are required; root is not required.
Permissions
2 permissions requested


