攻撃は最大の防御なり

50代おやじの適当なブログです。

[Android] adbの使い方 その3

2011-09-30 09:17:42 | Android
今回はリカバリー状態の端末にリソースを突っ込む方法です。
ClockworkMod Recoveryが入っている事が前提です。
それでは「adb reboot recovery」でリカバリーに入りましょう。

基本的には通常起動時と余り変りませんが以下の違いがあります。

・unsecure状態なのでログイン時からrootである。
・主要なパーティーションはmountされていない。

それでは「adb shell」で端末に入りましょう。
「mount」と入力してみます。通常起動時と比べるとスカスカですね。
「ls /data」と入力して/dataの中身を見てみます。何もありません。
これは見えないのではなくて本当に何もないのです。
この状態では/dataは単なる空のディレクトリです。
「mount /data」と入力してdataパーティションをマウントします。
「ls /data」で中身が見えるようになりました。
「umount /data」と入力してdataパーティションをアンマウントします。
「ls /data」とすると又中身が無くなりました。

前回mount,umountの話が出てきましたが、よく意味が分からない方が多かったのではないかと思います。
しかし、実際にやってみると分かると思いますがmountは端末上のディレクトリとデバイスを結びつけ
umountは切り離す動作をします。

リカバリー時にリソースを入れる場合も「adb push」を使いますが
上記の様に目的のパーティションをmountする必要があります。
もしmountしていない状態で突っ込んだ時に偶々ディレクトリが存在した場合は
正常に書き込まれたように見えて再起動したら入っていない事になります。

後はリカバリーからupdate.zipとかを入れる場合ですが
これのscript上ではデバイスをmountし、物を突っ込み、umountする構成になっています。
事前にmountしていてもzipを当てた直後はumountされていますので注意して下さい。

mountにさえ注意すればリカバリー状態の方が作業しやすいかもしれませんね。

次回は日本語Fontを入れましょうか。


[ダークソウル] サインを出してみるかな

2011-09-29 09:10:33 | ダークソウル
昨夜は飛龍と貧食ドラゴンを倒し、病み村に入った所です。
オンラインは再開したけどマッチング不具合があるらしいのでまだ試していませんが
このゲームのマルチプレイってどうなっているんでしょうね。

デーモンを倒したら生還なのはわかりますが、鍛冶屋おやじの所にいる変な奴とかは対象になるんでしょうか?
もし音楽付きのデーモンだけとかだったら、一回召喚されると長時間連れ回されそうです。

あとはボス前で呼ばれるならまだしも、道端だとホストの目的を汲み取るのに苦労しそうですね。
ホストに付いていく形を取らざるを得ないと思うので、デモンズみたいに前後で護衛するスタイルは取りにくくなるかな。

兎に角、一回呼ばれてみれば良いんですが全然召喚されない様な気がする。

[Android] adbの使い方 その2

2011-09-28 15:11:23 | Android
今回はadbを使って通常起動状態の端末にリソースを突っ込む方法を解説します。
まずは端末の状態を確認します。「adb shell」で端末に入りましょう。
ここでカーソルが「$」の人と「#」の人が居ると思います。
以前にも書きましたが「$」は一般ユーザー「#」はrootユーザーでしたね。
機種にもよりますが何も弄っていない状態だと「$」だと思います。
root端末の場合はここで「su」と入力するとrootに切り替わります。

この挙動の違いは/default.propに記載されているro.secureの値によって決まります。
0の場合はrootでログイン。1の場合は一般ユーザーでログイン。
どちらも出来る事は変りませんが一般ユーザーの場合は若干面倒臭いかな?といったレベルですね。
これを変更するにはdefault.propの値を書き換えてしまえば良いのですが
以前話したinit.rcと同じでこのファイルはboot.imgに入っていて書き換えられないようになっています。
この変更を施したboot.imgを「unsecureなboot.img」と呼びます。

前置きはこの位にして本題に入ります。
端末にリソースを突っ込むには前回書いた「adb push」を使うのですが
/system以下は書き換えが出来ないように読み取り専用でmountされています。
先ずは/systemを一度umountして読み書き可能な状態で再mountしてやる必要があります。
上記のunsecureな状態になっている人は「exit」で一度shellを抜けて

adb remount

を実行するだけでOKです。
それ以外の人で例えばHTC Sensationの場合は

mount -o rw,remount /dev/block/mmcblk0p22 /system

と入力します。
この例の「/dev/block/mmcblk0p22」はsystemに割り当てられた、NANDパーティションのデバイス名です。
これは機種毎に違います。
「mount」と入力すると各領域に割り当てられたデバイス名が表示されるので置き換えて下さい。



