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でもピカピカぴかりん!