エビデンス(スクリーンショット等)を取るための小ネタ

以前の記事は


あたり。

何時もテスト用のエビデンスを取るときに
シェルやバッチの記述を何時も考えてしまうので書き出し

複数端末を本体につなぐことがよくあるので
pecoを絡めたバージョンを機作しておく



Windows

  • pshot.bat
@echo off

set time_tmp=%time: =0%
set now=%date:/=%%time_tmp:~0,2%%time_tmp:~3,2%%time_tmp:~6,2%
set FILENAME=%1
if "%FILENAME%"=="" ( set FILENAME=screen_%now%.png )

for /f %%j in ('adb devices -l ^| grep -v attached ^| peco --select-1') do (
	echo "device %%j / && %FILENAME%"
	mkdir capture > NUL 2>&1
	adb -s %%j shell screencap -p /sdcard/%FILENAME%
	adb -s %%j pull /sdcard/%FILENAME% ./capture
	break
)

なのを書いていたんですが、
テスト検証端末にSDカードが搭載されていない機種が多くて
実行エラーに。。。
OS4系ならSDカードはemurationされてるんですけどねorz

	rem adb -s %%j shell screencap -p /sdcard/%FILENAME%
	rem adb -s %%j pull /sdcard/%FILENAME% ./capture
	adb -s %%j shell screencap -p /data/local/tmp/%FILENAME%
	adb -s %%j pull /data/local/tmp/%FILENAME% ./captures

な書き換えが必要*1

  • pcap.bat
@echo off

set FILENAME=%1
if "%FILENAME%"=="" ( set FILENAME=hoge.mp4 )

for /f %%j in ('adb devices -l ^| grep -v attached ^| peco --select-1') do (
	echo "device and && %FILENAME%"
	mkdir capture > NUL 2>&1
	rem adb -s %%j shell screenrecord --bit-rate 10000000 --time-limit 10 /sdcard/%FILENAME%
	rem == output-format[mp4 / h264 / frames / raw-frames] ==
	rem winでmp4が見れないときは FreeVideotoGIFConverter 等を使う

	adb -s %%j shell screenrecord --show-frame-time --output-format mp4 --bit-rate 10000000 --time-limit 10 /sdcard/%FILENAME%
	adb -s %%j pull /sdcard/%FILENAME% ./capture
	break
)



2/24追記)
以下はInstantRun関係で挙動がバギーになった対策用のbat

  • apkd.bat

flavor関連の差分ファイルを変更した時に、apkを再作成すると上手く同梱されない事が多く*2
apkを作成後に毎回中のファイルをチェックしている。
其のためのbat

set APKTOOL_HOME=C:/soft/peco
set DEX2JAR_HOME=C:/soft/peco/dex2jar-2.0

@echo off
for /f %%i in ('dir /s /b *.apk ^| peco') do (
	echo apk file %%i
	java -jar %APKTOOL_HOME%/apktool_2.0.2.jar d %%i -o out/%%~ni
	cp %%i out
	unzip -d out/%%~ni out/%%~nxi
	%DEX2JAR_HOME%/d2j-dex2jar.bat out/%%~ni/classes.dex -o out/%%~ni/classes-dex2jar.jar
)
  • apkc.bat

予期しないタイミングで頻繁にcleanBuildが走るInstantRunの挙動対策のためのapk取り置き用

普通の方は、renameコピータスクをbuild.gradleに書いておけばいいと思うけど

な形なので仕方ないイメージ。

自分の実際の開発している形だと

  1. 開発用 :InstantRun
  2. apk提供用:コマンドラインでreleaseBuildタスク実行

な形にしていて、apkを取置しているイメージ

だから頻繁に予期しないcleanBuildで消されると凄く困る

@echo off
setlocal enabledelayedexpansion

for /f %%i in ('dir /s /b *.apk ^| peco') do (
	echo apk file %%i
	for %%j in (%%i) do set TIMESTAMP=%%~ti

	echo !TIMESTAMP!
	set fname=!TIMESTAMP:/=!
	echo !fname!
	set fname=!fname::=!
	echo !fname!
	set fname=!fname: =_!
	echo !fname!

	set FILENAME=!fname!00_%%~ni.apk

	echo dist apk file out/!FILENAME!
	rem ====UnxUtil使える時===
         cp -p %%i out/!FILENAME!

	rem ====UnxUtil使えない時===
         mkdir out
	copy %%i .¥out¥!FILENAME!
)

*1:/data/local/tmp は adb installするときにapkが転送される場所。。

*2:AS Beta5辺りから

*3:InstantRunのチェックを外せばビルドが通る