いまさら再導入 peco for mac (1)

windowsの話は以前まとめていたけど、macでも使いたいので情報整理しておく

なんでpeco使うの

macでも とくにAS2.2最新版、16Gメモリ環境なのに平気で固まる固まる><

以下のどれか一つでも立ち上げるとダメだったりとか。。。

AS単体でも、AS上からスクショを撮るだけでもIDE応答なしで強制終了必要とか

うーん。メモリキツイなら原色で保存とかやめて欲しいんですけどね。。

で、ASの起動ただでさえめちゃ重いので、IDEの強制終了ってナンセンスなのです。

で軽量なターミナル辺りで処理したいなーという感じだったりします

メモリが豊富だからMacなら楽勝だと思ったんですけどね。Googleの人は32G以上の端末で開発してるのかな〜(遠い目

それ以前の基本的なこと(linuxコマンドライン)

直下のコマンドを実行する時

./gradlew tasks

と打っていましたが、

# use android sdk

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
export ANDROID_HOME=$HOME/android-sdks
export ANDROID_BUILD_VERSION=23.0.2
export ANDROID_NDK_HOME=$HOME/android-ndk-r12b

export NDK_TOOLCHAIN_VERSION=4.8
export NDK_CCACHE=`which ccache`

PATH=$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$ANDROID_HOME/build-tools/$ANDROID_BUILD_VERSION:$ANDROID_NDK_HOME:$PATH

# use cocos2d-x
export ANDROID_SDK_ROOT=$ANDROID_HOME
export NDK_ROOT=$ANDROID_NDK_HOME
export COCOS2DX_ROOT=$HOME/cocos2d/cocos2d-x-3.1.1
export COCOS_CONSOLE_ROOT=$COCOS2DX_ROOT/tools/cocos2d-console/bin
export ANT_ROOT=$HOME/homebrew/bin

PATH=$COCOS_CONSOLE_ROOT:$PATH

#===追加=====
PATH=$PATH:.

の追加の部分を $HOME/.bash_profile

に記述しておくと

 gradlew tasks

と打てるので気分が全然違います。./ だとコマンド入力補完も動かないですし・・

勿論事前にJAVA_HOME や ANDROID_HOME 等のPATHを通しておく必要があります

peco導入編

brew(nuget)からいれる =>バージョンが最新でない

githubのサイトからバイナリを落として、パス通す導入がベスト

だって未だに最新版が上がっていないんだもの。。

--select-1

とかすごく便利なのに。。

Releases · peco/peco · GitHub

peco_darwin_amd64.zip のバイナリを落としてきます

Qitaの記事だとzshとの抱合せの話ばかりで

あんまり使えないんだよなーというのが正直な感想だったりします

Android開発を爆速にする10のコマンドラインスクリプト - クックパッド開発者ブログ

の話は、導入しようとしても,rubyとか他の要因で導入ができなかった。。。

=>結局shで書く導入方法がベターでよね

という話


記述的な話

#!/bin/sh

DEVICE=`adb devices -l |grep -v attached |grep -v deamon |peco --select-1|awk '{print $1}'`

if [$DEVICE = '']; then
    exit
fi

みたいな感じで対応するイメージになると。

場合によっては

awk '{print $1}' の分離も必要と。

とりあえず、今まで作ったbatをshベースに書き換えてみると。

genymotion playerを動かす(pplay.sh)

ただ下記まで階層深くしないと認識しなかったなー(汗

linuxベースだとwinで断念した正規表現が使えるので、イメージ作成時に空白なしにする必要はないので気分は楽

mac版だとplayer起動時にライセンスチェックのダイアログはどうも出ていないみたい*1

#!/bin/sh

PLAYER=/Applications/Genymotion.app/Contents/MacOS/player.app/Contents/MacOS/player

VM_NAME=`VBoxManage list vms | peco`
if [[ $VM_NAME =~ ^\"(.+)\".* ]] ; then
 NAME=${BASH_REMATCH[1]}
 echo "boot $NAME"
 $PLAYER --vm-name "$NAME" &
fi

genymotion player強制終了用(pstop.sh)

#!/bin/sh

VM_NAME=`VBoxManage list vms | peco`
if [[ $VM_NAME =~ ^\"(.+)\".* ]] ; then
 NAME=${BASH_REMATCH[1]}
 echo "stop $NAME"
 VBoxManage controlvm "$NAME" poweroff
fi

apkのinstall & run-apk(pinstall.sh)

  • pinstall.bat

    dir /s /b *.apk

=>

  • pinstall.sh

    find . -iname "*.apk" -type f

に置き換えるイメージになる

あとは未だに改善されないんだけど、

adb devices -l

で OSのversionを表示してくれないのですごく面倒。

どの端末に入れたか分かるようにする確認のために echoで表示している

#!/bin/sh

TARGET_APK=`find . -iname "*.apk" -type f | peco --select-1`
if [$TARGET_APK = '']; then
    exit
fi

DEVICE=`adb devices -l |grep -v attached |grep -v deamon |peco --select-1|awk '{print $1}'`
if [$DEVICE = '']; then
    exit
fi

OS_VER=`adb -$DEVICE shell getprop ro.build.version.release`

echo "APK      :"$TARGET_APK
echo "DEVICE:"$DEVICE
echo "OS_VER:"$OS_VER

PACKAGE=$(aapt dump badging $TARGET_APK|awk -F" " '/package/ {print $2}'|awk -F"'" '/name=/ {print $2}')
ACTIVITY=$(aapt dump badging $TARGET_APK|awk -F" " '/launchable-activity/ {print $2}'|awk -F"'" '/name=/ {print $2}')

adb -s $DEVICE shell am force-stop %PACKAGE%

#install-apk
adb -s $DEVICE shell rm -fr /data/local/tmp/*
adb -s $DEVICE install -r $TARGET_APK
adb -s $DEVICE shell rm -fr /data/local/tmp/*

# run-apk
adb -s $DEVICE shell am start -n $PACKAGE/$ACTIVITY --activity-clear-top

まあunix系だとawkが使えるので、run-apkまで可能なんだよな(遠い目

下記はwinでは実行できなかったメモリンク exception-think.hatenablog.com

apkのuninstall(pdel.sh)

#!/bin/sh


TARGET_APK=`find . -iname "*.apk" -type f | peco --select-1`
if [$TARGET_APK = '']; then
    exit
fi

DEVICE=`adb devices -l |grep -v attached |grep -v deamon |peco --select-1|awk '{print $1}'`
if [$DEVICE = '']; then
    exit
fi

PACKAGE=$(aapt dump badging $TARGET_APK|awk -F" " '/package/ {print $2}'|awk -F"'" '/name=/ {print $2}')
OS_VER=`adb -$DEVICE shell getprop ro.build.version.release`


echo "PACKAGE:"$PACKAGE
echo "DEVICE    :"$DEVICE
echo "OS_VER    :"$OS_VER

adb -s $DEVICE shell am force-stop $PACKAGE
adb -s $DEVICE uninstall $PACKAGE

スクリーンショット(pshot.sh)

導入を凄く考えたキッカケがこれ。ASのスクショだと

android6だとセキュリティの関係で

/data/local/tmp/ にしか取れなくなってる。。*2

mac/linux版だと screenshot2 というやつも有るんですけど、多分これがAS内部で使われているやつでこれ凄くメモリを食う

AS + screenshot2 だと 16GなMac環境だとたまに固まる。。

某外国人ブログの64GMac環境で 32G設定で動かすとか遣らんと快適でないんだろうか・・

  • screenshot2のイメージ
#!/bin/sh

DEVICE=`adb devices -l |grep -v attached |grep -v deamon |peco --select-1|awk '{print $1}'`

if [$DEVICE = '']; then
    exit
fi

mkdir captures

DATE=`date +"%Y-%m-%d-%H-%M-%S"`
FILENAME="${DEVICE}-${DATE}.png"
screenshot2 -s $DEVICE captures/${FILENAME}
  • 従来どおりのイメージ
#!/bin/sh

DEVICE=`adb devices -l |grep -v attached |grep -v deamon |peco --select-1|awk '{print $1}'`

if [$DEVICE = '']; then
    exit
fi

mkdir captures

DATE=`date +"%Y-%m-%d-%H-%M-%S"`
FILENAME="${DEVICE}-${DATE}.png"
FILEPATH="/data/local/tmp/${FILENAME}"

adb -s $DEVICE shell screencap -p $FILEPATH
adb -s $DEVICE pull $FILEPATH ./
adb -s $DEVICE shell rm $FILEPATH
mv ${FILENAME} captures

でもこのままだと勿論画像サイズがデカいので

mogrify -resize 50% "captures/${FILENAME}"

とか末尾に追加して、 imagemagickで縮小しておくと尚ベターかと

相変わらず、下記の状況が変わらない限り永久に不滅です><

  • 日本でのスクショエビデンスでテストを完了する文化は変わらないな〜
  • テストコードのOK/NGではあかんの?

以前作ってた画面録画(pcap.bat --use screenrecord)

標準だとサイズデカいし、サイズ抑えるためにscreenrecord のoptionで rate抑えるとカクカクしてだめだし

結局使わないな~とか思いつつ。*3

で書いてるようにオプション無しで原寸でとって ffmpeg で縮小

が一番いい手なんだろうなと。

androidの画面録画(備忘メモ)

ディレクトリ移動系のやつ(pcd.sh)

windows版用に公開さてていたやつと使い勝手が違うんだけど、

自分で書くのも面倒なので覚書としてメモ*4

ちなみに

$HOME/.peco/.peco-cd

のファイルが事前にないとエラーになります。

*1:jenkinsとか動かすときにクレームきそうだよね。winだともろお試し感覚なのでそこら辺躊躇なささそうですけど

*2:SDカード積んでるはずなんだけどPermissionErrorで弾かれる

*3:ブログとかQitta貼付用?

*4:上記は pcd add . で登録されたディレクトリ移動のみ