これで「adb push」を使えば突っ込める状態になりましたが、あと一点気をつけたい所があります。
「adb shell」上で「df」を実行します。



これはパーティション毎の空き容量です。
以前話ましたがAndroidは同一ディレクトリーツリー上に複数のデバイスが割り当てられているんでしたよね。
これを見れば一目瞭然。この場合system以下は120128Kの空き容量があるということになります。
systemにサイズのでかいファイルを突っ込もうとすると途中でディスクフルになる場合があり
端末上には壊れたファイルが残ります。
端末が起動しなくなった場合はこの辺りも疑ってみてください。

pushを使って物を突っ込む場合はshellから抜けてこう入力します。
shellを抜けるには「exit」若しくは、ちょっと荒っぽいですがctrl-Cですよ。

adb push a.txt /system/

この場合はa.txtをsystem直下に突っ込みます。

adb push [入れたいリソース] [入れる場所]

と言う構文ですね。
これはあくまで一例でFontの入れ方の方で詳しく書きます。

次回はリカバリー状態の端末にリソースを突っ込む方法についてです。

[ダークソウル] 呪死ってそんなにきつく無いかも知れない

2011-09-28 08:47:22 | ダークソウル
一昨日、最下層のカエル毒で呪死状態に陥り、体力1/4になって非常に苦労していましたが
昨日再開したら何故か体力が1/2に復活していました。

元々そう言う仕様なのかオンラインに繋がった影響なのか分かりませんが
兎に角、楽勝で生還、武器修理、呪死解除完了であります。
こんなんで最初からやり直しとかなったら苦情殺到だと思うので正しい動きなのかな?
多分24H経つと一回分の呪いが解ける仕様なんですよね。
次に出向くときはちゃんと準備して行こうと思います。

昨夜はそこまでで息子と交代。
やっぱりソフト一本だと取り合いになりますね。

[Android] adbの使い方

2011-09-27 09:26:29 | Android
さて、いよいよadbを使う所まで来ました。
重要度の高い物から説明していきますが
通常起動時とリカバリーでは挙動が異なる物があります。
(リカバリー時の方がより自由度が高い)
ちなみにOSに元から入っているリカバリーはそのままの状態ではadb接続出来ません。

・adb logcat

端末のログをctrl-Cを押すまで出力し続けます。
リブート地獄に陥った時の原因解明とか、見かけ上フリーズしている様に見える場合に動いているかどうかを調べたり出来ます。
もしログが何も出力されない場合はカーネルの動作を疑うべきです。

・adb reboot

単にリブートするだけですが、非常に良く使います。
「adb reboot recovery」でリカバリーに再起動。「adb reboot bootloader」でブートローダーに再起動します。
再起動地獄に陥った場合はこれでリカバリーに抜けましょう。

・adb shell

引数無しで実行した場合は端末のシェルにログインし対話モードに入ります。
引数をつける場合は「adb shell ls」の様に実行可能なコマンドを付与します。
この場合はlsの結果を出力し戻ってきます。
長くなるので詳しいことは又後程記載します。

・adb pull

端末からリソースを引っこ抜きます。
例えば「adb pull /system/build.prop」こんな感じで。
又、「adb pull /system」とかやるとディレクトリ配下のファイル全てを引っこ抜きます。

・adb push

pushの逆で端末にリソースを突っ込みます。
これも単ファイル又はディレクトリ単位で実行出来ますが、 端末側が書き込める状態になっていないと失敗します。
端末に同名のファイルがあった場合には上書かれ、パーミッションが書き変わるので注意が必要です。

・adb install

所謂、野良apkとかPCからアプリをインストする場合に使います。
「adb install xx.apk」みたいな感じですね。
この機能を使うためには端末側で
「設定」→「アプリケーション」→「不明な提供元」
にチェックを入れておく必要があります。
もしインスト済みのアプリを再インストやバージョンアップしたい場合は 「adb install -r xx.apk」 の様にrオプションを付けます。

アプリにはcom.googole.android.apps.mapsの様に一意のIDが付いています。(apkファイル名と同じとは限りません)
どんなに内容が異なっていてもIDが被る物は同一のアプリと見なされ共存出来ません。
又、ここでは電子署名のチェックも入ります。
アプリを改造して自分で署名した場合等、インスト済みの物と署名が異なっていると弾かれます。

・adb uninstall

