2017/05/12

bootanimation を adb shell 上から実行する

[AOSP](https://source.android.com/) をビルドしてカスタムロムを作っていると、`bootanimation.zip` を独自の物に交換したくなると思いますえ?ならない?。 そんな時に、いちいちデバイスを再起動もしくは、エミュレーターを再起動していると時間の無駄なので、コマンドラインから実行してみました。 動作確認は Android 7.0 のエミュレーターで行っています。 なお、この方法を実行するには root 権限が必要です。 ### bootanimation の実行 ```console `gutter: false; $ adb shell $ su # setprop service.bootanim.exit 0 # /system/bin/bootanimation & ``` ポイントは `setprop service.bootanim.exit 0` です。 `bootanimation` はこのフラグを見てアニメーションの終了を確認しているので、これを `0` にしておかないと、いきなり終了してしまうのです。 ### bootanimation の終了 逆に、アニメーションを終了させるにはこのプロパティを `1` に設定します。 このフラグが `1` になっていると、ループ処理を抜けて outro に入ります。 ```console `gutter: false; # setprop service.bootanim.exit 1 ``` ### bootanimation のソースコードを確認 `bootanimation` はデバイス依存性が強いので、Android のバージョンによってさらに言えば、デバイスベンダーによって微妙に挙動が異なります。 ソースコードが手に入る場合は動作を確認しておいた方が良いでしょう。 今回のケースでは `android-cts-7.0_r9` を参照しました。 [cmds/bootanimation/BootAnimation.cpp - platform/frameworks/base - Git at Google](https://android.googlesource.com/platform/frameworks/base/+/android-cts-7.0_r9/cmds/bootanimation/BootAnimation.cpp) 以下の部分ですコードを確認していて気づいたのですが、音も出せるようになっている様子。今のところそういうデバイスを見たことはないけど。。 `frameworks/base/cmds/bootanimatin/BootAnimation.cpp` ```cpp `first-line: 63 #define EXIT_PROP_NAME "service.bootanim.exit" ``` ```cpp `first-line: 387 void BootAnimation::checkExit() { // Allow surface flinger to gracefully request shutdown char value[PROPERTY_VALUE_MAX]; property_get(EXIT_PROP_NAME, value, "0"); int exitnow = atoi(value); if (exitnow) { requestExit(); if (mAudioPlayer != NULL) { mAudioPlayer->requestExit(); } } } ``` ### 独自 bootanimation.zip に挿げ替える方法 書いていたら長くなったので別にしました。 [独自 bootanimation.zip を adb shell 上から実行する | 穀風](https://kokufu.blogspot.jp/2017/05/bootanimationzip-adb-shell.html)

0 件のコメント: