android 4.1.1におけるbootanimationの変更について
変更というほど大したことではないのだけれど、一部変更があったのでメモがてら残します。
bootanimeでは、desc.txtというファイルに画像のサイズ,fps,再生する順番などを指定しています。
android 4.1.1ではそのdesc.txtの読み込み処理が一部変更になりました。
4.0.4
http://tools.oesf.biz/android-4.0.4_r1.0/xref/frameworks/base/cmds/bootanimation/BootAnimation.cpp
402 if (sscanf(l, "p %d %d %s", &count, &pause, path) == 3) { 403 //LOGD("> count=%d, pause=%d, path=%s", count, pause, path); 404 Animation::Part part; 405 part.count = count; 406 part.pause = pause; 407 part.path = path; 408 animation.parts.add(part); 409 }
4.1.1
http://tools.oesf.biz/android-4.1.1_r1.0/xref/frameworks/base/cmds/bootanimation/BootAnimation.cpp
423 else if (sscanf(l, " %c %d %d %s", &pathType, &count, &pause, path) == 4) { 424 //LOGD("> type=%c, count=%d, pause=%d, path=%s", pathType, count, pause, path); 425 Animation::Part part; 426 part.playUntilComplete = pathType == 'c'; 427 part.count = count; 428 part.pause = pause; 429 part.path = path; 430 animation.parts.add(part); 431 }
これまで再生するファイルを読み込むpathを記述する際には、その行を「p」ではじめる必要がありましたが、
必要なくなり自由に定義することができます。
その変わり「c」ではじめることにより、playUntilCompleteフラグが有効になり
最後まで再生されるようになります。
playUntilCompleteは後の再生時に利用されており、
このフラグが立っているとbootシーケンスが終了しても
アニメーションはキャンセルされず最後まで再生されるという動作をするようです。
個人的にはアリな変更ですが、
メーカーロゴの再生で起動が遅くなるのは勘弁して欲しいので、
desc.txtに「c」が指定されているbootanimeが仕込まれている端末がベンダから出荷されたら
お空とお友達になって貰いましょう。
bootanimationのランダム再生 for JCROMへの修正
以前のエントリでは「r」命令を定義してランダム再生させていたわけですが、
4.1.1の変更に追従すると「c」と「r」を共存させることが困難です。
そこで、「r」を別に定義するのはやめてpathの引数で判別させることにしました。
pathの引数が複数あるとその中からランダムで一つ選択と。
パッチはこんな感じ
https://bitbucket.org/iqm/jcrom_frameworks_base/changeset/b826f54e055e
このパッチを使って、ランダム化とplayUntilCompleteを有効にした
ピースちゃんのdesc.txtの例は以下のとおりです。
720 1280 48 c 1 0 start c 1 0 rock paper scissors c 1 0 end
Jelly Beanでもピカピカぴかりん!