AS3 文件系统 Hello World

AS3 Filesystem Hello World

我想使用 ActionScript3 将 "Hello World" 写入文本文件。我想从命令行编译和 运行 该代码。

已安装:Windows10,Adobe AIR 18.0 SDK,flex_sdk_4.6

(TLDR:我想从命令行对更大的代码段进行自动化测试,当然我无法理解这段代码)

我遗漏了一些我无法理解的步骤。这是我的代码:

MainF.as

package {
    import flash.display.*;
    import flash.text.*;
    import flash.filesystem.*;

    public class MainF extends Sprite
    {
        public function MainF()
        {
            var file:File =  new File("output.txt");
            var stream:FileStream = new FileStream();
            stream.open(file, FileMode.WRITE);
            stream.writeUTFBytes("Hello World!");
            stream.close();
        }
    }
}

我先运行这条命令:

amxmlc MainF.as -dump-config aircfg.xml

现在我正在使用它来编译我的项目:

amxmlc MainF.as -load-config aircfg.xml

我的 AirSdk\bin 路径在我的 PATH 环境变量中,因此它可以正确找到 AirSdk\bin\amxmlc.bat。

我已经尝试用 air 编译器(如上所示)和 flex 编译器(flex_sdk_4.6\bin\mxmlc.exe 编译它。我试过的所有东西都有这个错误:

Warning: No definitions matching flash.filesystem.* could be found.
        import flash.filesystem.*;

这个答案没有解决我的问题: Flash Builder: 1172 Definition Could not be found

我需要更具体的说明,我是 AS3 的新手。而且,正如我所说,我需要它在编译时和从命令行 运行 工作。

从最有用的帮助页面开始:

http://help.adobe.com/en_US/air/build/WS901d38e593cd1bac25d3d8c712b2d86751e-8000.html

这里的说明都很好,省了一行HelloWorld.xml。替换:

<application xmlns="http://ns.adobe.com/air/application/2.7">

有:

<application xmlns="http://ns.adobe.com/air/application/18.0">

大概这应该与您在计算机上安装的 AirSDK 版本相匹配。

创建flexcfg.xml:

mxmlc -dump-config flexcfg.xml

这会抛出编译器错误,忽略它们。这个文件会有很多问题,需要修复。有几个路径会设置不正确:

<path-element>libs</path-element>

(以及其他,均以<路径元素>开头) 这些将引用您的 AirSDK 中的文件,但不会正确引用它们。 我把完整路径放到我本地的AirSDK:

<path-element>C:/dev/AirSdk/frameworks/libs</path-element>

这个路径对于你安装的AirSDK是唯一的。再一次,会有几个,全部修复,散落在文件中。


这让基本的 hello-world 工作起来了。现在,对于文件访问部分,link 提供了部分解决方案:

Flash Builder: 1172 Definition Could not be found

具体来说,再次在您的 flexcfg.xml 文件中,您需要找到这一行:

<external-library-path>

并在其下方添加另一行:

<path-element>C:/dev/AirSdk/frameworks/libs/air/airglobal.swc</path-element>

(再说一次,你的AirSdk可能安装在其他目录)

有几个地方可以为您提供将 "Hello World" 写入文件所需的行,这是一个: Saving string to text file in AS3 确保您使用 "writeUTFBytes" 作为答案指示,而不是问题。

HelloWorld.as 的最终版本如下所示:

package
{
    import flash.display.Sprite;
    import flash.text.*;
    import flash.filesystem.*;

    public class HelloWorld extends Sprite
    {
        public function HelloWorld()
        {
            var textField:TextField = new TextField();
            stage.addChild( textField );
            textField.text = "Hello, World!";

            var outputFile:File = new File("C:/depot/sdks/ActionScriptSDK/HelloWorld/output.txt");
            var stream:FileStream = new FileStream();
            stream.open(outputFile, FileMode.WRITE);
            stream.writeUTFBytes("Hello, File World!");
            stream.close();
        }
    }
}

flexcfg.xml 大部分是自动生成的。文件很长,我不会全部分享,但我会分享一些相关的行:

<external-library-path>
    <path-element>C:/dev/AirSdk/frameworks/libs/player/{targetPlayerMajorVersion}.{targetPlayerMinorVersion}/playerglobal.swc</path-element>
    <path-element>C:/dev/AirSdk/frameworks/libs/air/airglobal.swc</path-element>
</external-library-path>

及后面的文件:

<library-path>
    <path-element>C:/dev/AirSdk/frameworks/libs</path-element>
    <path-element>C:/dev/AirSdk/frameworks/locale/{locale}</path-element>
</library-path>

HelloWorld.xml 几乎是对 help.adobe.com 的复制粘贴,但这里是:

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://ns.adobe.com/air/application/18.0">
    <id>samples.android.HelloWorld</id>
    <versionNumber>0.0.1</versionNumber>
    <filename>HelloWorld</filename>
    <initialWindow>
        <content>HelloWorld.swf</content>
    </initialWindow>
    <supportedProfiles>mobileDevice</supportedProfiles>
</application>

最后,总结为一个步骤,go.bat:

call mxmlc HelloWorld.as -load-config flexcfg.xml
call adl HelloWorld.xml