雑記帳 2010年11月12日
FC2ブログ

2010'11.12 (Fri)

[Android]Shutdownの処理の流れ

訳あってAndroidのシャットダウン処理を調べたので覚書。

実際にShutdownの処理を行うのはShutdownThreadクラスに実装されている。
(framework/base/core/java/com/android/internal/app/ShutdownThread.java)

実際にはShutdownThread.shutdown()が呼び出される。
ここで電源をOFFしてもよいか確認用のダイアログを表示し、OKであれば実際のシャットダウン処理を開始する。
beginShutdownSequence()で電源オフ時に表示されるプログレスダイアログを表示し、シャットダウン中に電源が切れないようにWAKE_LOCKを確保する。
その後シャットダウンスレッドが動き始める。

まず、Intent.ACTION_SHUTDOWNをBroadcastで発行する。
その後、IActivityManager.shutdown()を実行する。ここでSHUTDOWN_TRANSACTIONを発行する。

その後、無線系デバイスの電源OFF処理、マウントされたストレージのアンマウント処理を行い、
要因によって再起動、もしくは電源オフする。
再起動/電源オフをするのはPowerクラスで行う。(frameworks/base/core/java/android/os/Power.java)
この中でshutdown/rebootを実行しているが、実態はframeworks/base/core/jni/android_os_Power.cppに実装
されていて、ここでLinuxのシステムコールを呼び出して再起動/電源オフを実現している。


ではこのShutdownThread.shutdown()はどこから呼び出されるのか?
ソースのgrepを行うと、

frameworks/policies/base/{mid, phone}/com/android/internal/policy/impl/GlobalAction.java
frameworks/policies/base/{mid, phone}/com/android/internal/policy/impl/PowerDialog.java

から呼び出されているが、PowerDialogは今はどこからも呼び出されていない様に見える。
GlobalActionクラスでIntent.ACTION_CLOSE_SYSTEM_DIALOGSかACTION_SCREEN_OFFをレシーバーに登録し、受けたらhandlerにMESSAGE_DISMISSをsendする。そのhandlerの中からダイアログを表示し、シャットダウンやマナーモードや機内モードに切り替えを行うDialogの表示を行っているようだ。

しかし、互換性のためか、過去の使用されていないコードまで残っているのはちょっと勘弁して欲しい。
センサーまわりもそんなんだよなー。。。

テーマ : android - ジャンル : コンピュータ

22:56  |  Android  |  TB(0)  |  CM(2)  |  EDIT  |  ↑Top

2010'11.12 (Fri)

Androidのsource取得とビルド

開発環境が整ったので、ソースの取得とビルドを行います。

本家のページを参考にしてやります。
http://source.android.com/source/download.html

まず、ソースを置いとくディレクトリを作成し、移動ます。


$ mkdir ~/mydroid
$ cd mydroid



作成し、移動したらrepoの初期化を行います。


$ repo init -u git://android.git.kernel.org/platform/manifest.git


proxyがある環境では別途設定が必要になります。(corkscrewなどを設定する必要あり)
初期化が正常に完了したら以下のコマンドを実行し、ファイルを取得します。


$ repo sync



正常にファイルが取得できたら以下のコマンドを実行してビルドを行います。



$ make



これで正常にビルドが終わればOKです。






テーマ : android - ジャンル : コンピュータ

20:00  |  Android  |  TB(0)  |  CM(0)  |  EDIT  |  ↑Top
 | HOME |