access logger

家庭用コンピュータ環境の模索 >Nexus7(2013) 設定と Hack 方法まとめ >HACK

Hack

用語集

bootloader
リセット直後は、まず bootloader が動作する。カーネルをロードするためのもの。Nexus 7(2013)の場合はGoogle + 鍵 のロゴを表示しているのは bootloader だ。bootloader は、通常、決められた ROM(ここでは、kernel+boot.img(RAM disk)を指す)をロードする。しかし、boot unlock すると、それ以外のシステムを起動することができるようになる。
Flash 領域
Storage_PathPrimary_Block_DeviceSizeFile_System
/boot/dev/block/mmcblk0p1416MBemmcブートローダが格納されている
/recovery/dev/block/mmcblk0p1510MBemmcrecovery system が格納されている。
/misc/dev/block/mmcblk0p241MBemmc
/system/dev/block/mmcblk0p22Size:827MB Used:701MB Free:126MBext4OSとしての領域、システムが用意したアプリの領域。
/data(/data/media/0, /sdcard)/dev/block/mmcblk0p30Size:27047MB Used 9751MB Free 17295MBext4/data はユーザがインストールしたアプリが使う。
Nexus7(2013)はSDカードを持たないが、/sdcard(/data/media/0)がそのように使われる。つまり、USB接続したときに[内蔵ストレージ]として見える。主にアプリのデータ(写真とか音楽とか)が保存される。Nexus7(2013)の場合は、パーテションとしては同一。
/cache/dev/block/mmcblk0p23Size:551MB Used 9MB Free 541MBext4Dalvik VM がJIT した結果がキャッシュされる。
/sbl1/dev/block/mmcblk0p91MBemmc
/sbl2/dev/block/mmcblk0p101MBemmc
/sbl3/dev/block/mmcblk0p111MBemmc
/tz/dev/block/mmcblk0p150MBemmcおそらく、TrustZoneのこと
/rpm/dev/block/mmcblk0p130MBemmc
/aboot/dev/block/mmcblk0p125MBemmc
/sbl2b/dev/block/mmcblk0p171MBemmc不明。sbl2のバックアップ?
/sbl3b/dev/block/mmcblk0p182MBemmc不明。sbl2のバックアップ?
/tzb/dev/block/mmcblk0p210MBemmc不明。sbl2のバックアップ?
/rpmb/dev/block/mmcblk0p200MBemmc不明。rpmのバックアップ?
/abootb/dev/block/mmcblk0p205MBemmc不明。abootのバックアップ?
/usb-otg/dev/block/sda10MBvfat
/persist/dev/block/mmcblk0p4Size:14MB Used:4MB Free:10MBext4
boot menu
ドロイド君の腹が空いているロゴ。(機種固有だが Nexsu(2013)の場合)「VOL下」を押しながら「電源」長押しで起動する。
recovery system/recovery image
システムのrecovery 領域にインストールされるミニシステム。ClockworkMod(CM)や、Team Win Recovry Project(TWRP)が代表的。recovery を起動するには、2つの方法がある。
キー操作
ブートメニューを起動して、VOLキーで「Recovery mode」を選択して、「電源」キーで決定すると、recovery system が起動する。
adb
$ ./adb reboot recovery
boot unlock
boot loader が、メーカ指定以外のシステムを起動できるようにすること。fastboot コマンドを使って、bootloader の設定を変更することによってできる。
fastboot
flash 書きこみツール。adb reboot bootloader などで
adb
デバッグツール。端末内に、adbd というサーバが動いていて、それと通信することによってデバッグを行う。
factory image
工場出荷状態のファームウエア。boot+recovery+system を全て含む。
stock ROM
factory image とほぼ同じ。カスタムROMに対応する用語として用いられ、factory image の system の部分だけを指すことが多い。
recovery
recovery 領域で動作するミニシステム。
mass storege
USB接続方法の一つ。普通のSDカードやらUSBメモリはこの方法で接続される。Nexus7(2013)は mass storege をサポートしない。
PTP
USB接続方法の一つ。最近のデジカメはPTPで接続するものが多い。Nexus7(2013)はPTPとMTPの両方の接続方法をサポートするが、母艦がMTPをサポートしている場合はMTPで接続すれば良い。
MTP
USB接続方法の一つ。PTPを発展せて画像以外も扱えるようにしたもの。mass storage はファイルシステムごとマウントするので、同時に一つのシステムからしかアクセスできない。つまり、USB側でマウントすると、本体側からはアンマウントされる。しかし、MTP では、ファイルひとつひとつが本体のファイルシステムを通して見えるので、本体側からマウントしつつ、USB側からも操作できる。(参考)
残念ながらLinux(Ubuntu) では PTP や MTP のサポートが遅れており、ユーザモードファイルシステム(fuse)を使ったものが使われている。Ubuntu では、標準リポジトリではなく PPA からインストールできる。

開発者向けオプション

ARTを使用する→Checked。ART は Dalvik に変わる Java のVM。Dalvik が JIT を基本としている一方、ART はインストール時コンパイルを基本としている。VM を ART に変更したあと、システムは再起動し、インストールされているアプリは再コンパイルされてキャッシュされる。けっこう時間がかかる。

(2014-02-23)

Xposed(2.4.1)は、ARTには対応していない。ARTを選んで再起動しても、Dalvik に戻される。

MTPのインストール

(2014-02-08)

Linux で Nexus7(2013)をマウントするには mtpfs が必要(MTP:Media Transfer Protocol)。

Heliumのインストール

(2014-02-08)

アプリとアプリのデータをRoot化せずにまるごとバックアップ&復元できるアプリ。MUSTではないが、root化する=Boot unlock=初期化、なので入れておいたほうが有用。

Android SDK のインストール

(2014-02-08)

開発ツールなのだが、その中の adb, fastboot などのツールが必要。ツール(ADT)だけインストールする方法もある。

ブートローダアンロック

(2014-02-08)

ブートローダをアンロックすると、保証が効かなくなる、データはすべて初期化される、ので注意すること。

カスタムリカバリTWRP〜SuperSUのインストール

(2014-02-08)

バックアップ&復元、カスタムROMの導入、のベース。root化。

Titanium Backup

(2013-02-08)

有名なバックアップソフト。root化が必要。

Flash Player

(2014-03-23)

標準では Flash Player はサポートされないが、なんとか動かす方法はある。

Firefox 28.0 では Flash Player がサポートされるようになった。Dolphin+Jetpack では表示されないページがあったので、こちらが本命。

adb 使い方メモ

(2014-02-08)

root の adb shell を使う
# 端末の adbd を root 権限で起動しなおす。
$ ./adb root
# 一般ユーザ権限で shell を起動する。
$ ./adb shell
shell@flo:/ $ id
uid=2000(shell) gid=2000(shell) groups=1003(graphics),1004(input),1007(log),1009(mount),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats) context=u:r:shell:s0
shell@flo:/ $
# unix と同じように su コマンドを実行する。
shell@flo:/ $ su
# このとき、SuperSU のダイアログが出てきて、root 権限の許可を求めるので、了承する。
root@flo:/ #
# root 権限が得られている。
root@flo:/ # id
uid=0(root) gid=0(root) context=u:r:init:s0
wlan 経由で adb shell を使う
http://komugi.net/archives/2010/08/22212755
# USB接続で IPアドレスを調べておく。
nkon(10308)~/Android/sdk/platform-tools % ./adb shell
shell@flo:/ $ ifconfig wlan0
wlan0: ip 192.168.1.35 mask 255.255.255.0 flags [up broadcast running multicast]
shell@flo:/ $ exit
# 5555 ポートでサーバを起動しておく。
nkon(10334)~/Android/sdk/platform-tools % ./adb tcpip 5555
restarting in TCP mode port: 5555
# ここでUSBケーブルを外し、WiFi接続にする。
# 接続方法を決める
~/Android/sdk/platform-tools % ./adb connect 192.168.1.35:5555
connected to 192.168.1.35:5555
# 接続方法が tcpip になっている。
nkon(10338)~/Android/sdk/platform-tools % ./adb devices
List of devices attached 
192.168.1.35:5555	device
# あとは、普通に adb コマンドを実行すれば、それが WiFi接続で実行される。
~/Android/sdk/platform-tools % ./adb shell
shell@flo:/ $ id
uid=2000(shell) gid=2000(shell) groups=1003(graphics),1004(input),1007(log),1009(mount),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats) context=u:r:shell:s0
shell@flo:/ $ exit
nkon(10339)~/Android/sdk/platform-tools % 
ケーブルを接続しなくても良いのは便利。ただし、節電ツールなどを使っていると、すぐにスリープしたり接続が切れたりする(USBデバッグ中は電源を切らない、というオプションがあるのに対して)。あまり実用的ではないかもしれない。Qiで給電していれば実用的なのだろうか。

MultiROM用のTWRPのインストール〜PureSpeedXのインストール

(2014-02-15)

Pure Speed X(PSX)の使い方

(2014-02-15)

じつに普通に使える。アプリとかは、Titanium Backup で保存しておいたのがそのまま動くので、なんにも苦労しない。余計なGoogle標準アプリが無いのは気持ち良いことだ。

ひとつ問題が。Android 4.3ベースなので、制限つきプロファイルが正常に動作しない。子供に貸す用としては若干使いにくい。

セットアップ
GApps を入れていると、普通のAndroid初回使用時と同じようなセットアップが走る。
SuperSU
Google Play から。KitKat は SuperSU のアプリは対応していないが、PSXは JellyBeans ベースなのでアプリから入る。
Titanium Backup
これで、Stock ROM の時に入れた、いろんなアプリを復元できる。
  • Google 日本語入力
  • FireFox
  • Facebook
  • Twitter
  • Dropbox
  • ジョルテ、ジョルテSync
  • AVAST! モバイルセキュリティ
  • No Root Firewall
  • VLC
  • Yahoo! 乗り換え案内,Yahoo! 辞書
  • マップ

busybox

(2014-02-16)

Google play で探したら、いくつか見つかったが、BusyBox Installerをインストール。標準インストールでは、あまり symlink が作成されず、世間を見ても、buxybox XXXX といった使い方が主流のようだ。

20141223 追記。Lollipop に対応してバージョンが上がらなかったので、Busyboxの方をインストール。

Android Terminal Emulator

(2014-02-16)

Google play で探したら、いくつか見つかったが、Android Terminal Emulatorをインストール。

Xposed

(2014-02-21)

SSHによるアクセス

2014-12-23 update

  1. 外からアクセスするために、DHCPで払い出すIPアドレスを固定する。
    • 設定→WiFi→詳細 でMACアドレスがわかる。
    • DHCPサーバで固定割り当て。ホスト名は flo にしといた。
    • 同じく、設定→WiFi→詳細 でIPアドレスが変わっていることを確認。
    • /etc/hosts に書き加える。
  2. Google Play から SSHDroid をインストール。無償版は公開鍵認証が使えない。
    • NoRootFirewall があるなら、stop しておく。
    • 設定から、パスワードを変更する。初期パスワードは admin。
    • ホームディレクトリは /data/data/berserker.android.apps.sshdroid/home/ にになっている。アプリの設定から変更できる。
    • shell は adb shell のときと同じ ash のようだ。
      ~/Android/sdk/platform-tools $ ssh root@flo
      SSHDroid
      pUse 'root' as username
      Default password is 'admin'
      root@flo's password:
      root@flo:/data/data/berserker.android.apps.sshdroid/home # cd /sdcard/Movies/YouTube
      root@flo:/sdcard/Movies/YouTube # ls -l
      -rw-rw----    1 root     1028       3128977 Mar  8 04:07 orihime_loituma.flv
      root@flo:/sdcard/Movies/YouTube # exit
      Connection to flo closed.
      ~/Android/sdk/platform-tools $ scp root@flo:/sdcard/Movies/YouTube/orihime_loituma.flv .
      SSHDroid
      Use 'root' as username
      Default password is 'admin'
      root@flo's password: 
      orihime_loituma.flv                           100% 3056KB   1.5MB/s   00:02    
      ~/Android/sdk/platform-tools $ ls
      NOTICE.txt  api/       orihime_loituma.flv  systrace/
      adb*        fastboot*  source.properties
          
      1. ファイルコピーは、MTP 経由でやるよりも、格段に高速、かつ、安定的にできるようになった。壊れやすい Micro-USB コネクタを抜き差しする必要もない。
      2. ssh-add という便利な ssh-agent ラッパーみたいなコマンドを知った。パスフレーズを覚えていてくれる。
      3. SSHDroid は sftp サーバも持っているので、ファイルマネージャで、sftp://root@flo/sdcard/ とアクセスすれば、とても便利。
  3. 公開鍵認証を使うために189円をアプリ内購入でアンロック。
    • ホストで公開鍵を生成する。
      $ ssh-keygen 
      Generating public/private rsa key pair.
      Enter file in which to save the key (/home/nkon-ubuntu1404/.ssh/id_rsa): 
      /home/nkon-ubuntu1404/.ssh/id_rsa already exists.
      Overwrite (y/n)? y
      Enter passphrase (empty for no passphrase): 
      Enter same passphrase again: 
      Your identification has been saved in ~/.ssh/id_rsa.
      Your public key has been saved in ~/.ssh/id_rsa.pub.
      …略
      
    • クライアントの public key を nexus7:/sdcard/Download/ あたりにコピーしておく。
      $ cp ~/.ssh/id_rsa.pub ~/.gvfs/mtp/内部ストレー ジ/Download/
      
    • SSHDroid の設定画面から public key を読み込む。
    • ~/.ssh $ ssh root@flo
      Enter passphrase for key '/home/nkon-ubuntu1110/.ssh/id_rsa': 
      root@flo:/storage/emulated/legacy # id
      uid=0(root) gid=0(root) groups=0(root) context=u:r:init_shell:s0
      root@flo:/storage/emulated/legacy # echo $HOME
      /sdcard
      root@flo:/storage/emulated/legacy # echo $PATH
      /sbin:/system/sbin:/system/bin:/system/xbin
      root@flo:/storage/emulated/legacy # cd
      ♯/system/xbin/ に書きこみたい
      root@flo:/sdcard # mount | grep system
      /dev/block/platform/msm_sdcc.1/by-name/system /system ext4 ro,seclabel,relatime,data=ordered 0 0
      ♯読み書き可で再マウント
      root@flo:/sdcard # mount -o rw,remount /system
      ♯書き込めるぜ
      root@flo:/sdcard # mount | grep system
      /dev/block/platform/msm_sdcc.1/by-name/system /system ext4 rw,seclabel,relatime,data=ordered 0 0
      root@flo:/sdcard # cd /system/xbin
      root@flo:/system/xbin # ls
      busybox
      daemonsu
      dexdump
      su
      root@flo:/system/xbin # ln -s /data/data/br.com.bott.droidsshd/files/bin/dropbearmulti ./scp
      root@flo:/system/xbin # ls -l
      -rwsr-xr-x root     root       497964 2014-02-16 18:27 busybox
      -rwxr-xr-x root     root       113036 2014-02-08 09:00 daemonsu
      -rwxr-xr-x root     shell       59816 2014-02-06 00:34 dexdump
      lrwxrwxrwx root     root              2014-03-08 18:47 scp -> /data/data/br.com.bott.droidsshd/files/bin/dropbearmulti
      -rwxr-xr-x root     root       113036 2014-02-08 09:00 su
      root@flo:/system/xbin # exit
      Connection to flo closed.
      ♯なぜか scp できない。
      ~/.ssh $ scp id_rsa.pub root@flo:/sdcard/Download/
      Enter passphrase for key '/home/nkon-ubuntu1110/.ssh/id_rsa': 
      unknown user 0lost connection
      ~/.ssh $
          

rsync

2014-12-23 update

rsync backup for Android を google play から入れる。

system update(4.4.3)

(2014-06-12)

system update(4.4.4)

(2014-06-25)

Lollipop(5.0) with MultiROM Manager

(2014-11-15)

Xposed framework on Lollipop(5.0.1) with MultiROM

(2015-02-28)

Xposed Framework が ART(Lollipop)対応のα版が出てきた。手順としてはネットで書かれているとおりなのだが、Lollipop を MultiROM 環境のセカンダリ側に入れてあると、すこし操作が必要になってくる。

FirefoxOS

(2014-11-22)

firefoxos firefoxos firefoxos firefoxos

Lollipop(5.1.1 LMY47V) with MultiROM Manager

(2015-07-05)

Update to LMY48M

(2015-09-23)

Mashmallow(6.0.0)

(2015-10-18)

MRA58K のファクトリーイメージが公開されたが、root 環境が完全ではなかったり(Enforcing状態で Titanium Backup が動かないなど)、xposed がまだリリースされていなかったり、で常用できる状態ではなさそう。よって、MultiROM環境で動かすことが前提なのだが、Flashable ZIP を探すことができなかった。よって、従来、Primary に入っていた LMY48M を Secondary にコピーして、Factory image を primary に焼くことを基本方針とする。

用意するもの

手順

  1. バックアップ。
  2. TWRPを起動して、[Advanced]→[MultiROM]→[Swap ROMs]→[Copy primary ROM to sedoncaris] で、プライマリ(internal)に入っていた LMY48M を secondary にコピーする。
  3. lazor-mra58k-factory-300dc903.tgz を展開する。
  4. 同梱されている bootloader は 04.05 でバージョンに変更が無いので新たには焼かない。boot と system のみ焼いて再起動。userdata.img も焼いたほうが良いと言われているが、とりあえず焼かないで試してみる。
    $ sudo fastboot reboot-bootloader
    rebooting into bootloader...
    OKAY [  0.006s]
    finished. total time: 0.006s
    $ sudo fastboot flash boot boot.img
    sending 'boot' (7448 KB)...
    OKAY [  0.239s]
    writing 'boot'...
    OKAY [  0.392s]
    finished. total time: 0.631s
    $ sudo fastboot erase system
    ******** Did you mean to fastboot format this partition?
    erasing 'system'...
    OKAY [  1.351s]
    finished. total time: 1.351s
    $ sudo fastboot flash system system.img
    erasing 'system'...
    OKAY [  0.584s]
    sending 'system' (839465 KB)...
    OKAY [ 26.297s]
    writing 'system'...
    OKAY [ 49.636s]
    finished. total time: 76.517s
    $ sudo fastboot reboot
    rebooting...
    finished. total time: 0.005s
    
  5. この状態だと正常に起動するが、MultiROM対応のTWRP(TWRP_multirom_flo_20150630.img )を焼くと、起動アニメーションから先に進まない。カーネルがなにか合わないのだろうか。
  6. しょうがないので、通常のTWRPの最新版、改造版boot.img、SuperSUを焼くことにする。
    こちらの手順にしたがって、そのまま進める。
    $ sudo fastboot flash boot razor-mra58k/root-modified-boot.img
    < waiting for device >
    sending 'boot' (7448 KB)...
    OKAY [  0.239s]
    writing 'boot'...
    OKAY [  0.425s]
    finished. total time: 0.664s
    $ sudo fastboot reboot
    rebooting...
    
    finished. total time: 0.005s
    $ sudo fastboot reboot-bootloader
    < waiting for device >
    rebooting into bootloader...
    OKAY [  0.006s]
    finished. total time: 0.006s
    $ sudo fastboot flash recovery twrp-2.8.7.0-flo.img
    sending 'recovery' (8956 KB)...
    OKAY [  0.286s]
    writing 'recovery'...
    OKAY [  1.951s]
    finished. total time: 2.237s
    
  7. /system/build.prop の ro.build.type=userdebug に編集して、マルチウィンドウを有効にしておく。/system は ro でマウントされているので、次のコマンドで読み書き可能なように変更する必要がある。また、再起動してから、開発者オプションで、マルチウィンドウを有効にする必要がある。
    # mount -o rw,remount /system
    

結局、素の Mashmallow + Root化状態で使うことになった。MultiROM対応のカーネルとリカバリは、今の所、Mashmallow で動いている情報が入手出来ていない。xposed もまだ動いていない。Titanium Backup が動作しているし、Mashmallow からはアプリの権限制御がおおまかであるが効くので、この状態で使ってみることにしよう。Now On Tap が日本語では使えないのが残念である。

MRA58V

(2015-11-23)

マイナーバージョンアップが上がっているので追従する。ついでに、Xposedが正式対応したのでインストールする。

手順

  1. バックアップ
  2. razor-mra58v-factory-45d0421b.tgz を展開しておく。
  3. [POWER]+[VOL下]で bootloader を起動する。
  4. boot と system を焼く。
    $ sudo fastboot flash boot boot.img 
    sending 'boot' (7448 KB)...
    OKAY [  0.239s]
    writing 'boot'...
    OKAY [  0.899s]
    finished. total time: 1.138s
    $ sudo fastboot erase system       
    ******** Did you mean to fastboot format this partition?
    erasing 'system'...
    OKAY [  1.358s]
    finished. total time: 1.358s
    $ sudo fastboot flash system system.img
    erasing 'system'...
    OKAY [  0.581s]
    sending 'system' (839457 KB)...
    OKAY [ 26.293s]
    writing 'system'...
    OKAY [ 46.676s]
    finished. total time: 73.550s
    $ sudo fastboot reboot
    rebooting...
    
    finished. total time: 0.005s
    
  5. TWRP を焼きなおす。
    $ sudo fastboot flash recovery twrp-2.8.7.0-flo.img
    sending 'recovery' (8956 KB)...
    OKAY [  0.286s]
    writing 'recovery'...
    OKAY [  0.340s]
    finished. total time: 0.625s
    
  6. SupeSU のインストール。v2.56以降、/system を書き換えない方法が主流になるということなので、そちらを試す。
    • XDAのスレッドから、SuperSU-v2.56-20151030013730.zip と razor-mra58u-boot-systemless.zip をダウンロード。mra58u となっているが、mra58v に適用してよいのか???
    • fastboot から boot.img → TWRP からSuperSU.zip の順に焼く。
      $ sudo fastboot flash boot boot_supersu_mra58u.img 
      sending 'boot' (7448 KB)...
      OKAY [  0.239s]
      writing 'boot'...
      OKAY [  0.367s]
      finished. total time: 0.605s
      
  7. ファイルマネージャから XposedInstaller_3.0_alpha4.apk をインストール。
  8. TWRP から xposed-v78-sdk23-arm.zip をインストール。

MMB29Q

(2016-02-28)

Multi-ROM が マシュマロ対応していて、さらに、本家もセキュリティフィックスが上がっているので追従する。

MultiROMのバージョンアップ

MMB29Qのインストール

Root化など

MOB30D

(2016-04-23)

バッテリーの残量表示が2000%ぐらいとバグっていたのと、休日に時間があったのでアップデート。いつものように、公式から Factory Image をダウンロードして展開。今回は一発でうまく行った。

% sudo fastboot flash system system.img
erasing 'system'...
OKAY [  1.301s]
sending 'system' (843529 KB)...
OKAY [ 26.419s]
writing 'system'...
OKAY [ 41.558s]
finished. total time: 69.278s

Xposed の再インストールが必要になってしまったので、この時点での安定最新版の xposed-v83-sdk23-arm.zip をTWRPからインストール。

MOB30P

(2016-07-09)

休日に時間があったのでアップデート。いつものように、公式から Factory Image をダウンロードして展開。bootloader で起動してから焼く。今回はなかなかうまくいかずに、ヒヤヒヤした。

$ sudo fastboot flash system system.img
erasing 'system'...
OKAY [  0.448s]
sending 'system' (843549 KB)...
FAILED (data transfer failure (Protocol error))
finished. total time: 1.177s
$ sudo fastboot flash system system.img
erasing 'system'...
OKAY [  0.449s]
sending 'system' (843549 KB)...
OKAY [ 26.419s]
writing 'system'...
OKAY [ 41.527s]
finished. total time: 68.394s

Xposed の再インストールが必要になってしまったので、この時点での安定最新版の xposed-v86-sdk23-arm.zip をTWRPからインストール。



近藤靖浩
Last modified: Thu Jan 5 23:30:02 JST 2017