ExtractAac.bat用のffmpeg.exeを ffmpeg v1.2.1のものに更新した。
先日の記事にあるように、nexus4でアンテナピクトを立てられたが、果たして実際にセルスタンバイで消費される電力は減っているのかどうかがもう1つの重要な点。
大前提として私の場合、職場ではPCを、自宅ではPCとnexus7ばかり使っており、実際にnexus4はほとんど使用していない。あくまでたまの外出用。IIJmioの6月分のクーポンも28日の時点で500MBのうちまだ460MB残っている。
で、nexus4のセルスタンバイの消費電力は改造前で9% 程度、現在は14%。ちなみに各電力消費は以下の通り。
アイドル状態 21%
画面 18%
セルスタンバイ 14%
Android OS 9%
Wi-Fi 9%
Androidシステム 7%
マップ 7%
Googleサービス4%
Firefox 4%
メディアサーバー 2%
システム関連だけで70%。改造前はマップを立ち上げて街中をうろうろしてみたりしたが、その後はあまり使用していない。他のアプリをもっと使用すればおそらく相対的にセルスタンバイ(や他のシステム関連)の割合が下がるであろう。おそらくセルスタンバイに消費される電力は実際には増えているのではなく、あまり変わらないのではないかと思われる。
【結論】
改造でアンテナピクトは立ったが、私のような使い方では検証不十分ながらも節電効果についてはやや疑問。ただし、電波状態がわかるのはやはりそれなりに便利。
先日、少し話題に出したNドライブがサービス終了だそうな。30GBのデータを移動するのは面倒でしょうな。
それにしてもGoogle readerも終了するし、無料サービスにあまり頼りすぎるのも問題だなぁ。
今まで cloud storage で Dropbox、Skydrive、Google driveなどを使用してきた。
Dropboxはメインであったが容量がやや少ない。一方Skydriveは容量が50GBのころにアカウントを作成したので、減らされてもまだ25GBある。頻繁には使用しない大きなファイルはSkydriveに退避させているが、XPやAndroidでは使い勝手が大変悪い。Baidu や Nドライブなんてのもあるが、容量が大きくてもあまり手を出す気にならない。ま、アメリカだからといってデータを安心しておいておけるものでもないことは(以前から怪しかったが)最近明らかになったので、大差ないのだろうが。
そこで、最近見かけた"Copy" (会社:Barracuda Networks、米)なるストレージを導入してみた。これは初期から15GBの容量があり、さらに紹介でアカウント作成・アプリインストールすると、紹介者・被紹介者ともに5GBのボーナスがもらえる。
アカウント作成~アプリインストールの手間はDropboxとかわりない。システムとしてはローカルストレージにあるフォルダをクラウドと同期する形式(PC版)。Dropboxとともに常駐させてみているが、今のところ不具合はなし。ちなみにYahooBoxはDropboxとぶつかってアンインストールした記憶がある。
ただ、"Copy"ってのは紛らわしい名前。「copyフォルダの下の~」っていうと、オリジナルがどこかにあって、そのコピーかなと普通は思うのでは?また検索するときも"Copy"だけでググるのもあれだし。
というわけで、「私も試してみたい」って言う方は、以下のリンクからアカウントを作成していただく。すると初めから20GBなのですよ、奥さん。
普通にUSBデバッグモードでPCに接続するときのUSBドライバのインストールは以前の記事で書いたとおりだが、ClockworkModを起動してPCに接続すると認識されなかった。
で、新たにドライバをインストールせねばならなくなったので、こちらを参考に android sdk の extras\google\usb_driver\android_winusb.inf を書き換える。
デバイスマネージャのnexus4のプロパティの「詳細」タブのデバイスインスタンスIDの「VID_****」と「PID_****」を記録。
android_winusb.inf の[Google.NTx86](うちの作業PCは XP 32bit)の中に
;Google Nexus 4
%SingleAdbInterface% = USB_Install, USB\VID_****&PID_****
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4E30
%CompositeAdbInterface% = USB_Install, USB\VID_****&PID_****&REV_0100
を書き加え、"android_winusb_mod.info"なり何なり、別名で保存。
で、デバイスマネージャの黄色ハテナのプロパティからドライバインストールで、このinfoファイルを指定すればOK。
最初はやぎLabsを参考にさせてもらおうかと思ったが、再コンパイルの部分が記載ミス(classes.odexではなくclasses.dexかも?)なのかうまくいかず、そのもとになったLifeScape(root化不要法)も参考にさせて頂いた。
【準備】
カレントディレクトリに "7za.exe", "busybox", "dexopt-wrapper", "smali*.jar", "baksmali*.jar"を準備。最後の2つはそれぞれ"smali.jar", "baksmali.jar"に変名し、コピーしておく。まとめたものはここ。
ちなみに /system/xbin には初めから "dd"コマンドも"cp"コマンドも入っており、busybox必要ないかも。また、root化時に "SU_Busybox_Package.zip" をインストールしていれば、当然busyboxも入っている。
Android SDK, Java SE JDK を使えるようにする。(root化の記事参照)
端末をデバッグモードで接続。
Android 4.2.2 のAPI level は17。
【作業】
DOS窓を立ち上げて /system/framework 以下のファイルを temp フォルダに取得。
>mkdir temp
>cd temp
>adb pull /system/framework
逆コンパイル
>java -jar ..\baksmali.jar -x telephony-common.odex
必要箇所の修正
"out\com\android\internal\telephony\gsm\GsmServiceStateTracker.smali"の以下の部分を
/////////////////
.line 702
.local v13, voice_capable:Z
if-nez v13, :cond_86
/////////////////
から
/////////////////
.line 702
.local v13, voice_capable:Z
if-eqz v13, :cond_86
/////////////////
に書き換え。
再コンパイル
>java -jar ..\smali.jar --api-level 17 -o classes.dex out
>copy /y /v telephony-common.jar telephony-common.jar.org
>..\7za a -tzip -mx0 telephony-common.jar classes.dex
>cd ..
端末内で odex を作成
>adb push temp\telephony-common.jar /data/local/tmp
>adb push dexopt-wrapper /data/local/tmp
>adb shell chmod 755 /data/local/tmp/dexopt-wrapper
>adb shell rm /data/local/tmp/telephony-common.odex
>adb shell cd /data/local/tmp; ./dexopt-wrapper telephony-common.jar telephony-common.odex
>adb shell rm /data/local/tmp/telephony-common.jar
>adb shell rm /data/local/tmp/dexopt-wrapper
PC側にあるCWMのイメージファイルから起動させる
>adb reboot bootloader
>fastboot boot recovery-clockwork-6.0.3.1-mako.img
odex の入替え
>adb shell mount /data
>adb shell mount /system
>adb push busybox /data/local/tmp
>adb shell chmod 755 /data/local/tmp/busybox
>adb shell /data/local/tmp/busybox dd if=/system/framework/telephony-common.odex of=/data/local/tmp/telephony-common.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
(adb dd if...からでもできるかも。ちなみにここは逆コンパイル‐再コンパイル後のファイルに元の「署名」をうつす処理らしいが、必要ないかも。)
>adb shell cd /data/local/tmp; busybox cp telephony-common.odex /system/framework/telephony-common.odex.new
>adb shell mv /system/framework/telephony-common.odex /system/framework/telephony-common.odex.old
>adb shell mv /system/framework/telephony-common.odex.new /system/framework/telephony-common.odex
>adb shell rm /data/local/tmp/busybox
>adb shell rm -rf /data/dalvik-cache
>adb reboot
>rmdir /s /q temp
うまくいかない場合は /system/framework/telephony-common.odex.old より telephony-common.odex を復帰させればよいはず。
これでnexus4にアンテナピクトが立った。問題はこれでバッテリーの減りが遅くなるかどうかだが。
【注】これも失敗編です【注】
次に Xposed モジュールを使う方法ってのに取り組んでみた。
javaファイルを見て修正するだけの能力がないので、かいつまんで書くと、 XposedInstaller.apk をダウンロード、インストール。
Xposed用モジュールをダウンロード、インストール。
XposedInstallerを起動するが、インストールしたモジュールがModuleタブに表示されない。
終了。両方アンインストール。
【基本的な方法】
Factory Images for Nexus Devicesよりdeviceにあったtgzファイルをダウンロードし、解凍。deviceのbootloaderを起動しておいてUSB接続。fastboot.exeのあるフォルダにpathがとおっていれば、Winだと "flash-all.bat" を実行すればよいらしい。
【お勧めしない方法】
どうも寝ぼけていたらしく、その下のzipファイルを解凍し、4つのimgファイルをそれぞれ焼いた気がする。
>fastboot flash boot boot.img
>fastboot flash recovery recovery.img
>fastboot flash system system.img
>fastboot flash userdata userdata.img
とやったのだろうか。よく覚えていない。eraseしていなんだよな。でもとりあえず動いている。
【注】失敗編だからね【注】
root化もしたことだし、実際にセルスタンバイ問題にたちむかってみた。いくつか方法はあるようだが、まずこちら。ほとんど理解できないのだが、どうもパラメータの "config_voice_capable" のbool値を "true" から "false" に書き換える作戦と勝手に解釈。
あくまで Galaxy Nexus かつ 4.2.1 での方法なので、うまくいくかは不明だがあたって砕けろ。で砕けた。
"/system/vendor/overlay/framework/framework-res.apk" のパーミッションを変更して reboot したところ、エラーを知らせるメッセージが延々と出続ける。前出のサイトには
「/data/resource-cache/vendor@overlay@framework@framework-res.apk@idmap のパーミッションが 600 になっていて、読み取り失敗して色々なアプリがクラッシュしまくります。」
とあるのだが、当方には意味不明。これがそのうち終わるのか、全然だめなのか判断できない。CWM入れたのにバックアップ作成していなかったので、googleからファクトリーイメージをダウンロードして焼くことにする。
つづく。
参照
ブローヴちゃん
HOBBYHOUSE.JP