2016年3月17日

Nexus6PにAndroid Nを書き込んでみた

udev周りでちょっと手こずったけど、概ねうまくいった

動機とか

Androidの次期バージョン、Android Nのデベロッパープレビューが始まり、
対応デバイスであればfastbootで焼いてもいいよって状態になりました。

人柱精神旺盛なんで、試そうと思ったんだけど、
唯一持ってるNexus7(2013)がサポートデバイスから外されてました。。

でも試してみたかったんで、
Expansysで安くなってたNexus6Pを買って、Android Nを焼いてみることにしました。


Ubuntu14.04LTSとAndroid端末を接続する

Windowsのパーティションをふっ飛ばしたのも懐かしい話。。

やることとしては
・PCにAndroid SDK をインストールする
・udevのルールを作って、リロードしておく
・Android端末側で、USBデバッグをONにする
・PCとAndroidをUSBケーブルで接続する

■Android SDKの導入
AndridStudioを導入する記事を見ればなんとかなるでしょう。
adb と fastboot を使えるようにしておく。

■udevのルール作り
/etc/udev/rules.d/51-android.rules をrootで作成する。
$ sudo nano /etc/udev/rules.d/51-android.rules
ファイルの中身は以下。
#Acer
SUBSYSTEM=="usb", ATTR{idVendor}=="0502", MODE="0664", GROUP="plugdev"
#ASUS
SUBSYSTEM=="usb", ATTR{idVendor}=="0b05", MODE="0664", GROUP="plugdev"
#Dell
SUBSYSTEM=="usb", ATTR{idVendor}=="413c", MODE="0664", GROUP="plugdev"
#Foxconn
SUBSYSTEM=="usb", ATTR{idVendor}=="0489", MODE="0664", GROUP="plugdev"
#Fujitsu & Fujitsu Toshiba
SUBSYSTEM=="usb", ATTR{idVendor}=="04c5", MODE="0664", GROUP="plugdev"
#Garmin-Asus
SUBSYSTEM=="usb", ATTR{idVendor}=="091e", MODE="0664", GROUP="plugdev"
#Google
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0664", GROUP="plugdev"
#Haier
SUBSYSTEM=="usb", ATTR{idVendor}=="201e", MODE="0664", GROUP="plugdev"
#Hisense
SUBSYSTEM=="usb", ATTR{idVendor}=="109b", MODE="0664", GROUP="plugdev"
#HTC
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0664", GROUP="plugdev"
#Huawei
SUBSYSTEM=="usb", ATTR{idVendor}=="12d1", MODE="0664", GROUP="plugdev"
#Intel
SUBSYSTEM=="usb", ATTR{idVendor}=="8087", MODE="0664", GROUP="plugdev"
#K-Touch
SUBSYSTEM=="usb", ATTR{idVendor}=="24e3", MODE="0664", GROUP="plugdev"
#KT Tech
SUBSYSTEM=="usb", ATTR{idVendor}=="2116", MODE="0664", GROUP="plugdev"
#Kyocera
SUBSYSTEM=="usb", ATTR{idVendor}=="0482", MODE="0664", GROUP="plugdev"
#Lenovo
SUBSYSTEM=="usb", ATTR{idVendor}=="17ef", MODE="0664", GROUP="plugdev"
#LG
SUBSYSTEM=="usb", ATTR{idVendor}=="1004", MODE="0664", GROUP="plugdev"
#Motorola
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", MODE="0664", GROUP="plugdev"
#MTK
SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", MODE="0664", GROUP="plugdev"
#NEC
SUBSYSTEM=="usb", ATTR{idVendor}=="0409", MODE="0664", GROUP="plugdev"
#Nook
SUBSYSTEM=="usb", ATTR{idVendor}=="2080", MODE="0664", GROUP="plugdev"
#Nvidia
SUBSYSTEM=="usb", ATTR{idVendor}=="0955", MODE="0664", GROUP="plugdev"
#OTGV
SUBSYSTEM=="usb", ATTR{idVendor}=="2257", MODE="0664", GROUP="plugdev"
#Pantech
SUBSYSTEM=="usb", ATTR{idVendor}=="10a9", MODE="0664", GROUP="plugdev"
#Pegatron
SUBSYSTEM=="usb", ATTR{idVendor}=="1d4d", MODE="0664", GROUP="plugdev"
#Philips
SUBSYSTEM=="usb", ATTR{idVendor}=="0471", MODE="0664", GROUP="plugdev"
#PMC-Sierra
SUBSYSTEM=="usb", ATTR{idVendor}=="04da", MODE="0664", GROUP="plugdev"
#Qualcomm
SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0664", GROUP="plugdev"
#SK Telesys
SUBSYSTEM=="usb", ATTR{idVendor}=="1f53", MODE="0664", GROUP="plugdev"
#Samsung
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0664", GROUP="plugdev"
#Sharp
SUBSYSTEM=="usb", ATTR{idVendor}=="04dd", MODE="0664", GROUP="plugdev"
#Sony
SUBSYSTEM=="usb", ATTR{idVendor}=="054c", MODE="0664", GROUP="plugdev"
#Sony Ericsson
SUBSYSTEM=="usb", ATTR{idVendor}=="0fce", MODE="0664", GROUP="plugdev"
#Teleepoch
SUBSYSTEM=="usb", ATTR{idVendor}=="2340", MODE="0664", GROUP="plugdev"
#Toshiba
SUBSYSTEM=="usb", ATTR{idVendor}=="0930", MODE="0664", GROUP="plugdev"
#Wileyfox
SUBSYSTEM=="usb", ATTR{idVendor}=="2970", MODE="0664", GROUP="plugdev"
#YU
SUBSYSTEM=="usb", ATTR{idVendor}=="1ebf", MODE="0664", GROUP="plugdev"
#ZTE
SUBSYSTEM=="usb", ATTR{idVendor}=="19d2", MODE="0664", GROUP="plugdev"
#ZUK
SUBSYSTEM=="usb", ATTR{idVendor}=="2b4c", MODE="0664", GROUP="plugdev"
これを保存したあとに、udevルールをリロードする。
$ sudo sh -c "(udevadm control --reload-rules && udevadm trigger --action=change)"

