Android 车机开发中常用的adb 脚本(更新中)

文章目录

  • [1. adb connect wifi](#1. adb connect wifi)
  • [2. 抓设备系统日志](#2. 抓设备系统日志)
  • [3. 关于内存分析](#3. 关于内存分析)
  • [4. 蓝牙协议栈更新](#4. 蓝牙协议栈更新)

本文总结了在车载车机开发中常用的adb 脚本,为了平时方便使用,整理成了bat 脚本,方便提高开发效率,记录于此,供你参考。

1. adb connect wifi

java 复制代码
@echo off
echo wait-for-device
adb wait-for-device

@echo off
setlocal enabledelayedexpansion

rem 执行 adb shell ifconfig 命令并将结果保存到临时文件
adb shell ifconfig > ifconfig_output.txt

rem 初始化变量用于存储 IP 地址
set "ip_address="
set "found_driver=false"

rem 遍历临时文件的每一行
for /f "tokens=*" %%a in (ifconfig_output.txt) do (
    set "line=%%a"
    if "!found_driver!"=="false" (
        echo !line! | findstr /i "Driver aicwf_sdio" >nul
        if !errorlevel! equ 0 (
            set "found_driver=true"
        )
    ) else (
        echo !line! | findstr /i "inet addr:" >nul
        if !errorlevel! equ 0 (
            for /f "tokens=2 delims=:" %%b in ("!line!") do (
                for /f "tokens=1" %%c in ("%%b") do (
                    set "ip_address=%%c"
                    goto connect
                )
            )
        )
    )
)

:connect
if defined ip_address (
    echo 找到 IP 地址: %ip_address%
    adb connect %ip_address%:5555
) else (
    echo 未找到有效的 IP 地址。
)

rem 删除临时文件
del ifconfig_output.txt

pause    

copy 代码到 txt中,命名为 连接wif.bat 双击即可生效

  1. 常用的menu菜单
java 复制代码
@echo off
echo wait-for-device
adb wait-for-device
:menu
cls
echo 请选择操作:
echo 1. 无线连接设备(172.20.210.89)
echo 2. 输入文本
echo 3. 连接 Wi-Fi
echo 4. 输入 Soc 密码(jinkens8888888)
echo 5. 检查设备连接情况
echo 6. 截图
echo 7. log
echo 8. kill 蓝牙音乐
echo 9. 退出
echo 10.kill launcher
set /p choice=请输入选项(1 - 10):

if "%choice%"=="1" (
    call :connect_device
) else if "%choice%"=="2" (
    call :input_text
) else if "%choice%"=="3" (
    call :connect_wifi
) else if "%choice%"=="4" (
    call :input_soc_password
) else if "%choice%"=="5" (
    call :check_device_connection
) else if "%choice%"=="6" (
    call :take_screenshot
) else if "%choice%"=="7" (
    call :get_log
) else if "%choice%"=="8" (
	call :kill_music
) else if "%choice%"=="9" (
    exit /b
) else if "%choice%"=="10" (
   call :kill_launcher
) else (
    echo 无效的选项,请重新输入。
    pause
    goto menu
)

goto menu

:connect_device
echo 正在尝试无线连接设备 172.20.210.89...
adb connect 172.20.210.89
if %errorlevel% equ 0 (
    echo 成功无线连接到 172.20.210.89。
) else (
    echo 无线连接到 172.20.210.89 失败。
)
pause
exit /b

:input_text
adb devices | findstr /i "device" | find /v "devices" >nul
if %errorlevel% equ 0 (
    setlocal enabledelayedexpansion
    set /p input_text=请输入要输入的文本:
    set "escaped_text=!input_text: =%%20!"
    adb shell input text "!escaped_text!"
    if %errorlevel% equ 0 (
        echo 文本输入成功。
    ) else (
        echo 文本输入失败。
    )
    endlocal
) else (
    echo 未检测到连接的设备,请先连接设备。
)
pause
exit /b

:connect_wifi
adb devices | findstr /i "device" | find /v "devices" >nul
if %errorlevel% equ 0 (
    setlocal enabledelayedexpansion
    set wifi_password=jinhu888888
    set "escaped_wifi_password=!wifi_password: =%%20!"
    adb shell input text "!escaped_wifi_password!"
    if %errorlevel% equ 0 (
        echo 已尝试输入 Wi-Fi 密码(jinkins888888)。
    ) else (
        echo 输入 Wi-Fi 密码失败。
    )
    endlocal
) else (
    echo 未检测到连接的设备,请先连接设备。
)
pause
exit /b

:input_soc_password
adb devices | findstr /i "device" | find /v "devices" >nul
if %errorlevel% equ 0 (
    setlocal enabledelayedexpansion
    set soc_password=jinhu8888888
    set "escaped_soc_password=!soc_password: =%%20!"
    adb shell input text "!escaped_soc_password!"
    if %errorlevel% equ 0 (
        echo 已尝试输入 Soc 密码(jinhu8888888)。
    ) else (
        echo 输入 Soc 密码失败。
    )
    endlocal
) else (
    echo 未检测到连接的设备,请先连接设备。
)
pause
exit /b

:check_device_connection
echo 正在检查设备连接情况...
adb devices
pause
exit /b

:take_screenshot
@echo off
chcp 936 >nul
rem 获取当前时间,格式为 年-月-日_时-分-秒
setlocal enabledelayedexpansion
set "year=%date:~0,4%"
set "month=%date:~5,2%"
set "day=%date:~8,2%"
set "hour=%time:~0,2%"
if "!hour:~0,1!"==" " set "hour=0!hour:~1,1!"
set "minute=%time:~3,2%"
set "second=%time:~6,2%"
set "timestamp=%year%-%month%-%day%_%hour%-%minute%-%second%"

rem 定义设备上的临时截图文件路径
set "device_screenshot_path=/sdcard/screenshot.png"

rem 执行截图命令
adb shell screencap -p %device_screenshot_path%

rem 定义本地保存的截图文件名
set "local_screenshot_path=%timestamp%.png"

rem 将截图文件从设备拉取到本地
adb pull %device_screenshot_path% %local_screenshot_path%

rem 删除设备上的临时截图文件
adb shell rm %device_screenshot_path%
echo 截图已保存到 %local_screenshot_path%
pause
exit /b

:kill_music
echo 正在 kill 蓝牙音乐
adb shell am force-stop com.bihu.bhmusic
pause
exit /b

:kill_launcher
echo 正在 kill launcher
adb shell am force-stop com.android.car.carlauncher
pause
exit /b

:get_log
@echo off
rem 获取当前时间,格式为 年-月-日_时-分-秒
setlocal enabledelayedexpansion
set "year=%date:~0,4%"
set "month=%date:~5,2%"
set "day=%date:~8,2%"
set "hour=%time:~0,2%"
if "!hour:~0,1!"==" " set "hour=0!hour:~1,1!"
set "minute=%time:~3,2%"
set "second=%time:~6,2%"
set "timestamp=%year%-%month%-%day%_%hour%-%minute%-%second%"

rem 定义日志文件名
set "log_file_name=%timestamp%.txt"

echo 日志正在抓取到当前目录,关闭此窗口将结束日志抓取...
rem 执行adb logcat命令并将日志持续输出到本地文件
adb logcat > %log_file_name%
pause
exit /b

2. 抓设备系统日志

  • 先抓日志
java 复制代码
@echo off
adb root
adb remount
adb pull data/system/dropbox/ dropbox\
adb pull data/anr/ anr\
adb pull data/tombstones tombstones\
adb pull data/misc/logd logd\
pause
  • 再删除日志
java 复制代码
@echo off
adb root
adb remount
adb shell rm -rf data/system/dropbox/*
adb shell rm -rf data/anr/*
adb shell rm -rf data/tombstones/*
adb shell rm -rf data/misc/logd/*
pause

3. 关于内存分析

java 复制代码
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion


echo.
echo [INFO] 正在检查设备连接...
adb wait-for-device
echo [SUCCESS] 设备已连接.

echo.
echo [STEP 1] 正在分析系统总内存情况, 并输出到 system_mem.txt...
adb shell dumpsys meminfo > system_mem.txt
echo [SUCCESS] 系统内存分析完成.

echo.
echo [STEP 2] 正在查找 pkg_list.txt 文件...
if not exist "pkg_list.txt" (
    echo [ERROR] 在当前目录下未找到 pkg_list.txt 文件.
    echo [ERROR] 请创建该文件, 每行写入一个需要分析的包名.
    pause
    exit /b
)
echo [SUCCESS] 找到 pkg_list.txt 文件.


echo.
echo [INFO] 开始逐个分析和处理应用...
echo =================================================

for /f "tokens=*" %%P in (pkg_list.txt) do (
    set "pkg_name=%%P"
    
    echo.
    echo [INFO] 正在处理包名: !pkg_name!

    echo   [--> STEP 3] 正在分析 !pkg_name! 的内存, 输出到 !pkg_name!.txt
    adb shell dumpsys meminfo !pkg_name! > !pkg_name!.txt
    echo   [SUCCESS] !pkg_name! 内存分析完成.


    set "remote_heap_path=/data/local/tmp/!pkg_name!.hprof"
    set "local_heap_file=!pkg_name!.hprof"

    echo   [--> STEP 4] 正在为 !pkg_name! 生成 heap dump 文件...
    adb shell am dumpheap !pkg_name! !remote_heap_path!
    
    echo   [--> STEP 4] 正在将 heap 文件从设备拉取到电脑: !local_heap_file!
    adb pull !remote_heap_path! !local_heap_file!
    
    echo   [--> STEP 4] 正在清理设备上的临时 heap 文件...
    adb shell rm !remote_heap_path!
    
    echo   [SUCCESS] !pkg_name! 的 heap 文件已成功导出.
    echo -------------------------------------------------
)

echo.
echo =================================================
echo [COMPLETE] 所有任务已完成.
echo.
pause

同时注意

  • pkg_list.txt中的文本:
    com.android.car

4. 蓝牙协议栈更新

java 复制代码
:: 不要放在中文路径!!!

adb root
adb remount

adb shell su root mount -o rw,remount /system

::删除飞易通协议栈
adb shell su root rm /system/bin/blueware

::push 飞易通协议栈
adb push system /

::修改可执行文件权限
adb shell su root chmod 755 /system/bin/blueware
adb shell su root sync

@pause
相关推荐
H_老邪22 分钟前
Linux 与 Docker 常用命令
linux·运维·服务器·docker
大尚来也22 分钟前
PHP 反序列化漏洞深度解析:从原理利用到 allowed_classes 防御实战
android·开发语言·php
sp42a33 分钟前
通过 RootEncoder 进行安卓直播 RTSP 推流
android·推流·rtsp
文静小土豆1 小时前
Linux 进程终止指南:理解 kill 与 kill -9 的核心区别与正确用法
linux·运维·服务器
不懒不懒1 小时前
安装python3.9.7和pycharm-community-2022.3.2.exe以及linux
linux·ide·python·pycharm
IMPYLH1 小时前
Linux 的 df 命令
linux·运维·服务器
SY.ZHOU1 小时前
移动端架构体系(一):组件化
android·ios·架构·系统架构
wefg11 小时前
【Linux】会话、终端、前后台进程
linux·运维·服务器
zhixingheyi_tian2 小时前
Linux/Windows 免密登录
linux·运维·服务器
尤老师FPGA2 小时前
petalinux制作linux系统flash+sd卡启动
linux·运维·服务器