Nexus5にfastbootコマンドでファクトリーイメージを焼く方法

こんにちは。

 

カスタムROMやカスタムリカバリーを焼いたけど元に戻したいことはありませんか?その方法を紹介します。

 

 

前提

当然fastbootコマンドが使える環境のパソコンが必要です。EFSを弄った方はカスタムリカバリーを消す前にオリジナルのEFSに戻してください。

 

 

ファクトリーイメージをダウンロード

こちらでお好きなバージョンのzipファイルをダウンロードしてください。

https://dl.google.com/dl/android/aosp/hammerhead-m4b30z-factory-625c027b.zip

ダウンロード出来たら解凍します。たとえば6.0.1 (M4B30Z, Dec 2016)なら解凍するとこのような内容です。

 

フラッシュ

後はNexus5をbootloader起動させてパソコンに繋げてfastbootコマンドで焼くだけですが、image-hammerhead-m4b30z.zipの中にはとても重要なイメージファイルが含まれています。

最も重要なのがboot.imgsystem.imgの2つです。初期化したい場合、この2つは必ず焼かなければいけません。その他のイメージファイルはあなたがどの程度初期化したいかで選べます。例えば;

fastboot flash recovery recovery.img

このようにrecovery.imgを焼くとカスタムリカバリーが消えます。
userdata.imgを焼くと内部ストレージのSDカードが消えます。

6.0.1 (M4B30Z, Dec 2016)の場合、以下のファイルが焼けるイメージファイルです。完全に初期化したいなら全て焼くと良いでしょう。

boot.img
cache.img
system.img
recovery.img
userdata.img
bootloader-hammerhead-hhz20h.img
radio-hammerhead-m8974a-2.0.50.2.30.img

radioはバージョンによって電池持ちが変わるそうです。こだわる人はradioだけ他のバージョンから焼いたりしています。

 

最後に。私は試したことがないのですが、

fastboot oem lock

これでブートローダーがロックできるそうです。試してないので断言はしません。やるなら一番最後の最後にやらないと文鎮化すると思います。

 

以上です。

古いAndroidの容量を空ける最良の方法

こんにちは。

 

2013年までのスマホはストレージ1GB、RAM500MBという作りのものが少なくありませんでした。あなたの家にもそんなスマホが転がっているかもしれません。そして中にはそんなスマホを今でも気に入っていて大切にしている方もいるでしょう。

今回は私のXperia miniを使って少ないストレージに空きを作る最良の方法を紹介します。

予め何をするのか説明すると、ユーザーアプリをシステムアプリ化してユーザー領域を空けようという内容です。

 

前提

システム領域を弄るのでroot化済みの必要があります。更にカスタムリカバリーで全体のバックアップを取ることが望ましいです(カスタムリカバリーが使えなくても作業可能ですが危険です)。

Android 4.4以下なら同じ手法で空き容量が増やせます。Android 5以上でも通用するかもしれませんが断言しません。なぜなら手持ちのAndroid 5以上が走る端末はどれも空き容量に余裕があるのでこの方法を試したことがないからです。

この方法はとっても面倒くさいです。パソコンは使いませんし操作は難しくありません。しかし面倒くさいです。

では方法を紹介しますが、作業前にバックアップを取っておきましょう。

 

1:不必要なシステムアプリを全て消す

システムアプリとはスマートフォンを初期化しても消えないアプリです。スマホで動くアプリはシステム領域とユーザー領域のどちらかにインストールされていて、Google Playからアプリをインストールするとそれはユーザー領域にインストールされます。

例えばYouTubeが最初から入っていて削除できないアプリ(システムアプリ)だったとします。これをアップデートするとアプリはユーザー領域にインストールされます。しかしアップデート前のバージョンはシステムに残るので、同じアプリのバージョン違いがシステムとユーザー領域の両方に存在しています。これはストレージが貧弱な場合大変な無駄遣いです。

消すと不具合が発生するシステムアプリはたくさんありますが、Google PlayとGoogle Play開発者サービスの2つだけは絶対にシステムから消さないでください。この2つ以外で不要なアプリを慎重に消しましょう。当然root権が必要になります。

 

