Adobe AIR ANE默认平台无法找到方法名称

时间:2012-03-08 22:10:17

标签: air

我有一个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

就像我说的那样,我完全失去了这个。

1 个答案:

答案 0 :(得分:2)

对于延迟响应很抱歉,但我认为您可以从查看这个精彩的教程中受益: http://www.digitalprimates.net/author/nweber/2012/04/10/building-a-native-extension-part-3/

根据上面的代码段,看起来您正试图在不同的包中定义纯ActionScript实现,并使用不同的类名。看起来你实际上想要使用相同的包+类+方法名称,只是将它存储在不同的库中(因此它被捆绑为自己的SWF)。然后你告诉ADT如何捆绑东西。