bootanimation について

bootanimation の機構

/init.rc の下記部分でブートロゴアニメーションサービスを起動している。

service bootanim /system/bin/bootanimation
    user graphics
    group graphics
    disabled
    oneshot

/system/bin/bootanimation のソースは,Android のソースツリーの frameworks/base/cmds/bootanimation/ ディレクトリに存在する (git ツリー)。

bootanimation の抑制

上記ソース (の [https://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=cmds/bootanimation/bootanimation_main.cpp;hb=HEAD:title=bootanimation_main.cpp]) を読むと debug.sf.nobootanimation というプロパティが 0 以外であれば起動が抑制されることがわかる。なのでこのプロパティを /data/local.prop, /system/build.prop あたりで指定してやればよい。

であるが,/system/etc/init.goldfish.sh にて ro.kernel.android.bootanim プロパティが 0 の際に当該プロパティを setprop にて設定しているので,ro.kernel.android.bootanim=0 を指定するほうが行儀がよいようだ*1。(2011-04-21 追記:ただし ro.* プロパティなので /default.prop に指示子がある場合そちらが優先されてしまう)

bootanimation のカスタマイズ

ソースによれば

  • /data/local/bootanimation.zip が存在する場合,そのアニメーションを使う。
  • /system/media/bootanimation.zip が存在する場合,そのアニメーションを使う。
  • さもなくば /system/framework/framework-res.apkres/assets/images/android-logo-mask.png および res/assets/images/android-logo-shine.png を利用した簡易アニメーションを行う。

のようになっている。

なので,/data/local/bootanimation.zip を用意してやればカスタマイズしたアニメーションを利用できる。(どうしてもっということであれば framework-res.apk の中身を変更すれば簡易アニメーションもカスタマイズできるであろうが,bootanimation.zip を用意する手間とシステムファイル書き換えのリスクを天秤にかけたらとてもおすすめはできない)


bootanimation.zip の作り方については「bootanimation.zip desc.txt」あたりをキーワードにして Google 検索すればいくらかでてくる。英語だが http://forum.sdx-developers.com/themes/(how-to)-creating-a-bootanimation-zip/ あたりが細かい仕様までまとまっていると感じた (ちゃんと探していないが)。


以下補足。

  • 無圧縮 zip 形式であることについて
    • frameworks/base/libs/utils/ZipFileRO.cpp を利用して ZIP ファイルを読んでいるが,このコード自体には展開能力がないため無圧縮である必要がある。frameworks/base/libs/utils/ZipUtils.cpp に ZIP 展開機能がインプリメントされているぽいのでそちらも使ってくれればよかったのに*2
  • ディレクトリ名について
    • partXX のような例示が多いが,別にそのような名前である必要はない。spec.txt にきちんと書いてあればよい。
  • 画像ファイル名について
    • 「連番で」などの紹介が多いが,要は ZIP 書庫に格納されている順番なので,なんでもよい。というか連番で用意してもアーカイバが辞書順に格納してくれなかったらうまくいかないと思われる。
  • 画像ファイル形式について
    • PNG 形式で作成している例が多いが skia ライブラリを利用してイメージを読み込んでいるので,JPEG, GIF あたりも対応しているようだ (未確認)。Windows BMPICO 形式にも対応している感じ。

*1:つまり,標準 Android ソースツリーからあまり手を加えていない場合,両方のプロパティを指定する必要はない。

*2:とはいえ,画像自体が圧縮されているので書庫自体を圧縮する意味はない。