アプリをアンインストールします。
引数には上記のアプリIDを入力します。
IDを調べるには/data/appを覗くか、Android System Infoと言うアプリを使うと楽です。

大雑把にはこんな感じです。
次回はもう少し細かく見ていきましょう。

ダークソウルやってます

2011-09-27 09:11:19 | ダークソウル
やってますよー「ダークソウル」
いきなりオンラインに不具合が発生した事で色々言われていますが、とても面白いですね。



昨夜は最下層を探索していたんですが、毒霧を吐くカエルが出てくるんですよ。
毒霧で死ぬと呪い状態になって体力が半分になってしまいます。
で、2度呪い死にしてしまって体力が1/4になってしまったんです。
しかも最下層に入った直後位にハルバードが壊れてしまいました。
呪い状態だと生き返る事も出来ないらしいので、
オンラインが復活したとしても手伝ってもらえません。

呪いを解くためにはガーゴイルの教会の所にいるおっさんからアイテムを買わないといけないんですが、
弱武器でここを抜け出すのはかなりダルいです。
最初の1回は自力でクリアしようと思っていましたが、ちょっと無理臭いので情報収集。
どうも呪いにかかり過ぎると体力が元に戻るみたいですね。今夜やってみよう。

オンラインの修正パッチが今日の昼頃に来るみたいですね。
これで更に面白くなるかな?

追記
呪いで死に続けると元に戻ると言うのはガセネタらしいです。危なかった。

[Android] adbをインストする その3

2011-09-26 10:11:42 | Android
今日はadbを使ってAndroidに接続します。
先ずはAndroid端をUSBケーブルでPCに接続し
「設定」→「アプリケーション」→「開発」→「USBデバッグ」にチェックを入れます。



ステータスバーにビックリ三角マークが出ましたか?
端末側の設定はこれで終わりです。

PC側でコマンドプロンプトから「adb devices」と入力してみて下さい。



このようにデバイスが表示されればPC側のドライバーも正常に機能しています。
HTC SensationとWindows7の組み合わせの場合はドライバーは自動でインストされますし
他のHTC製品をお使いの方も このドライバーを入れておけば大丈夫だと思います。

ここでは中華パッド等、自分でドライバーを細工しなければならない場合の手順も書いておきます。
基本的にはAndroid-SDKインスト時にダウンロードしたドライバーを使います。
このドライバーを当てた時に失敗する場合は
SDKのusb_driverディレクトリにあるandroid_winusb.infを編集する必要があります。

端末がUSBデバッグモードで接続された状態でデバイスマネージャーを開くと不明なデバイスとなっているはずです。
これを右クリック→プロパティ→詳細タブを開き、コンボボックスでハードウェアIDを選びます。
(この写真は既にドライバーが組み込まれている状態なので不明なデバイスではありません)



ここの値をandroid_winusb.inf内のSingleAdbInterfaceとCompositeAdbInterfaceとします。
お使いのPCのCPUがAMD64の場合は[Google.NTamd64]に、その他の場合は[Google.NTx86]に記載します。

同様に端末を外部メモリーモードに切り替えてSingleAdbInterfaceとCompositeAdbInterfaceをもう一セット取得。
bootloaderからfastboot接続可能な機種の場合はSingleBootLoaderInterfaceに記載します。
取得したハードウェアIDと同じものが既に記載されている場合は追記する必要はありません。
これでドライバーを当ててやれば完了です。

次からは実際にadbを使っていきます。

心労により…

2011-09-22 08:50:31 | 戯言
心労により今日のAndroid話はお休みです。
だいたい記事は書き上がっているんですが、画像を家に帰ってから撮っている関係で帰りが余りに帰りが遅い場合はダルいんです。

昨夜は危うく帰宅難民になりかけたのでクタクタです。
京急線が動き出した直後に帰ったので東海道線で横浜まで行って、空いた京急に乗ろうという作戦だったんですよ。
品川に着いた所で線路に飛翔物があるとかで足止め。
すし詰め状態の車両で一時間近く待ちましたが全く動く気配なし。
さすがにしびれを切らして降りたんですが凄い人です。
途方に暮れて座り込んでいる人も多いし、長蛇の列で駅に入れない状態です。
ソフバン回線はネット接続も出来なくなっているし最悪でした。

俺はならんだり待ったりするのがとても嫌いな人なのでホテルに泊まろうと思いましたがどこも満室。
新馬場まで歩いた所で駅が比較的空いていたので、電車で行ける所まで行こうと思って乗った所
スルスルと帰れてしまったと言う次第です。
横浜駅なんかほとんど乗る人がいなくてスカスカでした。

