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)
我有完全相同的问题.我的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打电话,效果不错.
你从哪里得到 NULL 引用?这是在设备上还是在 AIR 模拟器中运行?
如果无法找到当前正在运行的平台(例如:Windows 模拟器)的 ExtensionContext,则返回 NULL,即使它可能在设备上运行良好。您可以在编译 ANE 时设置默认上下文,该上下文将在未找到特定匹配的情况下使用。这个默认目标可以完全用 AS3 编写,对于伪造或处理不受支持的设备很有用。
Adobe AIR 文档提供了有关默认实现的更多详细信息。请参阅此处: http: //help.adobe.com/en_US/air/extensions/WSf268776665d7970d-2482335412ffea65006-8000.html
编辑:哎呀,我看到你正在设备上运行。我仍然会尝试默认的,看看是否可以正常工作,这可能有助于缩小问题范围。
编辑 2:您是否正在实现 FREExtension 接口(在 Java 中)?我在您发布的代码中没有看到这一点。
| 归档时间: |
|
| 查看次数: |
5108 次 |
| 最近记录: |