ごりぽんソフトウェア

2012-11-22

Nexsu7をAndroid 4.2にアップデート

先日root化ほか色々済ませたNexus7ですが、11月13日付でAndroid 4.2のアップデートが来ていることに15日になって気づいて、慌ててアップデートを掛けました。

root化したままCWM Recoveryを書き込んだままアップデートしようとしたところ……

まずバッテリが足りないとの警告が出てOTAによるアップデートに待ったが掛かりました。あとで調べたところ、20%以上でないとダメなようです。ということでまずはバッテリ充電。

充電が終わってやっとアップデートを開始したんですが、初っ端はBrowserProviderProxy.apkとBrowserProviderProxy.odexの無効化がチェックに引っかかり失敗。リネームしていたものをもとに戻しました。

次に、build.propの修正が引っ掛かり失敗。DPI値を書き換えていたのがダメだったようです。保存してあった元のファイルに戻しました。

再度の挑戦でようやくアップデートは通ったものの*1、CWM Recoveryが、install-recovery.shが生きているんで無効化するかどうかと、/system/xbin/suが壊れているんで直すかどうかを聞いてきました。install-recovery.shは無効化せず*2、suは直す、と選んで起動。たぶんここで修正しないと、root化が解除されるんじゃないかと思います。

本当ならこのまま普通にアップデートが終わるはずだったんですが、以前調子に乗ってSuperSUアプリをodex化していたのが仇になりました。odex化はシステムのフレームワーク部分に依存するので、フレームワークが書き換わるアップデートの後だと動かなくなってしまいます。suバイナリは残っているものの動かないSuperSUがシステムROMに居座り、CWM RecoveryはストックROMのリカバリに上書きされて消滅、SuperSUアプリを更新しようにもエラーが出てしまい更新できないという事態に(泣)。

泣きそうになりながら何とか修正しましたが、ひどい目にあいました。ちなみに、システムROMに入れていた他のアプリは全て残っていて、全てそのまま動いていたので、ヘンに弄っていなければ、おそらくroot化したままアップデートが終わると思います。その際には、CWM Recoveryの修復確認で下手な選択をしなようにしましょう。

で。元に戻していたDPI値の変更を再度加えて再起動して……あれ? タブレットUIになってない? と思ってWEBで情報を探したら、Android4.2のタブレットUIは拡大されたスマートフォンUI(=ファブレットUI)寄りに修正されたらしいですね。旧タイプのほうがなんとなく好きだったんですが……。

その後、復活させていたBrowserProviderProxy.apkとBrowserProviderProxy.odexをまた無効化しようとしたところで、何気にブラウザを起動させてみたら普通に動く。あれれ? なんで動くかな?? ちょっと検証して、ウチの環境だとリネームしなくてもブラウザが動く、というのにこの時気づいて、動くなら良しということで再度の無効化はせず。先日のroot化のエントリではそれを予め反映させています。

まあ、そんなこんなで、システムROMに入れるアプリは下手に弄らないほうが良い、という教訓を痛い授業料とともに得つつ、とりあえずNexus7はAndroid 4.2になりました。特に新フィーチャーに興味は無いので、淡々と使っていく事になると思います。

*1:CWM Recoveryはアップデートの起動に対応している模様

*2:ここでCWM Recoveryを残しておかなかったのであとで苦労をするはめに……。

2012-11-18

今持っている端末

ここのところ、MNP一括0円キャッシュバック付き端末を貰い漁って*1、俗に言う「MNP乞食」をやってた訳ですが、そのせいで端末が結構増えたので、整理も兼ねて一覧にしてみようかなと。

