2017/05/12

bootanimation を adb shell 上から実行する

AOSP をビルドしてカスタムロムを作っていると、bootanimation.zip を独自の物に交換したくなると思います1

そんな時に、いちいちデバイスを再起動2していると時間の無駄なので、コマンドラインから実行してみました。

動作確認は Android 7.0 のエミュレーターで行っています。

なお、この方法を実行するには root 権限が必要です。

bootanimation の実行

$ adb shell
$ su
# setprop service.bootanim.exit 0
# /system/bin/bootanimation &

ポイントは setprop service.bootanim.exit 0 です。 bootanimation はこのフラグを見てアニメーションの終了を確認しているので、これを 0 にしておかないと、いきなり終了してしまうのです。

bootanimation の終了

逆に、アニメーションを終了させるにはこのプロパティを 1 に設定します。 このフラグが 1 になっていると、ループ処理を抜けて outro に入ります。

# setprop service.bootanim.exit 1

bootanimation のソースコードを確認

bootanimation はデバイス依存性が強いので、Android のバージョンによって3微妙に挙動が異なります。 ソースコードが手に入る場合は動作を確認しておいた方が良いでしょう。

今回のケースでは android-cts-7.0_r9 を参照しました。

cmds/bootanimation/BootAnimation.cpp - platform/frameworks/base - Git at Google

以下の部分です4

frameworks/base/cmds/bootanimatin/BootAnimation.cpp

63
#define EXIT_PROP_NAME "service.bootanim.exit"
387
388
389
390
391
392
393
394
395
396
397
398
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 上から実行する | 穀風

  1. え?ならない? 
  2. もしくは、エミュレーターを再起動 
  3. さらに言えば、デバイスベンダーによって 
  4. コードを確認していて気づいたのですが、音も出せるようになっている様子。今のところそういうデバイスを見たことはないけど。 
?

0 件のコメント: