Google OS実験室 ~Moonlight 明日香~

GoogleのAndroidで遊び始めて, すでに6年以上が経った. Androidは思った以上の発展を遂げている. この技術を使って, 新しいことにチャレンジだ!!

開発環境

eclipseが起動しない

最近はAndroidの開発環境をAndroid Studioにしているのだが, 昔のプロジェクトをいじるのにeclipseを使おうと思ったら起動しない.
最近はめっきり使わなくなったので, もしかしてご機嫌ななめなのか?

それはさておき, とりあえずググってみた. 
いくつかeclipseが起動しないパターンはあるようだが, 一応今回のエラー原因と対応策をまとめておく.

1. エラーログの確認[1]
 eclipseの実行ログは, 以下のいずれかに記録される.
 1) workspaceフォルダ内の".metadata\.log"ファイル
 2) eclipseインストールフォルダ内の"configuration\起動時のエポック秒).log"ファイル

今回の実行ログは 2)に出力されており, エラー内容は以下の通り.

 !SESSION 2015-06-21 08:45:45.409 -----------------------------------------------
 eclipse.buildId=M20130204-1200
 java.version=1.8.0_45
 java.vendor=Oracle Corporation
 BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=ja_JP
 Framework arguments:  -product com.android.ide.eclipse.adt.package.adtproduct
 Command-line arguments:  -os win32 -ws win32 -arch x86_64 -product com.android.ide.eclipse.adt.package.adtproduct


 !ENTRY org.eclipse.osgi 4 0 2015-06-21 08:45:46.231
 !MESSAGE Application error
 !STACK 1
 java.lang.UnsatisfiedLinkError: Cannot load 64-bit SWT libraries on 32-bit JVM
   at org.eclipse.swt.internal.Library.loadLibrary(Library.java:260)
   at org.eclipse.swt.internal.Library.loadLibrary(Library.java:240)
   at org.eclipse.swt.internal.C.<clinit>(C.java:21)
     :

JVMが32-bit版のもよう.
何かのアプリがらみで32-bit版をインストールまたはアップデートしてしまい, その際に環境変数PATH上で32-bit版が優先されるようになったようだ.

2. 対応策[2]
基本的には, 64-bit版が優先されるようにすればよい.
今回は, 32-bit版をアンインストールしたところ, 問題なく起動できるようになった.

多分, 環境変数PATHで64-bit版のパスを32-bit版より後ろで設定してもいけるはず.

----
参照URL:
 [1] Eclipse起動時エラーの傾向と対策 | android manifest configChanges
 [2] Eclipse起動しなくなったので解決しましたの巻 - IT屋だけど、なにか?

Wifi経由でadb接続する

普段, Androidアプリのデバッグは, PCとAndroid端末をUSBでadb接続して行っている.
しかし, 今回はAndroidのUSB Host APIを使ってArduino UNO(R3)とのUSB接続をデバッグしたいので, PCとAndroid端末をUSB接続できない. そこで, Wifi経由でのadb接続を利用することにした.
以前, Android 2.xxの時に一度試したことがあるが, その時はなぜか成功しなかった.
今回は, 安定してadb接続することができたので, その手順をまとめておく.

[手順] [1]
1. usbケーブルでPCとAndroid端末を接続する.
2. Android端末をネットワークに接続する.
3. Android端末のIPアドレスを調べる. (設定>Wi-Fiから)
4. コマンドプロンプトを起動する.
5. ">adb tcpip 5555"を実行する.
6. ">adb connect IPアドレス:5555"を実行する.
7. usbケーブルを外す.
8. ">adb devices"でAndroid端末がリストされるか確認する.

[動作例]
Nexus 7 (2013) / Android 4.4.4

adb01

もし, 切断する場合は, ">adb disconnect IPアドレス:5555"を実行する.

----
参照URL:
[1] ネットワーク越しにadb接続する<< TechBooster


CTSテストを試してみる

CTS実行環境を構築したので, CTSテストが正しく動作するか確認してみた.
本来ならGoogle社のNexus7等で試すのが一番良いのだが, 端末内のユーザデータ等を初期化する必要があるので, 今回はMSI社のPrimo81上で試してみた.

MSI Primo81
 CPU : Allwinner A31s Quad core 
 OS : Android 4.4 (4.2からupdate)
 メモリ :  DDR 1GB

1. CTSテスト実行[1]
 1) 「CTS実行環境を構築する」のテスト実行手順に沿って, Primo81の各種設定, アプリのインストール, テストデータのコピー等を行う.
 2) CTSプログラムを起動し, テストプラン"CTS"を実行する.
  cts-tf > run cts --plan CTS

2. テスト結果
 Primo81のテスト結果は以下の通り.

cts-02

テストが終了した時に, 画面にデバイスがマウントできないといったエラーが発生していた.
レポートを見ると, どうもテストは途中で中断したようである.

テスト実行中に, テストがFAILした場合などに端末にリブートがかかる場合があったが, その際にデバイスをマウントできなかったのだろうか?
dmesgでログをみると, 以下のようなエラーが発生していた.

[15337.971348] usb 1-1: USB disconnect, device number 104
[15338.281864] usb 1-1: new high-speed USB device number 105 using ehci-pci
[15338.685170] usb 1-1: New USB device found, idVendor=0db0, idProduct=0007
[15338.685173] usb 1-1: New USB device strings: Mfr=2, Product=3, SerialNumber=4
[15338.685175] usb 1-1: Product: Android
[15338.685176] usb 1-1: Manufacturer: USB Developer
[15338.685177] usb 1-1: SerialNumber: 51494143057817f0507
[15348.728709] usb 1-1: USB disconnect, device number 105
[15349.028809] usb 1-1: new high-speed USB device number 106 using ehci-pci
[15349.255309] usb 1-1: New USB device found, idVendor=0db0, idProduct=0007
[15349.255315] usb 1-1: New USB device strings: Mfr=2, Product=3, SerialNumber=4
[15349.255318] usb 1-1: Product: Android
[15349.255321] usb 1-1: Manufacturer: USB Developer
[15349.255323] usb 1-1: SerialNumber: 51494143057817f0507
[15349.297934] systemd-udevd[4784]: Failed to apply ACL on /dev/bus/usb/001/054: No such file or directory
[15349.297954] systemd-udevd[4784]: Failed to apply ACL on /dev/bus/usb/001/054: No such file or directory
[15349.324133] systemd-udevd[4784]: Failed to apply ACL on /dev/bus/usb/001/055: No such file or directory
[15349.324141] systemd-udevd[4784]: Failed to apply ACL on /dev/bus/usb/001/055: No such file or directory
[15349.340719] systemd-udevd[4784]: Failed to apply ACL on /dev/bus/usb/001/056: No such file or directory
[15349.340726] systemd-udevd[4784]: Failed to apply ACL on /dev/bus/usb/001/056: No such file or directory
[15349.359394] systemd-udevd[4784]: Failed to apply ACL on /dev/bus/usb/001/057: No such file or directory
   :

このエラーの回避策について少し調べてみたが, あまり見当たらない.
他の人はこのようなエラーが発生していないのだろうか?

今回はとりあえずスキップされたテスト項目を抽出し, その部分のみ再度テストすることとする.
原因/回避策は, また時間のあるときに調べてみよう....

----
参照URL:
 [1] Google OS実験室 ~Moonlight明日香~ : CTS実行環境を構築する

CTS実行環境を構築する

先日, AndroidのCTS(Compatibility Test Suite)を試す必要に迫られ, CTSの実行環境を構築したのでまとめておく.

CPU : Intel(R) Core(TM) i7-2600K@3.4GHz
OS : Windows 8.1 Pro(64bit)
RAM : 8.0GB
Guest OS : Ubuntu 14.04(64bit) on VMware(R) Player 6.0.3

1. CTS概要[1]
 CTSは, Google社がAndroid Platformを採用する端末に実施を義務付けているTest群である.
