Native extensies gebruiken voor Adobe AIR

Native extensies voor Adobe AIR verschaffen ActionScript API's waarmee u toegang krijgt tot apparaatspecifieke functies die in de native code zijn geprogrammeerd. Ontwikkelaars van native extensies werken soms samen met apparaatfabrikanten en soms met externe ontwikkelaars.

Raadpleeg Native extensies ontwikkelen voor Adobe AIR als u een native extensie ontwikkelt.

Een native extensie is een combinatie van:

  • ActionScript-klassen.

  • Native code.

Als ontwikkelaar van AIR-toepassingen die gebruikmaakt van een native extensie, werkt u echter alleen met de ActionScript-klassen.

Native extensies zijn handig in de volgende gevallen:

  • De native code-implementatie geeft toegang tot platformspecifieke functies. Deze functies zijn niet beschikbaar in de geïntegreerde ActionScript-klassen en het is niet mogelijk deze te implementeren in toepassingsspecifieke ActionScript-klassen. De native code-implementatie kan deze functionaliteit verschaffen, omdat deze toegang heeft tot apparaatspecifieke hardware en software.

  • Soms is een native code-implementatie sneller dan een implementatie die alleen gebruikmaakt van ActionScript.

  • De native code-implementatie kan ActionScript toegang geven tot verouderde native code.

Het Adobe Developer Center bevat enkele voorbeelden van native extensies. Een native extensie verleent AIR-toepassingen bijvoorbeeld toegang tot de trilfunctie van Android. Zie Native extensies voor Adobe AIR .

ANE-bestanden (AIR Native Extension)

Ontwikkelaars van native extensies verpakken een native extensie in een ANE-bestand. Een ANE-bestand is een archiefbestand met de vereiste bibliotheken en bronnen voor de native extensie.

Voor bepaalde apparaten bevat het ANE-bestand de native codebibliotheek waarvan de native extensie gebruikmaakt. Maar voor andere apparaten wordt de native codebibliotheek op het apparaat geïnstalleerd. In sommige gevallen heeft de native extensie helemaal geen native code voor een bepaald apparaat. Deze wordt alleen geïmplementeerd met ActionScript.

Ontwikkelaars van AIR-toepassingen gebruiken het ANE-bestand als volgt:

  • Neem het ANE-bestand op in het bibliotheekpad van de toepassing, net zoals u een SWC-bestand opneemt in het bibliotheekpad. Zo stelt u de toepassing in staat te verwijzen naar de ActionScript-klassen van de extensie.

    Opmerking: wanneer u de toepassing compileert, moet u ervoor zorgen dat u de dynamic link-optie gebruikt voor het ANE-bestand. Als u Flash Builder gebruikt, moet u de optie Extern opgeven in het ActionScript Builder-deelvenster met padeigenschappen. Als u de opdrachtregel gebruikt, typt u het volgende: -external-library-path.
  • Plaats het ANE-bestand in een pakket met de AIR-toepassing.

Native extensies vergelijken met de NativeProcess-klasse van ActionScript

ActionScript 3.0 verschaft een NativeProcess-klasse. Met deze klasse kan een AIR-toepassing native processen uitvoeren op het hostbesturingssysteem. Deze functie valt te vergelijken met native extensies die toegang verlenen tot platformspecifieke functies en bibliotheken. Neem het volgende in overweging wanneer u moet beslissen of u de NativeProcess-klasse of een native extensie gaat gebruiken:

  • Alleen het AIR-profiel extendedDesktop biedt ondersteuning voor de NativeProcess-klasse. Voor toepassingen met de AIR-profielen mobileDevice en extendedMobileDevice zijn native extensies dus de enige mogelijkheid.

  • Ontwikkelaars van native extensies verschaffen vaak native implementaties voor verschillende platforms, maar ze verschaffen doorgaans dezelfde ActionScript-API voor alle platforms. Wanneer de klasse NativeProcess wordt gebruikt, kan de ActionScript-code waarmee het native proces wordt gestart per platform variëren.

  • De klasse NativeProcess start een afzonderlijk proces, terwijl een native extensie in hetzelfde proces als de AIR-toepassing wordt uitgevoerd. U kunt dus beter de NativeProcess-klasse gebruiken als u zich zorgen maakt over vastlopende code. De verschillende processen betekenen echter wel dat u wellicht communicatieafhandeling tussen de processen moet implementeren.

