Xamarin.Androidでネイティブコードと仲良しになる方法

21
(c) 2015 ignote Co., Ltd. Xamarin.Androidで ネイティブコードと仲良しになる方法 2015.7.11 JXUG Conference 大阪

Transcript of Xamarin.Androidでネイティブコードと仲良しになる方法

Page 1: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

Xamarin.Androidでネイティブコードと仲良しになる方法

2015.7.11 JXUG Conference 大阪

Page 2: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

自己紹介

中西 孝之

むげんメモ melocy

(株)ignote 代表取締役

new!

Page 3: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

むげんメモほぼ無限大のキャンバスに

いくらでも思いのままにメモができる 手描きメモアプリ

https://www.youtube.com/watch?v=wZ2aYvRPhv8

Page 4: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

melocy

主な機能・録音&投稿・投稿曲にコメントする・投稿やメンバー探しのリクエスト・ユーザーどうしのフォロー・お気に入り曲の登録、連続再生

楽器を弾いたり、歌ったり。これらをアプリで重ね録りして投稿することで、

仲間やファンを見つけだし、つながっていけるサービスです。

Page 5: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

melocy.iOS

Xcodeで開発主にリアルタイム録音でのパフォーマンス確保のため当初はMonoTouchでプロト開発をしていた

Page 6: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

melocy.Android

Xamarin.Androidで開発出ました!NDKでオーディオを制御↑今日のテーマ広告やプッシュライブラリをJavaバインディング↑前回のテーマ

Page 7: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

フルC#へ...(願望)

Page 8: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

ゴミわけるチャン

福井県オープンデータアプリごみ分別収集情報フルXamarinで開発主にサーバとの通信やデータリソースを共通化

Page 9: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

melocy.xamarin ...

MonoAndroid VM サウンドなど

各種ライブラリ

Xamarin.Android

ネイティブ

Page 10: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

Javaバインディング

MonoAndroid VM サウンドなど

Xamarin.Android

ネイティブ各種ライブラリ

Page 11: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

NDKバインディング

MonoAndroid VM サウンドなど

Xamarin.Android

ネイティブ各種ライブラリ

Page 12: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

使い分け

ネイティブAPI利用OpenGL|ESOpenSL|ESOpenMAX AL

オープンソースライブラリCocos2d-xffmpeg※ライセンス注意

パフォーマンスmono-VMけっこ速い!?

NDK JavaバインディングAndroid向けライブラリ広告SDKMBaaS系SDK画面コンポーネント決済系SDK

既存の資産オリジナルフレームワーク

Page 13: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

お品書き

NDK環境を整える

Androidアプリプロジェクトを作成

NDKビルド環境を作成

soファイルをプロジェクトに追加

P/Invokeコードを記述アプリから利用...

Page 14: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

やってみる

Page 15: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

助けてください!カスタムコマンドで、NDKパスを直接記述しているパス変数は使えないんだろうか...

Page 16: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

助けてください!

CookieManager.RemoveAllCookie()をコールするとtry/catchでも捕捉できないエラーが発生。アプリが落ちてしまう>ω<

Stacktrace:at <unknown> <0xffffffff>at (wrapper managed-to-native) object.wrapper_native_0x40a1639f (intptr,intptr,intptr) <0xffffffff>at Android.Runtime.JNIEnv.CallVoidMethod (intptr,intptr) <0x0007f>at Android.Webkit.CookieManager.RemoveAllCookie () <0x000ab>

Page 17: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

記述がシンプル

int Java_com_example_native_Sample_add( JNIEnv* env, int a, int b );

Java+NDK

int add( int a, int b );

Xamarin+NDK

Page 18: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

まとめ

NDK環境を整える

Androidアプリプロジェクトを作成

NDKビルド環境を作成

soファイルをプロジェクトに追加

P/Invokeコードを記述アプリから利用...

Page 19: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

おまけ:ソースコード共有率

Android固有コード87%

共有コード13%

melocy

Page 20: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

おまけ:ソースコード共有率

Android固有コード71%

共有コード29%

共有コード31%

iOS固有コード69%

ゴミわけるチャン

Page 21: Xamarin.Androidでネイティブコードと仲良しになる方法

(c) 2015 ignote Co., Ltd.

ありがとうございました。

WE