genymotion 1.2.1メモ

なんかこの手のやつ「いいよいいよ」みたいな話しか流れてこないので
一度触ってみた。

確かに起動は早い気がする

 ただコレ自分のMBPではの条件なので、
多分会社のiMacだとまともに動かんのだろうなと*1
とおもったら

やっぱvargrant使ってるらしい。会社のiMacも2Gなんですけど
OSが古いからまともに立ち上がらないのかな。。。(汗
=>
立ち上がった(詳細な検証は 末尾の 追記> の方参照)

理由的には

  • Qtで専用プレイヤー作ってる
  • VMがVBOX形式の風に見えて専用カスタムイメージ

だからのよう。

 パッケージの詳細でみてみるとQt で作られてるのは簡単に確認できる

みたいな話の環境作れればビルドから出来るのかな?

昔Androidx86の奴も試したけどこっちは全然駄目だったので安定度的にはこちらが上

な使い方をしてる人もいるみたいですしね・・(苦笑

あと途中でsetup失敗すると

な状況になるみたい*2

ここまでは行かなかったけど、繰り返し[起動/終了] 繰り返してると

  • genymotionが起動でコケる
  • genymotionの起動がめちゃくちゃ遅い
  • Mac自体が重くなる

って挙動は何度か遭遇した。

 終了を☓で閉じてるからかもしれないけど

  • 終了ボタンが効かない
  • vmイメージから終了(再起動)が効かない

からなんだよね。。これ。vmが正常終了してない扱いだからかも。
この場合はvboxたちあげて[imageのシャットダウン]をするしかない感じ。

 だからASを使うにはIDEAのことを知ってるのが有利なように
genymotionを使うには、VirtualBoxやvargrant辺の知識が有ったほうが良な感じ。



インストール編)

最初トラブったのは、認証メールがなんかスパム扱いされるみたいで

  • yahoo受信できない
  • googleスパムフォルダに入ってた

でDLまで行くのにちょっと時間かかった(汗

Mac用のdmgを落として先にすすめる

http://plugins.genymotion.com/eclipse 

備考)
試しに

  • eclipse/dropins/genymotion/eclipse/plugins
    • com.genymobile.genymotion.ide.eclipse.plugin_1.0.1.201307161043.jar
    • com.genymobile.genymotion.lib_1.0.1.201307161043.jar
    • org.eclipse.core.runtime_3.8.0.v20120912-155025.jar

な構成をeclipse3.7で作ってみたけど無理でしたね(汗。
でもeclipse4.3/eclipse 4.4ならイケるかもしれないけど・・・
=>で試してみたら イケた。
安心して

の構成でも使えますね!

ここらへんはStackOverFlowでも詰まってる人いらっしゃるみたいだな、、、
android - Can't install plugin in eclipse due to dependency on bundle org.eclipse.core.runtime 3.8.0 - Stack Overflow



使い勝手メモ)

ASに関しては、@ さんが既に日本語の記事で書かれてる

でも

  • 「ASで出来た!」
  • 「Jenkinsで出来た!」

のはやたらとRT回ってくるけど、
eclipseに関しては不具合の話しかRT回ってこないのは
開発者の方よっぽどeclipse嫌いなんでしょうね−(苦笑

まあ職場の子も

  • NDK使える環境がないから仕方なく使ってる

みたいなこと言ってるしな。。*3

でも使い勝手はほぼ同じ感じだったので凄く助かった。
つうか分かんないよね−。公式にも使い方書いてないし・・・
eclipseでの操作キャプチャはこんな感じ。

  • 設定画面=>genymotion.appのパスを指定

  • genymotion Managerのアイコン*4

  • アイコン経由で genymotion managerたちあげた処

  • genymotion managerでたちあげたイメージが実機として認識出来てるの確認


ざっと調べた感じだと

らへんの対応は必要みたい*5

 でもwith GoogleAPI イメージだと困るよね? とおもいそっちでImageを作ったら
Googleアカウントを聞いてきたのでGooglePlay有が前提なら
こっちのimageを作成するのが正しいみたいだな。

確かに場所はそこであってるみたい。


<<連携 plugin の話>>

なのも流れてたけど、

  • ASだとデバイス指定してたちあげ

とか出来ませんでしたっけ?
Runの設定次第な気もするんだけどな。。。

eclipseとくらべてみると

  • 以前の設定で実行

のチェックがないからが問題のよう。*6

 でもコレって、普通に開発スルときでも
前からデバイス選択させるような挙動はしてた気がするのですけど(苦笑

 USB扱いの認識のようなので、他のデバイス接続してない状態なら

  • Run=>Edit Configration
    • USB deviceにチェック

すればいけるんじゃないかと思うわけなんですが。。
=>
でやっぱりイケるわけです。

 以前はこの手の話話題にも載らなかったので
IDEA(AS)でAndroid開発する人が増えたんだなーと実感 *7
使われないと話題にも載らないですからね。。


<<NDKを使ったアプリの起動>>
Android NDKを使用し、ARM向けにビルドしたapkはそのままでは起動しませんでした。
手元のプロジェクトでは、Application.mkのAPP_ABIに"x86"を追加してビルドしなおすことで、インストール、起動まで確認できました。

公式にARM互換的なことが書いてあったのですが、どうなんでしょう?と有ったんだけど、vargrantのimage次第みたいな話なのかな?
<上記2つは少なくともNDK使ってるという話は聞いてたりしてる

でStackOverFlowで調べてみると
4.2.2のimageではNDK動かないらしい<自分が試したのは4.1.1のimage

こういう話だと、提供されてるimageが信用できるか?
って話になってくるんでしょうか?*8


<<WebViewを使ったアプリの挙動>>

まあSSLの話はAndroid弱いから。。
でも日本のキャリア系とかSSL好きなんですよね・・*9

<<with Google APIイメージの挙動>>

<<メモリの調節等>>

これに関しては、
VirtualBoxの方のほうにvargrantで作成されたimageの設定がもろにあるので
それを調整しましょうということのよう*10

ぐらいしかないからな・・・(汗

でも vargrant で作られているとう話だけど
vargrant.config の設定ファイルが見当たらないな。。。
何処を見ればいいんだろう?




操作感的なメモ)

クリックイベント
ドラック的な操作 *11
  • キーボードは

Genymotion Configration で物理キーボードを認識できるように出来る

USBデバックを付けなくても

  • デバック転送は問題なくできるので付けなくてOK

<<ホストとファイル/文字列共有>>
VirtualBoxがベースなので
ファイル共有がD&D出来ると楽かな?できるかな?と思ったけど無理みたい

  • [USBでパソコンに接続] は動作しない(チェックつけるとエラーが出る動作はするけど。。。)

VirtualBox正当な方法で試してみる

  • 同梱されてるアストロで参照 (/mnt/shared/share)


直接SDとか参照できないのが痛いな。。
アストロだとコピーとか難しい

 [yahooファイルマネージャ] はSDカードのみの操作なので一個上の階層とかいけないorz

一応テキストのコピペベースではこういう方法もあるとのこと


 ちなみにこのimageをVBOXで直接立ち上げようとすると
エラー吐きまくって起動めちゃくちゃ遅い。
うーん、専用Playerにカスタマイズされてるvboxイメージなのかも。。


<<multi-touch gestures (using mouse events)>>

Right click + Move left Zoom in 二本指ピンチ縮小
Right click + Move right Zoom out 二本指ピンチ拡大
Right click + Move up Tilt forth 二本指スワイプ上
Right click + Move down Tilt back 二本指スワイプ下
Shift + Right click + Move left Rotate Left 二本指左回転
Shift + Right click + Move right Rotate Right 二本指右回転

らしい。
 Zoom in/Zoom out の話から multi-touchって書いてるのかな。。。
本来認識してる複数同時押し的なマルチタッチとは違いますね(汗

確認手順は

がわかりやすいかと。

 でもIOSでも其のレベルだって話は教えてもらった。
やっぱりそうですよね。。*12

<<提供元不明のアプリオプション/Jenkinsテストに関して>>
Jenkins + Genymotion で Android なテストをしたメモ - OrangeSignal ブログ

  • [設定]-[セキュリティ]-[提供元不明のアプリ]を オン にする
  • [設定]-[セキュリティ]-[アプリを確認する]を オフ にする

これも正直付けても付けなくてもOK。転送は可能。これ多分動いてない
特に2個目のはアクティブにならないイメージも有

Jenkins ジョブ設定の話)

  • adb connect 自体は既に接続済みの場合は直ぐ戻ってこない

場合があるのでtimeoutする可能性があり*13
やるならadb devicesで接続済みかどうか確認してから接続するべき。

あとは事前にgenymotionをたちあげておくべき
って書いてたけど

XXXX/Genymotion.app/Contents/MacOS/player --vm-name <<ID>>

で立ちあげるほうが正当なんじゃないかなと思う。

 ただこの場合clean slaveとかに[インスト=>実行]まで含めたjobを作るのはどうするんでしょうね。。
$HOME/.Genymobile 辺りの構成をコピーする設定にすればいけそうな気はするけど

<<日本語入力に関して>>

の記事だと キーボードマークが出てくるらしいんだけど、そんなものは出てこない。
(何故かソフトキーボードが表示されないんだよな。。。。)

 あとキーボードショートカットもESC以外は
OSのとぶつかってしまいますね。。フォーカスをVMに合わせて手も(苦笑

  1. キーボードのデフォルト自体を変えるイメージ
  2. Genymotion configration
    1. 物理キーボードON

にするイメージ





追記)

会社のiMac 2G(OSX 10.7.5)の環境で試してみた。
起動自体は問題なし

--launcher.XXMaxPermSize
128m

だとPermGenSize OverでOOMが速攻落ちたので

--launcher.XXMaxPermSize
512m

に変更。

 この場合、表示されないゾンビ状態になるのでVBoxを立ち上げて落とすしか無いみたい
genymotion自体はあくまでKickerとプロセスが立ち上がってるかの状態表示
しかしてくれないみたい
*14初心者向けのツールとしては
余計な操作がない方が迷わない んだろうけど・・・・

 genymotion Virtual DeviceManager は一応複数起動は可能のよう*15
ただ状態はリフレッシュを押さないと最新状態には反映されない のが微妙な線か。。
でもこれもjenkinsとかで使うなら、気にしないところだろうしな *16

 日本だとこの手のツールの採用は
開発者が決めるんじゃなくて上が決めるもんだしね‥‥‥ *17

 今の仕事場みたいなIOSバンザイのところだと
[Android端末はできるだけ購入したくない。IOSは別だけど]
なスタンスなんで、まあそういうところには嬉しいんだろうけどな

 ただ爆速エミュとのメモリとかの差分チェック(設定)調整しないと
OOMのエラーとかは出せそうもないよな<Androidは実機いらん の代名詞にされる?

でデフォルトのチェックをしてみたら

S4/HTCイメージ 2048MB
その他 1024MB

なので512MB にしないと環境的に厳し目。
でもこの512MBの設定で問題なく動いてる*18

あとはUSBテザやってると

Genymotionの終了 adb 接続切れる
Genymotionの起動 adb 再接続

な挙動になって切断ブツブツされるので、
動かしてる時は、

  1. USBテザ起動
  2. Genymotion起動

で終了させないのがコツ

なつぶやきが有ったけど

adb devices
adb connect <<IP-address>>

でOK。でも[192.168.56.101]からで 固定みたいなので

adb connect 192.168.56.101

で盲撃ちでもいいのかもな。。

確認的には

  1. もう一個Genymotionのイメージを起動して終了
  2. adbの全接続が切れる
  3. メモってたIPで adb connect

すればOK。

ただadb connect ってUSBで繋がってる実機deviceに対しては出来ないので
ココは挿し直すしかないのがモンニョリするかな。。(汗


GenymotionShell>
 Genymotion Shell.appの使い所がいまいち分かんなかったりする。

ちょくに実行しようとすると

Genymotion Shell.app: is a directory

という訳のわからんエラー出るし。。。
Genymotion Shell.appクリックして対話型前提だと使いどころが狭まるな。。。(汗


でもコマンドラインの公式記述有るよね?でやる方法としては下記の感じになるよう。
eclipseみたいにコマンドラインシェルまでのlnファイル有ったほうが混乱しないかもねとは正直思った

$ ./GenymotionShell.app/Contents/MacOS/genyshell -h

Usage: ./GenymotionShell.app/Contents/MacOS/genyshell [options]

Options:
	-h            : Display this help
	-r ip_address : Use Genymotion virtual device specified with your IP address
	-c command    : Launch command and display result in terminal host
	-f file       : Launch all commands listed into file

ここらへんはIOS(Apple)ユーザには当然の認識(知識)だろうけど
自分的には違和感感じるかも。。。(汗



追記2)

NDKのテストを兼ねて cocos2d-xのサンプル動かしてみる。
確かに実機転送すると落ちるな。。。(4.1.1/4.2/4.3 すべて)

ココらへんはx86の爆速エミュレータとかも同じ感じですね(汗。

対応としては
jni/Application.mk に以下を追記する。
または ndk-build 実行時に APP_ABI=all を追加すると動くはずなんだけど
何故か動かせなかった *19

APP_ABI := armeabi armeabi-v7a x86

の指定が必要。フルビルドには時間かかるけど(汗

参考)



追記3)
ネット上の参考リンク>
Genymotion :: インストールと起動 [Tipsというかメモ]
Genymotion :: アプリ(.apk)をインストールする [Tipsというかメモ]
VirtualBoxの仮想マシンフォルダ変更手順メモ - Qiita
Genymotion - Google+
Google グループ

    • カメラの(エミュレート)サポートは今後のよう。
    • たしかに applicanのQRコードのサンプル動かなかったもんな。。


Jenkins/Headlessで操作)

ここからvagrantで操作できると嬉しいよね! って話の路線になってくんだろうけど。。。
その手の設定ファイルは当然同梱されておらず。。。

Vagrant入門ガイド

Vagrant入門ガイド

Vagrant: Up and Running

Vagrant: Up and Running

入門Chef Solo - Infrastructure as Code

入門Chef Solo - Infrastructure as Code




追記4)
実際のeclipseプラグインの中を見てみる

  • com.genymobile.genymotion.ide.eclipse.plugin_1.0.1.201307161043.jar
    • eclipse周りの一覧表示周りの表示処理のみ記載
  • com.genymobile.genymotion.lib_1.0.1.201307161043.jar
    • 実際の実行処理を記述

発行されているコマンド

  • VMToolsEngine.java
VBoxManage --version
VBoxManage list vms
XXX/Genymotion.app/Contents/MacOS/player --vm-name <<ID>>
  • VMToolsMachine.java
VBoxManage guestproperty enumerate <<ID>>
 //androvm_ip_management の記述を検索 =>IP取得
 //vbox_graph_mode 記述検索=>表示名取得
VBoxManage showvminfo <<ID>>
   //一覧リスト用のいろいろな情報を正規表現で取得=>格納

等を行ってる形。

特にadbと通信している箇所がないので、

  • 接続先がバツンと落ちた時全接続が切れる

ってのは

  • adb側が接続エラーを検出すると再起動する

とかのロジック入ってるのかも・・。AS対応始めてから実機でもよく切れるからな。。最新のadb。。

*1:Vagrantですらまともに立ち上がらなかったし。。。

*2:まだコレは経験してないけどメモ

*3:だったら全部NativeActivityで書けばいいやん! でもAd/アプリ内課金 がNativeActivityから弄れるまで難か・・

*4:これメニューとかに出せんのだろうか??

*5:with GoogleAPI で作っていないイメージ

*6:IDEAのコンソールからは実機扱い

*7:自分は昔から触ってたけど

*8:で末尾で検証してみたら、自分で転送するのはx86みたい。でも爆速エミュだとNDK使ってるGooglePlayの落とすとエラるのでなんか仕組みというか扱いが違うんだろうか??

*9:SSLにしておけばOKみたいな風潮は以前から有。あとはブラウザをintentで立ち上げればいいじゃん的な話がよくセキュクラスタさんから言及が。。。

*10:snapshotの設定等も

*11:なかなか認識しないことも

*12:IOSのエミュはAndと段違いに違うみたいな話ばかり聞かされるけど、其の割に最新実機は常に取り合いしてる状況見てたりしてる。。。エミュでできるなら実機はあんまいらんよな。。。

*13:この状態の時はadb kill-server/adb start-server までしなおさないと駄目だけど何でだろう??

*14:開発者経験がない or 薄い 指示する人が検証する用の

*15:2G環境だと2個 + eclipse が限界orz

*16:開発者に使わせるだけなら・・

*17:もしくは開発者が勝手に使うか‥‥‥

*18:爆速エミュだと結構OOMでおちるけど差分なんだろうな?

*19:下の3つ列挙指定なら動かせるかもですが。。。