【问题标题】:How to see how Flash Builder invokes adt?如何查看 Flash Builder 是如何调用 adt 的?
【发布时间】:2012-03-08 12:47:00
【问题描述】:

环境:

  • Flash Builder 4.6
  • AIR SDK 3.1
  • OS X 10.7.3

我正在调试一个问题,该问题确实出现在使用我的 SWC 库、使用 FB 编译的应用程序的 iOS 版本中,并且没有出现在使用原始 AIR SDK 完成的非常相似的应用程序的 iOS 版本中。

我怀疑问题的原因是编译器配置的差异。现在我正在尝试手动(但未成功)制作 ant 的 build.xml,以便它匹配我认为 FB 正在做的任何事情,希望我会在某个时候看到同样的崩溃。但这不是很有效。

有没有办法让我看到 FB 如何调用 adt 等并将其与我的 ant 配置进行比较?

还有其他故障排除提示吗?

【问题讨论】:

标签: flash ant air flash-builder


【解决方案1】:

这让我想起了我以前的answer。
简而言之,您可以创建记录其参数的程序,备份原始 adt 并用它替换它(您的程序甚至可以使用这些参数运行原始 adt。)

【讨论】:

  • 嗯,不是直接调用Java版本吗?但是,无论如何,也可以代理该 Java 代码。好主意。你能想到除了 adt 和 mxmlc 我还应该代理什么吗?
  • 不,它只是忽略adt 二进制文件,并使用-jar adt.jar 运行java 可执行文件...通过将java 替换为将命令行记录到文件的脚本来获得所有标志然后启动旧的java。
  • 注意:用$ sudo execsnoop -v -a -e(在 OS X 上)计算出上述内容
【解决方案2】:

一个可能的情况是 flashbuilder 正在使用 AIR SDK 的单独副本,该副本较旧。 您可以在此处查看文件夹(Windows): C:\Program Files (x86)\Adobe\Adobe Flash Builder 4\sdks

查看您是否使用最新的 AIR sdk。

【讨论】:

  • 它是 Flash Builder 4.6,它使用 Flex SDK 4.6.0,根据 README,它与 AIR 3.1 捆绑在一起。两个adt 可执行文件都将自己报告为3.1.0.4880
【解决方案3】:

我结合了来自another thread 的答案并写了这个:

只需构建一个可运行的 jar 文件

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;


public class adt {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        String argsString = "";

        for(int i=0; i<args.length; ++i)
        {
            argsString += args[i];
        }

        Process proc = Runtime.getRuntime().exec("java -jar adt2.jar " + argsString);

        File txt = new File("C:\\command.txt");
        try(FileWriter writer = new FileWriter(txt))
        {
            writer.write(argsString);
        }

        try {
            proc.waitFor();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        InputStream in = proc.getInputStream();
        InputStream err = proc.getErrorStream();

        byte b[]=new byte[in.available()];
        in.read(b,0,b.length);
        System.out.println(new String(b));

        byte c[]=new byte[err.available()];
        err.read(c,0,c.length);
        System.out.println(new String(c));

        File out = new File("C:\\output.txt");
        try(FileWriter writer = new FileWriter(out))
        {
            writer.write(new String(b));
        }

        File errors = new File("C:\\errors.txt");
        try(FileWriter writer = new FileWriter(errors))
        {
            writer.write(new String(c));
        }
    }

}

【讨论】:

    猜你喜欢
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多