phoenix-powerAndroidをアップデートしたついでに、アプリなどを整理してみましたので、Androidでよく使うアプリなどを紹介します。

私のAndroidの使用は、ブラウジング、読書、ネットワークサーバーへの接続など、それくらいで、あまり大したことには使っていません。ちなみに、端末は、Nexus7-Wifi(2013)を使っています。これは本当に良い端末ですので、大きなスマホが好きな方は、この端末でも十分だと私は思います。その場合は、Nexus7-3G(2013)がおすすめになります。

Android(Root)はタブレットで使用していることからも、あまり詳しくありません。スマホはiOS(Apple)を使っています。

一応、個人的な使い方を紹介すると、Androidの設定は、下記に紹介する以外、すべてのアプリを無効化(アンインストール)しています。また、すべてのデフォルト設定をONからOFFにするのも特徴的です。必要に応じて機能を有効にし、アプリを有効にします。

通信は、ネットワークを常用するアプリ以外は、ファイアウォールを設定します。必要に応じてファイアウォールを解除します。

操作は、ターミナルを使って行うことが多いですが、日常的に使うシステムは、Androidというよりは、AndroidにコピーしたArch Linuxになります。

GUI

このアプリは、主にファイアウォールを設定するためにインストールしています。Root化すると、アプリごとに接続を制限できるようになります。

クリップボード履歴を保存します。あまり使わないけど、稀に助かることもあるので。

これがないと、Androidのキーボード入力は難しいです。

Androidのターミナルエミュレータです。Root化すると、システムにもアクセスできますし、BusyBoxでインストールしたパッケージ群を使えるようになります。

インターネットブラウザです。私の場合、独自に設定したプロキシ経由で使う場合は、Firefoxを使います。普通に使う分には、具体的には、検索したりとかですが、その場合は、Chromeを使います。

Torサーバー、具体的には、世界中で稼働するプロキシサーバーを複数経由してネットワークにアクセするためのツールです。バックグラウンドで、その入口と出口を起動します。

ファイルマネージャーです。こちらも必須。Root化すると、すべてのファイルディレクトリにアクセス可能に設定できます。

ファイルの圧縮、解凍支援です。特に必要にはならないですが、一応。

本を読むのに使っています。毎日読む本もあるし、個人的には必須。

本を買ったり、読んだりするのに使います。と言っても、私は、基本、漫画しか買いませんが。

特に必要にならないけど、一応。Dropboxアカウントのファイルサーバーにアクセスします。

Twitterクライアントです。なんかこのアプリ、変化が激しいです。CarbonからFalconへと変わったと思ったら、今度は、Pro 3ですか。Pro 3は使ってませんが、過去のアプリは削除されていますので、新たに入れる人は、こちらになります。

最も有名なロシア製のチャートアプリです。主に通貨の値動きを表示します。

お絵かきアプリです。良いのが出てきて、今後はこれ一本になりそうです。

Root

Root権限を管理するためのツールです。AndroidでRoot権限を実行するために必須のアプリというわけでもありません。AndroidのRoot化とはつまり、起動時にログインするユーザーが特定のシステムディレクトリにアクセスする権限を有するか否かの問題です。SuperSUでは、Rootでログインし、必要に応じて、SuperSUを通して、システムディレクトリにRootでアクセスする権限をアプリに設定します。

Linux系のコマンドパッケージ群を特定のディレクトリにインストールします。デフォルトでこのアプリがインストールするパスを有効にしているRoot必須のアプリも多く存在します。

広告排除アプリです。再起動が必要になりますが、システムUI上でも有効に広告排除が動作します。

カーネルから提供される機能を自分で設定できます。特に不便がなければ、デフォルト設定でも良いと思われますが、必要に応じて端末の根本的な動作に影響する機能を調整できます。

外部ディスクを自動マウントします。

CLI

busyboxでは色々足りなさすぎるので、AndroidのCLIは、もっぱらArch Linuxを起動させます。

基本的には、以下の記事を読んで起動しました。

http://qiita.com/syui/items/538e091d4060c0e3952d

ファイルは以下の様な感じで配置します。archlinux-CORE.ext4.imgarchlinux.imgにリネームする感じですね。必要な物は、archlinux.img,archlinux.bootくらいです。以下でarchlinux.bootのコードを載せています。

/sdcard/arch
1
2
3
4
5
6
7
8
9
.
├── archlinux.boot
├── archlinux.img
├── archlinux.img.md5
├── bootscript-devfix.sh
├── img-resize.sh
└── start.sh

0 directories, 6 files

必要なもののコピーはなんでも構いませんが、Android SDKがインストールされているなら、$ adb push arch /sdcard/archで良いです。/sdcard/archは前もって作っておきましょう。