では、行きます。順不同です。

  • P-01D(ターコイズ) 常用。ROMは原型留めない位改造してますし、バッテリまで改造して今は改造バッテリ用のホワイトのカバーになっています。
  • P-01D(グリーン) 実験用。コレを使ってroot化セットやダイエットセットを試しています。リカバリ領域にCWM Recoveryが書き込んであるだけのどノーマル。
  • P-01D(マゼンタ) 箱から出すこともなく放置プレイだったので、金欠の折に売っ払っちゃいました。
  • DIGNO ISW11K DIGNO DUALのroot化の研究に使えるかと思って入手。でもrootが取れないのでほとんど放置状態。
  • GALAXY Nexus SC-04D 最初に入手したNexusシリーズ。紆余曲折を経て現在はドコモ純正4.1.1なROMでroot化&CWM Recovery書き込み済み。
  • IS01 SHI01 一番最初に入手したAndroid端末。なんか有志作成のAndroid4.0カスタムビルドが動いてるらしいですね(驚)。アップデートも掛けず全く弄らずどノーマル。
  • GALAXY Note SC-05D 最終処分?で値段が下がっていたので、MNP乞食で貯めたヨドバシゴールドポイントでがっつり購入。Xi契約のSIMなのにP-01Dに挿してコイツはそのテザリングで使ってます(苦笑)。root化済。
  • DELL Streak 001DL ウィルコムのセット物の片割れ。内蔵ストレージがmicroSDになってる面白い端末。内蔵microSDをUHC-1の8GBに換装しSIMロック解除とroot化。ROMは純正の最新でリカバリはStreakMod。
  • AQUOS PHONE IS14SH テンキー付き端末も1台くらいは手元にないとなってことで入手。au端末でかつシャープ端末なのでroot化に色々と制限があり。root化はせずに放置。
  • MIRACH IS11PT キャッシュバック狙いで他に意図なく入手。ガラケーのF001と交換して友人のところへ。ICカードロックが無いので差し替えて使うのに便利だとか。
  • Nexus7 先日入手したばかりの、所有機唯一のタブレット*2。MNP乞食の過程で貯まったヨドバシのゴールドポイントで購入。以前エントリした通り、root化とCWM Recoveryに加えてFlashPlayer・標準ブラウザ・USBメモリ関連を組込み。
  • MOTOROLA PHOTON ISW11M SIMロック解除するとドコモSIMでも使えたりする面白い端末。新品放置だったものを、金欠の折に売っ払ってしまいました。
  • F-03D Girls' 妹にあげようかと思ってコレにしたものの、SIMがminiUIMだったために却下(苦笑)。新品放置だったので売っ払っちゃいました。
  • XPERIA Play SO-01D Android変態端末の最右翼(笑)。動作チェックには外せないので入手。月々サポート2100円付きでオイシイ。これもヨドバシゴールドポイントでメイン使いの回線を機種変更。root化済。

我ながら凄い台数だ。全部で14台、残っているものだけでも10台か。うむむ。

*1:とても「買い漁って」とは言えない(苦笑)。

*2:DELL Streakはタブレットじゃないんです(苦笑)。

2012-11-15

Nexus7をroot化してやったこと

ここのところ気が緩んでたのか、すっかりAndroid4.2のアップデートというイベントをスルーしまくっていました。ということで、遅まきながらアップデートをしたんですが、そのネタ振るにはまずroot化の話をしとかないといけないので、まずはそっちをエントリしてみようと思います。

では、ブートローダーアンロックしてroot化していきます。詳しい方法は他サイトにいくらでも転がっているので、そちらを参照してもらうとして、手順だけ簡単に。

まずブートローダーアンロック。Nexus7のUSBドライバを用意し、音量上下ボタンを押しながら電源ONしてブートローダーモードで起動、PCに繋いでドライバをインストールしたら、コマンドプロンプトから"fastboot oem unlock"をパシっと入力。Nexus7側でアンロックを行うかどうか確認される(英文)ので、音量ボタン上下でYESを選択して電源ボタンで決定すればアンロックされる、という寸法。アンロック時にデータが全消去されるのも含めて、全くGALAXY Nexusと同じです。なお、fastbootコマンドはAndroid SDKに含まれているものですので、そちらの用意も必要ですが省略。

続いてそのまま(Nexus7はブートローダーモードでPCにつながっている状態から)、CWM Recoveryの書き込みです。ClockWorkModのサイトからGoogle Nexus7用のCWM Recovery(右列のTouch版がオススメ)をダウンロードしてきて、コマンドプロンプトから"fastboot flash recovery <ダウンロードしてきたファイルのパス>"と入力してリカバリを書き換え、終わったら続けてコマンドプロンプトから"fastboot reboot-bootloader"でブートローダーを再起動。端末側で音量上下でRecovery modeを選択して電源ボタンで決定、リカバリーモードを起動します。ここではすぐにreboot system nowで再起動。ROM may flash stock recovery on boot. Fix? と聞かれるのでYES - Disable recovery flashを選択してinstall-recovery.shを無効化しておきます。以降install-recovery.shは動作しなくなるようなので(戻す方法があるかどうかは不明)、もし別の目的でinstall-recovery.shを使うつもりがあるなら別の方法で無効化を行ったほうが良いかもしれません。

再起動したら今度はroot化。RootzWikiのページからカスタムリカバリ向けのSuperSUアプリのZIPファイル(最初のコメントの下側にあるJB-SuperSU.zipです)をダウンロードしてきて、起動したNexus7の内蔵ストレージにコピーして、再度CWMリカバリを起動、install zip from sdcard→choose zip from sdcardと進んで、先程コピーしたファイルを選択すればroot化も完了。ちなみに、もしSDカードの中身がコピー時と違っていた場合は、mounts and storage→mount /sdcardと進んでSDカードをマウントしなおしてみてください。

