goo blog サービス終了のお知らせ 

攻撃は最大の防御なり

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

[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の入れ方の方で詳しく書きます。

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

[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と言うアプリを使うと楽です。

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

[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を使っていきます。

[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がインストされたマシンしかないのでここは曖昧です。
もしレスポンスが帰ってこない場合は自分で設定してください。

今日はここまで。

[Android] ディフォルトの関連付けを変更するには

2011-09-16 09:44:42 | Android
今日は繋ぎ的な内容でディフォルトの関連付けの話です。

Androidを使っていると良くこんな画面が出てきます。



ディフォルトの関連アプリを選択する機能でインテントと呼びます。
Windowsの関連付けに似ていますがあちらは拡張子毎の関連性であるのに対し
インテントはアプリ毎の動作の関連性なのでちょっと違いますね。
ですから、あるアプリでテキストファイルを開くのにテキストビュアーを選択していても
別アプリでテキストを開こうとしたら又聞かれたと言った事が発生します。

そんなインテントですが、この関連付けを解除するにはどうすれば良いのか以外と分かりにくいのです。
例えば俺はディスクトップランチャーにADWと言うのを使っていますが、一旦ADWに変更してしまうとSenseが出てこなくなります。
ランチャーはアプリ一覧にも表示されないし、ADWの設定にもそれらしい物はありません。どうすればSenseに戻せるんでしょうか?

答えは設定の「アプリケーションを管理」で該当のアプリを表示し、右下の「ディフォルトをクリア」を押してあげます。





アプリの選択画面が出てきましたね。
このクリアを実行するとそのアプリに設定されている関連付けが全て消えます。
ブラウザーとか多くのアプリから関連付けられている物を消去してしまうと、又いちいち聞かれる事になるので注意が必要です。

Desireさん謎の再起動

2011-09-08 09:09:31 | Android
最近Desireさんの調子が悪いです。
Sensationを買ってから、SIM無しスタンドアローンの音楽再生専用機なのに再起動をするのはおかしすぎる。

しかもその状態になると暫くの間正常起動出来ないし、オーバーヒートぽくもあるけどそれほど熱く無い。
adb接続も出来ないところを見るとカーネルパニックを起こしているんでしょうね。
最近は謎再起動が発生する間隔がだんだん短くなってきている気がする。

今はCyanogenModカーネルが入っていますが、もうちょっと安定した奴に変えようかと思う。
MRカーネルを元にして作ろうかな。

[Android] adbとは何か?

2011-09-07 10:02:30 | Android
今日はadbとは何か?のお話です。

端的に言ってしまえばadbとはgoogleが用意したAndroid用のツールです。
PCからAndroid端末のshell(コマンドプロンプトの様なもの)にログインして色々な操作が出来ます。
Androidのカスタマイズを始める最初の一歩。避けては通れない道です。
皆さんwindowsをお使いの方が殆どだと思いますが、実はAndroidとwindowsは一番相性が悪いのです。
LinuxはAndroidその物ですし、MacはUNIXベースですからそれなりに適正はあります。
今後windowsを使ってそれなりに弄ろうとするならば、ツールをインストしたり色々面倒な事が回ってきますので覚えて置いてください。

以前rootの記事で書きましたが、Androidは常に一般ユーザー権限でシステムが立ち上がります。
その中でroot権限を使って作業するためには、ほぼこのadbを使ったコンソール作業となります。
良く訓練されたUXIXやLinux使いにとってコンソール作業は大好物なので全く問題ありませんが
馴染みにない人にとってはわけが判らない作業かもしれません。
出来るならばAndroidを触る前にLinuxを使ってみる事をおすすめします。
今はインストールしなくてもCD-ROMから立ち上がるLinuxやUSBメモリに入れられるLinuxがありますのでそんなに敷居は高くないはずです。

そんなadbですが本来の用途はAndroidシステム開発者やアプリ開発者のためのデバッガーです。
例えばスマフォがスプラッシュ画面から進まなくなったり、意味不明な再起動を繰り返す様になったりは良くある事ですよね。
そんな場面に出くわした時に「何故か判らないけど起動しなくなった。助けて!」という人が居ますが
見た目上同じ症状であってもカーネルが腐っている場合もあればライブラリが腐っている場合もあります。
開発者だって神様じゃないですから症状を説明されても原因は分かりません。
そんな場合、開発者はadb接続をしシステムログを見て原因をつきとめ対策を取るんです。
と言うことはシステムログを提示して「こんな状況なんだけど、どうすればいい?」と聞いてくれれば話も早いわけです。
でも多分そんな事をする人は余りいません。何故ならそこまで出来る人は自分で対策が取れてしまうから。

Androidのgitが死んでいる件

2011-09-06 09:28:03 | Android
昨夜はCyanogenModのlibstagefrightを弄っていてsyncしておくかなと思ったらどうも繋がらないんですよ。
先週末位からおかしいなぁと思いつつ放置していたけど、android.git.kernel.orgを見たら電気羊の写真に変わっているじゃないですか…

調べたら、どうもgit.kernel.orgがクラックを受けたみたいですね。
Androidソースの公開を止めたのかと思って一瞬焦りました。
googleさん早めの復旧よろしくお願いしますね。

[Android] ROM Managerを使おう

2011-09-05 08:06:14 | Android
今日はRom Managerをインストしようのお話です。

このアプリは主にClockworkMod Recoveryでのバックアップ管理用です。
root権限が使用出来ること(suが発行出来ること)、busyboxがインストしてある必要があります。
Androidマーケットからダウンロードするだけですので、サクッと入れちゃいましょう。






以下、各項目の使い方

・ClockworkMod Recoveryを導入

最新版のClockworkMod Recoveryが入れられます。便利。

・リカバリーへ再起動

単にリカバリーへ移るだけですがbootloaderを経由する必要が無くなるので良く使いますね。

・SDカードからROMをインストール

ROMだけじゃなくupdate.zipを当てるのにも使えます。
ClockworkMod Recoveryでzipの適用後、自動で再起動がかかります。

・ROMをダウンロード
・ROMの更新をチェック

所謂、カスタムROMの導入とアップデートが出来ます。
俺は人の作ったROMは使わないので良く知りませんw

・バックアップの管理とリストア

バックアップから戻しをする時に使います。
これも戻し終了後に再起動がかかります。

・現在のROMをバックアップ

バックアップを取ります。
ディフォルトでは日付の名前が付きますが、節目のバックアップは自分が分かりやすい名前にした方が良いと思います。



・パーミッション修正

リソースのパーミッションを適正に直します。
何をやっているか知りたい人はClockworkMod Recovery内のShellスクリプトを読むべし。

・SDカードパーティション

SDカードにapp2sd用のext4パーティションを切ります。
ここでは512Mまでしか切れませんが、ClockworkModでは4Gまで切ることが出来ます。
SDの内容が消えますので注意。

・全てのClockworkMod Recovery

過去バージョンのClockworkModに戻します。
サーバ上にあるリソースか/sdcard/clockworkmod/download内のimgが対象かな?


「リカバリーへ再起動」や「現在のROMをバックアップ」を実行しても何も起こらない場合はrootが上手く取れていません。
superuserのパッケージを当て直しましょう。
ROM ManagerとClockworkMod Recoveryの間はスクリプトファイルで情報のやり取りをしていますが、たまに処理が上手く実行されない場合があります。
その場合には手動で実行しましょう。