あと、archlinux.imgは、サイズが小さいので2Gに拡張します。

1
2
3
4
5
6
7
8
9
10
11
12
$ sudo pacman -S qemu

$ export size="2G"
$ export img="./archlinux.img"

$ qemu-img resize $img $size

$ sudo losetup /dev/loop0 $img

$ sudo mount -t ext4 /dev/loop0 /mnt

$ sudo resize2fs /dev/loop0 $size

初期起動のコマンドは、以下の様な感じですね。- Android Terminal Emulator

1
2
3
su
ash -
sh /sdcard/arch/archlinux.boot

/sdcard/arch/archlinux.bootはこんな感じ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
# Linux boot script for Android v6.0
# OS : Arch Linux
# Image : /sdcard/arch/archlinux.img

error_exit() {
    echo "Error: $1"
    exit 1
}

if [ -f /data/data/com.zpwebsites.linuxonandroid/files/busybox ]; then
          export bbox=/data/data/com.zpwebsites.linuxonandroid/files/busybox
elif [ -f /data/data/com.zpwebsites.linuxonandroid.opensource/files/busybox ]; then
          export bbox=/data/data/com.zpwebsites.linuxonandroid.opensource/files/busybox
else
  export bbox=/system/xbin/busybox
fi

export usermounts=android
export sd=/sdcard
export arch=arch
export file=archlinux.img
export imgfile=$sd/$arch/$file
export bin=/system/bin
export mnt=/data/local/mnt
export USER=root
if [[ ! -d $mnt ]]; then mkdir $mnt; fi
export PATH=$bin:/usr/bin:/usr/local/bin:/usr/sbin:/bin:/usr/local/sbin:/usr/games:$PATH
export TERM=linux
export HOME=/root
unset LD_PRELOAD

