TL;DR
remove-node使っとけ
またXamarin関係ネタ
先週の土曜日と日曜日でJPHACKSというイベントの東北予選に参加していました.
そこで提供されるAPIとかをぼーっと眺めていたらWebRTCの技術を使ったサービスのAndroidとiOS向けのSDKがあるということを知りました.
あーそういえば前提督の窓にVNC埋め込むかWebRTC使ってリモート機能入れて,モバイル端末からでも使えるようにしたいなあとか思って勉強していたことを思い出しまして,WebRTCのサービス一回使ってみたいなあと思ったわけです.
そのサービスというのがNTTコミュニケーションズさんのSkyWayなわけで.
まぁ最近はJavaでAndroidアプリ書くことも減って,Xamarin.FormsでiOSのも作ってしまおうという流れで開発しています.そうした時既存のライブラリはどうしようという悩みが出てくるわけです.nuget探れば結構ラップされたものが出てくるのですが,今回に限っては見つからず,けど使いたい...ということになりました.
そのため今回目をつけたのがXamarin.AndroidのJavaバインディングというか相互運用というか,そのあたりです.
Binding a Java Library - Xamarin
軽く読んでみると,なんだ,ほとんどこっちで書くことないし楽じゃん(歓喜)となっていたわけですが,ちょっと間違えるとツラくなるということがあったので書き残しておきます.
関係無いですけど,バインディングライブラリ作る程度にはこのサービス使ってるので企業賞ください(懇願)
以下箇条書きで適当に(表現含み,あまり正しくない表現が含まれてます,自分が見てわかる程度のメモ)
- inner classだったり,特に識別子がないclassはvisibleが空白になり,継承とか実装したいときにリファレンスがないとか言われる
- override 指定子がついてるのにないって怒られる
- visible を public に変える -> 別のエラーが出たり,namespaceが汚れるけど一応継承できる
<attr path="/api/package[@name='hoge.fuga']/class[@name='piyo']" name="visibility">public</attr>
みたいな感じ使わないAPIだったり,内部API,別の namespace(Javaのpackage) は remove-node で消し去って良い <- めっちゃ重要
- 適宜 attr で追加
public だとかはどうやって調べる?
Hoge.Fuga.Piyo.Value class の Value パラメータはだめ(コンストラクタと同じ名前だから?)
- attr name で変更する
partial class になっているから自分で書き加えて良い
ヘルパーとなるメソッドとか生やした方が使い易い
先人に学べ <- これで今回成功した
先人に学べというのは
[JXUG#4] 2015-04-11 Binding Java Library // Speaker Deck
こういうものを見ることです,だいたい対策が載ってました.
追記)
id:ytabuchi さんからこんな参考スライド情報もいただきました.実際に試してツラさの溢れる内容でこれも面白いです.
追記終わり
これを見る前はビルド時200個エラーが出て数時間かけてそのエラーを潰したらその後に200個以上のエラーが出てきて本当にこの業界から消え去りたいと思ったレベルでした.何度も言うけど
めんどくさいなら remove-node で消してみろ
ですね.
今回作ってみたラッパーライブラリはこちら
GitHub - yamachu/SkyWay-Android-SDK-forXamarin.Android
ほんと,情報量0の記事だこれ.