Uso de extensiones nativas para Adobe AIR

Las extensiones nativas para Adobe AIR proporcionan API de ActionScript que permiten acceder a funciones específicas del dispositivo programadas con código nativo. Unas veces, los desarrolladores de extensiones nativas a veces trabajan con los fabricantes de los dispositivos; otras veces son desarrolladores de terceros.

Si está desarrollando una extensión nativa, consulte Desarrollo de extensiones nativas para Adobe AIR.

Una extensión nativa es una combinación de:

  • Clases de ActionScript.

  • Código nativo.

No obstante, como desarrollador de una aplicación de AIR con extensión nativa, su trabajo se limitará a las clases de ActionScript.

Las extensiones nativas resultan útiles en las situaciones siguientes:

  • La implementación del código nativo permite acceder a funciones específicas de la plataforma. Estas funciones específicas de la plataforma no están disponibles en las clases incluidas en ActionScript y no es posible implementarlas en clases de ActionScript específicas de la aplicación. La implementación del código nativo sí ofrece esta posibilidad, ya que tiene acceso al software y al hardware específico del dispositivo.

  • Una implementación del código nativo a veces puede ser más rápida que una implementación que solamente utilice ActionScript.

  • La implementación del código nativo puede proporcionar acceso a ActionScript al código nativo heredado.

Algunos ejemplos de extensiones nativas están disponibles en el Centro de desarrollo de Adobe. Por ejemplo, una extensión nativa permite que las aplicaciones de AIR accedan a la función de vibración de Android. Consulte Extensiones nativas para Adobe AIR.

Adobe recomienda

¿Conoce algún tutorial y quiere compartirlo?

Extending Adobe AIR (Ampliación de Adobe AIR, en inglés)

Oliver Goldman

Developing Android Extensions for AIR3: A Beginner's Guide (Desarrollo de extensiones para AIR3: Guía para principiantes, en inglés)

Milkman Games

Archivos de extensión nativa de AIR (ANE)

Los desarrolladores de extensiones nativas empaquetan una extensión nativa en un archivo ANE. Un archivo ANE es un archivador que contiene las bibliotecas y los recursos necesarios para la extensión nativa.

En algunos dispositivos, el archivo ANE contiene la biblioteca del código nativo que utiliza la extensión nativa. En otros, la biblioteca del código nativo se instala en el dispositivo. En algunos casos, la extensión nativa no tiene ningún código nativo para un dispositivo concreto; se implementa solamente con ActionScript.

Como desarrollador de una aplicación de AIR, utilizará el archivo ANE del modo siguiente:

  • Incluya el archivo ANE en la ruta de la biblioteca de la aplicación del mismo modo que incluiría un archivo SWC en la ruta de acceso de la biblioteca. Esta acción permite a la aplicación hacer referencia a las clases de ActionScript de la extensión.

    Nota: cuando compile la aplicación, asegúrese de utilizar la vinculación dinámica para el archivo ANE. Si utiliza Flash Builder, especifique External en el panel de propiedades de rutas de acceso de ActionScript Builder; si utiliza la línea de comandos, especifique -external-library-path.
  • Empaquete el archivo ANE con la aplicación de AIR.

Extensiones nativas y la clase NativeProcess de ActionScript

ActionScript 3.0 proporciona una clase NativeProcess. Esta clase permite que una aplicación de AIR ejecute procesos nativos en el sistema operativo del host. Esta función es parecida a las extensiones nativas, que proporcionan acceso a funciones y bibliotecas específicas de la plataforma. Si decide utilizar la clase NativeProcess y no una extensión nativa, tenga en cuenta lo siguiente:

  • El perfil de AIR extendedDesktop es el único que admite la clase NativeProcess. Por lo tanto, para las aplicaciones con perfiles de AIR mobileDevice y extendedMobileDevice, las extensiones nativas son la única opción.

  • Los desarrolladores de extensiones nativas a menudo proporcionan implementaciones nativas para varias plataformas, pero la API de ActionScript que se incluye suele ser la misma para todas. Si utiliza la clase NativeProcess, el código ActionScript para iniciar el proceso nativo puede variar en función de la plataforma.

  • La clase NativeProcess inicia un proceso independiente, mientras que una extensión nativa se ejecuta en el mismo proceso que la aplicación de AIR. Por ello, si le preocupa que el código pueda bloquearse, utilizar la clase NativeProcess es lo más fiable. Sin embargo, un proceso independiente implica que posiblemente deba implementar gestión de comunicaciones entre procesos.

Extensiones nativas y clases de biblioteca de ActionScript (archivos SWC)

Un archivo SWC es una biblioteca de clases de ActionScript en formato archivador. El archivo SWC contiene un archivo SWF así como otros archivos de recursos. El archivo SWC es una forma cómoda de compartir clases de ActionScript sin tener que compartir el código ActionScript individual y los archivos de recursos.

