我有一个Adobe AIR ANE可以在iOS上构建和运行。我想在AIR模拟器中运行此应用程序,但使用原生ANE的动作脚本版本。
阅读文档,看起来默认配置文件对此非常适合。
我将默认配置文件添加到extension.xml文件中。我为工作区中的每个项目添加了本机接口的AS实现。我已经使方法静态/非静态等等。我已经尝试了一切,但我一直收到这个错误:
ArgumentError: Error #3500: The extension context does not have a method with the name
我完全失败了。以下是相关文件:
的extension.xml
<extension xmlns="http://ns.adobe.com/air/extension/3.1">
<id>com.novel.analytics.ext.ApsalarNativeInterface</id>
<versionNumber>0.0.0</versionNumber>
<platforms>
<platform name="iPhone-ARM">
<applicationDeployment>
<nativeLibrary>libApsalarNativeInterface.a</nativeLibrary>
<initializer>ExtInitializer</initializer>
<finalizer>ExtFinalizer</finalizer>
</applicationDeployment>
</platform>
<platform name="default">
<applicationDeployment/>
</platform>
</platforms>
</extension>
我的AS实施:
package com.novel.analytics.ext
{
public class ApsalarNativeInterface
{
public function ApsalarNativeInterface()
{
}
private static function initExtension():void
{
}
public function initApsalar(apiKey:String, secret:String):void
{
}
}
}
我的原生界面:
package com.novel.analytics
{
import flash.external.ExtensionContext;
public class ApsalarInterface
{
private static const EXTENSION_ID : String = "com.novel.analytics.ext.ApsalarNativeInterface";
private var context : ExtensionContext;
public function ApsalarInterface()
{
this.context = ExtensionContext.createExtensionContext(EXTENSION_ID, null);
}
public function initApsalar(apiKey:String, secret:String):void
{
context.call("initApsalar", apiKey, secret);
}
}
}
这是我的adt命令行(library.swf是包含上述两个文件的lib:
/Applications/Adobe\ Flash\ Builder\ 4.6/sdks/4.6.0/bin/adt -package -target ane ../../$PRODUCT_NAME.ane extension.xml -swc NativeInterface.swc -platform iPhone-ARM -C . library.swf -platform default -C . library.swf
就像我说的那样,我完全失去了这个。
答案 0 :(得分:2)
对于延迟响应很抱歉,但我认为您可以从查看这个精彩的教程中受益: http://www.digitalprimates.net/author/nweber/2012/04/10/building-a-native-extension-part-3/
根据上面的代码段,看起来您正试图在不同的包中定义纯ActionScript实现,并使用不同的类名。看起来你实际上想要使用相同的包+类+方法名称,只是将它存储在不同的库中(因此它被捆绑为自己的SWF)。然后你告诉ADT如何捆绑东西。