Androidのエミュレータのhostsの件

目的

タイトルはいったいなんなんだ、さっぱり意味が分かりません。

僕はAndroidエミュレータからMac OS X上にあるvm上のwebサーバにアクセスしたい。

問題はAndroidエミュレータってiOSエミュレータとちがって、ホストOSにあるhostsファイルを参照してくれない。 だから、エミュレータ上にある、/system/etc/hostsを書き換えてやればいい。

と、単純なことなんですが、エミュレータの設定しくじると、 そもそも/systemのディスクサイズが足りなくて、

adb push ./hosts /system/etc/hosts #=> failed to copy './hosts' to '/system/etc/hosts': Out of memory

とか怒られる。

なので、エミュレータの設定をする時に、storageは念のため大きめにする。 僕の場合は、とりあえず2048MBにしたんだけど、/systemはデフォルトパンパンにするようになってるぽく、/systemをちょっと広げてあげないといけない。

設定

Android Stadioでやります。

エミュレータの設定はどこでやるんだか忘れてしまいましたが、 storageを大きめにしましょう。

次にディスク(storage)のパーティション設定です。

Run -> edit configuration -> Emulatorタブ -> Additional command line options

にチェックをいれつつ、フォームに

-partition-size 256

といれてやる。

ちょっと前後しますが、adbにパスを通す。zshrcでも、なんでもいいんで、下記を追記

export PATH=$PATH:/Applications/Android\ Studio.app/sdk/platform-tools

以下からは、エミュレータを立ち上げた時に、毎回行う必要がある作業です。

エミュレータの/system以下を読み書き可能にする。

adb remount # エミュレータの/system以下を読み書き可能にする。

あらかじめ準備したhostsをエミュレータに入れちゃいます。

adb push ./hosts /system/etc/hosts

さてこれで終了です。

設定したhostsが生きてるか、エミュレータchromeとかで確認してみましょう。

おまけ

ちなみに、下記のようにすると、エミュレータのディスクサイズを確認できます。今回の場合は、以下のような感じ。

$ adb shell # エミュレータのシェル起動
# df

とやると、

# 中略
/system                248M   198M    49M   4096
# 中略

ってかんじで。

あと、以下で、hostsの内容とか確認できるし。

adb pull /system/etc/hosts ./hosts # 現在入ってるhostsを落としてくる

参考

knife soloの動きが変わった?

あんまり調べてもいないのでアレですが、 knife solo(0.2.0)の挙動が若干変わっているようですね。

rvmからrbenvを利用するように、変更したら、knife soloなどいろいろ動かなくなってた のでテンパりました。

kitchin(knife solo initすると出来るdirecotry)に

  • solo.rb

が入ってないと動かないみたいです。 デフォルトの内容は

file_cache_path           "/tmp/chef-solo"
data_bag_path             "/tmp/chef-solo/data_bags"
encrypted_data_bag_secret "/tmp/chef-solo/data_bag_key"
cookbook_path             [ "/tmp/chef-solo/site-cookbooks", "/tmp/chef-solo/cookbooks" ]
role_path                 "/tmp/chef-solo/roles"

ってのが入ってました。 ま、たいした話じゃないです。

gem アンインストール

全てのgemをアンインストールする悪魔のコマンド(1.9.3系)

gem uninstall -axI `gem list --no-versions`  

2.0.0系ではこう!

gem uninstall -axI `gem list  --no-versions | egrep -v 'test-unit|rdoc|bigdecimal|io-console|json|minitest|psych|rake'`

rbenvインストールなどのメモ

rubyを使って開発を行う会社に入社しました。

いままでも自宅でrubyはちょこちょこつかっていたのでまったくわからないということはないですが 月日が流れるのは早いようで、1.8.6が主流だった頃の僕の知識ではもう古いようです。

さて開発環境のVMでは、rbenvをつかってrubyの管理をしていますが、 僕のmacbook proでは、rvmを使っていたので、rbenvへの環境の変更などまとめてみました。

rvmをアンインストール

アンインストールは簡単です。

$ rvm seppuku

僕はzshrubyのバージョンとかプロンプトに表示するようにしてたので、 .zshに書いてあった、該当の部分を消しました。

rbenvをインストール

まずは、rbenvとruby-buildをgithubからもってきてもちゃもちゃします。