Native extensies vergelijken met ActionScript-klassebibliotheken (SWC-bestanden)

Een SWC-bestand is een ActionScript-klassebibliotheek in een archiefindeling. Het SWC-bestand bevat een SWF-bestand plus andere bronbestanden. SWC-bestanden vormen een handige manier om ActionScript-klassen te delen in plaats van afzonderlijke ActionScript-code en -bronbestanden te delen.

Een ANE-bestand is een native extensiepakket. Net als een SWC-bestand is een ANE-bestand ook een ActionScript-klassebibliotheek met een SWF-bestand en andere bronbestanden in een archiefindeling. Het belangrijkste verschil tussen ANE- en SWC-bestanden is echter dat alleen ANE-bestanden een native codebibliotheek kunnen bevatten.

Opmerking: wanneer u de toepassing compileert, moet u ervoor zorgen dat u de dynamic link-optie gebruikt voor het ANE-bestand. Als u Flash Builder gebruikt, moet u de optie Extern opgeven in het ActionScript Builder-deelvenster met padeigenschappen. Als u de opdrachtregel gebruikt, typt u het volgende: -external-library-path.

Ondersteunde apparaten

In AIR 3 of later kunt u native extensies gebruiken in toepassingen voor de volgende apparaten:

  • Android-apparaten, vanaf Android 2.2

  • iOS-apparaten, vanaf iOS 4.0

  • iOS-simulator, vanaf AIR 3.3

  • Blackberry Playbook

  • Windows-bureaubladapparaten die ondersteuning bieden voor AIR 3.0

  • Mac OS X-bureaubladapparaten die ondersteuning bieden voor AIR 3.0

Vaak richten native extensies zich op meerdere platforms. Het ANE-bestand van de extensie bevat ActionScript-bibliotheken en native bibliotheken voor elk ondersteund platform. De ActionScript-bibliotheken hebben doorgaans dezelfde openbare interfaces voor alle platforms. De native bibliotheken zijn vanzelfsprekend anders.

Soms biedt een native extensie ondersteuning voor een standaardplatform. De implementatie van het standaardplatform heeft alleen ActionScript-code, maar geen native code. Als u een toepassing in een pakket plaatst voor een platform waarvoor de extensie niet op expliciete wijze ondersteuning biedt, gebruikt de toepassing de standaardimplementatie tijdens de uitvoering. Neem bijvoorbeeld een extensie die een functie verschaft die alleen van toepassing is op mobiele apparatuur. De extensie kan ook een standaardimplementatie verschaffen die een bureaubladtoepassing kan gebruiken om de functie te simuleren.

Ondersteunde apparaatprofielen

De volgende AIR-profielen bieden ondersteuning voor native extensies:

  • extendedDesktop , vanaf AIR 3.0

  • mobileDevice , vanaf AIR 3.0

  • extendedMobileDevice , vanaf AIR 3.0

Takenlijst voor het gebruik van een native extensie

Voer de volgende taken uit om een native extensie te gebruiken in uw toepassing:

  1. Declareer de extensie in het descriptorbestand van de toepassing.

  2. Neem het ANE-bestand op in het bibliotheekpad van uw toepassing.

  3. Plaats de toepassing in een pakket.

De extensie in het descriptorbestand van de toepassing declareren

Alle AIR-toepassingen hebben een descriptorbestand van de toepassing. Wanneer een toepassing een native extensie gebruikt, beschikt het descriptorbestand van de toepassing over een <extensions> -element. Bijvoorbeeld:

<extensions> 
    <extensionID>com.example.Extension1</extensionID> 
    <extensionID>com.example.Extension2</extensionID> 
</extensions>

Het extensionID -element heeft dezelfde waarde als het element id in het descriptorbestand van de extensie. Het descriptorbestand van de extensie is een XML-bestand met de naam ''extension.xml''. Dit bestand is in een pakket met het ANE-bestand geplaatst. Zoek met een hulpprogramma voor het decomprimeren van archiefbestanden naar het bestand extension.xml.

Het ANE-bestand opnemen in het bibliotheekpad van uw toepassing

Neem het ANE-bestand op in uw bibliotheekpad als u een toepassing wilt compileren die een native extensie gebruikt.

Het ANE-bestand gebruiken met Flash Builder

Als uw toepassing een native extensie gebruikt, neemt u het ANE-bestand voor de native extensie op in het bibliotheekpad. Daarna kunt u met Flash Builder uw ActionScript-code compileren.

Voer de volgende stappen uit in Flash Builder 4.5.1:

  1. Wijzig de extensie van het ANE-bestand van .ane in .swc. Dit is nodig, omdat Flash Builder het bestand anders niet kan vinden.

  2. Selecteer Project > Eigenschappen voor uw Flash Builder-project.

  3. Selecteer het Flex-bouwpad in het dialoogvenster Eigenschappen.

  4. Selecteer op het tabblad Bibliotheekpad de optie SWC-bestand toevoegen....

  5. Blader naar het SWC-bestand en selecteer Openen.

  6. Selecteer OK in het dialoogvenster SWC-bestand toevoegen...

    Het ANE-bestand wordt nu weergegeven op het tabblad Bibliotheekpad van het dialoogvenster Eigenschappen.

  7. Vouw de vermelding van het SWC-bestand uit. Dubbelklik op Koppelingstype om het dialoogvenster ltempadopties bibliotheek te openen.

  8. Wijzig het Koppelingstype in Extern in het dialoogvenster Itempadopties bibliotheek.

Nu kunt u uw toepassing compileren, bijvoorbeeld met gebruik van Project > Build Project (Project samenstellen).

Het ANE-bestand gebruiken met Flash Professional

Als uw toepassing een native extensie gebruikt, neemt u het ANE-bestand voor de native extensie op in het bibliotheekpad. Daarna kunt u met Flash Professional CS5.5 uw ActionScript-code compileren. Ga als volgt te werk:

  1. Wijzig de extensie van het ANE-bestand van .ane in .swc. Dit is nodig, omdat Flash Professional het bestand anders niet kan vinden.

  2. Selecteer Bestand > ActionScript-instellingen voor het FLA-bestand.

  3. Selecteer het tabblad Bibliotheekpad in het dialoogvenster Geavanceerde ActionScript 3.0-instellingen.

  4. Selecteer de knop Bladeren naar SWC-bestand.

  5. Blader naar het SWC-bestand en selecteer Openen.

    Het SWC-bestand wordt nu weergegeven in het tabblad Bibliotheekpad van het dialoogvenster Geavanceerde ActionScript 3.0-instellingen.

  6. Zorg dat het SWC-bestand is geselecteerd en selecteer de knop Koppelingsopties voor een bibliotheek instellen.

  7. Wijzig het Koppelingstype in Extern in het dialoogvenster Itempadopties bibliotheek.

Een toepassing die native extensies gebruikt in een pakket plaatsen

Gebruik ADT om een toepassing die native extensies gebruikt in een pakket te plaatsen. Het is niet mogelijk de toepassing met gebruik van Flash Professional CS5.5 of Flash Builder 4.5.1 in een pakket te plaatsen.

Op AIR Developer Tool (ADT) vindt u informatie over het gebruik van ADT.

Met de volgende ADT-opdracht maakt u bijvoorbeeld een DMG-bestand (een native installatiebestand voor Mac OS X) voor een toepassing die native extensies gebruikt:

adt -package 
    -storetype pkcs12 
    -keystore myCert.pfx 
    -target native 
    myApp.dmg 
    application.xml 
    index.html resources 
    -extdir extensionsDir
Met de volgende opdracht maakt u een APK-pakket voor een Android-apparaat:
adt -package 
    -target apk 
    -storetype pkcs12 -keystore ../codesign.p12 
    myApp.apk 
    myApp-app.xml 
    myApp.swf icons 
    -extdir extensionsDir

En met de volgende opdracht maakt u een iOS-pakket voor een iPhone-toepassing:

adt -package 
    -target ipa-ad-hoc 
    -storetype pkcs12 -keystore ../AppleDistribution.p12 
    -provisioning-profile AppleDistribution.mobileprofile 
    myApp.ipa 
    myApp-app.xml 
    myApp.swf icons Default.png 
    -extdir extensionsDir

Let wel:

  • Gebruik een pakkettype met een native installatieprogramma.

  • Geef de extensiemap op.

  • Zorg ervoor dat het ANE-bestand het doelapparaat van de toepassing ondersteunt.

Een pakkettype met een native installatieprogramma gebruiken

Het toepassingspakket moet een native installatieprogramma zijn. Het is niet mogelijk een AIR-pakket voor meerdere platforms (een .air-pakket) te maken voor een toepassing die een native extensie gebruikt, omdat native extensies doorgaans native code bevatten. Een native extensie ondersteunt echter doorgaans meerdere native platforms met dezelfde ActionScript-API's. In deze gevallen kunt u hetzelfde ANE-bestand gebruiken in pakketten met verschillende native installatieprogramma's.

In de volgende tabel ziet u een overzicht van de waarde die u moet gebruiken voor de optie -target van de ADT-opdracht:

Doelplatform van de toepassing

-target

Bureaubladapparaten met Mac OS X of Windows

-target native

-target bundle

Android

-target apk

of andere Android-pakketdoelen.

iOS

-target ipa-ad-hoc

of andere iOS-pakketdoelen.

iOS-simulator

-target ipa-test-interpreter-simulator

-target ipa-debug-interpreter-simulator

De extensiemap opgeven

Deel ADT via de ADT-optie -extdir mee in welke map de native extensies (ANE-bestanden) staan.

Zie Bestands- en padopties voor informatie over deze optie.

Ervoor zorgen dat het ANE-bestand het doelapparaat van de toepassing ondersteunt

Door middel van een ANE-bestand vertelt de ontwikkelaar van de native extensie u welke platforms door de extensie worden ondersteund. U kunt ook met een decomprimeringsprogramma de inhoud van het ANE-bestand bekijken. De gedecomprimeerde bestanden bevatten een map voor elk ondersteund platform.

Het is belangrijk te weten welke platforms door de extensie worden ondersteund wanneer u de toepassing die het ANE-bestand gebruikt in een pakket plaatst. Overweeg de volgende regels:

  • Als u een Android-toepassingspakket maakt, dient het ANE-bestand het Android-ARM -platform te bevatten. Zo niet, dan dient het ANE-bestand het standaardplatform en minstens één ander platform te bevatten.

  • Als u een iOS-toepassingspakket maakt, dient het ANE-bestand het iPhone-ARM -platform te bevatten. Zo niet, dan dient het ANE-bestand het standaardplatform en minstens één ander platform te bevatten.

  • Als u een toepassingspakket voor een iOS-simulator maakt, moet het ANE-bestand het iPhone-x86 -platform bevatten.

  • Als u een Mac OS X-toepassingspakket maakt, dient het ANE-bestand het MacOS-x86 -platform te bevatten. Zo niet, dan dient het ANE-bestand het standaardplatform en minstens één ander platform te bevatten.

  • Als u een Windows-toepassingspakket maakt, dient het ANE-bestand het Windows-x86 -platform te bevatten. Zo niet, dan dient het ANE-bestand het standaardplatform en minstens één ander platform te bevatten.