2013-04-24 33 views
6

Firma Adobe działa dobrze w aplikacji mobilnej Flex na iOS i Androidzie, ale kiedy próbuję uruchomić symulator AIR z Flash Builder 4.7 na Windows 7 I pojawia się błąd:Adobe ANE działa na urządzeniach z systemem iOS i Androidem, ale nie działa w symulatorze AIR

enter image description here

enter image description here

Oto kopia komunikatu o błędzie z tym ostatnim screenie:

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 

Jednocześnie:

  1. Innym ANE przez Adobe - w GameCenter.ane dołączone Adobe Gaming SDK działa bez zarzutu z symulatorem AIR

  2. com.adobe.extensions.Vibration.ane wymienionych powyżej nie robi nie działa, gdy wybieram symulator BlackBerry AIR (ale symulatory AIR na iOS i Android nie działają).

Czy istnieje sposób na zwiększenie komfortu pracy?

Chciałbym użyć com.adobe.extensions.Vibration.ane w mojej aplikacji mobilnej Flex, ale chcę również użyć symulatora AIR - bez komentowania kodu źródłowego i usuwania tej ANE z właściwości projektu.

UPDATE 2016:

Adobe uaktualnił swoje poparcie Vibration native extension (ANE) sample z 64-bitową.

Odpowiedz

3

Problem z ANE polega na tym, że nie jest to kompletna implementacja. Co najważniejsze ANE nie implementuje domyślnej implementacji awaryjnej, do której urządzenie by się zrezygnowało, gdyby nie było konkretnej implementacji dla bieżącej platformy.

To sprawia, że ​​ANE jest bardzo trudna do użycia w tworzeniu wielu platform, ponieważ w niektórych przypadkach może zawieść. Każda platforma, która nie została specjalnie uwzględniona, nie powiedzie się z otrzymaną wiadomością.

Zasadniczo bez zmiany ANE nie można go używać zgodnie z oczekiwaniami. Twoim jedynym sposobem jest wykonanie kompilacji stylu warunkowego i nie wywoływanie ANE w symulatorze.

Jeśli chcesz zmienić ANE, najlepszą opcją jest zaimplementowanie domyślnej biblioteki. Jest to dość proste, ale będziesz potrzebować: XCode, Eclipse z narzędziami programistycznymi Androida i ADT z pakietu AIR SDK.

Po pierwsze musisz skompilować istniejące projekty, Android lib lib iOS i istniejącej biblioteki ActionScript, aby wygenerować VibrationAndroidLibrary.jar, libVibrationiOSLibrary.a i VibrationActionScriptLibrary.swc odpowiednio.

Będziesz wtedy musiał dokonać innego biblioteki ActionScript i powielać klasę com.adobe.nativeExtensions.Vibration jak poniżej:

public class Vibration 
{ 
    public function Vibration() 
    { 
    } 

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

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

Klasa ta zastąpi inną klasę w przypadkach, gdy ISN rozszerzenie” t zaimplementowano zamiast otrzymywania powyższego komunikatu.

Następnie musimy dodać definicję domyślnego do extension.xml pliku:

<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> 

Następnie musimy skompilować ANE użyciu nowego domyślnego actionscript SWC. Powiedzmy, że znajdujemy się w katalogu VibrationNEDeliverables wspomnianej ANE, można go wprowadzić do pliku Bash i uruchomić lub umieścić wszystko w jednym wierszu z wiersza poleceń). Pierwsze kilka linii po prostu wyodrębnia plik library.swf i przenosi go do lokalizacji wymaganych przez polecenie package. Uważaj na ścieżki itp. Założę się, że ustawiłeś domyślną bibliotekę w VibrationActionScriptDefaultLibrary, ale musisz to odpowiednio zmienić.

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 . 

Po ukończeniu powinieneś mieć teraz nową wersję ANE z domyślną biblioteką, co znacznie zwiększy jej użyteczność! Osobiście uważam, że ANE nie powinno się bez niej wydawać.

Jeśli potrzebujesz ANE pełni funkcjonalny, można sprawdzić nasze: http://distriqt.com/native-extensions

+0

Dzięki Michael, już zauważyłem twoje ANE i rozważam ich zakup. Czy Twoja Wibracja ANE obsługuje Blackberry? Dlaczego na liście urządzeń Vibration ANE nie ma obsługi iPoda Touch? –

+1

Nie wdrożyliśmy jeszcze wsparcia dla Blackberry, w rzeczywistości nie mieliśmy żadnych próśb o to. Wibracje nie są obsługiwane w iPodzie Touch, ponieważ to urządzenie nie ma w sobie sprzętu wibracyjnego. Pozdrowienia – Michael

+1

Twoja metoda zadziałała dla mnie bez konieczności odbudowywania czegokolwiek w Xcode i Android Eclipse: Wyodrębniłem 'VibrationAndroidLibrary.jar' i' libVibrationiOSLibrary.a' z Adobe 'ReadyToUseExtension \ com.adobe.extensions.Vibration.ane'. Ponadto pominąłem '-storetype pkcs12 -keystore YOUR_SIGNING_KEY.p12 -storepass KEY_PASSWORD' część polecenia adt. –

1

Rozwiązanie, które użyłem w przeszłości było coś takiego:

  • Utwórz klasę użytkową, która zwraca czy używasz na urządzeniu, które obsługuje ANE. W moim przypadku klasa zawierała statyczną metodę, która sprawdzała wartość Capabilities.os. Zobacz listę wartości, które może zwrócić here.

  • Wprowadź kod wywołujący metodę ANE do swojej własnej funkcji i wywołaj tę funkcję, jeśli obsługiwana jest ANE. Jeśli dobrze pamiętam, to było konieczne, aby umieścić kod, który korzystał z ANE w osobnej funkcji, nie tylko wewnątrz, jeśli blok, w przeciwnym razie sam błąd będzie występować w symulatorze:

to zrobić:

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

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

Zamiast robić to wszystko w jednej funkcji tak:

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

Niestety, twoja metoda nie działa w przypadku funkcji Adobe Vibration ANE. –

1

sam problem istnieje z najnowszej ane drgań zbudowanego dla kompatybilności ios 64bit. Moim rozwiązaniem było umieszczenie instrukcji importu ane wewnątrz funkcji, która faktycznie nazwała metodę wibracji, i odznacz pole include dla ane w ustawieniach ścieżki budowania projektu dla Androida i ios.

Mam zmienną flagi (ustawioną przez oddzielną funkcję) w mojej aplikacji, która oznacza, czy aplikacja jest uruchamiana w ide. Widok wykorzystujący wibracje wywoła tylko powyższą funkcję wibracji, jeśli flaga jest ustawiona na tryb inny niż IDE. Ciągle otrzymuję pierwsze ostrzeżenie, gdy uruchamiam symulator ide, ale nie błąd krytyczny. Kiedy robię kompilację wydania, FlashBuilder zmusza mnie do zaznaczenia pola włączania dla ane w odpowiednich ustawieniach ścieżki budowania projektu (muszę odznaczyć to ponownie następnym razem, gdy chcę uruchomić symulator).

To przylegające, ale to sprawia, że ​​praca z ane nadaje się do zamieszkania. Usprawiedliwia mnie, że adobe się do tego nie zwraca.

+0

jeszcze lepsze rozwiązanie - właśnie zleciłem devloperowi pracę, aby dodać implementację "domyślnej biblioteki" do wibracji ane ... teraz mogę go używać w trybie debugowania bez problemu. Zapraszam do korzystania z niego: https://www.dropbox.com/s/qwvcbsx6ymrx8rz/com.adobe.extensions.Vibration.ane?dl=0 –