2:バックアップを取る

バックアップは各自必要だと思うタイミングで取りましょう。そのタイミングがわからない場合、不要システムアプリを消す前、不要システムアプリを消した後にそれぞれバックアップを取れば安心です。「ここで失敗すると復旧するの大変だな」と感じる時がバックアップを取るタイミングです。

 

3:Google PlayとGoogle Play開発者サービスの2つを残し他のユーザーアプリを全て消す

1と内容が被りますが違いはシステムアプリではなくユーザーアプリを「全て消す」ということです。消すとエラーが出て作業が出来ないアプリだけ残してください。ユーザー領域を空けるのが目的なので必要なアプリであっても消してください。システムアプリではなくユーザーアプリを消すので混乱しないようにしてください。ユーザーアプリは普通に設定→アプリケーションから消せるアプリを指します。

 

4:Google Playを最新版にする

なるべく全て消したらネットに繋いでGoogle Playを開き、「設定」を開いて下にスクロールし、「Play ストアのバージョン」をタップします。「Google Playストアの….インストールされます」と表示されたらOKをタップしてしばらく放置します。

 

 

この更新は思い通りにいかないことが多いのですが、何とか更新しましょう。更新に成功すると、「Play ストアのバージョン」をタップで「このGoogle Playストアは、最新バージョンです」という表示がされます。もし更新が出来ない場合、ユーザー領域に空きが十分にないのでホームに戻り設定→アプリ→Google Playストア をタップし「アップデートのアンインストール」をタップします。そしてネットに繋いで放置してください。それでもだめなら6,8,9,10に進み再度4を行います

 

 

5:Google Play 開発者サービスを最新版にする

次にブラウザで「google play開発者サービス」と検索し、Google Playのリンクを出します。デスクトップ表示で検索するのがオススメです。

 

リンクをタップしブラウザではなくGoogle Playストアで「Google Play開発者サービス」のページを表示させます。

 

更新をタップ。インストールに失敗する場合、ユーザー領域に空きがないので6,8,9,10に進み再度5を行ってください。

 

 

6:更新されたGoogle PlayとGoogle Play開発者サービスのapkファイルをバックアップする

45で最新版への更新に失敗した場合も同様に行ってください。apkファイルのバックアップは各自好きな方法で行いましょう。私はESファイルエクスプローラーでバックアップしました。セキュリティ面で評判が良くないアプリですが便利です。私はバージョン3.1.8を愛用しています。

 

6.1:SoCのアーキテクチャーを調べる

これは既に知ってる人は飛ばして7に進んでください。アプリを使って自分の端末のアーキテクチャーが何か把握します。オススメアプリはdocomoの「端末仕様確認ツール」です。ただしdocomoのスマホ以外はGoogle Playでインストール出来ないはずなので、Apkpureから野良アプリをダウンロードしてインストールしてください。セキュリティが不安な方はGoogle PlayでCPU Zをインストールすると良いでしょう。

端末仕様確認ツールの場合は「端末情報→CPU」を開きます。

 

CPU Zなら「SYSTEM→Kernel Architecture」を見ます。

 

私の場合は「ARMv7」がアーキテクチャー名です。

 

7:リカバリー起動してバックアップから復元

もし45で最新版へのアップデートに失敗した場合は復元する必要はないです。そのまま8へ進んでください

 

8:apkファイルを解凍してlibファイルを取り出す

Google Playのapkファイルのアイコンを長押しし、「開く」をタップ(私はESファイルエクスプローラーを使っています)。

 

libファイルをタップ。

 

あなたに合ったアーキテクチャー名のフォルダを長押しして解凍。

 

9:libファイルを全て /system/lib へ移す

解凍したlibフォルダ内のファイルを全て /system/lib 内に移しますが、1ファイルずつ行うのがオススメです。全部一気にやるとファイルの把握が出来なくなります。当然ファイラーにはroot権を与える必要があります。

同じファイルがある場合は上書きを選びます。

 

そして移したファイルを長押しし、プロパティを選択。

 