■Android端末側で、USBデバッグをONにする
「設定アプリ」→「端末情報」→「ビルド番号」を連打する
その後、「開発者向けオプション」から
・「OEMロック解除」
・「USBデバッグ」
をONにする
OEMロック解除は、このあとfastbootでロック解除するときに必要になる設定

■PCとAndroidをUSBケーブルで接続する
物理的にね。これで認識してくれるはず。
端末側に「このPCと繋げていいか?」とダイアログが出るんで、OKする。
ターミナルは以下な感じ。
user@fenrir:~$ adb devices
List of devices attached
CVH7N16128000921 device


ブートローダーのアンロック

あの、自己責任でね。
端末が完全にフォーマットされちゃうし、メーカーサポート対象外になるので。

まずfastbootモードで再起動する。
user@fenrir:~$ adb reboot bootloader
user@fenrir:~$ fastboot devices
CVH7N16128000921 fastboot
んで、OEMロックを解除する。
user@fenrir:~$ adb reboot bootloader
user@fenrir:~$ fastboot flashing unlock
すると端末側に「ロック解除していい?」と確認が出るので、YESを選択。
(音量キーで上下移動、電源キーで決定)
YESすると、ターミナルはこんな感じに。
user@fenrir:~$ adb reboot bootloader
user@fenrir:~$ fastboot flashing unlock
...
(bootloader) Please select 'YES' on screen if you want to continue...
(bootloader) Unlocking bootloader...
(bootloader) Unlocked!
OKAY [ 52.227s]
finished. total time: 52.227s
端末再起動のタイミングで
「お前の端末、OEMアンロックされてるよ」
という表示が出るけど、電源キー1回押せばOKっぽい
(ってかこれ、毎回出るの…?)


Android Nを焼く

GoogleからNexus6P用のイメージファイルを落としてくる。
http://developer.android.com/intl/ja/preview/download.html#top

落としてきたtgzファイルを解凍し、その中にあるzipファイルも解凍しておく。
$ tar zxvf hogehoge.tgz
$ unzip fugafuga.zip
中身はこんな感じになるはず。
drwxr-x--- 2 user user       4096  3月 16 20:37 ./
drwxrwxr-x 3 user user       4096  3月 16 20:35 ../
-rw-r--r-- 1 user user        101  1月  1  2009 android-info.txt
-rw-r--r-- 1 user user   12518630  1月  1  2009 boot.img
-rw-r----- 1 user user    3610624  3月  9 05:39 bootloader-angler-angler-03.51.img
-rw-r--r-- 1 user user    5890220  1月  1  2009 cache.img
-rw-r----- 1 user user        962  3月  9 05:39 flash-all.bat
-rwxr-x--x 1 user user        833  3月  9 05:39 flash-all.sh*
-rwxr-x--x 1 user user        790  3月  9 05:39 flash-base.sh*
-rw-r----- 1 user user 1162170548  3月  9 05:39 image-angler-npc56p.zip
-rw-r----- 1 user user   49766400  3月  9 05:39 radio-angler-angler-03.61.img
-rw-r--r-- 1 user user   13513962  1月  1  2009 recovery.img
-rw-r--r-- 1 user user 2561465900  1月  1  2009 system.img
-rw-r--r-- 1 user user  142279856  1月  1  2009 userdata.img
-rw-r--r-- 1 user user  188755084  1月  1  2009 vendor.img
その後、Android端末をfastbootモードでPCと接続し、flash-all.shを実行する。
5分ほどすると、焼きあがって端末が再起動する。


お疲れ様でした

それなりに使えるとだけ聞いてたけど、まぁベータ版だからね。
期待しすぎない。

例えば、画面遷移すると1つ前のActivityのスクロール位置が吹っ飛んでたり、
AppSwitchの画面がなんかおかしかったりする。
onPause()かonStop()されると描画内容飛んじゃってる?
マルチウインドウの関係なのかなーって予想してる。

ちなみに、タスクスイッチボタン(画面右下の□)を長押しすると、マルチウィンドウになる。
画面が大きいNexus6Pだと、これはなかなか面白い。

Androidバージョン N

あ、元に戻したくなったらMarshmallowのFactoryImageを焼きこめばOK
fastboot使うのは一緒。

0 件のコメント :

コメントを投稿