CuBox-iのAndroidをもっと使いこなしたいと思うと、じゃあroot権限を取得したいということになります。PetapicoShopにも問い合わせがきています。ということでこのあたりを探ってみます。CuBox-iについての検証を行っていますが、PC・LinuxPCを使ったやり方は基本的には、市販のAndroid端末でも同様に使えます。ブロックしているスマホもありますので万能とはいきません。スマホ単体でrootを取得するには、特殊なアプリがあるので、それを利用する他ありません。機種ごとにに違ったりするので追いかけている方も相当な労力です。
いったん本体のrootをとれたらadbを使うと色々な作業が楽にできます。adb(Android Debug Bridge)はAndroidのデバッグをサポートするツール群です。adbはAndroid SDKに含まれているのでSDKをインストールするとすぐに使うことができます。Androidを開発に用いる方ならば準備しておいて損はありません。adbが使えるかどうかはターゲットとなるAndroid端末がadbを許しているかどうかで決まります。事前に判断するツールはありません。実のところ、CuBox-iのデフォルトのAndroid4.3 (JerryBean)や、Ignitionを使ってAndroid4.4 (kitkat)にアップデートしたものでもadbを許していません。これは容易には対処できません。PetapicoShopのオリジナル版では、エンジニアリング用にビルドしています。(*下記参考)もともとはコラムの別記事にも記載のようにタッチパネルディスプレイとWiFiのUSBドングルのためにカスタマイズして作成したものです。このバージョンではadbが使えます。コラム記載の情報からビルドを再現することができます。しかしフルビルドは時間がかかることなので、PetapicoShop版Android4.4のSDとしてPetapicoShopから購入することも可能です。
ここでは、CuBox-iのAndroid4.4 (kitkat)のPetapicoShopビルド版 を使って検証します。
[LinuxPCをお使いの場合]
PCにadbツールをインストールしてサーバーを起動します。
$ apt-get install android-tools-adb $ adb start-server |
Android 端末を LANまたはWi-Fi ネットワークに接続し、IPアドレスを確かめます。
Android端末本体の「設定」>「WiFi」>「接続済み」となっているネットワーク名(SSID)をクリックするとIPアドレスが分かります。LAN接続ならば、Ethernetというアプリを起動してCheck Ethernetを選ぶと表示されます。いずれにしろあとで使うことになるので、ターミナルアプリをインストールして、ターミナルからコマンドでifconfigなどで調べてもいいでしょう。
※ここでは以降、例として接続した IP アドレスを「192.168.10.10」とします。
スマホなどのAndroid端末であてば、Android端末とLinuxPCをUSBケーブルで接続し、次のコマンドでポート番号 (listen_port ここでは例として5000とします) を設定します。
$ adb tcpip 5000 |
ポート設定が終わればUSB接続は外し、接続コマンドを入れます。
$ adb connect
192.168.10.10:5000 |
これで以降はWiFi接続で操作ができます。
CuBox-iのAndroidでは、そもそもUSBの端末接続できません。そこで、ADBHOST 環境変数による方法をとります。 同じネットワークに接続したPC のコマンドプロンプト/ターミナルなどから ADBHOST 環境変数を設定します。
$ adb kill-server (すでに起動をかけているadbを一旦止める) $ export ADBHOST=192.168.10.10 $ adb start-server (adbを再起動する) |
これだけで接続は完了です。
(Windowsであれば環境変数は、set ADBHOST=192.168.10.10)
スマホやCuBox-iが接続されたかどうかを確かめます。
$ adb devices |
List of devices attached 192.168.10.10:5000 device |
のように表示されます。CuBox-iをネット越し接続すると
List of devices attached emulator-5554 device |
のように表示されました。devicesで表示が出ないと接続できていません。
shellを起動します
$ adb shell |
root@android $ |
のようにプロンプトが返ってきたら、見てお分かりのようにrootとしてshellが起動しています。
Android端末とPCがadb connectしている状態で
$ adb usb |
コマンドを入力するとネットワーク越しのadb接続が解除されます。
これで肝のところは終了です。root権限で操作できます。
このあとは続けて、参考のためにadbについて参考になることをもう少しみていきます。
[WindowsPCで使う場合]
以下はWindowsPCで使う場合です。
Android SDKサイトからダウンロードします。https://developer.android.com/sdk/index.html
「android-sdk_r24.0.2-windows.zip」(2015 Mar 3現在の最新)
ファイルを解凍し、フォルダー名を、path設定などの便宜上「android-sdk」とリネームしておく。
設置フォルダの場所にあわせてWindowsのpathの編集もします。
Android端末側の設定
1.Android端末本体の「設定」>「アプリケーション」>「開発{開発者向けオプション}」の「USBデバッグ」にチェックを入れる
2.USBケーブルでパソコンに接続。反応しない場合にはAndroid端末の電源を入れなおしてみる
3.Windows側で「新しいデバイスが見つかりました」が表示されたら「一覧または特定の場所からインストールする」を選択し「次の場所で最適のドライバを選択する」を選び、先ほどのパス\android-sdk\usb_driverを選択。デバイスのドライバがインストールできます。
[adbの使い方]
1.エミュレータ/デバイス上に直接Androidアプリケーションをインストールすることができます。
たとえばsample.apkというアプリケーションをインストールしたい場合は以下のようにします。
# adb install sample.apk |
2.開発環境上からエミュレータ/デバイス上にファイルをコピーすることができます。
たとえば、開発環境上にあるsample.pngという画像をSDカード上にコピーしたいときは以下のようにします。
# adb push sample.png /sdcard/ |
コマンド実行後、端末側のSDカードを確認してみてください。
sample.pngがアップロードされているはずです。
3.エミュレータ上にあるファイルを開発環境上にコピーすることが可能です。
# adb pull /sdcard/sample.png /tmp |
4.エミュレータ、およびデバイスの動作ログを見たいときは以下のようにします
# adb logcat |
Eclipseをわざわざ起動させなくてもログを確認できるのでとても便利です。
端末が複数ある場合、例えば以下のようにdevicesが複数表示される場合
$ adb devices List of devices attached yuhua device emulator-5554 device |
同時に複数接続されているときは、どの端末を対象とするのかを指定します。
-d:USBで接続されている実機に対してコマンドを実行
-e:エミュレータに対してコマンドを実行
-s:指定したシリアル番号の端末に対してコマンドを実行
例として、USB接続機のSDカードにデータをコピーして、CuBox-iにアプリケーションをインストールしたい場合は以下のようになります。
$ adb -d push sample.png /sdcard $ adb -e install something.apk xxx KB/s pkg: /data/local/tmp/something.apk Success |
adb install <アプリケーション名.apk>
adb uninstall <com.application.packagename>
adb push <ローカルの転送したいファイル> <端末の転送先(/sdcard/など)>
adb pull <端末の取得したいファイル> <ローカルの転送先>
adb shell input keyevent <キーイベント>
adb shell input text <文字列>
textはEditTextなど文字入力可能なフィールドに文字を入力できます。keyeventは、キーイベント(ハードウェアキーの有無に限らず)の送信が可能です。例えばデバッグなどで仮想的にキー入力がほしい場合に重宝します
[参考:Android Build Option の設定]
デフォルトはeng。開発時は eng で開発し、出荷時には user/userdebug に切り替えてビルドをする。
定義場所:/bionic/libc/Android.mk
eng