昨日の敗因は早いうちに見切りをつけて品川駅を脱出しなかった事ですね。
結局あの界隈がキャパオーバーでごった返していただけみたいです。
お疲れの方も多いと思いますが、幸い明日は休みですので頑張りましょう。

[Android] adbをインストする その2

2011-09-21 09:39:04 | Android
今日はadbを含むAndroid用の統合ツールAndroid-SDKを入れます。
インストーラー版とzip版がありますがどちらも大差ありません。
ここでは昔からあるzip版の方で話を進めていきます。
これはインストの概念がなく任意の場所に解凍して置けばOKですが
ドライブ直下に置いている人が多いんじゃないですかね?
後で移動するのはちょっと面倒くさいのでちゃんと設置してあげましょう。

そうしたらAndroid-SDKディレクトリ直下にある「SDK Manager.exe」を実行します。
先程ダウンロードしたものはガラだけで、本体はここでダウンロードする事になります。
しばらく待つとダウンロード可能なパッケージが出てきます。



一覧左側に緑のチェックが付いているものがダウンロード対象です。要らないなと思うものは外しましょう。
「SDK Platform Android 3.2」とか書いてあるのはアプリ開発者向けのAndroidエミュレータです。
バージョン毎に別れているので結構な数になりますね。ディフォルトだとこれもダウンロードされます。
最低限「Android SDK Platform-tools」はダウンロードしましょう。
あと、メーカーからadbドライバーがリリースされていない機種をお使いの方は「Google USB Driver Package」をダウンロードしておきます。



このダウンロードは後から何回でも実行できます。

次にシステム設定から環境変数PATHの設定をします。



先程のSDKディレクトリのtoolsとplatform-toolsにパスを通します。
既にPATHが存在していると思いますので最後にセミコロンをつけて繋ぎましょう。





この画像の内容はちょっと変ですが、俺の場合はCドライブ直下に置いたので…

;c:\android-sdk-windows\tools;c:\android-sdk-windows\platform-tools

を追加となりますね。
ちなみに「ntのユーザー環境変数」(ntは俺のWindowsユーザー名です)の方に切ると今使っているユーザー限定。
「システム環境変数」に切るとPC全体に反映されます。
普通はユーザー切り替えなんて余り使わないと思うので好みで良いと思いますよ。

それではadbが使えるようになったか確認してみましょう。
コマンドプロンプトを開いて「adb」と入力。
レスポンスが帰ってきましたか?

次回はいよいよAndroidを繋ぎます。

[Android] adbをインストする

2011-09-20 12:41:48 | Android
今日からadbのインスト方法と使い方について書きます。
これは書かなきゃ書かなきゃと思っていたのですが、以外と面倒臭いので放置していた話題。
いつもなら他の詳しい解説サイトをググってねで終わらせてしまうのですがちょっと詳しく書いてみます。
一つの記事にまとめるととてつもなく長くなりそうなので小出しにして行きますが
Androidに関係ない話も出て来ますので、適当に端折って読んでもらえば良いと思います。

先ずはJavaをインストする作業からです。
コンピューター言語の知識がない人は知らないかもしれませんが、
普通はWindows用のプログラムはLinuxでは動きませんしその逆も然りです。
開発者は各OS用のプログラムを別々に書きなおす必要があって非常に無駄な作業になります。
そこで、ひとつのコードでどんなOSでも動かせると良いねという概念で出来たのがJava言語です。
OSの違いを埋めて実行させる分スピードを犠牲にします。
ちょっと前までは動作が遅くて使い物にならなかったのですが、ハードウェアの目覚ましい進歩により主流となってきました。
AndroidのアプリもこのJavaで作られているので機種が違っても動作可能なのです。
Javaのパッケージには開発者向けのJDKと、実行に必要最低限のリソースのみを集めたJREがあります。
ここでは将来の事を考えてJDKを入れておきましょうか。

ここからダウンロードしてきます。
「Accept License Agreement」のラジオボタンをチェックして下のリンクから落とします。
64bit版のOSを使っている人は「Windows x64」を、それ以外の人は「Windows x86」を入れてください。

では、コマンドプロンプトを開いて「java」と入力してみましょう。
レスポンスが帰ってきましたか?

以前のバージョンのJavaだと環境変数PATHを自分で設定する必要がありましたが
今は自動でやってくれた様な気がします。
既にJavaがインストされたマシンしかないのでここは曖昧です。
もしレスポンスが帰ってこない場合は自分で設定してください。

今日はここまで。