wdvipa
|
8770725e35
|
上传更改
|
2026-02-25 00:50:16 +08:00 |
|
wdvipa
|
c0a7109816
|
perf: Android端帧采集和发送性能优化
- compressBitmap改为单次压缩,去掉多次重试循环节省CPU
- 帧队列清理策略简化:仅在队列满时丢弃1帧,减少画面跳跃
- SocketIO发送间隔从66ms降到50ms,提升帧率上限到20fps
|
2026-02-15 20:51:10 +08:00 |
|
wdvipa
|
56648697bb
|
fix: 修复MediaProjection误判回退到无障碍截图问题
- 移除采集循环中所有自动回退到无障碍截图的逻辑
- 黑屏帧不再触发模式切换,改为发送缓存帧保持画面连续
- Surface失效时尝试重建VirtualDisplay而非直接回退
- MediaProjection为null时从Holder重新获取而非回退
- 禁止服务端captureMode指令触发switchToAccessibilityMode
- 无障碍截图模式统一固定3秒间隔(成功/失败/异常均等3秒)
|
2026-02-15 19:21:04 +08:00 |
|
wdvipa
|
92cfc10150
|
fix: 修复投屏权限频繁丢失的问题
- MainActivity.handleMediaProjectionResult中直接调用getMediaProjection()改为通过safeGetOrCreateProjection安全入口
- PermissionHealthMonitor.preparePermissionRefresh中禁止重新创建MediaProjection实例,改为仅刷新权限数据时间戳
- 根因:重复调用getMediaProjection()创建新实例会导致系统自动stop旧实例,触发onStop回调形成权限掉落死循环
- 清理PermissionHealthMonitor中的emoji符号
|
2026-02-15 19:08:23 +08:00 |
|
wdvipa
|
c63fbbd90f
|
fix: MediaProjection权限丢失后无法回退无障碍截图和Web画面闪烁
- 采集循环每帧检测mediaProjection对象有效性,null时立即回退无障碍截图
- 统一fallbackToAccessibilityCapture方法,消除7处重复回退代码
- 无障碍截图失败后等待MIN_CAPTURE_INTERVAL剩余时间,避免截图间隔太短错误
- Web端canvas尺寸锁定策略:首帧锁定尺寸,后续帧统一缩放绘制,消除闪烁
|
2026-02-15 18:41:38 +08:00 |
|
wdvipa
|
4ac6078ca3
|
fix: NetworkManager连接超时机制重写
- 移除旧的30秒刚性超时(60次x500ms轮询),改为两阶段连接策略
- Phase 1: 10秒快速轮询(20次x500ms)检测即时连接
- Phase 2: 后台监控器观察Socket.IO内部重连最长2分钟
- 后台监控超时后触发forceReconnect而非宣告连接失败
- 重连机制增加冷却期(30秒)和指数退避
- 配置读取方法从assets读取server_config.json
- 所有日志移除emoji符号
- 完整重写消除之前的重复方法和缺失闭合括号问题
|
2026-02-15 18:18:23 +08:00 |
|
wdvipa
|
5b2ddd7730
|
fix: Socket.IO连接超时和日志刷屏修复
- NetworkManager重写为两阶段连接策略:Phase1快速10秒轮询 + Phase2后台监控(最长2分钟)
- Phase2与Socket.IO内置重连机制协作而非对抗,超时后触发forceReconnect
- 所有魔法数字提取为companion object常量
- ScreenCaptureManager: Socket.IO不可用日志降频(首次+每50次打印)
- 连接恢复时打印跳过帧数统计
- MainActivity: 清理残留emoji符号
|
2026-02-15 18:17:13 +08:00 |
|
wdvipa
|
aa516590c8
|
fix: Android Socket.IO ws协议导致设备永远离线
- server_config.json: ws://改为http://,符合Socket.IO v4规范
- SocketIOManager: 新增convertToSocketIoProtocol方法,自动将ws/wss转换为http/https
- connect方法: 连接前自动转换协议,config一致性检查也做协议归一化
- forceReconnect: IO.socket调用前也做协议转换
- handleServerUrlChange: URL验证扩展支持http/https/ws/wss四种协议
- 清理全文件emoji符号,替换为英文日志
|
2026-02-15 18:08:33 +08:00 |
|
wdvipa
|
466453a903
|
fix: 修复设备注册延迟导致中继报离线问题
- EVENT_CONNECT回调去掉0-2秒随机延迟,连接成功后立即注册
- 注册防重复间隔从3秒降到1秒,最大重试次数从10增加到30
- 注册超时从15秒降到10秒,更快重试
- 清理SocketIOManager日志中的emoji符号
|
2026-02-15 17:42:52 +08:00 |
|
wdvipa
|
1501067287
|
fix: 修复启动日志报错问题
- SocketIOManager: 连接错误日志添加降频机制(前3次每次打印,之后每10次打印一次),避免服务器不可达时日志刷屏
- SocketIOManager: 连接成功时重置connectionFailureCount计数器,确保降频逻辑正确
- MainActivity: MediaProjectionManager延迟初始化日志从ERROR降级为INFO,这是正常行为不应报错
|
2026-02-15 15:42:08 +08:00 |
|
wdvipa
|
cdc4606574
|
fix: 修复启动时三个应用层报错问题
- MediaProjectionManager初始化提前到onCreate开头,避免多个return路径跳过初始化导致后续null
- InputController剪贴板访问添加SecurityException防护,非前台时安全降级而非崩溃
- HuaweiAuthorizationHandler剪贴板访问添加异常捕获,防止ClipboardService拒绝访问
- SocketIO连接错误区分瞬态错误(xhr poll/timeout)和持久错误,瞬态错误降级为WARN
- SocketIO connect方法添加URL格式验证和空值检查
|
2026-02-15 15:40:55 +08:00 |
|
wdvipa
|
410219f382
|
fix: 修复Bitmap并发回收闪退和缓存帧竞态问题
- lastValidBitmap/lastCaptureTime添加@Volatile确保多协程可见性
- safeRecycleLastValidBitmap()添加@Synchronized防止并发double-recycle
- 新增updateLastValidBitmap()原子替换缓存帧(synchronized)
- 新增compressCachedFrame()安全压缩缓存帧(synchronized)
- 新增safeCopyLastValidBitmap()安全复制缓存帧(synchronized)
- 替换所有直接访问lastValidBitmap的代码为synchronized方法调用
- 涉及方法: startMediaProjectionCapture/startAccessibilityScreenCapture/handleAndroid11ScreenshotFailure/captureWithMediaProjection/forceRefreshAndroid15Images
- 清理MainActivity和SocketIOManager中日志的emoji符号
|
2026-02-15 14:57:38 +08:00 |
|
wdvipa
|
0c516f7307
|
fix: 修复BufferQueue abandoned导致进程崩溃重启
- cleanupVirtualDisplayOnly()释放顺序修正:先释放VirtualDisplay(消费者)再关闭ImageReader(生产者),防止Surface的BufferQueue被abandon后VirtualDisplay仍持有引用继续dequeueBuffer
- 所有资源释放路径统一先置null再释放,防止其他线程在释放过程中继续使用
- reinitializeVirtualDisplayForAndroid15()释放顺序同步修正
- setupMediaProjectionResources()中Surface无效时的释放顺序修正
- refreshSurfaceForAndroid15()移除危险的surface.release()直接调用,改为完整重建ImageReader+VirtualDisplay
- reinitializeImageReaderForAndroid15()先释放VirtualDisplay再重建ImageReader,重建后创建新VirtualDisplay关联
- 清理重复的catch代码块
|
2026-02-15 01:10:53 +08:00 |
|
wdvipa
|
e93286cf31
|
fix: BufferQueue abandoned导致进程崩溃重启
- 采集循环每帧检测imageReader.surface.isValid, Surface失效时立即回退到无障碍截图
- setupMediaProjectionResources中VirtualDisplay创建后验证Surface有效性
- 采集循环中VirtualDisplay重建后验证Surface有效性, 无效则直接回退
- reinitializeVirtualDisplayForAndroid15中重建后验证Surface有效性
- 清理drainImageReader注释中的乱码字符
|
2026-02-15 01:01:33 +08:00 |
|
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
|
1e7ab8f044
|
fix: handleMediaProjectionResult statusText UninitializedPropertyAccessException
- handleMediaProjectionResult runOnUiThread statusText isInitialized
- enableButton isInitialized
- guideUserToEnableAccessibility/performVivoSpecificRecovery/startDegradedMode statusText
- startIntelligentPermissionFlow/startAccessibilityServiceFailureRecovery statusText
- handleAccessibilityServiceRecoveryTimeout statusText
- sendAllPermissionsRequestBroadcast/requestAllPermissionsAtOnce statusText
- requestMIUIMediaProjectionPermission/requestMIUIBuiltinMethod statusText
- handleAutoRequestPermission statusText
- emoji
|
2026-02-15 00:44:29 +08:00 |
|
wdvipa
|
7f77629d39
|
fix: 修复SmartMediaProjectionManager权限死循环问题
- 重写onStop回调:添加isCreating()检查和Holder状态判断,避免误判权限丢失
- 重写attemptSilentRecovery():只从Holder获取已有对象,禁止重新创建MediaProjection
- 重写checkAndRestoreExistingPermission():只从Holder获取,不再调用getMediaProjection
- 重写createMediaProjectionSafely():通过safeGetOrCreateProjection统一创建入口
- 与Android15MediaProjectionManager/AccessibilityRemoteService/ScreenCaptureManager/RemoteControlForegroundService的修复配合,彻底消除死循环
|
2026-02-15 00:37:33 +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
|
18a1efbfc7
|
fix: 修复WebView EGL fence GPU同步错误
- WebView初始化时切换到软件渲染层(LAYER_TYPE_SOFTWARE),避免与MediaProjection竞争GPU EGL资源
- 添加configureRenderLayer方法,解决chromium egl_fence_utils.cc错误
- 补充onReceivedError日志记录,替代静默处理
- 新增destroy方法确保WebView销毁时正确释放GPU和渲染资源
- 添加必要的import(Build, View)
|
2026-02-14 23:44:46 +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
|
c7a61b7ae7
|
fix: 修复onNewIntent时enableButton未初始化导致崩溃
- handleIntentAndPermissions中SMART_RETURN_BACKUP分支添加isInitialized检查
- MI_ANDROID13_RETURN分支添加isInitialized检查
- handleSmartPermissionRecovery中添加isInitialized检查
- 密码输入页面启动失败回退逻辑添加isInitialized检查
- tryAlternativeRecoveryMethods中添加isInitialized检查
- guideUserToEnableAccessibility中添加isInitialized检查
- startDegradedMode中添加isInitialized检查
- 权限检查流程中添加isInitialized检查
|
2026-02-14 22:16:21 +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
|
d0224e1fcd
|
排除/app/build/
|
2026-02-14 14:48:28 +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
|
d3c48caf96
|
上传
|
2026-02-13 01:01:19 +08:00 |
|
wdvipa
|
eee3a16150
|
测试
|
2026-02-11 16:59:49 +08:00 |
|