ここまででroot化が終わったので、色々と手を入れていきます。このあとの作業に必要なので、まずはGooglePlayからESファイルエクスプローラーをインストールします。Root Explorerでも構いませんが、私はこっちのほうが好きなので(無料ですし)。root権限でのファイル操作と/systemへの書き込みが出来るように設定しておいてください。

最初にやったことは、Flash Playerのプリインストール化です。そのまま/system/appに書いても動かないので、ちょっとファイルに加工をしてやる必要があります。

  1. アーカイブ版 Flash Player の提供についてのページから、Android 4.0用のFlash Playerをダウンロードしてきます。このエントリを書いている時点での最新版は11.1.115.27ですね。Android 3.x/2.x用と間違えないように。
  2. ダウンロードしてきた.apkファイルをアーカイバに突っ込みます。私はExplzhを使いました。そうすると中身が見えるので、libディレクトリ内にあるファイルを4つ、展開して取り出します。取り出したらそのままアーカイブ内のlibディレクトリ丸ごとを削除して.apkを更新します。削除できないor分からないのであれば、ファイルを取り出すだけでもOKです。ただし、/systemの容量をちょっと無駄にしますが。
  3. 出来上がったlib無し.apkと取り出した4つ、合わせて5つのファイルをNexus7の内蔵ストレージにコピーします。
  4. Nexus7側でファイラーを操作し、まず4つの取り出したファイルを/system/lib/plugins/com.adobe.flashplayerディレクトリ(pluginsディレクトリ以下は存在しないので新規に作成して属性は755に変更)に移動し、属性を644に変更します。
  5. 残った1つの加工済み.apkを/system/appディレクトリに移動し、属性を644に変更します。ファイル名はそのままでも構いませんが、プリインストールされている機種ではoem_install_flash_player.apkという名前になっているようですので、参考まで。
  6. Nexus7の電源を入れ直し再起動します。Androidをアップグレードしていますという内容のダイアログが出て少し待たされますが、あとは普通に起動します。もしダイアログが出ない場合、ファイル属性や移動先のディレクトリが間違っている可能性が高いので確認してみてください。

これでFlash Playerのプリインストール化は終了。ドロワー画面にFlash Player Settingsのアイコンが出現しています。ただし、このままだとブラウザとしてFlash Playerに対応していないChromeが使われてしまい、Flash Playerが使い物になりません。Chrome以外の対応ブラウザをインストールすればいいだけなんですが、私はここでちょっと拘って、Android4.1.2の標準ブラウザをプリインストール化してみました。

  1. Android4.1.2の端末の/system/appディレクトリから、Browser.apk(ブラウザ)とChromeBookmarksSyncAdapter.apk(Googleブックマーク同期)を抜き出してきます。私は4.1.2にアップグレードしたGALAXY Nexusがあったのでそこから抜き出してきましたが、どうしてもということならWEBで検索すれば配布されているものがあるので、それを利用してください。ライセンス的にはわりとグレーゾーンな気がしますので、詳細は控えますが……。
  2. 抜き出した2つのファイルをNexus7の内蔵ストレージにコピーします。加工は必要ありません。
  3. Nexus7側でファイラーを操作し、2つのファイルを/system/appディレクトリに移動し、属性を644に変更します。
  4. Nexus7の電源を入れ直し再起動します。Flash Playerの時と同様にダイアログが出て待たされますが、あとは普通に起動します。

これで標準ブラウザが復活して、ドロワー画面に地球のアイコンが現れます。ちなみに、私のNexus7とGALAXY Nexusから引っこ抜いた.apkだと大丈夫だったんですが、場合によってはこのままだとブラウザが落ちて起動しない場合があるようです。その場合は、/system/appディレクトリ内のBrowserProviderProxy.apkとBrowserProviderProxy.odexを無効化してください。削除しても大丈夫だと思いますが、拡張子が.apkと.odex以外になっていれば無効になりますので、BrowserProviderProxy.apk.org・BrowserProviderProxy.odex.org等にリネームして残しておくのがオススメです。*1

普通に使う分にはこれで十分なんですが……。私がNexus7を買ったのは「1台くらいタブレットが無いとなぁ……」というのが動機だったんですが、Nexus7のUIはタブレットUIではなく、拡大されたスマートフォンUI*2になっているんですよね。調べてみたらroot化されていれば簡単に切り替えられるので、それも弄りました。

  1. ESファイルエクスプローラーから/systemディレクトリ内にあるbuild.propを開き、ESテキストエディターを選択してテキストエディタを起動します。
  2. ro.sf.lcd_densityという項目を見つけ、値を初期値の213から160に書き換え、ファイルを保存しテキストエディターを終了します。
  3. build.propファイルの属性が変わってしまっているので、ファイル属性を644に変更します。
  4. Nexus7の電源を入れ直し再起動します。

