Quantcast
Channel: Adobe Community : Popular Discussions - AIR Development
Viewing all articles
Browse latest Browse all 24121

Problems with C++ native extension for Android

$
0
0

Hello!

I'm trying to build sample native extension written with C++ on Android device.

But I have some troubles caused by the error #3500.

 

What I have:

 

1) Code of native library;

#include "FlashRuntimeExtensions.h"

#include <stdint.h>

#include <stdlib.h>

#include <string.h>

 

FREObject nativeFunction(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])

{

          uint32_t length = 12;

          const uint8_t* value = (const uint8_t*)"Hello from C";

 

          FREObject retObject;

          int res = FRENewObjectFromUTF8(length, value, &retObject);

          if (res == FRE_OK) {

                    return retObject;

          } else {

                    return NULL;

          }

}

 

void ContextInitializer(void *extData, const uint8_t *ctxType, FREContext ctx,

                        uint32_t *numFunctionsToSet,

                        const FRENamedFunction **functionsToSet)

{

          FRENamedFunction* func = (FRENamedFunction*)malloc(sizeof(FRENamedFunction)*1);

          func[0].name = (const uint8_t*)"nativeFunction";

          func[0].functionData = NULL;

          func[0].function = &nativeFunction;

 

  *functionsToSet = func;

}

 

void ContextFinalizer(FREContext ctx)

{

          return;

}

 

void NativeCppExtensionInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet,

                                   FREContextFinalizer* ctxFinalizerToSet)

{

  extDataToSet = NULL;

  *ctxInitializerToSet = ContextInitializer;

  *ctxFinalizerToSet = ContextFinalizer;

}

 

void NativeCppExtensionFinalizer(void* extData)

{

          return;

}

 

2) ActionScript library with Extension class:

package com.adobe.cppnativeextension

{

    import flash.external.ExtensionContext;

 

    public class CppNativeExtension

    {

        private static var context:ExtensionContext;

       

        public static function init():void {

            if (!context) {

                context = ExtensionContext.createExtensionContext('com.adobe.nativecpp', '');

            }

        }

       

        public static function nativeFunction():String {

            if (context != null) {

                return context.call('nativeFunction') as String;

            }

            return null;

        }

       

    }

}

 

3) Test mobile application:

<?xml version="1.0" encoding="utf-8"?>

<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"

        xmlns:s="library://ns.adobe.com/flex/spark" title="Home">

   

    <fx:Script>

        <![CDATA[

            import com.adobe.cppnativeextension.CppNativeExtension;

           

            public function button1_clickHandler(event:MouseEvent):void

            {

                CppNativeExtension.init();

                var res:String = CppNativeExtension.nativeFunction();

                btn1.label = res;

            }

        ]]>

    </fx:Script>

 

    <s:Button id="btn1" x="25" y="27" label="Launch native function" click="button1_clickHandler(event)"/>

   

</s:View>

 

My application.xml file looks like:

<extension xmlns="http://ns.adobe.com/air/extension/3.1">

          <id>com.adobe.nativecpp</id>

          <versionNumber>1</versionNumber>

          <platforms>

                    <platform name="Android-ARM">

                              <applicationDeployment>

                                        <nativeLibrary>libnativecpp.so</nativeLibrary>

                                        <initializer>NativeCppExtensionInitializer</initializer>

                                        <finalizer>NativeCppExtensionFinalizer</finalizer>

                              </applicationDeployment>

                    </platform>

          </platforms>

</extension>

 

Native library libnativecpp.so is built with Android NDK for Windows for ARM architecture.

 

After building ANE archive has such structure:

-- META-INF

------ ANE

---------- Android-ARM

-------------- libnativecpp.so

-------------- library.swf

---------- extension.xml

-- mimetype

-- catalog.xml

-- library.swf

 

After launching of mobile app in debug mode I receive such error:

ArgumentError: Error #3500: The extension context does not have a method with the name nativeFunction.

 

What did I do wrong?

Thanks for help in advance.



Viewing all articles
Browse latest Browse all 24121

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>