2017/05/13

独自 bootanimation.zip を adb shell 上から実行する

独自の bootanimation.zip をエミュレーター、もしくは実機に送って表示する方法です。 adb push で送って実行するだけなのですが、要注意点がいくつかあるので備忘録として書いておきます。

なお、独自 bootanimaion.zip の作り方は、以下を参考にしてください。

以下の方法は Android 7.0 のエミューレーターで動作確認しています。

また、この方法はデバイス(エミュレーター)の root 権限を必要とします。

OEM用 bootanimation.zip の path を調べる

bootanimation はデバイス依存性が強いので、Android のバージョンによって微妙に挙動が違います。bootanimation.zip のパスも過去に変わっているので、確認しておいた方が良いでしょう。

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

frameworks/base/cmds/bootanimation/BootAnimation.cpp

60
61
#define OEM_BOOTANIMATION_FILE "/oem/media/bootanimation.zip"
#define SYSTEM_BOOTANIMATION_FILE "/system/media/bootanimation.zip"

上記のように andorid-cts-7.0_r9 では /oem/media/bootanimation.zip でした。

rootfs を書き込み可能にする

/oem はデフォルトでは書き込み不可でマウントされているため、これ書き込み可でマウントし直さなければなりません。 なお、今後 root 権限での操作が多くなるので、adb root を先に実行しておくと楽でしょう。

$ adb root
$ adb shell mount -o rw,remount /

注意しなければならないのは、rootfs は揮発性だということです。 今後、rootfs に変更を加えたとしても、デバイスを再起動してしまうと変更内容は消えてしまいます。 永続化させるためには再マウントではなく、実体に手を加える必要があります。

参考

bootanimation.zip をデバイスに送る

/oem/media ディレクトリが存在しない場合は、先に作成しておくのを忘れずに。

$ adb shell mkdir /oem/media
$ adb push bootanimation.zip /oem/media/

実行

普通ならデバイス再起動でも良いのですが、先も書いたように /oem 以下は揮発性なので再起動では書き込んだ bootanimation.zip が消えてしまいます。 そこで、以下のように直接 bootanimation を実行します。

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

詳しくは以下を参考にしてください。

参考

0 件のコメント: