|
|
@@ -1,77 +0,0 @@
|
|
|
-#!/usr/bin/env node
|
|
|
-const { execSync } = require('child_process')
|
|
|
-const path = require('path')
|
|
|
-
|
|
|
-const fs = require('fs')
|
|
|
-// 根目录 = config 文件所在目录的上级(config 在 <根>/configs/config.js)
|
|
|
-const configPath = process.env.STATIC_ROOT
|
|
|
- ? path.join(path.dirname(process.env.STATIC_ROOT), 'configs', 'config.js')
|
|
|
- : path.join(__dirname, '..', '..', 'configs', 'config.js')
|
|
|
-const PROJECT_ROOT = path.dirname(path.dirname(path.resolve(configPath)))
|
|
|
-const TCPIP_PORT = 5555
|
|
|
-
|
|
|
-/** 从配置解析并返回 ADB 可执行文件路径 */
|
|
|
-function getAdbPath() {
|
|
|
- if (!fs.existsSync(configPath)) return path.join(PROJECT_ROOT, 'lib', 'scrcpy-adb', process.platform === 'win32' ? 'adb.exe' : 'adb')
|
|
|
- const config = require(configPath)
|
|
|
- const p = config.adbPath?.path
|
|
|
- return p ? (path.isAbsolute(p) ? p : path.resolve(PROJECT_ROOT, p)) : path.join(PROJECT_ROOT, 'lib', 'scrcpy-adb', process.platform === 'win32' ? 'adb.exe' : 'adb')
|
|
|
-}
|
|
|
-
|
|
|
-/** 返回当前通过 USB 连接的设备 ID 列表 */
|
|
|
-function getConnectedDeviceIds(adbPath) {
|
|
|
- const out = execSync(`"${adbPath}" devices`, { encoding: 'utf-8' })
|
|
|
- return out
|
|
|
- .split('\n')
|
|
|
- .filter((line) => line.trim() && !line.startsWith('List'))
|
|
|
- .map((line) => line.trim().split('\t')[0])
|
|
|
- .filter((id) => id)
|
|
|
-}
|
|
|
-
|
|
|
-/** 通过 USB 打开系统「无线调试」开关,并读回确认;返回是否成功 */
|
|
|
-function enableWirelessDebuggingSetting(adbPath, deviceId) {
|
|
|
- execSync(`"${adbPath}" -s ${deviceId} shell settings put global adb_wifi_enabled 1`, { encoding: 'utf-8' })
|
|
|
- const out = execSync(`"${adbPath}" -s ${deviceId} shell settings get global adb_wifi_enabled`, { encoding: 'utf-8' })
|
|
|
- return out.trim() === '1'
|
|
|
-}
|
|
|
-
|
|
|
-/** 通过 USB 在该设备上开启 TCPIP 监听,用于后续无线连接 */
|
|
|
-function enableTcpipOnDevice(adbPath, deviceId, port) {
|
|
|
- return execSync(`"${adbPath}" -s ${deviceId} tcpip ${port}`, { encoding: 'utf-8' }).trim()
|
|
|
-}
|
|
|
-
|
|
|
-/** 获取设备 WLAN IPv4,用于无线连接提示(先 getprop,无则用 ip addr)*/
|
|
|
-function getDeviceWlanIp(adbPath, deviceId) {
|
|
|
- const prop = execSync(`"${adbPath}" -s ${deviceId} shell getprop dhcp.wlan0.ipaddress`, { encoding: 'utf-8' }).trim()
|
|
|
- if (prop && /^\d+\.\d+\.\d+\.\d+$/.test(prop)) return prop
|
|
|
- const out = execSync(`"${adbPath}" -s ${deviceId} shell ip -4 addr show wlan0`, { encoding: 'utf-8' })
|
|
|
- const m = out.match(/inet\s+(\d+\.\d+\.\d+\.\d+)/)
|
|
|
- return m ? m[1] : null
|
|
|
-}
|
|
|
-
|
|
|
-const adbPath = getAdbPath()
|
|
|
-const devices = getConnectedDeviceIds(adbPath)
|
|
|
-
|
|
|
-if (devices.length === 0) {
|
|
|
- process.stderr.write('No devices found. Please connect a device via USB.\n')
|
|
|
- process.exit(1)
|
|
|
-}
|
|
|
-
|
|
|
-const deviceId = devices[0]
|
|
|
-if (devices.length > 1) {
|
|
|
- process.stdout.write(`Multiple devices. Using: ${deviceId}\n`)
|
|
|
-}
|
|
|
-
|
|
|
-// 先打开系统「无线调试」、取 WLAN IP(USB 仍连接),再执行 tcpip
|
|
|
-const wirelessOk = enableWirelessDebuggingSetting(adbPath, deviceId)
|
|
|
-if (wirelessOk) {
|
|
|
- process.stdout.write('无线调试已开启\n')
|
|
|
-} else {
|
|
|
- process.stdout.write('无线调试开关可能不被本机支持,请到 设置 → 开发者选项 中手动打开\n')
|
|
|
-}
|
|
|
-const wlanIp = getDeviceWlanIp(adbPath, deviceId)
|
|
|
-const tcpipOut = enableTcpipOnDevice(adbPath, deviceId, TCPIP_PORT)
|
|
|
-process.stdout.write(tcpipOut + '\n')
|
|
|
-if (wlanIp) {
|
|
|
- process.stdout.write(`Wireless: adb connect ${wlanIp}:${TCPIP_PORT}\n`)
|
|
|
-}
|