これであっさりとUIがタブレットUIに切り替わります。ただ、デスクトップも変わってしまう関係で色々変なことになりますので、やるならファクトリーリセットも併用すべきだと思いますが。

で。先のエントリで書いた通りストレージの容量には不満を感じていないのですが、外部とのデータのやり取りにUSBメモリ等を使えれば便利ということで、ついでにUSBホスト機能による外部メモリのアクセスも出来るよう弄ってみました。

  1. GooglePlayでStickMountというアプリをインストールします。他にも似たようなアプリはあるようですが、SuperSUアプリと同じ作者さんなのでコレを利用します。このあとプリインストール化するので、インストールしたら/data/app/eu.chainfire.stickmount-1.apkを内蔵ストレージにコピーして、すぐにアンインストールします。
  2. xda-developersのページから、Module Loader 1.1をダウンロードしてきて(最初のコメントのかなり下にあるModuleLoader-release.apkです)、これもNexus7の内蔵ストレージにコピーしておきます。
  3. xda-developersのページから、ファイル名の日本語化に必要なカーネルモジュールをダウンロードしてきます(最初のコメントのjb-3.1.10-g52027f9.zipです)。必要なのは中に入っているnls_utf8.koだけなので、PCの適当なフォルダにそのファイルだけ展開しておきます。
  4. Nexus7の設定→タブレット情報から、カーネルバージョンの最初の1行の文字列をメモしておきます。その文字列が見れればいいだけなので、その項目を表示させたNexus7をそばに置いておくだけでも構いません。
  5. PCのバイナリエディタ(私はstirlingを使っています)で先程のnls_utf8.koを開き、オフセット0x0122からにある"3.1.10-g52027f9"という文字列を、カーネルバージョンの最初の1行の文字列に書き換えて保存します。保存できたらこれもNexus7の内蔵ストレージにコピーしておきます。
  6. Nexus7側でファイラーを操作し、Stick MountとModule Loaderの2つの.apkファイルを/system/appに移動し属性を644に、nls_utf8.koを/system/lib/modules(modulesディレクトリは存在しないので新規作成し属性を755に変更)に移動し属性を644にします。
  7. Nexus7の電源を入れ直し再起動します。例によってダイアログと、デスクトップまで来るとStick MountとModule Loaderが出したトーストが表示されます。
  8. Module Loaderを起動し、System Modules→nls_utf8.koと選んでチェックボックスをONにし、画面上部のSave selectionボタンを押して、Will insmod 1 modulesと確認されるのでOKを選んで設定を保存し、アプリを終了します。
  9. Stick Mountを起動し、LANGUAGEのUTF-8の項目をタップしチェックボックスをONにしたらアプリを終了します。

これで、USBホスト機能で接続された外部メモリ(電源が許すならHDDでもイケるはず)にアクセス出来、ファイル名が日本語でも化けなくなります。

 だいぶ長文になってしまいましたが、これでとりあえず「Nexus7をroot化してやったこと」は終わりです。Android周りで細々したことは色々やっているので、そういうネタもぽちぽち出していこうと思います。

*1:Linuxチックに属性を000にするってのもアリかも? 書いた後気づきました(苦笑)。

*2:Phone+TabletでPhablet(ファブレット)と呼ぶらしい

2012-11-03

Nexus7買いました

Nexus7をようやく入手しました。MNPとか駆使しまくって作ったヨドバシのポイントで購入したので、例によって出費はほとんど無いですが。

GooglePlayでの32GB版の発売が始まった日の夜にヨドバシAkibaに行ったら予約を受け付けていたので予約したんですが、その翌日の夜にまたヨドバシAkibaに行ったら16GBが緊急入荷とか言って少数販売されていたので、サクッと32GB版の予約をキャンセルしてその日のうちに16GB版を手に入れました。

今まで色々とAndroid端末を使ってきてますが、内蔵16GBの端末でストレージが足りないと感じたことがなかったので32GBはオーバースペック*1。32GB版しか手に入らないなら仕方がないと予約したんですが、16GB版が手に入るなら話は別です。要らないものに+5000円支払って、さらに数日待つほど酔狂じゃありませんので(苦笑)。

さっそくroot化して(Nexusシリーズなのでブートローダーアンロックが簡単に出来る)、Androidの標準ブラウザをsystemディレクトリに組み込んで、Flash Playerをインストールして、USBメモリの読み書きのためのアプリもsystemディレクトリに組み込んで、UIのタイプをタブレットUIに切り替えて……とひと通りやることはやったので、ぼちぼち落ち着いて使っていこうかな、と。

root化してやったことの詳細については、また後日にでも。

*1:世の人々がストレージの容量に神経質になるのが理解出来ませぬ(苦笑)。