2012年5月31日木曜日

[Jenkins]Androidのエミュレータが動かない[iptables]

JenkinsのAndroid Emulator Plugin を利用して、CIをしているが

今日、なぜかエミュレータが立ち上がらない不具合が発生した。


$ /var/lib/jenkins/tools/android-sdk/platform-tools/adb start-server
[android] Starting Android emulator
[android] Erasing existing emulator data...
$ /var/lib/jenkins/tools/android-sdk/tools/emulator -no-boot-anim -ports 47334,36406 -prop persist.sys.language=en -prop persist.sys.country=US -avd hudson_en-US_800_WVGA_android-8 -no-snapshot-load -no-snapshot-save -wipe-data -no-window
WARNING: Cache partition already in use. Changes will not persist!
emulator: warning: opening audio output failed

ERROR: Timeout after 5 seconds
[android] Emulator did not appear to start; giving up
$ /var/lib/jenkins/tools/android-sdk/platform-tools/adb disconnect localhost:36406
[android] Stopping Android emulator
$ /var/lib/jenkins/tools/android-sdk/platform-tools/adb kill-server
Archiving artifacts
Finished: NOT_BUILT

結局、原因はiiptablesの設定だった。

adb の待ちポートへのアクセスをlocalhostを含めて全て遮断していたためだった。

3時間くらいこれで詰まった・・・馬鹿らしい・・・。

まあ、今後同じ様な問題に出会った際の対応はこれでできたと、そうしておこう。

2012年5月27日日曜日

【Android】BluetoothChatをAndroid4.0で試す【Bluetooth】

テスト用端末はNexus S (Android4.0.4)

接続先のPC(bluecove)をサーバーに、NexsusSをクライアントとして試します。

そのままのコードを動かすと下記のような問題が発生した。

  •     ActionBarのテキストを変更できない。
  •     UUIDの初期設定が異なっている
   
そのため、コードの修正を行う。とは言え、ちょっとコメントアウトするだけだけど。

ActionBarの設定
BluetoothChat.java(252行目あたり)

 private final void setStatus(int resId) {
  final ActionBar actionBar = getActionBar();
  // actionBar.setSubtitle("un connect");
 }

 private final void setStatus(CharSequence subTitle) {
  final ActionBar actionBar = getActionBar();
  // actionBar.setSubtitle(subTitle);
 }



レイアウトのxmlを見てないからアレだけど、ActionBarが表示されてない? まあ、面倒なので出さないことにします。

UUIDの設定

 // private static final UUID MY_UUID_SECURE =
 // UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");
 private static final UUID MY_UUID_SECURE = UUID
   .fromString("00001101-0000-1000-8000-00805F9B34FB");


今回はSECUREの方を変更しましたが、場合によってはINSECUREを変更かも。

サーバーのコードは、サンプルで公開されている、SPP Server Source Codeそのまま。

以上の設定でどうにか動きました。ただ、サーバーは接続が切れるまで待ち状態なのでそのへん適当に弄る必要があります。

結構面倒くさいなぁ。手持ちの端末が無いので、4.x以上でしかテストできないからアプリ作ってもほぼ自分用かな。

ゆっくりソースを読んでいきます。