権限をrw-r–r–に変更します。権限の「変更」をタップ。

 

チェックをこのようにつけてOKを押す。

 

権限がrw-r–r–に変わったのを確認。

 

全てのファイルで同様にします。

 

10:アプリ本体をシステム領域へ移す

全てのlibファイルを移し終えたら /system/priv-app へ移動してください。※端末によっては /system/appへ移動

そしてPhonesky.apkを削除します。これがシステム領域に最初からインストールされているGoogle Playです。古い端末だとマーケットですね。そしてバックアップしたGoogle Play ストアのapkファイルをここへ移しPhonesky.apkに名前を変えます。権限も同様にrw-r–r–へ変更します。

 

そして電源を切ってリカバリー起動し、cacheとdalvik cacheをwipeし、通常起動させます。

同じようにGoogle Play開発者サービスもlibファイルを全て移し権限も変更した後 /system/priv-app にあるGMSCore.apkを削除し移動させます。移動させたGoogle Play開発者サービスは権限を変更してGMSCore.apkへ名前を変えます。その後リカバリー起動しcacheとdalvik cacheをwipeして通常起動させます。

これで最新のGoogle Play とGoogle Play開発者サービスがシステムにインストールされました。大体70MBくらいユーザー領域に空きが出来ていると思います。

この方法は他のアプリでも有効なので「あまり更新されないアプリ」を優先的にシステムアプリ化すると良いでしょう。頻繁に更新があるアプリは面倒くさすぎて辛いと思います。

今回はバックアップしたapkファイルを直接 /system 以下へ移動させましたが、それだとエラーが発生するアプリもあります。その場合はlibファイルを移動させ権限も合わせた後 /data/app から /system/app へアプリ本体をコピーするとエラーが発生しない場合があります。この場合 /data/app にあるアプリを削除しないで /system/app へコピーしてください。一時的に同じバージョンのアプリが /data 以下と /system 以下に存在することになりますが、自動的に /data 以下の方は削除されます。一方どうしてもエラーが発生するアプリもあります。その場合は諦めましょう。どんな場合でもシステムアプリ化した後はcacheとdalvik cacheを削除してください。

 

アドバイス

システム領域に空きがどのくらいあるか知りたい時は「端末エミュレーター」をインストールして df コマンドを打つと分かります。ここに余裕がないとシステムアプリ化は失敗します。私のXperia miniは13.5MBの空きがあります。dataには99.5MBの空きがありますがここがユーザー領域の空きを意味します。

 

 

自動アップデートの無効化

この記事を見て自分もやってみようと思った方はぜひこちらの記事もご覧ください。

Google PlayとGoogle Play開発者サービスの自動更新を防ぐ方法

システムアプリ化したアプリのアップデートを行った場合、それは再びユーザー領域にインストールされます。これを再びシステムアプリ化する作業は紹介した通り大変なので、私はアプリを常に最新バージョンにするのを諦めて1年に1回とか半年に1回行う事にしています。

 

Android4.0以下はもうGoogle PlayとGoogle Play開発者サービスがアップデートされないので一度システムアプリ化すると後は維持するだけです。

 

以下蛇足です。
「最良の方法」と大げさな表現をタイトルにつけましたが私がそう考える根拠を以下に述べます。

Gappsを焼くほうが簡単?

Open Gappsから最新のGappsをダウンロードしてカスタムリカバリーで焼けば一番簡単に空きが生まれるかもしれませんが、私のXperia miniのようにSystemの空きが13.5MB程度だとエラーが出て焼けません。

 

Link2SDなどでSDカードを使って拡張したほうがいい?

これは結構良い案だと思います。ただしSDカードが壊れたらそこに本体のあるアプリは動かなくなります。そして私は今まで2回SDカードを壊しているのでSDカードを信頼してません。

 

パソコンに繋いでコマンド打つほうが簡単?

これはその通りだと思います。libファイルの移植と権限合わせは一瞬で終わるでしょう。でも私はそのやり方がわからないのです。ここを改良した方法があればそれを利用してください。

 

 

 

以上です。