1

MXMLC コンパイルで使用されるソース ファイルをプログラムで記録する方法が必要です。理想的には、MXMLC にフラグを渡して、コンパイル中のソース ファイルの完全なリストを報告させる必要がありますが、そのようなフラグはないようです。一般的には、main.mxml ファイルを MXMLC に渡すだけで、何をしているのかを説明することなく、必要なすべてのファイルがコンパイルされます。私が知る限り、コンパイルするファイルを明示的にリストすることもできません。参照を自動的に解決し、その動作を制御したり報告したりする方法なしに、参照されたソースをコンパイルします。

コンパイラがこの情報を提供できず、ユーザーがこの動作を制御できない場合、私が考えることができる唯一の他のオプションは、コードツリー内のすべての参照をトラバースして MXMLC が何をすべきかのレポートを提供する、MXML 用の独自のソースコードスキャナーを作成することです。ただし、それは明らかにエラーが発生しやすく、私が楽しみにしていることではありません。

もちろん、私は Flex の経験があまりないので、私が見逃している明らかな答えがあるかもしれません。

ありがとう

4

3 に答える 3

7

リンクレポートで何を求めているかを見つける必要があります。

このパラメーターをコンパイラー引数に追加します。

-link-report output.xml

大量の情報が得られるため、結果を解析するための便利な AIR ツールもあります。

于 2011-03-08T01:01:31.777 に答える
0

私が見たすべてのことから、ビルド時にこの情報を取得する唯一の方法は、Flexコンパイラクラスを呼び出す独自のJavaプログラムを作成することであるように思われました。実際にはいくつかの異なる方法がありますが、私が行った方法は、次のpdfの10ページから始まるレポートの例に基づいていました。

http://blogs.adobe.com/flexdoc/files/flexdoc/oem/oem_guide.pdf

私が知りたいのは、ビルドのファイル依存関係だけでした。これにより、バージョン管理でこれらをソースバージョンにリンクできるようになりました。そのため、参照されている例の定義、依存関係、および前提条件のセクションを省略しました。基本的な考え方は、flex2.tools.oem.Applicationオブジェクトを作成し、そのオブジェクトで「build」メソッドを実行してから、getReportメソッドを使用してコンパイルの厄介な詳細をすべて取得することです。これが私のソリューションコードの簡略版です。

File file = new File ("C:/MyFlexApp/main.mxml");
File outputFile = new File("C:/MyFlexApp/bin/Foo.swf");
Application application = new Application(file);
application.setOutput(outputFile);            

Configuration config = application.getDefaultConfiguration();
File[] libFile = new File[] {new File("C:/MyFlexApp/bin/baz.swc")};
config.addLibraryPath(libFile);

application.setConfiguration(config);
application.build(true);              

report = application.getReport();


Message[] m = report.getMessages();  
if (m != null)
{
    for (int i=0; i<m.length; i++) 
    {
        System.out.println(m[i].getLevel().toUpperCase() + 
                " MESSAGE " + i + ": " + m[i]);
    }
}
// Lists the image files that are embedded.
System.out.println("\n\nEMBEDDED ASSETS: ");
String[] assetnames = report.getAssetNames(Report.COMPILER);
if (assetnames != null)
{
    for (int i=0; i<assetnames.length; i++) 
    {
        System.out.println(assetnames[i]);         
    }     
}

// Lists the libraries that are used.
System.out.println("\nLIBRARIES: ");
String[] compilerLibs = report.getLibraryNames(Report.COMPILER);
if (compilerLibs != null)
{
    for (int i=0; i<compilerLibs.length; i++) 
    {
        System.out.println(compilerLibs[i]);         
    }     
}
System.out.println("\nSOURCE NAMES: "); 
String[] src = report.getSourceNames(Report.COMPILER);
if (src != null)
{
    for (int i=0; i<src.length; i++) {
        // Lists source files.
        System.out.println(src[i]);     
    }
}

この解決策に私を導いてくれたすべての助けをくれたShaunに感謝します。

于 2011-03-07T23:57:44.427 に答える
0

私は実際には知りませんし、コマンドラインを介してあなたの言うことを実行する方法を知りたいと思っています.それは素晴らしいことです. しかし、そうする能力がなければ、逆コンパイラを使用してswfを調べることができると思います。Trillixのようなものは、コンパイルされたすべてのクラスを表示すると確信しています(それらが解決された場所は別の話です)。どのファイルがアクセスされているかを確認するには (Windows を使用している場合)、 http ://technet.microsoft.com/en-us/sysinternals/bb896645 を使用します。 ただし、mxmlc プロセスだけを表示するには、いくつかのフィルタリングを行う必要があります (そこでは非常に簡単です)。直接的な答えとしては、私はそれを見たいと思っていますが、これらは今のところ、ボンネットの下で何が起こっているのかをもう少し見るためのいくつかの回避策です. 同じトピックですが、必ずしも現在の特定の問題に関連しているわけではありません.CharlesとWiresharkは、奇妙な問題があり、優れたデバッグツールが必要な場合に、ネットワークトラフィックで何が起こっているかについて多くの情報を収集するのに適しています.

私は、swc のコンパイルをもう少し明示的にすることができると信じています。アーカイブ プログラムで swc を開くと、catalog.xml を見て、参照されているファイルのリストを確認できますが、これがどのようになっているのか正確にはわかりません。 IDE またはコンパイル時に使用されます。ここに参照がありますhttp://livedocs.adobe.com/flex/3/html/help.html?content=compilers_30.htmlですが、深さはあまりありません。特定のクラスを抽出して検索し、クラスが最終的に古い SDK からコードにどのように取り込まれているかを調べる小さな Java アプリを作成しましたが、まったく楽しくありませんでした。

ショーン

于 2011-03-02T22:45:41.553 に答える