2017/05/13

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

独自の `bootanimation.zip` をエミュレーター、もしくは実機に送って表示する方法です。 `adb push` で送って実行するだけなのですが、要注意点がいくつかあるので備忘録として書いておきます。 なお、独自 `bootanimaion.zip` の作り方は、以下を参考にしてください。 - [Deciphering Android's bootanimation.zip desc.txt](https://blog.justinbull.ca/making-a-custom-android-boot-animation/) - [bootanimation.zip は圧縮してはいけない | 穀風](https://kokufu.blogspot.jp/2016/10/bootanimationzip.html) 以下の方法は Android 7.0 のエミューレーターで動作確認しています。 また、この方法はデバイス(エミュレーター)の root 権限を必要とします。 ### OEM用 bootanimation.zip の path を調べる `bootanimation` はデバイス依存性が強いので、Android のバージョンによって微妙に挙動が違います。`bootanimation.zip` のパスも過去に変わっているので、確認しておいた方が良いでしょう。 [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/bootanimation/BootAnimation.cpp ```cpp `first-line: 60; #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` を先に実行しておくと楽でしょう。 ```console `gutter: false; $ adb root $ adb shell mount -o rw,remount / ``` 注意しなければならないのは、rootfs は揮発性だということです。 今後、rootfs に変更を加えたとしても、デバイスを再起動してしまうと変更内容は消えてしまいます。 永続化させるためには再マウントではなく、実体に手を加える必要があります。 > 参考 > - [[Android][Firefox OS]adb push/pullをrootでやりたいときの処方箋 | GCG研究所](http://www.gcg.bz/labo_blog/?p=899) > - [Android エミュレーターで Read-only file system に書き込めるようにする | 穀風](https://kokufu.blogspot.jp/2016/10/android-read-only-file-system.html) > - [Android エミュレーターの rootfs に永続的な編集を加える方法 | 穀風](https://kokufu.blogspot.jp/2016/10/android-rootfs.html) ### bootanimation.zip をデバイスに送る `/oem/media` ディレクトリが存在しない場合は、先に作成しておくのを忘れずに。 ```console `gutter: false; $ adb shell mkdir /oem/media $ adb push bootanimation.zip /oem/media/ ``` ### 実行 普通ならデバイス再起動でも良いのですが、先も書いたように `/oem` 以下は揮発性なので再起動では書き込んだ `bootanimation.zip` が消えてしまいます。 そこで、以下のように直接 `bootanimation` を実行します。 ```console `gutter: false; $ adb shell # setprop service.bootanim.exit 0 # /system/bin/bootanimation ``` 詳しくは以下を参考にしてください。 > 参考 > - [bootanimation を adb shell 上から実行する | 穀風](https://kokufu.blogspot.jp/2017/05/bootanimation-adb-shell.html)

0 件のコメント: