目次

Android 関連の情報をまとめます。

はじめに

私はNexus7(2012)という端末ではじめてAndroidを触りました。

当時からRoot化してカスタマイズしていました。

後に開発関連の情報が必要になり、自分でアプリを作ったり、野良アプリを改良したりしていました。

この記事ではその時に役に立った知識をまとめようと思います。

方針について

当記事の方針の一つは、著者が後々利用しやすいように作っていく方針です。

一部、表現等に正確ではないものも含まれると思いますが、この記事では正確さよりも分かりやすさを重視します。もし正確な情報が欲しければ、公式ドキュメントを参照してください。

なお、内容が充実してきたら別ページにも保存するかもしれません。

著者のレベルと環境

著者はAndroidについては全くの初心者です。Nexus7(2013)とAndroid6.Xを使用しています。

AndroidをRoot化のための基本情報

AndroidをRoot化するには、まずAndroidのシステムがどうなっているかを知らなければなりません。

AndroidはGoogleが開発しているモバイルOS(スマートフォンなどに搭載されているOSのこと)で、Linux(Linux Kernel)を元に開発されています。コマンドからもカーネルバージョンを確認することができます。

Androidは出荷段階でユーザー権限が制限されます。このユーザーの概念はLinuxのそれと同じです。基本的にはrootユーザーはあらゆるシステムの変更が可能になります。

ここで、ハッキングツール…と言ったら微妙ですが(なぜなら自分の端末にrootユーザーでログインするだけなので)、そういったものを使用することで、簡単にルート・ログインが可能になります。ただし、この際はAndroidバージョンや端末コードによって使用するものが異なりますので注意しなければなりません。

このようなツールは通常、ログイン後に権限管理アプリ、Linuxで言うところのsudoのようなものをインストールするようになっています。

このようなアプリによってユーザーはroot権限を管理することができるようになります。

最も有名なアプリは、ChainFire氏が開発しているSuperSUです。

RootログインからSuperSUのインストールまでのすべての作業を自動化するツールはCF-Auto-Rootと言います。それぞれの端末にあったものを選択してsideloadインストールします。インストールには様々な方法がありますが、最も一般的なのはRecovery Image(Mode)を使ったインストールで、このようなリカバリ・イメージで最も有名なのはTWRPと言います。これは本体にflash(焼く)してもいいし、そのままboot(読み込む)して使ってもいいです。多くの人はいつでもリカバリモードとして起動できるように本体にflashします。

確かに、Androidではデフォルトのリカバリ・イメージ(モード)は存在します。これは、例えば、Google Nexusのファクトリーイメージにて公開されています。しかし、デフォルトのリカバリモードは非常に使いにくいのです。

https://developers.google.com/android/nexus/images

公式のリカバリモードはダウンロードしたファイルを解凍して、その中にあるrecovery.imgがそれに当たります。

$ fastboot boot recovery.img
$ fastboot flash recovery recovery.img

しかし、前提として、このようなことをするにはadbコマンドをパソコンにインストールし、パソコンとAndroidをUSBで接続することによってコマンドを実行しなければなりません。USB接続の設定は開発者オプションを参照してください。

したがって、まずはadbコマンドをパソコンで使えるようにしましょう。基本的にはAndroid SDK Platform Toolsをインスールすればいいです。

https://developer.android.com/studio/index.html

# Arch Linux
$ yaourt -S android-tools
or
$ yaourt -S android-sdk-platform-tools
# mac
$ ~/Applications/android-sdk-macosx/tools/android
$ which adb
~/Applications/android-sdk-macosx/platform-tools/adb

基本コマンド

# 接続
$ adb shell

# 再起動
$ adb reboot system
# リカバリモード
$ adb reboot recovery
# ブートローダー
$ adb reboot bootloader

# アップロード
$ adb push xxx.zip /sdcard/Download

# ダウンロード
$ adb pull /sdcard/Download/xxx.zip .

# インストール
$ adb sideload xxx.zip
$ adb install xxx.apk

応用コマンド

$ adb shell am start -a android.intent.action.VIEW

https://developer.android.com/studio/command-line/shell.html

Androidのアップデート

Androidをアップデートするには、公式のFactory Imageをダウンロードして、以下のコマンドを実行します。

# アップデート
$ ./flash-base.sh

# 初期
$ ./flash-all.sh

内容はスクリプトを見てください。

ただし、Androidに詳しい人は個別に実行するのがベストです。

$ fastboot erase system
$ fastboot flash system system.img

AndroidのRoot化

一般的なAndroidのRoot化手順を紹介します。採用するものはTWRP+SuperSU+Xposedです。

それぞれの役割は以下のとおりです。

Name Content
TWRP リカバリモード
SuperSU suバイナリと権限管理アプリ
Xposed カスタムアプリマネージャー
$ adb reboot bootloader
$ fastboot flash recovery twrp.img
$ adb reboot recovery
$ adb sideload SuperSU.zip 
$ adb reboot system

Xposedをインストールするには、Xposed Installerを使うのが便利です。しかし、本来的にはコマンドからもインストールするものです。

http://repo.xposed.info/module/de.robv.android.xposed.installer

端末のCPUによってインストールするものが異なります。わからない場合は以下のページを参考に調べてみてください。

http://www.xposedframework.net/xposed-framework-lollipop-armv7-armv64/

Root化検知の回避

最近ではGoogleが提供するSafetyNet APIによってRoot化が検知されるようになっています。

これを回避するには、suhideMagisk, ANRCなどがあります。

ここでは、suhideのインストール方法と使い方を紹介します。suhideは対象アプリのUIDを追加することで有効になります。具体的には、当該アプリを起動したときのみ、Rootを隠します。

$ adb reboot recovery
$ adb sideload suhide.zip
$ adb reboot system

$ adb shell
> su
> /su/suhide/list
> ls -lnd /data/data/com.niantic.pokemongo
(UID)
> /su/suhide/add (UID)

オススメアプリ

ここで、私が使っているおすすめアプリやXposed Module, Rootアプリなどを紹介します。

Name Content Type
Fing ネットワーク検索 Google Play
Amazon Kindle 電子書籍 Google Play
MediBang Paint イラスト Google Play
VLC メディアプレイヤー Google Play
Perfect Viewer 電子書籍 Google Play
ESファイルマネージャー ファイルマネージャー Google Play
Slack SNSクライアント Google Play
Twitter SNSクライアント Google Play
Gitter SNSクライアント Google Play
Google翻訳 翻訳 Google Play
ZArchiver ファイル操作 Google Play
MetaTrader5 チャートアプリ Google Play
Reddit 掲示板クライアント Google Play
SoundCloud 音楽アプリ Google Play
Google認証システム 二段階認証 Google Play
Snapseed 画像編集 Google Play
Firefox ブラウザ Google Play
Hacker’s Keyboard キーボード Google Play
Clipper クリップボード Google Play
Dropbox ファイル共有 Google Play
Pokemon Go ゲーム APK Mirror
QRコードスキャナ QRコード Google Play
アバストモバイルセキュリティ セキュリティ Google Play
SafetyNet Helper SafetyNetチェック Google Play
Root Validator Rootチェック Google Play
AdAway 広告排除 F-Droid
Orbot VPN+Tor接続 Google Play
AFWall+ ファイアウォール Google Play
Android Terminal Emulator ターミナル Google Play
BusyBox コマンドパッケージ Google Play
Kernel Adiutor カスタマイズ Google Play
SELinux Mode Changer カスタマイズ XDA
Stick Mount USBメモリ Google Play
suhide GUI Root偽装 Google Play
Tasker 自動化 Google Play
SuperSU su権限管理 Google Play
FRep タッチ自動化 Google Play
Xposed Installer Xposed管理 XDA
GravityBox カスタマイズ Xposed
Greenify バックグラウンド制限 Google Play
Snorlax Pokemon Goで個体値などを表示 Xposed
PoGoIV Pokemon Goでステータスやジムのユーザー情報を表示 Xposed

気になっているアプリ

あたりたくさんのアプリをインストールする主義ではないのでインストールしたことはないけど、気になっているアプリを紹介します。

Name Content Store Type
Termux ターミナルアプリ Google Play root
SockStat 通信監視 Google Play root
OS Monitor 通信監視 Google Play root
L Speed 調整 Google Play root

使わないアプリ・システム

使わないアプリやシステムはアンインストールするか停止させましょう。

端末が対応していないアプリ

APK Mirrorからダウンロードしてインストールします。

BusyBoxの使い方とLinuxの起動

BusyBoxというのはアーキテクト系の端末でよく利用されるコマンドパッケージです。アプリから簡単にインストールできるようになっており、デフォルトでは、/system/xbinにインストールされます。これをパスに追加することで、各種コマンドを使えるようになります。

コマンドを実行するには、Android Terminal Emulatorなどのターミナルアプリが便利です。もちろん、パソコンと繋いでadb shellなどから実行しても良いです。

次に、Gentoo LinuxをAndroid上で動かすことで、BusyBoxの機能を見ていきたいと思います。

