Răsfoiți Sursa

简化adb连接逻辑

User 5 luni în urmă
părinte
comite
582d453046

+ 31 - 35
main.js

@@ -155,50 +155,46 @@ async function scanNetworkDevices(event) {
     const promises = batch.map(async (ip) => {
       const ipPort = `${ip}:${port}`;
       try {
-        // 尝试连接设备(超时时间短,避免等待太久)
+        // 尝试连接设备
         await execAsync(`${adbPath} connect ${ipPort}`, {
           timeout: connectTimeout,
           maxBuffer: 1024 * 1024
         });
         
-        // 连接后稍等片刻,检查设备是否真的连接成功
-        await new Promise(resolve => setTimeout(resolve, 300));
+        // 连接后稍等片刻,让设备注册到 ADB 服务器
+        await new Promise(resolve => setTimeout(resolve, 500));
+      } catch (error) {
+        // 连接失败是正常的,继续检查设备列表
+      }
+      
+      // 直接使用 adb -s IP:PORT devices 命令检查该设备是否在列表中
+      try {
+        const { stdout } = await execAsync(`${adbPath} -s ${ipPort} devices`, {
+          timeout: 2000,
+          maxBuffer: 1024 * 1024
+        });
         
-        // 检查设备是否在列表中
-        try {
-          const { stdout } = await execAsync(`${adbPath} devices`, {
-            timeout: 2000,
-            maxBuffer: 1024 * 1024
-          });
-          
-          const lines = stdout.split('\n').slice(1);
-          for (const line of lines) {
-            const parts = line.trim().split(/\s+/);
-            if (parts.length >= 2 && parts[0] === ipPort && parts[1] === 'device') {
-              // 发现设备,实时推送
-              if (!foundDevices.has(ipPort)) {
-                foundDevices.add(ipPort);
-                const device = {
-                  id: ipPort,
-                  status: 'device'
-                };
-                // 实时发送发现的设备
-                if (event && event.sender) {
-                  event.sender.send('device-found', device);
-                } else if (mainWindow) {
-                  mainWindow.webContents.send('device-found', device);
-                }
-                console.log('发现设备:', ipPort);
-              }
-              return ipPort;
+        // 检查输出中是否包含 IP:PORT,如果有则说明设备存在
+        if (stdout.includes(ipPort)) {
+          // 发现设备,实时推送
+          if (!foundDevices.has(ipPort)) {
+            foundDevices.add(ipPort);
+            const device = {
+              id: ipPort,
+              status: 'device'
+            };
+            // 实时发送发现的设备
+            if (event && event.sender) {
+              event.sender.send('device-found', device);
+            } else if (mainWindow) {
+              mainWindow.webContents.send('device-found', device);
             }
+            console.log('发现设备:', ipPort);
           }
-        } catch (checkError) {
-          // 检查失败,忽略
+          return ipPort;
         }
-      } catch (error) {
-        // 连接失败是正常的,忽略错误
-        return null;
+      } catch (checkError) {
+        // 检查失败,忽略
       }
       return null;
     });

+ 4 - 21
src/pages/0-TEST-CONNECT.BAT

@@ -14,29 +14,12 @@ if "%IP_LAST_TWO%"=="" (
 set DEVICE_IP=192.168.%IP_LAST_TWO%
 set DEVICE_PORT=5555
 set DEVICE_ADDRESS=%DEVICE_IP%:%DEVICE_PORT%
-
-set "CONFIG_PATH=%~dp0..\..\config.js"
-set "ADB_PATH="
-for /f "usebackq delims=" %%A in (`powershell -NoProfile -ExecutionPolicy Bypass -Command "try { $configPath = '%CONFIG_PATH%'; if (Test-Path $configPath) { $raw = Get-Content -Raw $configPath; $json = $raw -replace '//.*$', '' -replace ',\s*([}\]])', '$1'; $cfg = ConvertFrom-Json -InputObject $json; $adb = $cfg.'adb-path'; if ($adb) { Write-Output $adb } } } catch { }"`) do (
-    set "ADB_PATH=%%A"
-)
-
-set "ADB_EXE=adb"
-if defined ADB_PATH (
-    if exist "%ADB_PATH%\\adb.exe" (
-        set "ADB_EXE=%ADB_PATH%\\adb.exe"
-    ) else if exist "%ADB_PATH%" (
-        set "ADB_EXE=%ADB_PATH%"
-    )
-)
-
-echo Using ADB: %ADB_EXE%
 echo.
 echo Connecting to %DEVICE_ADDRESS%...
 echo.
 
 echo [1/5] Check if ADB is available...
-"%ADB_EXE%" version >nul 2>&1
+adb version >nul 2>&1
 if errorlevel 1 (
     echo Error: ADB not installed or not in PATH
     echo Please ensure Android SDK Platform Tools is installed
@@ -68,11 +51,11 @@ if errorlevel 1 (
 )
 
 echo [4/5] Disconnect old connection (if any)...
-"%ADB_EXE%" disconnect %DEVICE_ADDRESS% >nul 2>&1
+adb disconnect %DEVICE_ADDRESS% >nul 2>&1
 timeout /t 1 /nobreak >nul
 
 echo Attempting to connect %DEVICE_ADDRESS%...
-"%ADB_EXE%" connect %DEVICE_ADDRESS%
+adb connect %DEVICE_ADDRESS%
 set CONNECT_RESULT=%ERRORLEVEL%
 
 echo.
@@ -111,7 +94,7 @@ if %CONNECT_RESULT% equ 0 (
 
 echo [5/5] Check device list...
 echo.
-"%ADB_EXE%" devices
+adb devices
 echo.
 
 echo ========================================

+ 5 - 6
src/pages/Devices/Devices.css

@@ -191,16 +191,15 @@
 .device-id {
   /* scale with device-item width */
   width: 100%;
-  font-size: clamp(0.5rem, 1.6cqw, 0.85rem);
+  font-size: clamp(0.45rem, 2.4cqw, 0.85rem);
   font-weight: 500;
   color: #1a1a1a;
   font-family: 'Courier New', 'Consolas', monospace;
-  word-break: keep-all;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: clip;
+  overflow-wrap: anywhere;
+  word-break: break-all;
+  white-space: normal;
   letter-spacing: 0;
-  line-height: 1.5;
+  line-height: 1.35;
 }
 
 /* 连接按钮 */

BIN
static/processing1/1.png


BIN
static/processing1/2.png


BIN
static/processing1/3.png


+ 8 - 0
static/processing1/processing.json

@@ -0,0 +1,8 @@
+{
+	[
+		"press",
+		"press",
+		"input",
+		"press"
+	]
+}

+ 0 - 151
响应式设计教程.md

@@ -1,151 +0,0 @@
-# 响应式设计快速教程
-
-## 一、@media 媒体查询
-
-### 基本语法
-```css
-@media (条件) {
-  /* 当条件满足时应用的样式 */
-}
-```
-
-### 常用断点(屏幕宽度)
-```css
-/* 移动端 */
-@media (max-width: 767px) { }  /* 小于等于 767px */
-
-/* 平板 */
-@media (min-width: 768px) and (max-width: 1023px) { }  /* 768px 到 1023px */
-
-/* 桌面 */
-@media (min-width: 1024px) { }  /* 大于等于 1024px */
-```
-
-### 如何选择断点值?
-- **767px**:常见手机最大宽度
-- **768px**:常见平板最小宽度
-- **1024px**:常见桌面最小宽度
-
-**技巧**:打开浏览器开发者工具,调整窗口大小,观察你的设计在哪个宽度开始变形,那就是你的断点。
-
----
-
-## 二、clamp() 函数
-
-### 基本语法
-```css
-clamp(最小值, 理想值, 最大值)
-```
-
-### 工作原理
-浏览器会:
-1. 如果 `理想值` < `最小值` → 使用 `最小值`
-2. 如果 `理想值` > `最大值` → 使用 `最大值`
-3. 否则 → 使用 `理想值`
-
-### 如何计算数值?
-
-#### 示例 1:字体大小
-```css
-font-size: clamp(0.875rem, 1.5vw, 1rem);
-```
-- **最小值 0.875rem**:小屏幕时字体不会太小(约 14px)
-- **理想值 1.5vw**:随视口宽度变化(视口宽度 × 1.5%)
-- **最大值 1rem**:大屏幕时字体不会太大(约 16px)
-
-**计算思路**:
-- 先确定最小和最大值(固定值)
-- 中间用 `vw`(视口宽度百分比)让它在中间自适应
-
-#### 示例 2:内边距
-```css
-padding: clamp(0.5rem, 1.5vw, 1rem);
-```
-- **最小值 0.5rem**:小屏幕时内边距 8px
-- **理想值 1.5vw**:随屏幕宽度变化
-- **最大值 1rem**:大屏幕时内边距 16px
-
-#### 示例 3:宽度
-```css
-width: clamp(250px, 30%, 400px);
-```
-- **最小值 250px**:最小宽度 250px
-- **理想值 30%**:占父容器 30%
-- **最大值 400px**:最大宽度 400px
-
-### 快速计算法
-
-**步骤 1:确定最小值和最大值**
-- 打开浏览器,调整到最小窗口,看元素是否还能正常显示 → 这是最小值
-- 调整到最大窗口,看元素是否过大 → 这是最大值
-
-**步骤 2:确定中间值**
-- 使用 `vw`(视口宽度百分比)
-- 公式:`理想值 = (最大值 - 最小值) / 2` 对应的 vw
-- 或者直接用 `2vw`、`1.5vw` 等常见值测试
-
-**步骤 3:测试调整**
-- 在浏览器中调整窗口大小,观察效果
-- 如果小屏幕时太小 → 增大最小值
-- 如果大屏幕时太大 → 减小最大值
-- 如果中间过渡不自然 → 调整中间 vw 值
-
----
-
-## 三、实际应用示例
-
-### 完整示例
-```css
-.container {
-  /* 容器内边距:小屏 12px,大屏 24px,中间自适应 */
-  padding: clamp(0.75rem, 2vw, 1.5rem);
-  
-  /* 标题字体:小屏 16px,大屏 28px,中间自适应 */
-  font-size: clamp(1rem, 2.5vw, 1.75rem);
-}
-
-/* 移动端特殊处理 */
-@media (max-width: 767px) {
-  .container {
-    padding: 1rem;  /* 移动端固定值 */
-  }
-}
-```
-
-### 常用数值参考
-
-| 属性 | 最小值 | 中间值 | 最大值 | 说明 |
-|------|--------|--------|--------|------|
-| 字体 | `0.875rem` | `1.5vw` | `1rem` | 正文 |
-| 字体 | `1rem` | `2.5vw` | `1.8rem` | 标题 |
-| 内边距 | `0.5rem` | `1.5vw` | `1rem` | 小元素 |
-| 内边距 | `0.75rem` | `2vw` | `1.5rem` | 容器 |
-| 圆角 | `4px` | `1vw` | `8px` | 按钮 |
-| 间距 | `0.5rem` | `1.5vw` | `1rem` | gap/margin |
-
----
-
-## 四、调试技巧
-
-1. **打开浏览器开发者工具**(F12)
-2. **切换到响应式设计模式**(Ctrl+Shift+M)
-3. **调整窗口大小**,观察元素变化
-4. **修改 CSS 值**,实时查看效果
-5. **测试不同设备尺寸**(手机、平板、桌面)
-
----
-
-## 五、总结
-
-1. **@media**:用于不同屏幕尺寸的样式切换
-   - `max-width`:小于等于某值
-   - `min-width`:大于等于某值
-
-2. **clamp()**:让数值在最小和最大之间自适应
-   - 格式:`clamp(最小, 理想, 最大)`
-   - 理想值用 `vw` 实现自适应
-
-3. **工作流程**:
-   - 先用 `clamp()` 实现基础自适应
-   - 再用 `@media` 处理特殊情况(如移动端布局变化)
-