Flex/ADL: 加载的代码中不允许使用本机方法
Flex/ADL: Native methods are not allowed in loaded code
我正在尝试在 ADL 命令行调试器下 运行 我的 AIR 应用程序,包括 third party native extension(我没有使用 IDE,例如 FlashDevelop)。我的应用程序适用于 Windows 台式机。
编译似乎没有问题:
$ amxmlc src/menustatemain.as
-o src/menustatemain.swf
-compiler.include-libraries C:\Users\Me\Downloads\AIRSDK_Compiler\frameworks\libs\player.0\playerglobal.swc
-external-library-path+=extensions\ane\NativeJoystick.swc
-use-network=false
-verbose-stacktraces=true
-debug=true
-advanced-telemetry
-omit-trace-statements=false
-define=CONFIG::debug,false
-define=CONFIG::test,true
Loading configuration: C:\Users\Me\Downloads\AIRSDK_Compiler\frameworks\air-config.xml
3383030 bytes written to C:\Users\Me\Documents\myproject\src\menustatemain.swf in 17.069 seconds
然而,当我尝试 运行 ADL 下的应用程序时,它失败并出现此错误:
$ adl
-extdir extensions\ane_unzipped
-profile extendedDesktop
menustatemain.xml
VerifyError: Error #1079: Native methods are not allowed in loaded code.
我用谷歌搜索了一下,但我尝试过的任何方法都无法解决问题。 Whosebug 上有几个类似的问题,其答案无法解决我的问题。我已经更改了我能找到的每个设置,以便在编译时动态 link 扩展并在 运行 时加载它。我有预感这可能是扩展程序本身的问题,但我不知道如何验证。
如何调试这个问题?
对于上下文,这是menustatemain.xml
的内容:
<application xmlns="http://ns.adobe.com/air/application/21.0">
<id>com.me.MyProject</id>
<versionNumber>1.0</versionNumber>
<filename>MyProject</filename>
<initialWindow>
<content>MyProject.swf</content>
<visible>true</visible>
<width>640</width>
<height>480</height>
<maximizable>false</maximizable>
<resizable>false</resizable>
</initialWindow>
<supportedProfiles>extendedDesktop</supportedProfiles>
<extensions>
<extensionID>com.iam2bam.ane.nativejoystick</extensionID>
</extensions>
</application>
此外,我在项目子目录中有本机扩展的编译和未编译版本:
C:\Users\Me\Documents\myproject
extensions\
ane\
NativeJoystick.ane
NativeJoystick.swc
ane_unzipped\
NativeJoystick.ane\
META-INF\
...
问题是我用错了playerglobal.swc
。 Flex SDK 下载附带一个 "player" 框架和一个 "AIR" 框架,我错误地针对 "player" 框架进行了编译,它不允许本机扩展。更改我的编译命令就成功了:
-compiler.include-libraries C:\Users\Me\Downloads\AIRSDK_Compiler\frameworks\libs\air.0\airglobal.swc
感谢@SushiHangover 的提示!
我正在尝试在 ADL 命令行调试器下 运行 我的 AIR 应用程序,包括 third party native extension(我没有使用 IDE,例如 FlashDevelop)。我的应用程序适用于 Windows 台式机。
编译似乎没有问题:
$ amxmlc src/menustatemain.as
-o src/menustatemain.swf
-compiler.include-libraries C:\Users\Me\Downloads\AIRSDK_Compiler\frameworks\libs\player.0\playerglobal.swc
-external-library-path+=extensions\ane\NativeJoystick.swc
-use-network=false
-verbose-stacktraces=true
-debug=true
-advanced-telemetry
-omit-trace-statements=false
-define=CONFIG::debug,false
-define=CONFIG::test,true
Loading configuration: C:\Users\Me\Downloads\AIRSDK_Compiler\frameworks\air-config.xml
3383030 bytes written to C:\Users\Me\Documents\myproject\src\menustatemain.swf in 17.069 seconds
然而,当我尝试 运行 ADL 下的应用程序时,它失败并出现此错误:
$ adl
-extdir extensions\ane_unzipped
-profile extendedDesktop
menustatemain.xml
VerifyError: Error #1079: Native methods are not allowed in loaded code.
我用谷歌搜索了一下,但我尝试过的任何方法都无法解决问题。 Whosebug 上有几个类似的问题,其答案无法解决我的问题。我已经更改了我能找到的每个设置,以便在编译时动态 link 扩展并在 运行 时加载它。我有预感这可能是扩展程序本身的问题,但我不知道如何验证。
如何调试这个问题?
对于上下文,这是menustatemain.xml
的内容:
<application xmlns="http://ns.adobe.com/air/application/21.0">
<id>com.me.MyProject</id>
<versionNumber>1.0</versionNumber>
<filename>MyProject</filename>
<initialWindow>
<content>MyProject.swf</content>
<visible>true</visible>
<width>640</width>
<height>480</height>
<maximizable>false</maximizable>
<resizable>false</resizable>
</initialWindow>
<supportedProfiles>extendedDesktop</supportedProfiles>
<extensions>
<extensionID>com.iam2bam.ane.nativejoystick</extensionID>
</extensions>
</application>
此外,我在项目子目录中有本机扩展的编译和未编译版本:
C:\Users\Me\Documents\myproject
extensions\
ane\
NativeJoystick.ane
NativeJoystick.swc
ane_unzipped\
NativeJoystick.ane\
META-INF\
...
问题是我用错了playerglobal.swc
。 Flex SDK 下载附带一个 "player" 框架和一个 "AIR" 框架,我错误地针对 "player" 框架进行了编译,它不允许本机扩展。更改我的编译命令就成功了:
-compiler.include-libraries C:\Users\Me\Downloads\AIRSDK_Compiler\frameworks\libs\air.0\airglobal.swc
感谢@SushiHangover 的提示!