スポンサーリンク

2016年3月22日火曜日

Android SDK をアップデートしたら Genymotion エミュレータが使えなくなってしまった

Androidアプリの開発においてエミュレータは非常に便利です。ある程度まではエミュレータを使って開発するのが常套になっています。

自分は本家GoogleのAndroidエミュレータ(AVD)とGenymotionのエミュレータを使い分けていますが、やはりどうみてもGenymotionの方がよく出来ています。高速だし、Google Playを使う方法も確立されているので、Androidのほとんどの機能はGenymotion上でテストすることができます。

遅かったAVDも最近のバージョンアップでそこそこ高速になりましたが、まだしょっちゅうクラッシュするし、意味不明なLogCatエラーメッセージを大量に吐き出したりする昔からある問題は全く直っていません。やはり使い勝手はGenymotionに劣ります。何よりもGoogle Playを使った機能(アプリ内購入とか)がテストできないのは致命的です。

さてGenymotionですが、最近のAndroid SDKのバージョンアップで使えなくなってしまいました。正確に言うと、ベータチャンネルで公開されているAndroid Platform-Toolsをv24 rc1にするとデバイスを認識できなくなってしまうのです。adb devices を実行すると以下のようなメッセージが出ます。

[D:\]adb devices
List of devices attached
adb server version (32) doesn't match this client (35); killing...
error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: 通常 、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、またはポートのどれか 1 つのみを使用できます。 (10048)
could not read ok from ADB Server
* failed to start daemon *
error: cannot connect to daemon


まあまだベータバージョンだし、よくあることです。暫く待ってみるかと思ったのですが、調べてみたら簡単に直ることが分かりました。

2016年3月9日水曜日

Android プロジェクトのマルチcatchステートメント

Javaの世界ではJava7は既に過去の遺物で、Java8が主流になってからずいぶん経ちます。Androidアプリの開発環境はこの流れからずいぶん遅れていて、長い間公式にはJDK7でした。最近になってようやくJDK8になったようですが、それでもJDK8の全機能が使える訳ではなく、JDK7の機能でさえ限定的で、使える部分があったり、なかったりという中途半端さです。そんな中途半端な機能の一つにマルチcatch(multi-catch)ステートメントがあります。

2016年3月5日土曜日

Inkscape v0.91のスナップがうまく働かない

Inkscape でパスのノードがスナップしなくなってしまいました。

例えばペンツールで線を描くときはノードごとにグリッドにスナップしてくれるのですが、それを後でノードツールで位置調整しようとすると各ノードがスナップしてくれません。

画面右側のスナップツールバーにノードをスナップするかどうかを指定するボタンがあります。



しかしこれを設定してみてもどうもうまくいきません。

色々調べてみてようやく原因が分かりました。色々な解説ページの説明が間違っているのです。というか正確に言うと最新バージョンの仕様に合っていないのです。

例えば この解説ページ を見ると、これらのボタンは「スナップ先」を設定することになっています。



Inkscape の公式ページから辿れる ドキュメント でもそうなっています。




しかしこの部分、長い間メジャーバージョンであったv0.48と現在の最新版であるv0.91で仕様が変わったようです。v0.91ではスナップ先を指定するのではなく、何をスナップするか(つまりスナップ元)を指定するボタンになりました。意味がまったく逆です。

マウスオーバーで表示されるツールチップでは正しい動作が表示されます。



この部分多くの人が混乱しているらしく、あちこちのメーリングリストで質問があがっています。ドキュメントはそのうち更新されると思いますが、スナップがおかしいと思ったらこの部分チェックしてみてください。