2013-04-24 59 views
6

vibration ane由Adobe效果很好在iOS和Android上的Flex移动应用程序都,但是当我尝试在Windows 7推出从Flash Builder 4.7的AIR模拟器我得到的错误:的Adobe ANE适用于iOS和Android设备上,而不是在AIR模拟器

enter image description here

enter image description here

这里从后者截图错误消息的副本:

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 

同时:

  1. 另一个ANE由Adobe - 在GameCenter.ane包含Adobe Gaming SDK完美的作品与AIR模拟器

  2. 的com.adobe.extensions.Vibration.ane上面没有按提到当我选择了BlackBerry AIR模拟器(但iOS和Android上的AIR模拟器不工作)“T失败。

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

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

UPDATE 2016年

Adob​​e已经更新了他们的Vibration native extension (ANE) sample 64位支持。

回答

3

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

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

基本上没有改变ANE自己,你将无法像你期待的那样使用它。你唯一的方法是做一些有条件的样式编译,而不是在模拟器中调用ANE。

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

首先你需要编译的现有项目,Android的lib下,iOS的lib和现有的动作库,生成VibrationAndroidLibrary.jarlibVibrationiOSLibrary.a分别VibrationActionScriptLibrary.swc

然后,您需要再拍动作库,并复制com.adobe.nativeExtensions.Vibration类,如下:

public class Vibration 
{ 
    public function Vibration() 
    { 
    } 

    public static function get isSupported():Boolean 
    { 
     return false; 
    } 

    public function vibrate(duration:Number):void 
    { 
    } 
} 

这个类将替换情况下,其他类凡拓ISN”而不是你得到上述消息。

然后我们需要将默认定义添加到的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的VibrationNeleliverables目录中,您可以将其输入到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的新版本具有默认的lib,这将使它更可用!就我个人而言,我认为没有它应该被释放。

如果你需要一个功能齐全的ANE,您可以看看我们的:与IOS兼容64位内置最新的振动ANE存在http://distriqt.com/native-extensions

+0

谢谢迈克尔,我已经注意到你的ANE,并考虑购买它们。您的振动ANE是否支持黑莓?此外,为什么您的振动ANE被列为不支持iPod Touch? – 2013-05-01 11:30:43

+1

我们还没有实现Blackberry支持,实际上我们对此没有任何要求。 iPod Touch不支持振动,因为此设备没有振动硬件。干杯 – Michael 2013-05-01 23:43:32

+1

您的方法对我来说无需在Xcode和Android Eclipse中重建任何东西:我已经从Adobe的ReadyToUseExtension \ com.adobe.extensions.Vibration.ane中提取出'VibrationAndroidLibrary.jar'和'libVibrationiOSLibrary.a'。此外,我省略了adt-command的'-storetype pkcs12 -keystore YOUR_SIGNING_KEY.p12 -storepass KEY_PASSWORD'部分。 – 2013-06-18 17:45:18

1

,我已经在过去使用的解决方案是这样的:

  • 创建返回无论你是支持ANE的设备上运行的实用工具类。在我的情况下,类包含在检查的​​值的静态方法。参见值的列表它可以返回here

  • 将调用ANE方法(S)到自己的功能的代码,如果支持ANE调用这个函数。如果我没有记错,有必要把所使用的ANE在一个单独的函数的代码,而不仅仅是内部的if块,否则将发生在模拟器同样的错误:

这样做:

public function doSomethingThatWillUseANE():void 
{ 
    if (DeviceCapabilities.supportsANE) // static utility class 
    { 
     methodThatUsesANE(); 
    } 
} 

private function methodThatUsesANE() 
{ 
    // execute actual ANE method here 
} 

而不是做这一切在一个函数是这样的:

public function doSomethingThatWillUseANE():void 
{ 
    if (DeviceCapabilities.supportsANE) // static utility class 
    { 
     // execute actual ANE method here 
    } 
} 
+0

不幸的是,您的方法不适用于Adobe振动ANE。 – 2013-05-03 14:16:38

1

同样的问题。我的解决方法是将ane导入语句放入实际调用振动方法的函数中,并在android和ios的项目构建路径设置中取消选中ane的包含框。

我的应用程序中有一个标志变量(由单独的函数设置),标志着应用程序是否在ide中运行。如果标志设置为非IDE模式,那么使用振动的视图只会调用上述振动功能。我在运行ide模拟器时仍然得到初始警告,但不是严重错误。当我执行发布版本时,FlashBuilder强制我在适用的项目构建路径设置中勾选ane的包含框(我必须在下次运行模拟器时再次取消选中它)。

这是笨重的,但它使与适合居住宜人。 Peeves我没有结束,Adobe没有解决这个问题。

+0

甚至更​​好的解决方案 - 我只是在开发上签约了一个开发人员来为振动平台添加一个“默认库”实现......现在我可以在调试模式下使用它,而不会出现问题。随意使用它:https://www.dropbox.com/s/qwvcbsx6ymrx8rz/com.adobe.extensions.Vibration.ane?dl=0 – 2015-08-04 16:52:07

相关问题