まず、パソコンでもなんでも良いのでGentooイメージを作成します。

http://distfiles.gentoo.org/releases/arm/autobuilds/current-stage3-armv7a/

http://distfiles.gentoo.org/snapshots/portage-latest.tar.bz2

$ dd if=/dev/zero of=gentoo.img bs=1M count=0 seek=3072
$ mkfs.ext2 -F gentoo.img
$ mkdir tmp
$ mount -o loop gentoo.img tmp/
$ cd tmp
$ tar xvf ../stage3-armv7a-*.tar.bz2
$ cd usr
$ tar xvf ../../portage-latest.tar.bz2
$ mkdir tmp/dev/pts
$ mkdir tmp/sdcard
$ umount tmp/

そして、それをAndroidに転送します。

$ adb shell mkdir -p /sdcard/gentoo
$ adb push ./gentoo.img /sdcard/gentoo

boot.sh

export bbox=`which busybox`
export imgfile=/sdcard/gentoo/gentoo.img
export mnt=/data/local/mnt
mkdir -p $mnt
$bbox mknod /dev/block/loop255 b 7 255
$bbox losetup /dev/block/loop255 $imgfile
$bbox mount -t ext2 /dev/block/loop255 $mnt
$bbox mount -t devpts devpts $mnt/dev/pts
$bbox mount -t proc proc $mnt/proc
$bbox mount -t sysfs sysfs $mnt/sys
$bbox mount -o bind /sdcard $mnt/sdcard
$bbox sysctl -w net.ipv4.ip_forward=1
$bbox chroot $mnt /usr/bin/env -i HOME=/root USER=root PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin TERM=linux /bin/bash -l
$bbox umount $mnt/sdcard
$bbox umount $mnt/dev/pts
$bbox umount $mnt/proc
$bbox umount $mnt/sys
$bbox umount $mnt
$bbox losetup -d /dev/block/loop255 &> /dev/null
$ adb push boot.sh /sdcard/gentoo

Androidから先ほど作成したスクリプトを実行します。

$ cd /sdcard/gentoo
$ which busybox
/system/xbin/busybox
$ chmod 777 boot.sh
$ ./boot.sh

# ここからGentoo Linuxに入ります
$ echo "nameserver 8.8.8.8" > /etc/resolv.conf
$ echo "nameserver 8.8.4.4" >> /etc/resolv.conf
$ echo "127.0.0.1 localhost" > /etc/hosts
$ echo "FEATURES=\"-userfetch\"" >> /etc/make.conf
$ grep -v rootfs /proc/mounts > /etc/mtab

http://hamelot.io/android/run-gentoo-on-android-via-chroot/

基本設定

開発者オプションを有効にする

開発者オプションは設定 -> タブレット情報 -> ビルド番号を数回(7回?)タップすることで設定できるようになります。

USB接続を有効にする

パソコンとAndroid端末でUSB接続をするには、開発者オプションでUSBデバッグをONにします。

設定
	開発者オプション
		USBデバッグ = ON

描写速度の向上

設定 -> 開発者オプションにてウィンドウアニメスケール, トランジションアニメスケール, Animatior再生時間スケールをアニメーションなし0に設定します。

次に、GPUレンダリングを使用するをONにします。

設定
	開発者オプション
		ウィンドウアニメスケール, トランジションアニメスケール, Animatior再生時間スケール = アニメーションなし

スクリーンショットやカメラ音をOFFにする

日本用の端末はすべて強制的にカメラ音を出すように設定されており、企業に強制されています。

Androidではオーディオファイルを削除することで実現します。このようなシステムファイルへのアクセスにはroot権限を要します。

/system/media/audio/ui/{camera_click.ogg,camera_focus.ogg}

$ su
$ cd /system/media/audio/ui/
$ rm camera_click.ogg
$ rm camera_focus.ogg

Androidのイースターエッグ

Android 6.Xや7.Xなどではイースターエッグとして隠しゲームがプレイできます。

設定
	タブレット情報
		Androidバージョン = "7回タップして出てきたお菓子を数回タップ後に長押し"

microG

microGというのはGoogle開発者サービス(GmsCore)を置き換えるためのプロジェクトです。

これによってユーザーはプライバシーを守られると説明されています。その他、様々な制限を回避するのにも役立ちます。

しかし、問題もありGoogle Playが使えなくなるのが最も大きな問題です。これによってアプリのアップデートなどが不便になります。

したがって、FakeStoreBlankStoreなどを使用してこれを行うことになります。