Professional Documents
Culture Documents
Computer Scientist
Your logo
(optional)
AIR SDK
But
Anatomy of an extension
A set of ActionScript classes
Associated native code for one or more target
devices
A descriptor that contains deployment information
A signature to ensure secure delivery (optional)
Extension Initializer
Called when the first extension context is created.
typedef void (*FREInitializer)(
void** extDataToSet ,
FREContextInitializer* ctxInitializerToSet,
FREContextFinalizer* ctxFinalizerToSet );
Extension Finalizer
Called (if and) when extension is unloaded.
typedef void (* FREFinalizer)(
void** extDataToSet);
Context Initializer
Called every time a new extension context is created.
Registers native functions to be called in this context.
typedef void (*FREContextInitializer)(
void** extDataToSet ,
const uint8_t* ctxType,
FREContext
ctx,
uint32_t* numFunctionsToSet,
const FRENamedFunction** functionsToSet);
Context Finalizer
Called when an extension context is disposed.
typedef void (* FREContextFinalizer)(
FREContext
ctx);
Initialization Sequence
10
Extension
APIs
Accessing ActionScript Objects from native code
Manipulate ActionScript types in native code
FREResult
11
Multi-threading support
Threading
12
Describing
the
Extension
The extension descriptor
<extension xmlns="http://ns.adobe.com/air/extension/2.5">
<id>com.sample.myExtension</id>
<version>1</version>
<platforms>
<platform name="Android-ARM">
<applicationDeployment>
<nativeLibrary>MyExtension.jar</nativeLibrary>
<initializer>com.example.MyExtension</initializer>
</applicationDeployment>
</platform>
<platform name="MacOS-x86">
<applicationDeployment>
<nativeLibrary>MyExtension.framework</nativeLibrary>
<initializer>InitMyExtension</initializer>
<finalizer>FiniMyExtension</finalizer>
</applicationDeployment>
</platform>
<!-- Hypothetical example of a possible Digital Home platform -->
<platform name="Samsung-MIPS">
<deviceDeployment/>
</platform>
<!-- Optional default impl -->
<platform name="default">
<applicationDeployment/>
</platform>
</platforms>
</extension>
13
Consuming an Extension
extension.xml
extension
library (.swc)
native library +
library.swf +
assets
output.ane
Applicati
on.xml
Application.s
wf
output.ane
AIR application
14
C API List
FREResult FREGetContextNativeData( FREContext ctx, void** nativeData );
FREResult FRESetContextNativeData( FREContext ctx, void* nativeData );
FREResult FREGetContextActionScriptData( FREContext ctx, FREObject *actionScriptData );
FREResult FREGetObjectType( FREObject object, FREObjectType *objectType );
FREResult FREGetObjectAsInt32 ( FREObject object, int32_t *value );
FREResult FREGetObjectAsUint32( FREObject object, uint32_t *value ); FREResult FREGetObjectAsDouble( FREObject object,
double *value ); FREResult FREGetObjectAsBool ( FREObject object, bool *value );
FREResult FRENewObjectFromInt32 ( int32_t value, FREObject *object );
FREResult FRENewObjectFromUint32( uint32_t value, FREObject *object );
FREResult FRENewObjectFromDouble( double value, FREObject *object );
FREResult FRENewObjectFromBool ( FREBool value, FREObject *object );
FREResult FREGetObjectAsUTF8( FREObject object, uint32_t* length, const uint8_t** value );
FREResult FRENewObjectFromUTF8( uint32_t length, const uint8_t* value , FREObject* object );
FREResult FRENewObject( const uint8_t* className , uint32_t argc , FREObject[] argv , FREObject* object , FREObject*
thrownException );
FREResult FREGetObjectProperty( FREObject object , const uint8_t* propertyName , FREObject* propertyValue , FREObject*
thrownException );
FREResult FRESetObjectProperty( FREObject object , const uint8_t* propertyName , FREObject propertyValue , FREObject*
thrownException );
FREResult FRECallObjectMethod ( FREObject object , const uint8_t* methodName , uint32_t argc , FREObject[] argv ,
FREObject* result , FREObject* thrownException );
FREResult FREAcquireBitmapData( FREObject object , FREBitmapData* descriptor );
FREResult FREInvalidateBitmapDataRect( FREObject object, uint32_t x , uint32_t y , uint32_t width , uint32_t height );
FREResult FREReleaseBitmapData( FREObject object );
FREResult FREAcquireByteArray( FREObject object , FREByteArray* byteArray );
FREResult FREReleaseByteArray( FREObject object );
FREResult FRESetArrayLength( FREObject arrayOrVector, uint32_t length );
FREResult FREGetArrayLength( FREObject arrayOrVector, uint32_t* length );
FREResult FRESetArrayElementAt( FREObject arrayOrVector, uint32_t index , FREObject value );
FREResult FREGetArrayElementAt( FREObject arrayOrVector, uint32_t index , FREObject* value );
FREResult FREDispatchStatusEventAsync( FREContext ctx , const uint8_t* code , const uint8_t* level );
15
16
Demo
17
Demo
Extension
AS library (.swc)
Class ASLayer {
FREObject VibrateMethod(arguments) {
asLayer.VibrateDevice();
NSLog(@*********In NativeVibrateMethod);
AudioSeervicesPlaySystemSound(
kSystemSoundID_Vibrate );
return NULL;
}
18