2015年5月31日日曜日

[android]Android M PreviewをNexus9にインストールする

[環境]
・Nexus9
・Mac OS X 10.10.3
・adb、fastbootはAndroid SDK Managerで最新を取得済
・adb、fastbootへのPathが通っている(echo $PATHすると、sdk内のplatform-toolsへのpathが表示されるみたいな)



[手順]
最悪Nexus9が壊れるので慎重に。

1. System Imageをダウンロードしてどこかに解凍しておく
  ・http://developer.android.com/preview/download.htmlからvolantis-MPZ44Q-preview-d15ad483.tgzをダウンロードする
  ・ダウンロードがおわったら$md5 volantis-MPZ44Q-preview-d15ad483.tgzとか$open sha1 volantis-MPZ44Q-preview-d15ad483.tgzで値が一致することを確認しておく
  ・$ tar zxvf volantis-MPZ44Q-preview-d15ad483.tgz
  ・フォルダ名に日本語が入らないようにしておいたほうがよいかもしれません(関係ないかもしれません)

2. データのバックアップをとる
  私はやっていませんが、出荷状態みたいにまっさらになるので必要な場合はバックアップをとる

3. Nexus9をfastboot modeにする
 ・設定->タブレット情報でビルド番号を連打 すると設定に「開発者向けオプション」というのが追加される
 ・設定->開発者向けオプションで「OEMロック解除」と「USBデバッグ」をONにする
 ・MacとNexus9をUSBで接続し、ターミナルで$ adb reboot bootloader
 ・すると、見たこともない画面が表示されるのでここで怖気づかない
 ・続けて$ fastboot oem unlock

4. 1で解凍したもののなかにflash-all.shがあるのでそれをテキストエディタ等で開き、sleep 5のところをsleep 20くらいにかきかえておく
 ・インストール(書き込み)の途中で一度再起動するフェーズがあるのですが、そこの待ち時間のようでして場合によってはsleep 5のままで大丈夫なのだとおもうのですが、私のところでは何度やっても失敗をしましてここを延ばすことにしました
 ・ちなみにそのときのエラーは下記のような感じでして、usb_write failedとか言われました。まだ再起動するまえに次のフェーズを実行しようとして失敗していたのではないかとおもわれます。こんなのがでると正直壊してしまったのじゃないかとドキドキしていました。
ERROR: could not clear input pipe; result e00002ed, ignoring...
ERROR: could not clear output pipe; result e00002ed, ignoring....
ERROR: usb_write failed with status e00002ed
ERROR: usb_write failed with status e000404f
sending 'cache' (6248 KB)...
ERROR: usb_write failed with status e000404f
FAILED (command write failed (No such file or directory))

5. $ which fastboot 等でfastbootにPATHが通っていることを確認

6. $ ./flash-all.sh を実行
・この.shのなかでfastbootを使います
・10分か20分待つとこんがりいい感じ焼き上がります
・自動的に再起動します

7. 再起動すると初期設定をするように促されます。気のせいかもしれませんがWi-Fiの設定はスキップできませんでした。oem lockを再びかけたいのでスキップできるところはスキップしました。

8. oem lockをする。fastboot modeにして、$ fastboot oem lock

9. fastboot mode画面にたしかRESTARTのメニューがあるので音量キーでカーソルをあわせて電源ボタンをおしたとおもいます(すみません、詳細忘れました)

10. 再起動するので今度はGoogleアカウント設定等をする

・OTAで自動的に次のpreview releaseへアップグレードされるらしいです
・ただしfinal system image(正式リリースのこと?)は配信されないので、手動でアップグレードしてねとのことでした。

Android Mになることで個人的に気になったことです。
http://developer.android.com/preview/features/runtime-permissions.html

Permissionの取り扱い方がだいぶかわるようです。以前はインストール時に全部許可を求めるような感じでしたが、Mからは必要となったときに許可を求めるような感じにしないといけないようです。
なぜこのパーミッションが必要なのかをユーザに説明することがベストプラクティス、ユーザが拒否した場合には代替手段を提供するのがベストプラクティスらしいです。たとえばカメラ撮影のパーミッションをユーザーに拒否されたら、MediaStore.ACTION_IMAGE_CAPTUREを暗黙的IntentでstartActivityForResult()して、他の許可されているアプリに撮ってもらいなさいということらしいです。
全部のパーミッションがこういう扱いになるのではないようでして、PROTECTION_NORMALのものは従来通りインストール時に許可してもらうことになるそうです。PROTECTION_NORMALの例はalarm clockとinternetが挙げられていました。

boolean Context.checkSelfPermission(String) # 許可があるかどうか
Activity#requestPermissions(String[], int) # 許可を求めるAPI
Activity.onRequestPermissionsResult(int, String[], int[]) # 許可を求めるAPIのコールバックrequestPermissionsの第2引数とonRequestPermissionsResultの第1引数が関連している

0 件のコメント:

コメントを投稿