if [ $# -ne 0 ]; then
    if [ -f $1 ]; then
        imgfile=$1

  elif [ -f $(dirname $0)/$1 ]; then # Is only a filename present?
        imgfile=$(dirname $0)/$1

    elif [ -f /sdcard/arch/*.img ];then
        imgfile=/sdcard/arch/*.img

    elif [ -f /sdcard/archlinux/*.img ];then
        imgfile=/sdcard/archlinux/*.img

  else
        error_exit "Image file not found!($1)"
    fi
fi

if [ -f $imgfile.md5 ]; then
        echo "MD5 file found, use to check .img file? (y/n)"
  read answer
  if [ $answer == y ]; then
       echo -n "Validating image checksum... "
           $bbox md5sum -c -s $imgfile.md5
           if [ $? -ne 0 ];then
                  echo "FAILED!"
                  error_exit "Checksum failed! The image is corrupted!"
             else
                  echo "OK"
                  rm $imgfile.md5
             fi
  fi

fi

use_swap=yes
cfgfile=$imgfile.config

if [ -f $imgfile.config ]; then
  source $imgfile.config
fi

if [ $use_swap == yes ]; then
  if [ -f $imgfile.swap ]; then
      echo "Swap file found, using file"
      echo "Turning on swap (if it errors here you do not have swap support"
      swapon $imgfile.swap
      
  else
      echo "Creating Swap file"
      dd if=/dev/zero of=$imgfile.swap bs=1048576 count=1024
      #dd if=/dev/zero of=$imgfile.swap bs=2000000 count=1024
      mkswap $imgfile.swap
      echo "Turning on swap (if it errors here you do not have swap support"
      swapon $imgfile.swap
          
  fi
fi

echo -n "Checking loop device... "
if [ -b /dev/block/loop255 ]; then
  echo "FOUND"
else
  echo "MISSING"
  echo -n "Creating loop device... "
  $bbox mknod /dev/block/loop255 b 7 255
  if [ -b /dev/block/loop255 ]; then
      echo "OK"
  else
      echo "FAILED"
      error_exit "Unable to create loop device!"
  fi
fi

$bbox which ls
if [ $? -ne 1 ];then

    $bbox losetup /dev/block/loop255 $imgfile
    if [ $? -ne 0 ];then error_exit "Unable to attach image to loop device! (Image = $imgfile)"; fi
    $bbox mount -t ext4 /dev/block/loop255 $mnt
    if [ $? -ne 0 ];then error_exit "Unable to mount the loop device!"; fi
    $bbox mount -t devpts devpts $mnt/dev/pts
    if [ $? -ne 0 ];then $bbox mount -o bind /dev $mnt/dev; $bbox mount -t devpts devpts $mnt/dev/pts; fi
    if [ $? -ne 0 ]; then error_exit "Unable to mount $mnt/dev/pts!"; fi
    $bbox mount -t proc proc $mnt/proc
    if [ $? -ne 0 ];then error_exit "Unable to mount $mnt/proc!"; fi
    $bbox mount -t sysfs sysfs $mnt/sys
    if [ $? -ne 0 ];then error_exit "Unable to mount $mnt/sys!"; fi
    $bbox mount -o bind /sdcard $mnt/sdcard
    if [ $? -ne 0 ];then error_exit "Unable to bind $mnt/sdcard!"; fi

else
    echo -e "Error: busybox no command,\nln -s $bbox /system/xbin..."

    for i in $($bbox --list); do
      ln -s $bbox "/system/xbin/${i}"
    done

    $bbox losetup /dev/block/loop255 $imgfile
    $bbox mount -t ext4 /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
fi

if [[ ! -d $mnt/root/cfg ]]; then mkdir $mnt/root/cfg; fi
$bbox mount -o bind $(dirname $imgfile) $mnt/root/cfg
$bbox mount -o bind /sys/fs/selinux $mnt/selinux

if [ -d /sdcard/external_sd ]; then
  $bbox mount -o bind /sdcard/external_sd  $mnt/external_sd
fi
if [ -d /Removable/MicroSD ]; then
  $bbox mount -o bind /Removable/MicroSD  $mnt/external_sd
fi
if [ -d /storage ]; then
  $bbox mount -o bind /storage  $mnt/external_sd
fi

if [ -f $imgfile.mounts ]; then
  olddir=$(pwd)
  echo "Mounting user mounts"

  cd $mnt
  if [[ ! -d $mnt/$usermounts ]]; then $bbox mkdir -p $usermounts; fi

  echo "# Script to unmount user defined mounts, do not delete or edit!" > $imgfile.shutdown
  echo "cd $mnt/$usermounts" > $imgfile.shutdown

  cd $mnt/$usermounts
  for entry in $(cat "$imgfile.mounts"); do
      ANDROID=${entry%;*}
      LINUX=${entry#*;}

      if [[ -d $ANDROID ]]; then
          echo -n "Mounting $ANDROID to $usermounts/$LINUX... "
          if [[ ! -d $mnt/$usermounts/$LINUX ]]; then $bbox mkdir -p $LINUX; fi
          $bbox mount -o bind $ANDROID $mnt/$usermounts/$LINUX &> /dev/null
          if [ $? -ne 0 ];then
              echo FAIL
              if [[ -d $mnt/$usermounts/$LINUX ]]; then $bbox rmdir -p $LINUX; fi
          else
              echo OK
              echo "$bbox umount $mnt/$usermounts/$LINUX" >> $imgfile.shutdown
              echo "$bbox rmdir -p $LINUX" >> $imgfile.shutdown
          fi
      else
          echo "Android folder not found: $ANDROID"
      fi
  done
  echo "cd $mnt" >> $imgfile.shutdown
  echo "$bbox rmdir -p $usermounts" >> $imgfile.shutdown
  cd $olddir

else
  echo "No user defined mount points"
fi

$bbox sysctl -w net.ipv4.ip_forward=1
if [ $? -ne 0 ];then error_exit "Unable to forward network!"; fi

if [ ! -f $mnt/root/DONOTDELETE.txt ]; then
  echo "nameserver 8.8.8.8" > $mnt/etc/resolv.conf
  if [ $? -ne 0 ];then error_exit "Unable to write resolv.conf file!"; fi
  echo "nameserver 8.8.4.4" >> $mnt/etc/resolv.conf
  echo "127.0.0.1 localhost" > $mnt/etc/hosts
  if [ $? -ne 0 ];then error_exit "Unable to write hosts file!"; fi
fi

$bbox chroot $mnt /root/init.sh $(basename $imgfile)

unset LD_PRELOAD

echo "Shutting down Linux ARM"
#for pid in `lsof | grep $mnt | sed -e's/  / /g' | cut -d' ' -f2`; do kill -9 $pid >/dev/null 2>&1; done
for pid in `$bbox lsof | $bbox grep $mnt | $bbox sed -e's/  / /g' | $bbox cut -d' ' -f2`; do $bbox kill -9 $pid >/dev/null 2>&1; done
sleep 5

if [ -f $imgfile.shutdown ]; then
  echo "Unmounting user defined mounts"
  sh $imgfile.shutdown
  rm $imgfile.shutdown
fi

$bbox umount $mnt/root/cfg
$bbox umount $mnt/sdcard
$bbox umount $mnt/external_sd
$bbox umount $mnt/dev/pts
$bbox umount $mnt/dev
$bbox umount $mnt/proc
$bbox umount $mnt/sys
$bbox umount $mnt/selinux
$bbox umount $mnt
$bbox losetup -d /dev/block/loop255 &> /dev/null