2013-04-24 5 views
6

vibration ane от Adobe хорошо работает в мобильном приложении Flex как на iOS, так и на Android, но когда я пытаюсь запустить симулятор AIR из Flash Builder 4.7 на Windows 7 Я получаю ошибку: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. Другой АНХ по Adobe - GameCenter.ane в комплекте с Adobe Gaming SDK работает безотказно с симулятором AIR

  2. com.adobe.extensions.Vibration.ane упомянутых выше Безразлично 't fail, когда я выбираю симулятор BlackBerry AIR (но симуляторы iOS и Android AIR не работают).

Есть ли способ сделать эту работу более комфортной?

Я хотел бы использовать com.adobe.extensions.Vibration.ane в мобильном приложении Flex, но я также хочу использовать симулятор AIR, не комментируя исходный код и не удаляя этот ANE из свойств проекта.

UPDATE 2016:

Adobe обновила свой Vibration native extension (ANE) sample с 64-битную поддержку.

ответ

3

проблема с ANE заключается в том, что это не полная реализация. Самое главное, что ANE не реализует реалистичную резервную реализацию по умолчанию, а именно то, что устройство отступит, если не будет конкретной реализации для текущей платформы.

Это делает ANE очень трудным для использования в кросс-платформенной разработке, так как в некоторых случаях это не удастся. Любая платформа, которая специально не включена, не сработает с полученным вами сообщением.

В принципе, без изменения ANE вы не сможете использовать его, как вы ожидаете. Ваш единственный способ - сделать некоторую компиляцию условного стиля и не называть ANE в симуляторе.

Если вы хотите изменить ANE, лучшим вариантом является реализация библиотеки по умолчанию. Это довольно просто, но вам понадобятся: XCode, eclipse с инструментами Android dev и adt из AIR SDK.

Во-первых, вам нужно собрать существующие проекты, Android Lib, Либерал 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 
    { 
    } 
} 

Этот класс заменит другой класс в тех случаях, когда расширение ISN» t, вместо того, чтобы вы получили сообщение выше.

Тогда нам нужно добавить определение по умолчанию в 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> 

Тогда мы должны перекомпилировать АНХ, используя новый Actionscript по умолчанию SWC. Допустим, вы находитесь в каталоге VibrationNEDeliverables из упомянутого ANE, вы можете ввести его в файл bash и запустить его или поместить все в одну строку из командной строки). Первые две строки просто извлекают файл library.swf и перемещают его в места, необходимые команде пакета. Будьте осторожны с путями и т. Д. Здесь, я предположил, что вы поместили библиотеку по умолчанию в 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 . 

После того, как это полная, теперь вы должны иметь новую версию АНХ с Lib по умолчанию, который сделает его более полезным! Лично я не думаю, что ANE должен быть выпущен без него.

Если вам нужен полнофункциональный ANE, вы можете проверить наши: http://distriqt.com/native-extensions

+0

Спасибо, Майкл, я уже заметил ваши ANE и подумал о покупке их. Поддерживает ли ваша Вибрация ANE Blackberry? Также почему ваш Вибрационный ANE указан как не поддерживающий iPod Touch? –

+1

Мы еще не реализовали поддержку Blackberry, у нас на самом деле не было запросов на это. Вибрация не поддерживается на iPod Touch, так как в этом устройстве нет виброоборудования. Cheers – Michael

+1

Ваш метод работал для меня без необходимости перестроить что-либо в Xcode и Android Eclipse: я извлек 'VibrationAndroidLibrary.jar' и' libVibrationiOSLibrary.a' из Adobe ReadyToUseExtension \ com.adobe.extensions.Vibration.ane'. Также я опустил '-storetype pkcs12 -keystore YOUR_SIGNING_KEY.p12 -повторить KEY_PASSWORD' часть команды adt. –

1

Решение, которое я использовал в прошлом было что-то вроде этого:

  • Создать класс, который возвращает ли вы работаете на устройстве, которое поддерживает АНХ. В моем случае класс содержал статический метод, который проверял значение Capabilities.os. См. Список значений, которые он может вернуть here.

  • Поместите код, который вызывает метод ANE в свою собственную функцию, и вызовите эту функцию, если ANE поддерживается. Если я правильно помню, это было необходимо поместить код, который использовал ANE в отдельную функцию, а не только внутри, если блок, в противном случае будет иметь место та же ошибка в тренажере:

это сделать:

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 Vibration ANE. –

1

же проблема существует с новейшей вибрационной аной построены для совместимости с 64-битным ИОСОМ. Мое обходное решение состояло в том, чтобы поместить оператор импорта ane в функцию, которая на самом деле называется методом вибрации, и снимите флажок include для ane в настройках пути построения проекта для android и ios.

У меня есть переменная флага (установленная отдельной функцией) в моем приложении, которая определяет, выполняется ли приложение в ide. Представление, использующее вибрацию, будет вызывать только вышеупомянутую функцию вибрации, если флаг установлен в режим без IDE. Я все еще получаю начальное предупреждение, когда запускаю симулятор ide, но не критическую ошибку. Когда я делаю сборку релиза, FlashBuilder заставляет меня пометить поле включения для ane в соответствующих параметрах пути создания проекта (я должен отключить его снова в следующий раз, когда захочу запустить симулятор).

Это неудобно, но это делает работу с ane приемлемой. Подчеркивает меня до конца, что Adobe не обратился к этому.

+0

еще лучшее решение - я только что заключил контракт с разработчиком, чтобы добавить реализацию «библиотеки по умолчанию» к вибрации ane ... теперь я могу использовать его в режиме отладки без проблем. Не стесняйтесь использовать его: https://www.dropbox.com/s/qwvcbsx6ymrx8rz/com.adobe.extensions.Vibration.ane?dl=0 –