call adb shell和adb shell命令
时间: 2023-07-23 13:22:48 浏览: 287
在 .bat 文件中,CALL 和不带 CALL 的命令之间有一些细微的差别。如果你使用 CALL 命令来执行 adb shell 命令,那么在 adb shell 命令执行完毕后,控制权会返回到原来的 .bat 文件,继续执行下一条命令。而如果你直接执行 adb shell 命令,那么在 adb shell 命令执行完毕后,控制权不会返回到原来的 .bat 文件,而是停止在 adb shell 命令处,不再执行后面的命令。
因此,如果你希望在执行 adb shell 命令后继续执行下一条命令,你应该使用 CALL 命令,比如:
```
CALL adb shell ls -l
```
而如果你只是想执行 adb shell 命令,然后停止在该命令处,你可以直接使用 adb shell 命令,比如:
```
adb shell ls -l
```
相关问题
adb shell service call
`adb shell service call` 是 Android Debug Bridge (ADB) 的一个命令行工具,用于在设备上直接与系统服务交互。当你需要发送自定义命令或数据给特定的服务时,可以使用这个命令。它通常用于调试和服务管理,比如启动、停止、暂停或恢复某个服务,以及获取服务的状态信息。
该命令的基本语法如下:
```sh
adb shell service call [service_name] [call_number] [args...]
```
- `service_name`: 需要操作的服务的完整名称,例如 "com.example.myapp.MyService"。
- `call_number`: 要调用的服务的具体方法ID,每个服务通常会定义一组方法,通过数字标识。
- `args`: 可选的参数列表,根据服务方法的要求传递数据。
举例来说,如果你想要启动名为 "MyService" 的服务的一个特定方法(假设其方法ID是 3),你可以这样做:
```sh
adb shell service call com.example.myapp.MyService 3 arg1 value1 arg2 value2
```
``` @echo off :begin echo ***************************************************************************** echo ** ** echo ** 注意:请将设备【WiFi打开】【蓝牙关闭】,写号前将设备通过USB连接至电脑 ** echo ** 注意:请按照蓝牙Mac地址在前,WiFi Mac地址在后的顺序录入 ** echo ** ** echo ***************************************************************************** echo. :: set /p arr=请顺序输入蓝牙Mac地址和WiFi Mac地址,以空格隔开: :: for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12 delims= " %%a in ("%arr%") do ( :: set num1=%%a :: set num2=%%b :: set num3=%%c :: set num4=%%d :: set num5=%%e :: set num6=%%f :: set num7=%%g :: set num8=%%h :: set num9=%%i :: set num10=%%j :: set num11=%%k :: set num12=%%l :: ) :: 此方案不需要工厂标签二维码有特殊格式,顺序输入即可。eg:112233445566aabbccddeeff set /p arr=请顺序输入蓝牙Mac地址和WiFi Mac地址: set num1=%arr:~0,2% set num2=%arr:~2,2% set num3=%arr:~4,2% set num4=%arr:~6,2% set num5=%arr:~8,2% set num6=%arr:~10,2% set num7=%arr:~12,2% set num8=%arr:~14,2% set num9=%arr:~16,2% set num10=%arr:~18,2% set num11=%arr:~20,2% set num12=%arr:~22,2% echo adb root adb root :: 打开WiFi、关闭BT adb shell svc wifi enable adb shell svc bluetooth disable :: 预留开关响应时间2s timeout /t 2 /nobreak >nul echo ***************************************************************************** echo ** ** echo ** 开始写入蓝牙地址 : %num1% %num2% %num3% %num4% %num5% %num6% ** echo ** ** echo ***************************************************************************** adb shell wifitest -O adb shell wifitest -E 0x138 adb shell wifitest -e 0x138 -v 0x67 adb shell wifitest -e 0x139 -v %num1% adb shell wifitest -e 0x13A -v %num2% adb shell wifitest -e 0x13B -v %num3% adb shell wifitest -e 0x13C -v %num4% adb shell wifitest -e 0x13D -v %num5% adb shell wifitest -e 0x13E -v %num6% :: boots 方案回显有较多的fail,影响产线判断先不用,待产线测试wifitest的稳定性再决定是否启用 :: 目前遇到的问题是单独操作boots可以写成功,但是放在bat顺序执行会概率性执行不下去。 :: adb shell boots -c efuse -r -a 0x138 :: adb shell boots -c efuse -w -a 0x138 -v 0x67 :: adb shell boots -c efuse -w -a 0x139 -v %num1% >nul :: adb shell boots -c efuse -w -a 0x13A -v %num2% >nul :: adb shell boots -c efuse -w -a 0x13B -v %num3% >nul :: adb shell boots -c efuse -w -a 0x13C -v %num4% >nul :: adb shell boots -c efuse -w -a 0x13D -v %num5% >nul :: adb shell boots -c efuse -w -a 0x13E -v %num6% >nul echo ***************************************************************************** echo ** ** echo ** 开始写入WiFi地址 : %num7% %num8% %num9% %num10% %num11% %num12% ** echo ** ** echo ***************************************************************************** :: adb shell wifitest -O adb shell wifitest -e 4 -v %num7% adb shell wifitest -e 5 -v %num8% adb shell wifitest -e 6 -v %num9% adb shell wifitest -e 7 -v %num10% adb shell wifitest -e 8 -v %num11% adb shell wifitest -e 9 -v %num12% echo 设备重启 adb reboot pause goto begin :: adb shell wifitest -e 4 -v 0xec :: adb shell wifitest -e 5 -v 0x20 :: adb shell wifitest -e 6 -v 0x14 :: adb shell wifitest -e 7 -v 0x05 :: adb shell wifitest -e 8 -v 0x11 :: adb shell wifitest -e 9 -v 0x17 :: goto begin```adb shell wifitest这部分重复内容请改用for循环写
好的,以下是将 `adb shell wifitest` 的部分改为使用 `for` 循环的版本,并对脚本进行了优化:
```batch
@echo off
:begin
echo *****************************************************************************
echo ** **
echo ** 注意:请将设备【WiFi打开】【蓝牙关闭】,写号前将设备通过USB连接至电脑 **
echo ** 注意:请按照蓝牙Mac地址在前,WiFi Mac地址在后的顺序录入 **
echo ** **
echo *****************************************************************************
echo.
set /p arr=请顺序输入蓝牙Mac地址和WiFi Mac地址:
:: 将输入拆分为单个字符并存储到变量中
set num1=%arr:~0,2%
set num2=%arr:~2,2%
set num3=%arr:~4,2%
set num4=%arr:~6,2%
set num5=%arr:~8,2%
set num6=%arr:~10,2%
set num7=%arr:~12,2%
set num8=%arr:~14,2%
set num9=%arr:~16,2%
set num10=%arr:~18,2%
set num11=%arr:~20,2%
set num12=%arr:~22,2%
:: 初始化ADB权限及相关设置
echo adb root
adb root
adb shell svc wifi enable
adb shell svc bluetooth disable
timeout /t 2 /nobreak >nul
:: 写入蓝牙MAC地址 (使用循环)
echo *****************************************************************************
echo ** **
echo ** 开始写入蓝牙地址 : %num1%:%num2%:%num3%:%num4%:%num5%:%num6% **
echo ** **
echo *****************************************************************************
adb shell wifitest -O
adb shell wifitest -E 0x138
adb shell wifitest -e 0x138 -v 0x67
set addr_list_bt=139,13A,13B,13C,13D,13E
set val_list_bt=%num1%,%num2%,%num3%,%num4%,%num5%,%num6%
call :write_mac bt !addr_list_bt! !val_list_bt!
:: 写入WiFi MAC地址 (使用循环)
echo *****************************************************************************
echo ** **
echo ** 开始写入WiFi地址 : %num7%:%num8%:%num9%:%num10%:%num11%:%num12% **
echo ** **
echo *****************************************************************************
set addr_list_wifi=4,5,6,7,8,9
set val_list_wifi=%num7%,%num8%,%num9%,%num10%,%num11%,%num12%
call :write_mac wifi !addr_list_wifi! !val_list_wifi!
:: 完成后重启设备
echo 设备重启...
adb reboot
pause
goto begin
:: 子程序: 写入MAC地址函数
:write_mac
set type=%1
set addr_list=%2
set val_list=%3
set index=0
for %%a in (%addr_list%) do (
set addr=%%a
call set value=%%val_list:~,2%%
echo 写入 %type% 地址单元 [0x%%addr%%]: !value!
adb shell wifitest -e 0x%%addr%% -v !value!
:: 更新值列表以便处理下一个元素
call set val_list=%%val_list:~3%%
set /a index+=1
)
exit /b
```
### 修改说明:
1. 使用了两个数组 (`addr_list`, `val_list`) 来分别存放地址偏移量和对应的值。
2. 提取了一个通用的子程序 `write_mac`,用于简化蓝牙和 WiFi 地址写入逻辑。
3. 蓝牙地址和 WiFi 地址均采用了相同的循环结构。
---
**关于此脚本的功能改进及注意事项**
- 此脚本的主要功能是对设备进行批量 MAC 地址写入,支持蓝牙和 WiFi 类型。采用 `for` 循环显著减少了重复代码行数,提高了可维护性和扩展性。
- 确保用户严格按照提示输入正确的十六进制字符串(如“AA BB CC DD EE FF GG HH II JJ KK LL”),否则可能导致错误结果。
---
阅读全文
相关推荐













