我想用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很新。并且,正如我所说,我需要它在编译时运行并从命令行运行。
答案 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