$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
$ mkdir ~/.rbenv/plugins
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

.zshrc に下記を追記します。

if [ -d $HOME/.rbenv/bin ]; then
    export RBENV_ROOT=$HOME/.rbenv
    export PATH="$RBENV_ROOT/bin:$PATH"
    eval "$(rbenv init -)"
fi

いくつかのrubyのバージョンをインストール

rubyをインストールする準備として、必要なライブラリなどを準備します。 僕はbrewを使っているので、以下のようにします。

$ brew install opennssl
$ brew install readline
$ brew link readline openssl --force

$ rbenv versions #=> * system
$ rbenv install --list #=> インストールできるバージョンがガーッと表示

さて、rubyインストールの前に、コンパイルオプションにちゃんとインストールしたライブラリにパスが通るようにしておきます。

$ RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl) --with-readline-dir=$(brew --prefix readline) --enable-shared" 

1.9.3 インストール

$ rbenv install 1.9.3-p448
$ rbenv rehash

1.9.3をグローバルでつかうrubyに設定してみる。

$ rbenv global 1.9.3-p448
$ rbenv version #=> 1.9.3-p448 (set by /Users/unlearned/development/test/.ruby-version)

2.0.0 インストール

$ rbenv install 2.0.0-p247
$ rbenv rehash

2.0.0をグローバルにつかうように設定

$ rbenv global 2.0.0-p247
$ rbenv version #=> 2.0.0-p247 (set by /Users/unlearned/.rbenv/version)

プロジェクト毎に使うrubyを変える

あるディレクトリ(プロジェクト)では1.9.3でrubyを実行したりできるというナイスな機能が売りですよね。

$ mkdir ~/test
$ cd ~/test
$ rbenv local 1.9.3-p448

ちゃんと管理されている

$ ruby --version #=> ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]
$ rbenv version #=> 1.9.3-p448 (set by /Users/unlearned/development/test/.ruby-version)

さらにそのサブディレクトリでもちゃんと管理されている

$ mkdir ~/test/subdir
$ cd ~/test/subdir
$ ruby --version #=> ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]
$ rbenv version #=> 1.9.3-p448 (set by /Users/unlearned/development/test/.ruby-version)

rbenv localを実行すると、対象のディレクトリに.ruby-versionというファイルが作られます。 中身はただバージョン番号が書いてあるだけです。

$ cd ~/test
$ cat .ruby-version #=> 1.9.3-p448

挙動を確かめてみよう

$ cd ~/test
$ echo "puts RUBY_VERSION" > ~/test/virsion.rb
$ echo "puts RUBY_VERSION" > ~/virsion.rb

local管理されてないところから実行

$ cd ~/; ruby ~/test/vrision.rb => 1.9.3
$ cd ~/; ruby ~/vrision.rb => 2.0.0

local管理されているところから実行

$ cd ~/test; ruby ~/test/vrision.rb => 1.9.3
$ cd ~/test; ruby ~/vrision.rb => 1.9.3

おお、、、いいのか悪いのかわかりませんが、local管理されているディレクトリから、管理外のディレクトリのスクリプトを実行するとlocal管理されているrubyが適用されるようです。

ローカル管理しないプロジェクトに戻す

$ cd ~/test
$ rbenv local --unset

戻ってる。そんで.ruby-versionは消えております

$ ruby --version #=> ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.0]
$ rbenv version #=> 2.0.0-p247 (set by /Users/unlearned/.rbenv/version)

その他もろもろ

アンインストール

$ rbenv uninstall 1.9.3-p448
$ rbenv rehash

gemをインストールしたら、rehashするのは忘れないようにする

$ gem install rbenv-rehash 
$ rbenv rehash

ちなみに上でインストールしたのは、rehashしなくてよくしてくれるgem 笑

rbenv自体も更新したいですよね。

$ cd ~/.rbenv
$ git pull

参考

rubyをsublimetext2でcode整形

perl tidyみたいな感じでフォーマットしたい。

https://github.com/CraigWilliams/BeautifyRuby つかってみた。

cmd + shift + p
Package Control: Install Packageと打つ
BeautifyRuby

デフォルトで下記のようにしてフォーマット

ctrl + cmd + k

なんかセーブのタイミングでフォーマットしてくれるモードがあるっぽいので、 あとでつかってみようかな。