这是一个基于 Android VirtualDisplay API 和 MediaProjection 实现的高级多屏协作演示项目。它能够实现在横屏主机(Host)上创建一个独立的、可交互的竖屏虚拟显示器,并支持在该显示器上独立运行第三方应用程序。
- 跨方向投屏:在横屏物理设备上强制渲染 720x1280 的原生竖屏虚拟环境。
- 独立 UI 渲染:利用
PresentationAPI 实现副屏独立仪表盘(Dashboard),包含实时时钟和系统状态监控。 - 系统级应用启动器:支持扫描系统第三方应用,并利用
ActivityOptions.setLaunchDisplayId将其指派到虚拟屏幕运行。 - 双向触控交互:主屏预览窗实时捕获触控事件,通过坐标映射算法精确注入到虚拟屏幕,实现“所见即所得”的操作。
- 硬核旋转锁定:通过反射系统
IWindowManager接口,强制锁定副屏方向,防止第三方应用篡改显示策略。 - 高性能架构:全异步事件注入逻辑,方法级反射缓存,有效避免高负载下的系统 ANR。
- UI 框架:Jetpack Compose (Material 3)
- 导航:Jetpack Navigation 3
- 并发控制:Kotlin Coroutines
- 核心 API:
DisplayManager,MediaProjection,Presentation,InputManager(Hidden API) - 系统集成:声明
android.uid.system共享用户 ID,具备系统级操作权限。
- Android 版本:建议 Android 11 (API 30) 及以上。
- 权限等级:由于涉及跨屏启动和事件注入,必须使用系统签名进行打包。
- 硬件适配:针对 Rockchip (RK3576) 等高性能车载/工业主板进行了性能优化。
为了安全起见,签名信息不建议直接写在脚本中。请在项目根目录的 local.properties 文件中添加以下配置,并指定您的 .jks 文件路径:
signing.storeFile=SystemSignature.jks
signing.storePassword=your_password
signing.keyAlias=your_alias
signing.keyPassword=your_password确认您的系统签名文件已放置在指定路径。项目已配置为自动读取这些属性进行签名。
- 启动投屏:点击左侧“START”按钮,授权屏幕捕捉。
- 切换模式:点击“MODE”选项可在
PORTRAIT(竖屏)和LANDSCAPE(横屏)之间切换。 - 运行应用:从左侧“APPS”列表中点击任意应用,它将出现在右侧预览框中。
- 交互:直接在右侧预览框中滑动或点击,即可操控副屏应用。
- 返回仪表盘:点击“DASHBOARD”按钮可随时从应用切回时钟监控界面。
- 兼容性:项目大量使用了 Android 系统隐藏 API,适用于具有系统开发权限的 OEM 或定制 ROM 场景。