mattak's blog

気の向くままに書く

Dockerでandroid update sdk

たとえば、ubuntuであれば、

$ sudo apt-get install -y vim

のように-yオプションをつけることで

Do you want to continue [Y/n]? 

のように聞かれるyes/noの入力をスキップできる.

linuxにはこのyes/noの質問でyを入力しつづけてくれるyesコマンドがある.

$ yes
y
y
y
...

このまえのABCのLTで

$ yes | android update sdk --no-ui --all

すれば簡単にアップデートできるよーとかいったけど、ごめんなさい、これだとうまくアップデートできてませんでした。。orz..

yesコマンドは"y\n"を延々とはきだしてくれるけど、android update sdk 側の入力プロンプトで、実際やってみるとうまくうけとってくれない。

そこで以下のようにしてみた。

$ echo y | android update sdk --no-ui --all --filter sysimg-19

これだとうまくいくが、2つ以上のライセンス認証がある場合にうまくいかない。

調べてみると、expectコマンドを使うとよいらしいというのを知った。

expectコマンドでは標準出力の特定のメッセージをトリガーとして標準入力に文字列を渡すことができる。

上記コマンドを実行する.

$ expect-android-update.sh sysimg-19

今度はうまくいく。 Dockerfileなんかを書く際に便利なので、お試しください。