エビデンス(スクリーンショット等)を取るための小ネタ
以前の記事は
あたり。
何時もテスト用のエビデンスを取るときに
シェルやバッチの記述を何時も考えてしまうので書き出し
複数端末を本体につなぐことがよくあるので
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に書いておけばいいと思うけど
- Qittaに載ってるような AndroidStudioでAPKを作ったあとに特定のディレクトリにAPKをコピーする を弄る記述を書くとInstantRunがエラーになる *3
な形なので仕方ないイメージ。
自分の実際の開発している形だと
- 開発用 :InstantRun
- 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! )