AS3 Filesystem Hello World

时间:2015-09-11 23:07:22

标签: actionscript-3 flash flex air

我想用ActionScript3来编写" Hello World"到文本文件。我想从命令行编译并运行该代码。

已安装:Windows 10,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很新。并且,正如我所说,我需要它在编译时运行并从命令行运行。

1 个答案:

答案 0 :(得分:1)

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

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>

(和其他人一样,都以&lt; path-element&gt;开头) 这些将引用AirSDK中的文件,但不会正确引用它们。 我把完整的路径放到我当地的AirSDK:

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

此路径对于AirSDK的安装是唯一的。再一次,将有其中几个,修复所有这些,分散在文件中。

这使得基本的hello-world工作。现在,对于文件访问部分,此链接提供了解决方案的一部分:

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