Commit Graph

13 Commits

Author SHA1 Message Date
wdvipa
87b84b01bb fix: 修复录屏时闪退重启问题
- screenshotExecutor被shutdownNow后无法恢复: stopCapture中关闭执行器后switchToAccessibilityMode再startCapture时向已关闭的ExecutorService提交任务抛出RejectedExecutionException导致无障碍服务崩溃
- 修复方案: screenshotExecutor改为@Volatile var可重建, 新增getOrCreateScreenshotExecutor()自动检测并重建已关闭的执行器, stopCapture/forceStopCapture不再关闭执行器(仅release/forceRelease时关闭)
- 修复黑屏帧分支bitmap double-recycle: 切换到无障碍截图前bitmap.recycle()后外层还有一次bitmap.recycle(), 改用safeRecycleBitmap防止native SIGSEGV
- 移除processFrameData中frameData.fill(0): 清零操作在并发场景下可能在发送前破坏数据
- 清理所有日志中的emoji符号
2026-02-15 00:55:06 +08:00
wdvipa
d163c6fd50 fix: 修复屏幕录制权限频繁掉落的根因问题
- MediaProjectionHolder添加全局创建锁safeGetOrCreateProjection()
- 所有创建点统一通过安全入口,禁止直接调用getMediaProjection()
- 重复创建新实例会导致系统stop旧实例触发onStop死循环
- Android15MediaProjectionManager/SmartMediaProjectionManager的onStop回调添加isCreating检查
- RemoteControlForegroundService备用方案改用安全创建入口
- AccessibilityRemoteService静默恢复改用安全创建入口
- 添加最小创建间隔5秒防止短时间内重复创建
2026-02-15 00:34:27 +08:00
wdvipa
39bc5b47a0 fix: 修复屏幕录制权限频繁掉落问题
- 根因:多处代码重复调用getMediaProjection()创建新实例,系统自动stop旧实例触发onStop回调,形成权限丢失恢复再丢失的死循环
- ScreenCaptureManager.ensureMediaProjection():禁止重复创建,只从Holder获取已有对象
- ScreenCaptureManager.captureWithMediaProjection():移除重复创建逻辑
- ScreenCaptureManager.triggerPermissionRecovery():优先从Holder和SmartManager获取已有对象
- ScreenCaptureManager.regenerateMediaProjectionForAndroid15():优先复用Holder中已有对象
- SmartMediaProjectionManager.attemptSilentRecovery():先检查Holder是否已有有效对象
- Android15MediaProjectionManager.attemptSilentRecovery():先检查Holder复用已有对象
- Android15MediaProjectionManager.determineStopReason():修复误判逻辑,Holder中仍有有效对象时识别为旧实例被替换而非用户主动停止
- AccessibilityRemoteService.attemptAndroid15SilentRecovery():优先复用Holder中已有对象
- AccessibilityRemoteService.handleMediaProjectionGranted():Android 11+优先从Holder获取
- RemoteControlForegroundService.handleStartMediaProjection():优先检查Holder避免重复创建
2026-02-15 00:22:47 +08:00
wdvipa
de9aa4430c fix: 修复ImageReader maxImages溢出和协程取消异常
- ImageReader bufferCount从2提升到4(Android15为5),防止acquireLatestImage内部缓冲区不足
- captureWithMediaProjection重试循环添加IllegalStateException捕获,缓冲区满时执行drainImageReader清空
- startMediaProjectionCapture流式采集循环同样添加acquireLatestImage安全防护
- 新增drainImageReader方法,通过acquireNextImage+close循环释放所有已acquired的Image
- 队列处理协程正确传播CancellationException,避免协程取消时误报异常日志
2026-02-14 23:53:07 +08:00
wdvipa
a277021a7a fix: 回退BufferQueue检测逻辑,恢复正常采集流程
- 回退到d4f27bb的ScreenCaptureManager基础版本
- 移除bufferQueueAbandoned标志和Surface.isValid每帧检测(误杀正常采集)
- 移除VirtualDisplay.Callback和setSurface(null)(破坏MediaProjection session)
- 保留VirtualDisplay重建次数限制(最多3次)防止无限循环
- 保留CancellationException向上传播防止协程取消被吞
- 保留日志级别优化(Log.e降为Log.w)
2026-02-14 23:40:40 +08:00
wdvipa
af28985c29 fix: 回退到d4f27bb基础上做最小改动
- 回退之前所有激进修改(setSurface/Callback/Surface检查)
- 仅保留: 重建阈值从10降到5, 重建次数上限3次
- 添加CancellationException正确传播
- 不修改cleanupVirtualDisplayOnly清理逻辑
- 不添加Surface有效性检查和VirtualDisplay Callback
2026-02-14 23:38:39 +08:00
wdvipa
de91dab53c fix: 修复setSurface(null)导致MediaProjection session失效
- 移除cleanupVirtualDisplayOnly中的setSurface(null)调用
- 某些设备上setSurface(null)会导致MediaProjection令牌被消耗
- 改为直接release VirtualDisplay后紧接着close ImageReader
- 采集循环入口显式重置bufferQueueAbandoned=false
2026-02-14 23:17:24 +08:00
wdvipa
3ba594aa9f fix: 彻底修复BufferQueue abandoned持续报错
- cleanupVirtualDisplayOnly先setSurface(null)切断生产者再release
- createVirtualDisplay注册Callback监听onStopped事件
- 新增bufferQueueAbandoned volatile标志位,回调无延迟设置
- 采集循环双重检测:标志位+Surface.isValid
- Android 15重试createVirtualDisplay同步添加Callback
- cleanup时主动设置bufferQueueAbandoned=true
2026-02-14 23:09:23 +08:00
wdvipa
548c9a1f15 fix: 修复BufferQueue abandoned导致日志洪泛和无效重建循环
- 捕获循环每帧检测Surface.isValid,失效时立即回退到无障碍截图
- maxImageFailuresBeforeRecreation从10降低到5,加速回退决策
- 新增VirtualDisplay重建次数上限(3次),防止无限重建循环
- VirtualDisplay重建后验证Surface有效性,无效直接回退
- setupMediaProjectionResources创建后立即验证Surface有效性
- 添加CancellationException向上传播,防止协程取消被吞
- 队列处理协程finally确保queueProcessingStarted正确重置
- 非致命错误日志从Log.e降级为Log.w/Log.d减少噪音
2026-02-14 23:03:44 +08:00
wdvipa
d4f27bbac7 refactor: 清理 .gradle 缓存文件并优化 ScreenCaptureManager
- 删除 .gradle 缓存和锁文件(checksums, executionHistory, fileHashes 等)
- 优化 ScreenCaptureManager 截屏逻辑
- 移除 MainActivity, TransparentKeepAliveActivity 中的冗余代码
- 清理多个 KeepAlive 相关服务中的无用导入
- 精简 InstallationStateManager 代码
2026-02-14 22:07:58 +08:00
wdvipa
fe18e7eab0 Revert "Update .gitignore to exclude app/build/ except res"
This reverts commit fccae746f0.
2026-02-14 14:44:10 +08:00
wdvipa
fccae746f0 Update .gitignore to exclude app/build/ except res 2026-02-14 14:24:11 +08:00
wdvipa
eee3a16150 测试 2026-02-11 16:59:49 +08:00