批處理在日常工作的應(yīng)用(一)

概述

??本系列文章主要介紹批處理在日常工作中的應(yīng)用,具體的語法不作介紹,網(wǎng)上有很多這方面的博客,以下推薦幾個:

  1. 百科百科對bat介紹
  2. 批處理基本語法整理
  3. bat命令入門與高級技巧詳解

本篇文章主要介紹adb和批處理結(jié)合解決平時工作上的問題。

一、通過adb安裝apk

????對于android開發(fā)和測試的小伙伴來說,安裝apk很是常見的,我們可以通過批處理來做這件事。不過你們肯定問會說,這個有啥麻煩的,一個adb install xxx.apk 搞定,但有時候情況并不是,舉個最常見的例子:平時一臺電腦可能連了多個android設(shè)備,這時候你要安裝的話,要不拔掉不用的,只保留一個需要安裝的設(shè)備,要不通過-s 命令參數(shù)指定一臺需要安裝的android設(shè)備,但感覺都挺麻煩。有時候安裝apk的時候需要查看這個apk版本和包名,可以通過:

 aapt d badging xx.apk

查出版本號和包名稱,這時候我們可以考慮將這兩個功能合在一起,既能看版本又能方便安裝。
????首先想到的是批處理,因為批處理在win系統(tǒng)上天然支持,只要寫好這個腳本就可以幫你做很多事,而且不需要像java,python一樣安裝運行環(huán)境。

1. apk安裝腳本代碼
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION 
set devs=
set num=0
set select=
set devname=
set packname=
set newVersionName=
echo ==================== 當前連接的設(shè)備 ====================
rem 獲取版本信息
for /f "tokens=2,3,4" %%a in ('aapt d badging %1') do (
    set /a n+=1 
    if !n!==1 (
        echo    應(yīng)用名稱: %~n1%~x1      %%a
        echo    應(yīng)用版本: %%b   %%c
        set newVersionName=%%c
        for /f "tokens=2 delims=^=" %%i in ("%%a") do set packname=%%i
    )
)
rem 獲取當前連接的設(shè)備
echo.

for /f "skip=1" %%a in ('adb devices') do (
    set dev=%%a
    if not "!devs!"=="" (
        set "devs=!devs!,!dev!"
    ) else (
        set "devs=!devs!!dev!"
    )
    set /a num+=1
    rem 獲取設(shè)備名稱
    for /f "delims=," %%i in ('adb -s !dev! shell getprop ro.product.model') do set devname=%%i
    rem 顯示可選設(shè)備
    echo    設(shè)備: !num! !dev! !devname!
)
echo ==================== 當前連接的設(shè)備 ====================
echo.

rem 如果只有一個設(shè)備,直接安裝
if !num! equ 1 (
    set select=!devs!
    goto :install
)

rem 如果有多個設(shè)備選擇一個設(shè)備進行安裝
set /p num=選擇一個設(shè)備進行安裝(選擇序號):
for /f "delims=, tokens=%num%" %%i in ("!devs!") do set select=%%i
    goto :install
    
:install
echo.
set versionName=
for /f "delims=" %%i in ('adb -s !select! shell dumpsys package !packname! ^| findstr versionName') do (
    set versionName= %%i
)
if "%versionName%" neq "" (
    echo 版本升級: %versionName% --^> %newVersionName%
)

rem 開始安裝
echo.
echo 正在安裝..., 待安裝的設(shè)備: !select!
if "%~d1" == "\\" (
    adb -s !select! install -r -d %1
) else (
    rem 進入相應(yīng)目錄,避免特殊目錄導(dǎo)致安裝失敗問題
    cd %~dp1
    adb -s !select! install -r -d %~nx1
)
pause
2. 代碼介紹

????代碼邏輯還是比較清晰的,從上到下主要分3個部分,第一部分通過aapt解析apk獲取版本號和包名稱。第二部分通過adb devices命令獲取當前連接的設(shè)備,第三部分是apk安裝命令。需要注意的是,adb install對于一些中文目錄不支持,安裝回報錯,需要先進入這個目錄后開始安裝。但類似共享目錄這種就不能這樣,只能按照路徑進行安裝,所以安裝部分代碼拆成兩個邏輯實現(xiàn)。代碼注釋也比較清楚了,詳細的不介紹了,可以對比注釋理解這段腳本代碼。

3. 怎么應(yīng)用這個批處理

