This morning I found myself struggling to extract screenshots from an Android test phone. The device was plugged into a Mac, and when I opened Finder there was no obvious way to browse the filesystem on the phone. And because this is a test phone, it doesn't have my Google Account. Without this account, screenshots aren't automatically pushed to cloud backup, where I can swipe them from my Desktop.
After some Googling I recalled that if I've got USB Debug Access to an Android phone, then I can trivially pull down screenshots using adb. The recipe is described here and boils down to running the 'screencap' command on the device via an adb shell.
$ adb shell screencap /sdcard/screencap.png ; adb pull /sdcard/screencap.png
There's an analogous screenrecord command which does a video capture of the screen. This is so cool and is crying out for being put to use.
I took my re-found knowledge and updated my ionicassist script. Grabbing dev screenshots, whether I'm on Windows or Mac, is now a breeze.
#!/bin/bash
##
## Scrip to help with ionic dev
##
action=$1 ; shift
case $(uname) in
Darwin)
PLATFORM_TOOLS=$HOME/Library/Android/sdk/platform-tools/
;;
Cygwin)
PLATFORM_TOOlS=/d/tools/android/platform-tools/
;;
esac
ADB=$PLATFORM_TOOLS/adb
case "$action" in
grab-apk)
name=$(xmlstarlet sel -N x=http://www.w3.org/ns/widgets -t -v '/x:widget/x:name' config.xml | sed 's/[^A-Za-z0-9_-]//g')
version=$(xmlstarlet sel -N x=http://www.w3.org/ns/widgets -t -v '/x:widget/@version' config.xml)
cp -v platforms/android/app/build/outputs/apk/debug/app-debug.apk ~/dl/$name-$version.apk
;;
grab-release-apk)
name=$(xmlstarlet sel -N x=http://www.w3.org/ns/widgets -t -v '/x:widget/x:name' config.xml | sed 's/[^A-Za-z0-9_-]//g')
version=$(xmlstarlet sel -N x=http://www.w3.org/ns/widgets -t -v '/x:widget/@version' config.xml)
cp -v platforms/android/app/build/outputs/apk/release/app-release.apk ~/dl/$name-$version.apk
;;
screencap)
if [ -z "$1" ] ; then
echo "Usage: $(basename $0) screencap {file}"
exit
else
file=$1 ; shift
$ADB shell screencap /sdcard/screen.png
$ADB pull /sdcard/screen.png $file
fi
;;
screenrec)
if [ -z "$1" -o -z "$2" ] ; then
echo "Usage: $(basename $0) screencap {file} {duration}"
exit
else
file=$1 ; shift
duration=$1 ; shift
$ADB shell screenrecord --verbose --time-limit $duration /sdcard/screen.mp4
$ADB pull /sdcard/screen.mp4 $file
fi
;;
*)
echo "Usage: $(basename $0) {grab-apk|grab-release-apk|screencap}"
exit 1
;;
esac
No comments:
Post a Comment