适用于Android的Adobe AIR 3.1 Native Extension - actionscript中的null扩展上下文

Tom*_*ski 9 java air android actionscript-3 air-native-extension

我正在研究Android平台的Native Extension,我被卡住了......

针对Android 2.1 ...在Google Nexus One上进行测试(2.3.6)

该行返回NULL

this.context = ExtensionContext.createExtensionContext("com.company.ane.LocationManager", "");
Run Code Online (Sandbox Code Playgroud)

这是扩展描述符文件:

<extension xmlns="http://ns.adobe.com/air/extension/3.1">
<id>com.company.ane.LocationManager</id>
<versionNumber>0.0.1</versionNumber>
<platforms>
<platform name="iPhone-ARM">
  <applicationDeployment>
    <nativeLibrary>libANELocationManager.a</nativeLibrary>
    <initializer>ExtInitializer</initializer>
    <finalizer>ExtFinalizer</finalizer>
  </applicationDeployment>
</platform>
<platform name="Android-ARM">
<applicationDeployment>         
   <nativeLibrary>libANELocationManager.jar</nativeLibrary>
     <initializer>com.company.ane.android.ANELocationManager</initializer>
</applicationDeployment> 
       </platform></platforms></extension>
Run Code Online (Sandbox Code Playgroud)

那是我的包命令:

adt -package -target ane ./../../app/libs/locationmanager.ane ./../extension.xml -swc ane_location_manager.swc -platform iPhone-ARM library.swf libANELocationManager.a -platform Android-ARM library.swf libANELocationManager.jar
Run Code Online (Sandbox Code Playgroud)

在这个阶段,扩展非常简单......我只是想将字符串值返回给我的应用程序...

package com.company.ane.android;

import java.util.HashMap;
import java.util.Map;

import com.adobe.fre.FREContext;
import com.adobe.fre.FREFunction;

import android.location.LocationListener;
import android.location.LocationManager;

public class ANELocationManagerContext extends FREContext {

public LocationManager locationManager;
public LocationListener locationListener;

@Override
public void dispose() {
    // TODO Auto-generated method stub

}

@Override
public Map<String, FREFunction> getFunctions() {

    Map<String, FREFunction> functionMap = new HashMap<String, FREFunction>();

    functionMap.put("ExtensionTest", new ExtensionTest());

    return functionMap;
}

    }


 package com.company.ane.android;

import com.adobe.fre.FREContext;
import com.adobe.fre.FREFunction;
import com.adobe.fre.FREObject;
import com.adobe.fre.FREWrongThreadException;

public class ExtensionTest implements FREFunction {

@Override
public FREObject call(FREContext context, FREObject[] args) {

    FREObject result = null;
    //ANELocationManagerContext ctx = (ANELocationManagerContext) context;


    try 
    {
        result  = FREObject.newObject("It works!");  

    }
    catch (FREWrongThreadException fwte)
    {
        fwte.printStackTrace();
    }

    return result;
}

 }


package com.company.ane.android;

import com.adobe.fre.FREContext;
import com.adobe.fre.FREExtension;

public class ANELocationManager implements FREExtension {

@Override
public FREContext createContext(String contextType) {

    return new ANELocationManagerContext();
}

@Override
public void dispose() {
    // TODO Auto-generated method stub

}

@Override
public void initialize() {
    // TODO Auto-generated method stub

}

}
Run Code Online (Sandbox Code Playgroud)

Mic*_* K. 7

我有完全相同的问题.我的ANE在iOS上运行良好,在模拟器上使用默认的lib,但是在实际的Android设备(Android-ARM平台)上没有运行.

并且ExtensionContext.createExtensionContext()回来了null.

原来,这个问题是工具版本问题,Java编译器版本.我使用的是最新的AIR(3.8),JDK(1.7.25),Android SDK(22.0.5)等.它没有用.

但添加后-target 1.6,以javac打电话,效果不错.


Tyl*_*eto 1

你从哪里得到 NULL 引用?这是在设备上还是在 AIR 模拟器中运行?

如果无法找到当前正在运行的平台(例如:Windows 模拟器)的 ExtensionContext,则返回 NULL,即使它可能在设备上运行良好。您可以在编译 ANE 时设置默认上下文,该上下文将在未找到特定匹配的情况下使用。这个默认目标可以完全用 AS3 编写,对于伪造或处理不受支持的设备很有用。

Adobe AIR 文档提供了有关默认实现的更多详细信息。请参阅此处: http: //help.adobe.com/en_US/air/extensions/WSf268776665d7970d-2482335412ffea65006-8000.html

编辑:哎呀,我看到你正在设备上运行。我仍然会尝试默认的,看看是否可以正常工作,这可能有助于缩小问题范围。

编辑 2:您是否正在实现 FREExtension 接口(在 Java 中)?我在您发布的代码中没有看到这一点。