关于Flash:是否可以将ActionScript 3(Flex / AIR)项目打印到标准输出?

关于Flash:是否可以将ActionScript 3(Flex / AIR)项目打印到标准输出?

Any way to have an ActionScript 3 (Flex/AIR) project print to standard output?

有没有办法在执行时从ActionScript 3项目打印内容将二进制文件编译为stdout?

从我收集的数据来看,人们一直在通过编写依赖于本地套接字连接的hack和写到本地文件系统中文件的AIR应用程序来绕过此限制,但事实就是如此-显然,使用Flash Player是不可能的 和Adobe的AIR运行时。

是否有任何项目(例如基于Tamarin代码)试图实现可提供这种功能的项目?


使用Linux上的AIR,可以很容易地将其写入stdout,因为该进程可以将自己的文件描述符视为/ dev中的文件。

对于stdout,将/dev/fd/1/dev/stdout作为FileStream打开,然后写入。

例:

1
2
3
4
5
var stdout : FileStream = new FileStream();
stdout.open(new File("/dev/fd/1"), FileMode.WRITE);
stdout.writeUTFBytes("test\
");
stdout.close();

注意:有关writeUTF()writeUTFBytes()之间的区别,请参见此答案-后者将避免在stdout上输出乱码。


就像您说的那样,没有Adobe创建的方法可以执行此操作,但是Zinc可能会更好,它与AIR相似,但是提供了基于Flash的应用程序的真实OS集成。看一下API文档,那里应该有东西。


Redtamarin似乎能够做到这一点(即使它仍处于起步阶段):

test.as的内容:

1
2
3
4
5
6
import avmplus.System;
import redtamarin.version;

trace("hello world" );
trace("avmplus v" + System.getAvmplusVersion() );
trace("redtamarin v" + redtamarin.version );

在命令行上:

1
2
3
4
5
6
7
8
9
10
11
12
$ ./buildEXE.sh test.as

test.abc, 243 bytes written
test.exe, 2191963 bytes written

test.abc, 243 bytes written
test.exe, 2178811 bytes written

$ ./test
hello world
avmplus v1.0 cyclone (redshell)
redtamarin v0.1.0.92

如果使用调试Flash Player,则可以使Flash Player将跟踪消息记录到系统上的文件。

如果您需要实时消息,则可以拖尾文件。

更多信息:

http://blog.flexexamples.com/2007/08/26/debugging-flex-applications-with-mmcfg-and-flashlogtxt/

迈克·钱伯斯

mesh@adobe.com


推荐阅读