Adobe的vibration ane在iOS和Android上的Flex移动应用程序中均能很好地工作,但是当我尝试从Windows 7上的Flash Builder 4.7启动AIR模拟器时,出现错误消息:



这里是后一个屏幕截图的错误消息副本:

Process terminated without establishing connection to debugger.

The content cannot be loaded because there was a problem loading an extension: Error: Requested extension com.adobe.Vibration is not supported for Windows-x86.

Launch command details:  "C:\Program Files\Adobe\Adobe Flash Builder 4.7 (64 Bit)\sdks\4.6.0 (AIR 3.5)\bin\adl.exe" -runtime "C:\Program Files\Adobe\Adobe Flash Builder 4.7 (64 Bit)\sdks\4.6.0 (AIR 3.5)\runtimes\air\win" -profile extendedMobileDevice -screensize 640x920:640x960 -XscreenDPI 326 -XversionPlatform IOS -extdir "C:\Users\xxx\Adobe Flash Builder 4.7\.metadata\.plugins\com.adobe.flexbuilder.project.ui\ANEFiles\MyApp-Mobile\win32\" C:\Users\xxx\Documents\MyApp\mobile\bin-debug\MyApp-app.xml C:\Users\xxx\Documents\MyApp\mobile\bin-debug

同时:
  • Adob​​e的另一个ANE-Adobe Gaming SDK附带的GameCenter.ane与AIR Simulator
  • 完美配合
  • 当我选择BlackBerry AIR模拟器时,上述com.adobe.extensions.Vibration.ane不会失败(但iOS和Android AIR模拟器不起作用)。

  • 有没有办法使这项工作更舒适?

    我想在我的Flex移动应用程序中使用com.adobe.extensions.Vibration.ane,但我也想使用AIR模拟器-无需注释源代码并将ANE从项目属性中删除。

    2016年更新:

    Adobe已通过64位支持更新了其Vibration native extension (ANE) sample

    最佳答案

    ANE的问题在于它不是一个完整的实现。最重要的是,ANE没有实现默认的回退实现,如果当前平台没有特定的实现,则设备将回退到默认回退实现。

    这使得ANE非常难以在跨平台开发中使用,因为在某些情况下它将失败。任何未明确包含的平台都将失败,并显示您收到的消息。

    基本上,如果您自己不更改ANE,将无法按预期使用它。您唯一的方法是进行一些条件样式编译,而不在模拟器中调用ANE。

    如果您确实希望更改ANE,那么最好的选择是实现默认库。这很简单,但是您将需要:XCode,使用Android开发工具的Eclipse和AIR SDK中的adt。

    首先,您需要编译现有项目(Android库,iOS库和现有的 ActionScript 库),以分别生成VibrationAndroidLibrary.jar,libVibrationiOSLibrary.a和VibrationActionScriptLibrary.swc。

    然后,您需要制作另一个actionscript库,并复制com.adobe.nativeExtensions.Vibration类,如下所示:

    public class Vibration
    {
        public function Vibration()
        {
        }
    
        public static function get isSupported():Boolean
        {
            return false;
        }
    
        public function vibrate(duration:Number):void
        {
        }
    }
    

    如果未实现扩展而不是得到上述消息,则该类将替换其他类。

    然后,我们需要将默认定义添加到 extension.xml 文件中:
    <extension xmlns="http://ns.adobe.com/air/extension/2.5">
        <id>com.adobe.Vibration</id>
        <versionNumber>1</versionNumber>
        <platforms>
            <platform name="Android-ARM">
                <applicationDeployment>
                    <nativeLibrary>VibrationAndroidLibrary.jar</nativeLibrary>
                    <initializer>air.extensions.VibrationExtension</initializer>
                    <finalizer>air.extensions.VibrationExtension</finalizer>
                </applicationDeployment>
            </platform>
            <platform name="iPhone-ARM">
            <applicationDeployment>
                <nativeLibrary>libVibrationiOSLibrary.a</nativeLibrary>
                <initializer>ExtInitializer</initializer>
                <finalizer>ExtFinalizer</finalizer>
                </applicationDeployment>
            </platform>
    
            <platform name="default">
                <applicationDeployment />
            </platform>
    
        </platforms>
    </extension>
    

    然后,我们需要使用新的默认操作脚本SWC重新编译ANE。假设您位于提到的ANE的 VibrationNEDeliverables 目录中,可以将其输入bash文件中并运行它,也可以将其全部放在命令行的一行中)。前两行只是提取library.swf文件并将其移至package命令所需的位置。请注意此处的路径等,我假设您已将默认库放入VibrationActionScriptDefaultLibrary中,但您需要对此进行适当更改。
    unzip -o -d VibrationActionScriptLibrary/bin VibrationActionScriptLibrary/bin/VibrationActionScriptLibrary.swc
    unzip -o -d VibrationActionScriptDefaultLibrary/bin VibrationActionScriptDefaultLibrary/bin/VibrationActionScriptDefaultLibrary.swc
    
    cp VibrationActionScriptLibrary/bin/library.swf VibrationiOSLibrary/build/Release-iphoneos/.
    cp VibrationActionScriptLibrary/bin/library.swf VibrationAndroidLibrary/bin/.
    
    adt -package \
        -storetype pkcs12 -keystore YOUR_SIGNING_KEY.p12 -storepass KEY_PASSWORD \
        -target ane com.adobe.extensions.Vibration.ane VibrationActionScriptLibrary/src/extension.xml \
        -swc VibrationActionScriptLibrary/bin/VibrationActionScriptLibrary.swc \
        -platform iPhone-ARM  -C VibrationiOSLibrary/build/Release-iphoneos . \
        -platform Android-ARM -C VibrationAndroidLibrary/bin . \
        -platform default -C VibrationActionScriptDefaultLibrary/bin .
    

    一旦完成,您现在应该有了一个带有默认库的ANE新版本,这将使它更加有用!就我个人而言,我不认为没有它就不能释放ANE。

    如果您需要功能齐全的ANE,则可以查看我们的:http://distriqt.com/native-extensions

    关于air - Adobe ANE可在iOS和Android设备上使用,但不能在AIR仿真器中使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16201566/

    10-11 06:37