コンパイルエラーが出ずに、ランタイム上で動かなくなる
下記によるとエラーが出る場合があるとのこと
-hideAneLibSymbols:(iOS のみ、AIR 3.4 以降)アプリケーション開発者は、複数のソースの複数のネイティブエクステンションを使用できます。また、複数の ANE で同じシンボル名が共有されている場合、ADT では「オブジェクトファイルでシンボルが重複している」という内容のエラーが生成されます。場合によっては、このエラーにより、実行時にクラッシュが発生する可能性もあります。hideAneLibSymbols オプションを使用すると、ANE ライブラリのシンボルをそのライブラリのソースのみに表示するか(yes)グローバルに表示するか(no)を指定できます。
自分が直面した問題は、
- コンパイル時: エラーなし
- ランタイム上: 以下のエラーが出た
*
#3500: The extension context does not have a method with the name hogehoge
(ちなみに、このエラーはANEにないメソッドを呼ぶと起こるやつ。つまりANEがなんかの理由でおかしくなってる)
動かない例は TestFlightのANEとViberationのANEを同時に使うとき
- com.adobe.Vibration
- com.adobe.ane.TestFlightImpl
同時に使うとTestFlightのANEが動かなくなる。なぜか両方ともAdobeパッケージ!
解決策 → FlashBuilder4.7でやるか、adtコマンドでやるか
- FlashBuilder4.7の設定
- ANEライブラリのシンボルを非表示にチェック
Adobe Flash Builder 4.7 * ネイティブエクステンションの使用http://help.adobe.com/ja_JP/flashbuilder/using/WSe4e4b720da9dedb5-2e7310a1136ab7c1811-8000.html#WSe4e4b720da9dedb52cb000931394dc3d45a-8000
それか
adt
コマンドに-hideAneLibSymbols
を追加するといけるらしいが、IDEと連携してないとなんしかきつい。
IDEAでの設定方法
[ProjectStructure] → [iOSのタブ] → Additional ADT options に
-hideAneLibSymbols yes
を追加。