Index
- パッケージングをしようとすると「error 105: extension.platforms.platform.applicationDeployment.nativeLibrary contains an invalid value」とエラーが出る
- ANEを実行しようとすると「Error #3500: The extension context does not have a method with the name メソッド名」とエラーが出る
- WindowsでAndroid用のANEを作ろうとすると、「'java' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」と出てコンパイルできない。
- 「ANEttyが画面上から居なくなった」「設定がおかしくなった」
- AIRSDK、或はFlexSDKをちゃんと設定しているにも関わらず、「TypeError: Error #1009」「Specified folder is not AIR(Flex)SDK.」と出る。
- 任意のプラットフォームにチェックを入れて、ネイティブライブラリを指定せずにパッケージングすると、普通にパッケージングできてしまいますが、バグですか?
- NativeLibraryとInitializer、Finalizerの関係性がいまいち解りません。
- ANEttyの英語について
- QNXの対応をやめた理由
パッケージングをしようとすると「error 105: extension.platforms.platform.applicationDeployment.nativeLibrary contains an invalid value」とエラーが出る
ANEの意味不明エラーの一つですが、原因はファイル名のバリデーションエラーです。
扱おうとしているネイティブライブラリ(.jar, .a, etc...)のファイル名にアンダースコアなどが入っていませんか?一見解りづらい(というか解らない)ですが、ファイル名を以下の仕様にしてパッケージングを行ってみると上手くいくかと思われます。
- 使用可能文字:英数字(A-Zとa-zと0-9)、ハイフン(-)、ドット(.)
- ファイル名の長さ:1文字以上255文字以内。
ANEttyではファイル名に対してバリデーションを行うため、このようなミスは起こらない(はず)です。
ANEを実行しようとすると「Error #3500: The extension context does not have a method with the name メソッド名」とエラーが出る
このエラーは、ANE-SWC側からネイティブライブラリのメソッドにアクセスできないのが原因です。まず、以下を確認してください。
- ANE-SWCからcallしようとしているメソッド名が、ContextInitializerで付けているメソッド名と同一であるか
- ExtensionInitializer、ExtensionFinalizerの名前が、パッケージングの設定とネイティブ側の実装で同一になっているか
- 違うネイティブライブラリをパッケージングしていないか
また、ADL、FlashBuilderにおいてMacのANEをデバッグしようとするとエラーが出ることがあります。その場合は下記を参考にしてください。
以下の情報は正しくない可能性があります。ご注意ください。
ADLのバグなのかFlashBuilderのバグなのか解りませんが、うまくANEが実行できない場合があるようです。リリースビルドだと動くみたいですが。
調べた結果、ADLが扱おうとしている.frameworkの構造が、ADLの想定している構造と違うようです。下記を試してみてください。
- .frameworkのルートフォルダを開き、そこに「実行ファイルのエイリアス」があることを確認してください。
- エイリアス先の実行ファイルを、ルートフォルダ上に上書きコピーしてください。
- ANEにパッケージングして、再度デバッグしてみると、動くかと思います。
ただし、Appleのデベロッパーサイトを見てみると、本来はエイリアスが正しいようですので、これは邪道な方法となります。開発中はこの手法をとり、リリースビルドの際にはちゃんとした形で出すとよいでしょう。
ちなみに、昔このドキュメントを作った時にMacでもHelloWorldを作ったのですが、その時はこのようなことをしなくても動きました。Xcodeから書き出したときに上記のような構造になっていたからです。しかし、今試すと、どうしても実行ファイルではなくエイリアスが入った状態になってしまいます。その時と同じバージョンのXcodeを落として作ってみましたが、それでもだめでした。正直よくわかりません。
まぁとにかく、FlashBuilderかADLがこれらの対応を柔軟に行ってもらえればいいのですが。
そんなわけで、Xcodeでルートフォルダの実行ファイルがエイリアスではなく実行ファイル本体を書き出すような設定や方法をご存知の方は、是非@Hiiragi3までご連絡ください。
WindowsでANEを作ろうとすると、「'java' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」と出てコンパイルできない。
javaがインストールされていないか、環境変数PATHの指定が間違っている可能性があります。
コマンドプロンプトを起動して、「java」と打って実行してみてください。同様のエラーがあるのであれば、該当文によるGoogleの検索ページを参考にして設定してください。
また、もしパスが通って実行できているのにANEttyではうまくいかない場合、SaveEnvironment機能を使用してプロジェクトファイル一式を書き出し、コマンドプロンプトから直接batchファイルを叩くと、大丈夫かと思います。
「ANEttyが画面上から居なくなった」「設定がおかしくなった」
ANEttyの終了時や何かしら操作をした際にANEttyの場所や大きさ、その他の設定を保存しているのですが、その情報がおかしくなった可能性があります。設定ファイルを弄ると解決するかもしれません。以下の場所にあるconfig.jsonを開き、中身を確認してください。中身に関しては、ANEttyを扱う方々であれば問題なく読めると思います。
- Windows : C:¥Documents and settings¥userName¥ApplicationData¥jp.hiiragi.ANEtty1¥Local Store¥
- Mac : /Users/userName/Library/Preferences/jp.hiiragi.ANEtty1/Local Store/
AIRSDK、或はFlexSDKをちゃんと設定しているにも関わらず、「TypeError: Error #1009」「Specified folder is not AIR(Flex)SDK.」と出る。
ANEttyは、AIRSDKのバージョンや使用できるANEバージョンを自動認識するようにしています。これは、AIRSDKのルートフォルダにある「airsdk.xml」を読み込む事によって実現しています。ANEを扱う事が出来るAIR3.0以降のAIRSDKにはこのファイルが存在しますので、このファイルの有無を持ってAIRSDKかどうかを判断しています。
但し、例外として、Apacheに移行する以前のAdobeFlexSDK4.6.0ではAIR3.1を同梱しているため、使用可能としています。ApacheFlexSDKは使用できません。
何かの拍子に表題のエラーが発生してしまった場合、規格外のAIRSDKを設定してしまったか、airsdk.xmlが消去されたSDKである可能性があります。再度サポート対象のAIRSDKをダウンロード等して設定してください。
設定されているAIRSDKのパスは設定ファイルに書き込まれています。どうしても設定を弄らなければ行けない場合は、「「ANEttyが画面上から居なくなった」「設定がおかしくなった」」の項目を参照頂き、適切に編集してください。但し、慎重に行わなければプログラムの挙動に悪影響を及ぼしてしまう可能性がありますので、ご注意ください。
任意のプラットフォームにチェックを入れて、ネイティブライブラリを指定せずにパッケージングすると、普通にパッケージングできてしまいますが、バグですか?
仕様です。ネイティブライブラリは、実はANEにおいて必須ではありません。
例えば「Windowsはネイティブでやりたい。でもMacでもこのANEを使えるようにしたい。でも別にMacではネイティブは必要ない。」という時は、Windowsではネイティブを扱い、MacはANE-Impl-SWC内でASで処理して返すようにしておけば、WindowsでもMacでも、このANEを扱うことができるということになります。
ただし、ANEには必ず一つ以上のネイティブライブラリを含めてください。含めない場合は、それはもはや普通のASライブラリであるSWCファイルと変わりありませんので、わざわざANEを作るよりは、そちらを作りましょう。
NativeLibraryとExtensionInitializer、ExtensionFinalizerの関係性がいまいち解りません。
まず第一に、入力するパラメータとして、NativeLibaryはオプションです。必須ではありません。NativeLibraryを使用しない場合、ExtensionInitializer、ExtensionFinalizerは必要ありません。
ただし、NativeLibraryを含める場合、ExtensionInitializerは必須となります。
ExtensionFinalizerは完全にオプションです。必須ではありません。ただし設定した方が良いでしょう。
ここからは憶測の話になってしまいますので、鵜呑みにはしていただかないほうが良いかと思われますが、ExtensionFinalizerを設定しないということは、AIRアプリ、またはAIRランタイムからExtensionFinalizerを呼び出せないことになるかと思われます。ということは、ネイティブ側で使われているリソースを開放したり、後処理をしたり、ということができなくなります。ちょっとしたものならいいのですが、ちゃんとしたプロジェクトの場合はこの機能を付けておく必要があるでしょう。
ANEttyの英語について
・・・下手でごめんなさい・・・。Google翻訳頼りです。
QNXの対応をやめた理由
一般的に配布されているAIR SDKのADTではどうやらサポートされていないからです(どこかの段階で消された模様)。ただし、Webで探した限りでは特定のADTを使用することで可能なようですが、例外のサポートは大変なので、サポートしない方針にしました。
なお、AdobeのNativeExtension公式リファレンスでは、ANEのサポートリストにQNXも入っているのですが、実際の実装方法については一言も語られていません。そういった意味でも、QNXは特殊な部類だと考えられます。