2013-04-24 96 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

相關問題