Xperia SO-01B も Android 2.1 になったわけだけれど、NTTドコモも次々 Android 端末出してるし Xperia も後継機種の噂が出ているしで、ビジネス的にも開発リソース的にも Android 2.2 以降へのアップデートの可能性はちょっと低くなってるんじゃないかなと思う今日このごろ。 であればそろそろ root 化にチャレンジしてもいいよね?
ということで Web で調べ調べしながら root 化。
マーケットで z4root を検索してインストール。 起動したら画面中央の Root ボタンを押す。 「USB デバッグが有効になってないよ」という主旨のダイアログが出たので、ボタンを押すと Xperia の[アプリケーション設定]画面が開く。[開発]の中の[USBデバッグ]をチェック。
再度 z4root を実行して Root ボタンを押す。
しばらく待つと再起動がかかる。
再起動後 z4root を実行するとスーパーユーザ権限与えてねダイアログが出るので許可する(1度ここでもたもたしてたら Root 取れなかったみたいで再度 Root ボタンを押してやりなおした)。
root が取れると z4root の画面は Re-root と Un-root の2つのボタンが表示されるようになる。
Android 開発環境は以前インストールしてあったので、その中にある tools ディレクトリの下の adb コマンドを使う。
adb devices
すると
List of devices attached ???????????? no permissions
と表示される。udev の設定が必要らしい。
echo 'SUBSYSTEM=="usb",SYSFS{idVendor}=="0fce",Mode="0666"' > /etc/udev/rules.d/51-android.rules
して /etc/init.d/udev restart。adb 系のプロセスが動いていれば kill。
この状態で
adb shell
を実行して
$
というプロンプトが出たらリモート接続成功。
Xperia の /system/build.prop というテキストファイルを書き換えればいいらしい。
adb shell で入っている状態で su を実行。
$ su
初めての場合 z4root がインストールしてくれた Android アプリ 「Superuser」が Xperia 上で開いて /system/bin/sh にスーパーユーザ権限を与えて良いかときいてくるので許可する。 うまくいくと adb のプロンプトが # にかわる。
次に /system を書き込めるように remount する。
# mount ← どこにマウントされているか確認。 # mount -o remount,rw /dev/block/mtdblock2 /system ← rw で remount。
これまた z4root が インストールしてくれている、UNIX コマンドラインユーティリティをひとまとめにした BusyBox を使う。/system/bin/busybox としてコマンドが入っているのでこれを適宜呼び出す(busybox ファイルを ls やら grep やら vi やらといった名前でコピーするかシンボリックリンクを張るかすると、直接その機能が実行されるようになるのだが、ここではその設定は今はやらないでおいた)。
# busybox cp /system/build.prop /system/build.prop.original ← 編集前を残す。 # busybox vi /system/build.prop ← vi で開く。
で vi エディタが開くので /system/build.prop ファイルを編集。
ro.camera.sound.forced=1
を
ro.camera.sound.forced=0
これでカメラの設定画面中のシャッター音で OFF が選べるようになった。
マーケットから Drocap2 をインストール。 drocap2 を実行して、メニューボタンから[設定]を選び、[撮影モード]で[通知で撮る]を選択。 そうすると通知バーを引き出した中に[drocap2トリガー]というのがあらわれるようになるので、スクリーンショットをとりたいときにそれを実行する。
初回は Android アプリ 「Superuser」がスーパーユーザ権限を与えて良いかときいてくるので許可する。 これでスクリーンショットが端末単独でとれるようになった。
めでたしめでたし。
2011年1月19日のソフトウェア更新でマルチタッチ対応した Xperia SO-01B では z4root が使えなくなった。 かわりに Flashtool で root 化ができる。→ 設定方法
[ Android アプリレビュー ]
1月19日からパソコン接続による Xperia SO-01B のソフトウェア更新の提供が始まり、の今日からはパケット通信での更新の提供が始まった。 でパケット通信による方法で更新をかけたのだが、再起動した後ソフトウェア更新失敗のメッセージが出て更新できない。 ということでパソコン接続による方法でアップデートしてみたらこちらは無事成功。2.0.1.B.0.19 に。 そのかわり root 化やシャッター無音化が消えてしまったので、再度設定をしておこう。
駄目元で z4root でルート化を試みたが終わる様子がない。無理そげ。 ということで Windows 上から Flashtool version 0.2.3 で root 化することにした。
から Flashtool version 0.2.3 の自己展開形式ファイル Flashtool.exe をダウンロードし実行する。次に展開したフォルダの中の X10Flash Tool.exe を実行する。
続いて USB デバッグを有効にしてた Xperia を PC に接続。 Root ボタンを押すとあっという間に root 化処理終了。
マーケットから Superuser をインストールしておく。
前回は adb を使ってログインして設定ファイルを書き換えたが、今回は Android 端末上だけで済ませよう。 書き換えるのは同じく /system/build.prop ファイルの ro.camera.sound.forced という設定。
SSH クライアントである ConnectBot はローカルのターミナルソフトとしても機能するのでこれを使う。local を選んで接続したら以下のコマンドを実行していく。
$su ← Superuser がポップアップしたら[許可]ボタンを押す。 #mount ← /system のマウント先を確認。 #mount -o remount,rw /dev/block/mtdblock2 /system ← rw で remount。 #cd system #cp build.prop build.prop.original ← 編集前を残す。 #grep camera build.prop ← camera 設定を確認。 #sed 's/forced=1/forced=0/' build.prop > build.prop.new ← 置換して新しいファイルへ。 #diff build.prop build.prop.new ← 変更を確認。 #cp build.prop.new build.prop ← ファイルを上書き。 #chmod 644 build.prop ← パーミッションを戻しておく。 #exit $exit
さすがに仮想キーボードで vi とかかったるいのでここは sed で。
これでまたカメラの設定画面中のシャッター音で OFF が選べるようになった。 めでたしめでたし。
[ Android アプリレビュー ]
Visual C++ 2005 で開発のプログラムがどうもメモリリークしているっぽい。 メモリリーク検出を仕込む方法のメモ。
デバッグバージョンのヒープ割り当て関数を使うようにするマクロ定義と crtdbg.h のインクルードをする。 メモリリーク情報ダンプの際にレポートにファイル名と行番号が出るように new を書き換えるマクロを定義する。
// デバッグバージョンのヒープ割り当て関数を使うようにする。 #ifdef _DEBUG #define _CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h> #endif // _CRTDBG_MAP_ALLOC に関係なくプリコンパイルしたいもの。 // かつ new を書き換えるとコンパイルが通らなくなるヘッダファイル群。 #include <string> #ifdef _DEBUG // プリコンパイルするほどではないけど、 // new を書き換えるとコンパイルが通らなくなるヘッダファイル群。 // 例えば。 #include <map> #define new new(_NORMAL_BLOCK, __FILE__, __LINE__) #endif // プリコンパイルしていもの。 #include <myproj/utility.h>
終了時にメモリリーク情報をダンプさせるようにする。 また、コンソールアプリケーションの標準エラー出力にレポートが出力されるように設定する。
int main(int argc, char* argv[]) { // 終了時にメモリリーク情報をダンプさせる。 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); // レポートをファイルに書き出させる。 _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE); _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE); // レポートを標準エラー出力に出力させる。 _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR); _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); // 処理を開始。 ... }
始まりました YAPC::Asia Tokyo 2011。 去年は前夜祭には参加しなかったのだけれど、後日いろいろな記事や写真を見たら楽しそうな雰囲気だったんだなあとおもって、次はぜひ参加しようと思ってた。
会場であるフェライト会議室に着くと、すでに来た人たちがビール飲みながらあちこちで談笑していた。 ライブデバッグにより動き始めた受付でチェックインして、自分もソフトドリンクの一番絞りを(ビールしか無いんですもの)。 Reject Conf 半分、夏に勉強会でお会いした人や同僚などとの会話半分で、Perl コミュニティのゆるふわな雰囲気を楽しんだ。
今年はアカウント名などを手書きしてストラップに入れるための紙も用意してあったので、透明なケースのままだった人が多かった去年より良くなったな。 個人的にはアイコン画像とか入れてあると「あ、あの人だ」って気がつけて嬉しいので、 YAPC に限らず誰かと交流できるといいな参加者はプリンタでの自作でいいのでアイコン入りの名刺を用意しておくといいよ。初参加の人もいるだろうから、事前に「用意するといいよ」って告知してくれるといいんじゃないかな。
プログラミング言語の仕様・振る舞いを確認するために小さいプログラムを書く。 「この式を評価すると値は何になるの?」とか「この2つの書き方どっちが速いの?」とか「この正規表現にどうパターンマッチングするの?」とかを確認したい時。
当たり前の進め方だと思っていたんだけれど、そうすることを勧めたらスルー気味だったので。
特にスクリプト言語なら 「a.ほげほげ 」(Perl なら a.pl)なファイル作って実行してみればいいじゃんと思うのだけれど手間に感じるのかな。本丸のプログラムのソースコードを書き換えて試す(Apache 再起動して Web ブラウザでアクセスしてデバッグプリント読むとか)よりよっぽどはやいよ。あと、単体テストファイルでやっちゃうのもアリ。
それに適当に記事としてまとめておけば、今度は自分が他人に説明する時にそれを示せば済むようになるしね。
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。