遅ればせながらアップデートファイルに含まれているパッチの適用方法
アップデートファイルに含まれている ファイル名.p というファイルは差分ファイルです。
以前のバージョンのファイルに差分を適用することで新しいバージョンのファイルが出来るというカラクリ。
その差分ファイルを元ファイルに適用するのが /system/bin/applypatch です。
とりあえず端末上で実行してみましょう
# applypatch
applypatch
usage: applypatch <src-file> <tgt-file> <tgt-sha1> <tgt-size> [<src-sha1>:<patch> ...]
or applypatch -c <file> [<sha1> ...]
or applypatch -s <bytes>
or applypatch -lFilenames may be of the form
MTD:<partition>:<len_1>:<sha1_1>:<len_2>:<sha1_2>:…
to specify reading from or writing to an MTD partition.
どうやら <src-file> というのが元のファイルで <tgt-file> というのが出力先。sha1 ってのはハッシュで size はファイルサイズです。
はぁ?って感じw
そこで参考にするのはアップデートファイルに含まれている /META-INF/com/google/android/updater-script というファイル。
例えば boot 領域に boot.img.p を適用するっぽいところにはこう書かれています。
apply_patch(“MTD:boot:2955264:(中略)”, “-”, bdf23d8737e235a6bd38ab017d2a39baf678f74a, 2957312, 69d5cb317b7293600a329855094f33322ac261e8, package_extract_file(“patch/boot.img.p”));
はい。 MTD から始まる部分は /dev/block/boot のパーティションを示してますが、今回はファイル(boot76.img)に差分ファイル(boot.img.p)を適用するので気にしない。
applypatch /sdcard/boot76.img /sdcard/boot78.img bdf23d8737e235a6bd38ab017d2a39baf678f74a 2957312 69d5cb317b7293600a329855094f33322ac261e8:/sdcard/boot.img.p
というふうに書いて実行すると
applying patch to /sdcard/boot76.img
failed to stat “/sdcard/boot78.img”: No such file or directory
target 2957312 bytes; free space -1688469504 bytes; retry 1; enough 1
のように表示されて /sdcard/boot78.img ができます。
差分ファイルの書き方が罠で、「sha1ハッシュ:ファイル名」と「:」で繋げて書かねばいけません。
ええ、はまりました。
以上ご参考まで。
今だから言えるMOTOACTVの到着から使用開始までのまとめ
すっかりただ小さい解像度的に使いにくい普通の Android 2.3 端末になった MOTOACTV さん。
色々回り道をしてきたんですが、そろそろ順路がわかってきたのでまとめておこうと思います。
※元記事で公開されてる boot.img は起動時に毎回 /system/build.prop を書き換えるので個人的にはおすすめできません。
なお、それなりに知識のある人を対象にしているのでファイル名などはテキトーです。
以下の情報を読んでやってみた結果壊れても泣きながら買い直すような人しかやらない方がいいです。
1.公式アップデートする
普通に MOTOCAST を使って最新版にアップデートします。2012/1/10現在 bootloader が lock されるようなことは無いのでとにかくアップデート。
Windows 版だけじゃなくて Mac 版もあるよ!(使ったことないけど)
メンテナンスリリース4で電池の持ちが改善されてたりするのでそのまま万歩計として使う方もおすすめ。
なお、後述する fastboot 用のドライバーとかも同時にインストールされるので必須です。
ココらへんで動作に不良がないかなど確認しておきましょう。
2.fastboot とか adb を用意する
fastboot は boot.img を MOTOACTV に叩きこむ時に必要になりますので必須!
普通に Android SDK をインストール。Java とか先に入れといてね!
追加で Android SDK Platform-tools ってやつインストール。古いのは fastboot 入れ忘れられてるから要注意や!
3.カーネルをごにょごにょする
オリジナルの boot.img は公開されていませんので、元記事のこれを参考にしてアップデートファイルを取得したりして 8GB 版では4.53.61から4.55.78へのアップデートファイルに素の boot.img が入ってたりするのでオススメです。一方 16GB 版は4.54.61から4.56.76へのアップデートファイルにしか素の boot.img がないっぽいので4.56.76から4.56.78のアップデートファイルに入っている差分を適用しないといけないのでちょっとめんどっちいです。
なお、ファイルのダウンロードにはユーザー名とパスワードが必要らしいので適宜なんとかしてください。
boot.img は Linux 環境で unpack-bootimg.pl でばらして「ファイル名-ramdisk」内にできる default.prop (ro.secure=0) と init.rc を適宜変更して repack-bootimg.pl で固め直すだけなのでカーネルソースからビルドとか不要でマジラクチン。
4.fastboot flash boot boot.img する
MOTOACTV の電源を切る。電源ボタン以外のどれかを押しながら電源を3秒ぐらい押すと fastboot モードになります。
その後 MOTOACTV を USB で PC に接続するとドライバーがインストールされるのを待ちます。
コマンドプロンプトを開いて Android SDK をインストールした場所の platform-tools に移動して
fastboot devices
すると認識されてればデバイス名が表示されると思いますので確認!
ちゃんと認識してたら、さっき固め直した boot.img を
fastboot flash boot boot.img
その後
fastboot reboot
で再起動。
無事起動して PC が adb のドライバーをインストールはじめたらほぼ終了です。
さっき fastboot で使ったコマンドプロンプトで
adb shell
して
#
って表示されれば OK です。もうなんでもできるよ!
ro.secure=0 で完全にノーガード戦法なのでそれなりにご注意ください。
5.system のバックアップをとる
いくら注意していてもやらかしてしまうこともあります。いろいろやらかしすぎてすっきり元に戻したいとか、公式アップデートで失敗するから初期状態に戻したいとか色々。
そんな時のためにとりあえず
adb shell
して
dd if=/dev/block/system of=/sdcard/system.img bs=1024 count=159616
すれば /sdcard/system.img に初期状態を保存できます。
adb pull /sdcard/system.img
とかして厳重にどっかに保管しておきましょう。
初期状態に戻したい時は
fastboot flash system system.img
すればいいです(未確認)
6.あとはお好きに
ro.secure=0 なので、adb remount で system 以下を自由に書き換えられるようになりますので、ここから適宜 SuperUser 用のファイルをダウンロードして adb push su /system/xbin/su して adb shell して chmod 4755 /system/xbin/su しておいて adb install SuperUser.apk しちゃえばあとはなんとでもなるとおもいます。
ro.secure=0 が嫌なら default.prop を元に戻して再度 repack した boot.img を焼くも良し、端末で start adbd できるようならオリジナルのカーネルに戻すもよし。
捗らせる設定などは先日の↓をご覧下さいまし。
こんな感じ?
boot.img 配布できりゃラクなんですけど、Motorola から英語しか喋れない弁護士軍団とか来られてもこまるので配布はできません。
それに自分で boot.img いじれるようになったほうが今後も色々捗りますよ!
MOTOACTVのbuild.propを書き換えずにadbを有効にする
既存の手法では build.prop を起動時に置き換えているので公式のアップデートをそのまま行うことができません。
アップデートは諦めるとしても自分で build.prop を書き換えても勝手に書き戻されちゃうとか困った弊害があります。
今回の手法でもカーネルは書き換えるんで、公式アップデートするときには元に戻さないとダメなんですが…
さて、手法。
単純に boot.img をバラしてできた ramdisk 内の init.rc の適当な場所に1行追加するだけです。
setprop persist.service.adb.enable 1
なんとなく他にも setprop してる後ろで246行目ぐらいがいいんじゃないですかね。
玉川通りっぽいし。
何をしているかというと、build.prop 内で
#Turn off ADB by default
persist.service.adb.enable=0
って意図的に adb を繋げなくしているんですが、 build.prop を書き換えても init.rc で setprop した方が有効になるという事例が SC-02C のシャッター音消しであったので、同様にカーネルを書き換えた次第。
既存の /system 以下にあるファイルはアップデートがあった時に弄ってるとエラーになったりで面倒臭いのであまり弄りたくないのです。
adb さえ繋がってしまえば適当なホームアプリを adb install してしまえばホームは切り替えられますし捗りまくります。
地味だけど超重要ですコレ。
フォントを追加するとか、Gapps の /system/framework/com.google.android.maps.jar と /system/etc/permissions/com.google.android.maps.xml と /system/etc/permissions/features.xml を追加するぐらいではアップデートでエラーは出ませんので、その後カーネルを元に戻してしまえば知らん顔して次のアップデートを実行することができます。
start adbd と stop adbd するようなアプリが仮に存在したとすればカーネルを元に戻しておいてもそれを実行すれば任意で切り替えができるようになったりして便利ですよね(チラ
MOTOACTV(rooted)を捗らせるアプリと設定など
いくつかの設定などは↓をぱk参考にしました。
やはりメニューキーがないのは捗らないっ!
/system/usr/keylayout/G2-keypad.kl の89行目にある
key 215 AT WAKE_DROPPED
key 220 FITNESS WAKE_DROPPED
key 226 HEADSETHOOK WAKE
FITNESS を MENU にっ!!
key 215 AT WAKE_DROPPED
key 220 MENU WAKE_DROPPED
key 226 HEADSETHOOK WAKE
んで、再起動。
これで左上の START ボタンがメニューボタンに早変わり。でもワークアウトを中断したりできなくなるので、万歩計として使うには捗らないっ!
画面にメニューキーとか表示するアプリもあるとのこと
設定画面の色が識別不能なので捗らない…

日本語表記にしたら色々捗る?
もともとのアプリは当然日本語リソース入ってないんでどうでもいいんですけど、日本語対応アプリは日本語で表示したいじゃないですか。
そんな時にはみんな大好き MoreLocale2
だがしかし、日本語が選択肢にない上にカスタム設定の窓が画面からはみ出てて設定ボタンが押せないっ!!


こんなときは慌てず騒がず
なんとかドットネットにこんなページがありました。
cd /data/property
echo JP > persist.sys.country
echo ja > persist.sys.language
reboot
ですって。
無事日本語表記になりました。

やっぱり万歩計機能はあったほうが捗る
せっかくの標準機能ですので使わないのはもったいない。
標準の音楽再生機能は標準のランチャーからしか起動できないとか制約があるのです。
MOTOACTV の戻るボタンは長押しするとホームボタンになるのでホームの切り替えができます。万歩計として使う場合は「Launcher」に切り替えましょう。なお、「Use by default for this …」にチェックしちゃダメですよ!

Twitter を流し見るにはアカイトリが捗りすぎる
twicca は実によくできてるんですが、画面が糞狭い MOTOACTV では twicca って書いてあるバーが邪魔(失礼)なので微妙に捗りません。そこで Userstream 対応でお馴染みのアカイトリですよ。
標準で画像プレビューもしやがるので大変捗ります。なんといっても作者が MOTOACTV を発注したので今後捗りまくることまちがいなしです。
設定画面の字が見えないのがちょっと残念。あとブルブルしないので通知は LED 光るといいな。


Wi-Fi を常時 ON にしたら捗る
普通の Android でもよくやる設定なんですが、Wi-Fi sleep policy を Never にします。


ただし電池はもりもり減ります。

でも常時アカイトリ常駐でちょいちょい使って6時間弱持てばいいか…な?途中まで Bluetooth が ON になってたので、最初から OFF にしとけばもうちょい持つと思われます。
recovery 使えたら捗る(今後の課題)
間違いない。
adb reboot recovery でリカバリーで再起動して、MUSIC ボタンを押すとメニューが出るんですが、update.zip は署名の問題で適用できないのでなんらかのカスタムが必要じゃないかなかな?
ちなみに /dev/block/recovery に入ってるので dd で引っこ抜いて unpack して ramdisk 弄って repack したのを fastboot で書きこめばいいんじゃないかなかな?
参考までに zImage 部分は boot.img の zImage とバイナリ一致しました。
なお、リカバリーが改変されてると起動時に install-recovery.sh でカーネルにパッチ当ててリカバリーを再構築しやがるので要注意です。どうせカーネル書き換えてるから失敗しますがw
(あとで画像追加)