Un paquete de extensiones nativas es una archivo ANE. Al igual que un archivo SWC, un archivo ANE también es una biblioteca de clases de ActionScript que contiene un archivo SWF y otros archivos de recursos en formato archivador. No obstante, la diferencia más importante entre un archivo ANE y uno SWC reside en que solamente el archivo ANE puede contener una biblioteca del código nativo.

Nota: cuando compile la aplicación, asegúrese de utilizar la vinculación dinámica para el archivo ANE. Si utiliza Flash Builder, especifique External en el panel de propiedades de rutas de acceso de ActionScript Builder; si utiliza la línea de comandos, especifique -external-library-path.

Dispositivos admitidos

Desde AIR 3, se pueden utilizar extensiones nativas en aplicaciones para los siguientes dispositivos:

  • Dispositivos Android, a partir de Android 2.2

  • Dispositivos iOS, a partir de iOS 4.0

  • Simulador de iOS, a partir de AIR 3.3

  • Blackberry PlayBook

  • Dispositivos Windows de escritorio que admitan AIR 3.0

  • Dispositivos Mac OS X de escritorio que admitan AIR 3.0

A menudo, la misma extensión nativa está destinada a varias plataformas. El archivo ANE de la extensión contiene bibliotecas de ActionScript y nativas para cada plataforma admitida. Normalmente, las bibliotecas de ActionScript tienen las mismas interfaces públicas para todas las plataformas. Las bibliotecas nativas son necesariamente distintas.

A veces, una extensión nativa admite una plataforma en concreto. La implementación predeterminada de la plataforma solo tiene código ActionScript, no código nativo. Si empaqueta una aplicación para una plataforma no admitida específicamente por la extensión, la aplicación utilizará la implementación predeterminada al ejecutarla. Por ejemplo, consideremos una extensión que proporciona una función que se aplica solamente a dispositivos móviles. La extensión también puede proporcionar una implementación predeterminada que la aplicación de escritorio puede usar para simular la función.

Perfiles de dispositivos admitidos

Los siguientes perfiles de AIR admiten extensiones nativas:

  • extendedDesktop, a partir de AIR 3.0

  • mobileDevice, a partir de AIR 3.0

  • extendedMobileDevice, a partir de AIR 3.0

Lista de tareas para utilizar una extensión nativa

Para utilizar una extensión nativa en la aplicación, lleve a cabo las siguientes tareas:

  1. Declare la extensión en el archivo descriptor de la aplicación.

  2. Incluya el archivo ANE en la ruta de la biblioteca de la aplicación.

  3. Empaquete la aplicación.

Declaración de la extensión en el archivo descriptor de la aplicación

Todas las aplicaciones de AIR tienen un archivo descriptor de la aplicación. Cuando una aplicación utiliza una extensión nativa, el archivo descriptor de la aplicación incluye un elemento <extensions>. Por ejemplo:

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

El elemento extensionID tiene el mismo valor que id en el archivo descriptor de la extensión. El archivo descriptor de la extensión es un archivo XML denominado extension.xml. Se empaqueta en el archivo ANE. Puede utilizar una herramienta extractora de archivos para buscar el archivo extension.xml.

Inclusión del archivo ANE en la ruta de la biblioteca de la aplicación

Para compilar una aplicación que utilice una extensión nativa, incluya el archivo ANE en la ruta de la biblioteca.

Uso del archivo ANE con Flash Builder

Si la aplicación utiliza una extensión nativa, incluya el archivo ANE para la extensión nativa en la ruta de biblioteca. Flash Builder se puede utilizar para compilar el código de ActionScript.

Siga los pasos descritos a continuación que utilizan Flash Builder 4.5.1:

  1. Cambie la extensión del nombre de archivo del archivo ANE de .ane a .swc. Este paso es necesario para que Flash Builder pueda encontrar el archivo.

  2. Seleccione Proyecto > Propiedades en el proyecto de Flash Builder.

  3. Seleccione la ruta de compilación de Flex en el cuadro de diálogo Propiedades.

  4. En la ficha Ruta de biblioteca, seleccione Añadir SWC....

  5. Busque el archivo SWC y seleccione Abrir.

  6. Seleccione Aceptar en el cuadro de diálogo Añadir SWC...

    El archivo ANE aparece en la ficha Ruta de biblioteca en el cuadro de diálogo Propiedades.

  7. Amplíe la entrada del archivo SWC. Haga doble clic en el Tipo de vínculo para abrir el cuadro de diálogo Opciones de elemento de ruta de biblioteca.

  8. En el cuadro de diálogo Opciones de elemento de ruta de biblioteca, cambie el Tipo de vínculo a Externo.

Ahora podrá compilar la aplicación utilizando, por ejemplo, Proyecto > Crear proyecto.

Uso del archivo ANE con Flash Professional