Google社は, Android Marketで配布されるアプリケーションが, どのOEMのAndroid端末でもスムーズに利用可能なように, 主要な公開APIを実行し, チェックさせることで, 互換性を保っている.

2. CTS環境構築
2.1 CTSファイルのダウンロード
 ここからターゲット端末のOSバージョン用のCTSファイルをダウンロードする.
 ・バージョン依存ファイル
   - Android x.x Rx Compatibility Test Suite(CTS)
 ・共通ファイル
   - Compatibility Test Suite (CTS) Users Manual
   - CTS Media 1.0

2.2 環境設定
 1) JDK6の確認
   CTSテストを実行するにはOracleのJDK6が必要となる.
   java version 1.6がインストールされていない場合, webup8というサイトからダウンロードしインストールする.
    $ sudo add-apt-repository ppa:webupd8team/java
    $ sudo apt-get update
    $ sudo apt-get install oracle-java6-installer
 2) Android Debug Bridgeの確認
   CTSテストを実行するにはAndroid Debug Bridge(adb)が必要となる.
   adbがインストールされていない場合, Android SDKをダウンロードしてadbが利用できるように環境変数を設定する.
   例) export ANDROID_SDK_ROOT=~/tools/adt-bundle-linux-x86_64-20140702/sdk
      export PATH=$PATH:$ANDROID_SDK_ROOT/platform-tools
 3) ダウンロードファイルの解凍
   - CTSファイルを解凍する
    例) ~/tools/android-cts
   - CTS Mediaファイルを解凍する
    例) ~/tools/android-cts-media



3. テスト実行[2]
3.1 実行準備
 1) デバイスにSDカードスロットがある場合には, 空のSDカードを挿入する.
 2) タブレット内のすべてのデータを消去する.
   (Settings > Backup & Reset > Factory data reset)
 3) 言語をEnglish(United States)に設定する.
   (Settings > Language & Input > Language)
 4) 位置(情報取得)をONに設定する.
   (Settings > Location)
 5) WiFiをONにして, ネットワークに接続する.
   (Settings > WiFi)
 6) スクリーンロックなしに設定する.
   (Settings > Security > Screen Lock = 'None')
 7) "USB Debugging"開発オプションにチェックを入れる.
   (Settings > Developer options > USB Debugging)
 8) デバイスをホストPCに接続し, RSA fingerprintの確認ダイアログが表示されたら, このPCからのUSBデバッグを常に許可するようにする.
 9) スリープモードにしないにチェックを入れる.
   (Settings > Developer options > Stay Awake)
10) 疑似ロケーションを許可にチェックを入れる.
   (Settings > Developer options > Allow mock locations)
11) CTS 2.1 R2~4.2 R4 :
   android-cts/repository/testcaes/CtsDelegatingAccessibilityServer.apkをインストールし, Delegating Accessibility Serviceを有効にする.
   (Settings > Accessibility > Delegating Accessibility Service)
12) CTS 2.3 R4以降 :
   android-cts/repository/testcases/CtsDeviceAdmin.apkをインストールし, android.deviceadmin.cts.*をすべて有効にする.
   (Settings > Security > Device administrators)
13) CTS 2.3 R12以降 : 
   CTSメディアデータをデバイスにコピーする.
注) 設定のメニュー階層はバージョンによって異なる場合がある.

3.2 実行
 1) CTSプログラムを起動する.
   ~/tools$ ./android-cts/tools/cts-tradefed
   09-21 00:33:55 I/: Detected new device 0123456789ABCDEF
   Android CTS 4.4_r4
   cts-tf >
 2) テストプランを実行する. 進捗状況や結果は画面に表示される.
   cts-tf > run cts --plan CTS
 3) テストが終了すると, android-cts/repository/results/testResult.xmlに結果が出力される.

CTSのテスト項目は~18,000あり, すべてをテストするにはかなりの時間がかかりそうである.

まずは手持ちの端末で試してみるか...

----
参照URL:
 [1] Android Compatibility | Android Developers
 [2] Compatibility Test Suite (CTS) Users Manual

プロフィール

明日香

アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

記事検索



  • ライブドアブログ