この記事は「Adobe AIR Advent Calendar 2013」の16日目の記事です。
16日は既n(ry
ANEの作り方
ANEは制作作業が煩雑なため、作り方は人それぞれ試行錯誤されているかと思います。自分もその一人ではあるのですが、なんかの参考になればということで、ちょっと自分の作り方を晒してみたいと思います。毎度のことながらスクリーンショットとかないので、気になる人は頑張って読んでください。
とはいっても、大体はANEttyのドキュメントの通りなのですが、そこに書いていない部分でも書いてみます。
http://melancholy.raindrop.jp/air/anetty/doc/index.html
なお、今回はAndroidでのANEになりますが、大本の考え方としては似たような感じになると思うので、他のプラットフォームの際にも参考にしていただければと思います。僕が他のプラットフォームで作ってないから解らないってだけですけどね。
さて、今回掲載するのは、以下の点です。
- Androidのテスト用アクティビティを作ってテストする
- FREFunctionを継承した関数用クラスには処理をベタ書きしない
- FatJarを使用する
1. Androidのテスト用アクティビティを作ってテストする
面倒くさいことに、ANEはjarファイルを作ったあとにaneファイルとしてパッケージ化し、更にそれをAIRアプリのプロジェクトに組み込まなければなりません。つまり、AIRの方だけでテストしていると、バグが見つかったり、修正したい箇所が出てきた場合に上記の手順を毎回踏んでAIRでテストしなければならないわけです。ちょこちょこやっていたら発狂しそうになりますし、ケアレスミスの温床にもなりますので、Androidでテストアプリを作ってライブラリがちゃんと機能しているか確認した上でjarファイルを書き出しましょう。
jarファイルを作る際のプロジェクトは「Androidアプリケーションのプロジェクト」を作成するので、MainActivityを作って、そこでテストすると良いかと思います。パッケージはFREExtensionと同じところがよいかもですね。
こうすると、jarファイルにしようとした時に、デフォルトではこのアクティビティも同梱されてしまうことになるかと思いますが、同梱したところで大した容量の差にはならないと思いますし、何せテスト用だしANE用だし、ってことで外部から扱ったりはしないので、そのままjarに組み込んでしまってもいいのではないかと個人的には思ってます。
この手法のもう一つのメリットとして、AIRよりも書き出しが早いので、結構速やかにデバッグができますので、ネイティブの開発が捗ります。AIR forAndroidだと20秒ほどかかるのが、5秒とか、ヘタしたらそれ以下でデバッグ可能になりますので快適です。AIRもこれくらいの速度で書き出してくれれば・・・。
2. FREFunctionを継承した関数用クラスには処理をベタ書きしない
上記の延長線上となるわけですが、関数用クラスにベタ書きしてしまうと、テスト用アクティビティからのアクセスができません(多分)。
なので、あくまで関数用クラスは通り道なだけで、実際の処理は別のクラスに書いてそれを呼び出す形にしておけば、テスト用アクティビティからも、関数用クラスからも同一の処理が行えるようになります。
例を上げれば、FREFunctionを継承した「HelloWorldFunction」クラスがあって、callメソッドの引数に文字列があり、それがアラートのコンポーネントで表示されるとしましょう。
そこのcallメソッドに処理をベタ書きされてしまっていると、AIRからは叩けても、テスト用アクティビティから叩けなくなるので、テストできません。
別途「HelloWorldFunctionProcessor.call(String text)」とか、なんか名前は微妙かもしれませんが、そんなクラスとメソッドを作っておけば、どちらからも簡単に呼び出せるので良いかと思います。
3. FatJarを使用する
まぁ別に今までどおり普通にExportでjarを作ってもいいのですが、こっちのほうが中身が綺麗なので、最近はこれでjarを作ってます。注意点としては、AndroidのjarとFlashRuntimeExtension.jarは同梱しないということです。そうしないとAIRのパッケージングの際に「いらんものが入っているよ」とエラーが返されます。
あと、外部のjarファイルを使ってライブラリを作るときなどに、このjarファイルを同梱できるので、そういった際にも使えます。OUYAControllerManagerとかがそうですね。中にODKのjarファイルを入れています。ああ、その際は同梱するjarのライセンスに注意してください。
そんな感じで
ANE開発の参考になれば幸いです。お疲れ様でした。なお、Android編とか銘打ってますが、他のプラットフォーム編は書かないのでご了承ください。