Si la aplicación utiliza una extensión nativa, incluya el archivo ANE para la extensión nativa en la ruta de biblioteca. Posteriormente, Flash Professional CS5.5 se puede utilizar para compilar el código de ActionScript. Realice lo siguiente:

  1. Cambie la extensión del nombre de archivo del archivo ANE de .ane a .swc. Este paso es necesario para que Flash Professional pueda encontrar el archivo.

  2. Seleccione Archivo > Configuración de ActionScript en su archivo FLA.

  3. Seleccione la ficha Ruta de biblioteca en el cuadro de diálogo Configuración avanzada de ActionScript 3.0.

  4. Seleccione Navegar hasta el archivo SWC.

  5. Busque el archivo SWC y seleccione Abrir.

    El archivo SWC aparece ahora en la ficha Ruta de biblioteca en el cuadro de diálogo Configuración avanzada de ActionScript 3.0.

  6. Con el archivo SWC seleccionado, seleccione el botón Seleccionar opciones de vinculación para una biblioteca.

  7. En el cuadro de diálogo Opciones de elemento de ruta de biblioteca, cambie el Tipo de vínculo a Externo.

Empaquetado de una aplicación con extensiones nativas

Utilice ADT para empaquetar una aplicación con extensiones nativas. No es posible empaquetar la aplicación con Flash Professional CS5.5 o Flash Builder 4.5.1.

Para obtener más información sobre ADT, consulte AIR Developer Tool (ADT).

Por ejemplo, el siguiente comando ADT crea un archivo DMG (un archivo de instalación nativo para Mac OS X) para una aplicación que utiliza extensiones nativas:

adt -package 
    -storetype pkcs12 
    -keystore myCert.pfx 
    -target native 
    myApp.dmg 
    application.xml 
    index.html resources 
    -extdir extensionsDir
El siguiente comando crea un paquete APK para un dispositivo Android:
adt -package 
    -target apk 
    -storetype pkcs12 -keystore ../codesign.p12 
    myApp.apk 
    myApp-app.xml 
    myApp.swf icons 
    -extdir extensionsDir

El siguiente comando crea un paquete iOS para una aplicación de iPhone:

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

Debe tener en cuenta lo siguiente:

  • Utilice un tipo de paquete de archivo de instalación nativo.

  • Especifique el directorio de la extensión.

  • Asegúrese de que el dispositivo de destino de la aplicación admite el archivo ANE.

Uso de un tipo de paquete de archivo de instalación nativo

El paquete de la aplicación debe ser un archivo de instalación nativo. No es posible crear un paquete AIR multiplataforma (un paquete .air) para una aplicación que utilice una extensión nativa, ya que las extensiones nativas suelen contener código nativo. Sin embargo, lo habitual es que una extensión nativa admita varias plataformas nativas con las mismas API de ActionScript. En estos casos, puede utilizarse el mismo archivo ANE en distintos paquetes de archivo de instalación nativos.

La siguiente tabla resume el valor que debe usarse en la opción -target del comando ADT:

Plataforma de destino de la aplicación

-target

Dispositivos de escritorio Mac OS X o Windows

-target native

-target bundle

Android

-target apk

u otros destinos de paquetes de Android

iOS

-target ipa-ad-hoc

u otros destinos de paquetes de iOS

Simulador de iOS

-target ipa-test-interpreter-simulator

-target ipa-debug-interpreter-simulator

Definición del directorio de la extensión

Utilice la opción ADT -extdir para informar a ADT del directorio que contiene las extensiones nativas (archivos ANE).

Para obtener más información sobre esta opción, consulte Opciones de ruta y archivo.

Asegúrese de que el dispositivo de destino de la aplicación admite el archivo ANE

Cuando se proporciona un archivo ANE, el desarrollador de extensiones nativas informa sobre las plataformas admitidas por la extensión. También puede utilizar una herramienta de extracción de archivos para consultar el contenido del archivo ANE. Los archivos extraídos incluyen un directorio para cada plataforma admitida.

Saber qué plataforma admite la extensión es importante a la hora de empaquetar la aplicación que utilice el archivo ANE. Tenga en cuenta las siguientes reglas:

  • Para crear un paquete de aplicación para Android, el archivo ANE debe incluir la plataforma Android-ARM. Como alternativa, el archivo ANE debe incluir la plataforma predeterminada y, al menos, otra plataforma más.

  • Para crear un paquete de aplicación para iOS, el archivo ANE debe incluir la plataforma iPhone-ARM. Como alternativa, el archivo ANE debe incluir la plataforma predeterminada y, al menos, otra plataforma más.

  • Para crear un paquete de aplicación para el simulador de iOS, el archivo ANE debe incluir la plataforma iPhone-x86.

  • Para crear un paquete de aplicación para Mac OS X, el archivo ANE debe incluir la plataforma MacOS-x86 . Como alternativa, el archivo ANE debe incluir la plataforma predeterminada y, al menos, otra plataforma más.

  • Para crear un paquete de aplicación para Windows, el archivo ANE debe incluir la plataforma Windows-x86. Como alternativa, el archivo ANE debe incluir la plataforma predeterminada y, al menos, otra plataforma más.