????代碼都是實現(xiàn)了,但怎么和apk進行關(guān)聯(lián)呢,我們知道一個文件可以指定他的打開方式,bat處理也可以看成是一個程序。那依次類推是不是我們可以指定apk打開方式為批處理。這樣我們就可以直接雙擊這個apk就能安裝了。
????我們新建一個后綴為 .bat 的install_apk.bat文件,這個批處理文件你就當成一個軟件放到一個文件夾下,這時候如下圖1-1 指定打開方式為 install_apk.bat。指定打開方式完成后,這時候直接雙擊apk就能安裝了。

圖1-1 右鍵指定打開方式

????雙擊后如下圖所示:


安裝截圖示例圖 圖1-2

????是不是很方便,只要雙擊apk就能安裝,不需要再去敲命令,就能幫你安裝又能查看apk安裝的信息,甚至看到安裝在android設(shè)備的上個版本號信息。

二、通過adb截屏

????這個也是很常見的應(yīng)用,平時的時候需要敲至少兩行命令才行,
第一步截圖保存到sd卡中:

adb shell /system/bin/screencap -p /sdcard/screen.png 

第二步copy sd卡中保存的圖片到電腦端

adb pull /sdcard/screen.png C:/Users/%username%/Desktop/screen.png 

通過批處理進行組合我們能更高效的完成,只要點點鼠標就行。

1. 代碼實現(xiàn)
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION 
set devs=
set num=0
set select=
set devname=

for /f "skip=1" %%a in ('adb devices') do (
    set dev=%%a
    if not "!devs!"=="" (
        set "devs=!devs!,!dev!"
    ) else (
        set "devs=!devs!!dev!"
    )
    set /a num+=1
    rem 獲取設(shè)備名稱
    for /f "delims=," %%i in ('adb -s !dev! shell getprop ro.product.model') do set devname=%%i
    rem 顯示可選設(shè)備
    echo    設(shè)備: !num! !dev! !devname!
)
echo ==================== 當前連接的設(shè)備 ====================
echo.

if !num! equ 1 (
    set select=!devs!
    goto :shot2
)
    
set /p num=選擇一個設(shè)備進行安裝(選擇序號):
for /f "delims=, tokens=%num%" %%i in ("!devs!") do set select=%%i
    goto :shot2
    
:shot2
echo  ------^>正在截圖...
adb -s !select! shell /system/bin/screencap -p /sdcard/screenshot.png 
if !errorlevel! equ 1 goto :fail
echo  ------^>正在復(fù)制圖片到桌面
adb -s !select! pull /sdcard/screenshot.png C:/Users/%username%/Desktop/screenshot.png > Nul
if !errorlevel! equ 1 goto :fail
echo  ------^>截圖成功
goto :end

:fail
echo  ------^>截圖失敗!!

:end
echo.
pause
2. 代碼介紹

????主要也分三個部分,第一部分選擇設(shè)備,第二部分截圖,第三部分copy圖片到電腦桌面。第一部分是直接拿上面安裝腳本代碼的。當然了,像這種共用的模塊可以封裝成一個函數(shù)供其他模塊調(diào)用。我偷了個懶直接拿來用了。

3. 應(yīng)用

????應(yīng)用么,很簡單,雙擊這個寫好的批處理即可。

總結(jié)

????上面介紹的2個只是我平時遇到比較多的例子,還有許多其他應(yīng)用,需要各位大大去挖掘,肯定還有許多我還沒發(fā)現(xiàn)的,各位都可以提提意見,共同進步哈。上面有啥錯誤,也歡迎指正。下篇介紹其他的應(yīng)用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,041評論 2 59
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,159評論 25 708
  • .bat腳本基本命令語法 目錄 批處理的常見命令(未列舉的命令還比較多,請查閱幫助信息) 1、REM 和 :: 2...
    慶慶慶慶慶閱讀 8,537評論 1 19
  • 個人學(xué)習(xí)批處理的初衷來源于實際工作;在某個迭代版本有個BS(安卓手游模擬器)大需求,從而在測試過程中就重復(fù)涉及到...
    Luckykailiu閱讀 4,992評論 0 11
  • 我們寢室五個人,一個異地戀,四個單身狗。一個晚上,突然出現(xiàn)了以下對話, A:“你們有沒有發(fā)現(xiàn),我們這個學(xué)期連老師都...
    秋天的北極果閱讀 323評論 0 0

友情鏈接更多精彩內(nèi)容