Flash CS4: я хочу скомпилировать несколько флагов одной командой, является ли make или ant хорошим решением? - PullRequest
2 голосов
/ 30 марта 2010

Я работаю над большим проектом Flash CS4 с несколькими SWF-файлами и хочу консолидировать процесс сборки. Ant / make overkill или люди успешно использовали их в больших проектах Flash?

Спасибо

Ответы [ 4 ]

2 голосов
/ 05 апреля 2010

Я использую Ant для открытия нескольких .fla (в очереди) и запускаю команду JSFL внутри них. Вы можете скомпилировать несколько fla один за другим с помощью этого метода, а также очистить некоторые свойства. (Удалите режим отладки, избавьтесь от пути к классам или замените устаревший путь, установите флаг и т. Д.)

Я делаю это на 100+ фла. Прекрасно работает, но может быть медленным.

Вот пример сценария ANT с командой JSFL. (JSFL использует параметр, чтобы форсировать или не форсировать компиляцию, даже если fla не был изменен)

<?xml version="1.0" encoding="utf-8" ?>

<property name="flash" value="C:\[Replace this]\Flash.exe"/>
<!-- we start from this model and do a build...jsfl-->
<property name="model_jsfl_path" value="${basedir}\jsfl\model_jsfl_clean_permit_debug.jsfl"/>

<property name="paths" value="C:/[target path containing nested fla..]/Flash/"/>
<property name="forceBuild" value="true"/> <!-- param given to jsfl -->

<loadfile property="model_jsfl" srcfile="${model_jsfl_path}">
    <filterchain> 
        <expandproperties/>
    </filterchain>
</loadfile>
<!--build...jsfl-->
<property name="jsfl_file" value="${basedir}\jsfl\build_xml_clean_permit_debug.jsfl"/>
<!-- we clear the file-->
<echo file="${jsfl_file}"></echo>
<!-- we apped the model_jsfl--> 
<echo file="${jsfl_file}" append="true">${model_jsfl}</echo>


<!-- This task launches the compileSWF.jsfl script to compile Assets.swf using the Flash IDE -->
<target name="compile" description="Compile the demo1 SWF with the Flash IDE">
    <echo>using model ='${model_jsfl_path}'</echo>
    <echo>using jsfl command ='${jsfl_file}'</echo>
    <echo>---build.xml completed---</echo>
    <exec executable="${flash}" failonerror="true">
        <arg line="${jsfl_file}" /> 
    </exec>
</target> 

Вот JSFL, это собрание вещей, которые я нашел / сделал за эти годы ...

clearASOCache ( fl.configURI + "Classes/aso" );


var tempDoc=undefined;
if(fl.documents.length==0){
    //xmlPanel need a document, if there is none, create a temp document
    tempDoc=fl.createDocument();
}

//Put ${param1} here
//Remove whiteSpaces?
var paths = "${paths}";
var folders=paths.split("\r").join("").split("\n").join("");
folders=folders.split(",");
fl.trace(folders);
//Build folders roots array
for(var i=0;i<folders.length;i++){
    if(folders[i].substr(0,8)!="file:///"){
        folders[i]="file:///"+folders[i].split(":").join("|").split("\\").join("/");
        fl.trace("format:"+folders[i]);
    }
    if(folders[i].substr(folders[i].length-1,1)!="/"){
        folders[i]=folders[i]+"/";
    }
}
fl.trace("folders="+folders);

//Build exportlist array
exportlist=new Array();
for(var j=0;j<folders.length;j++){
    checkFolder(folders[j],exportlist);
}

//Go trough exportlist
var totaltime=0;
if(exportlist.length==0){
    fl.trace("No file need to publish.");
}else {
    fl.trace("exportlist="+exportlist.join("\n"));
    fl.trace("Start publishing...");
    for(var i=0;i<exportlist.length;i++){
        fl.trace("["+(i+1)+"/"+exportlist.length+"] "+exportlist[i].substr(exportlist[i].lastIndexOf("/")+1)+"\t@ "+exportlist[i].substr(0,exportlist[i].lastIndexOf("/"))+"");
        var t=exportswf(exportlist[i]);
        fl.trace("Completed in "+formatTime(t));
        totaltime+=t;
    }
    fl.trace("All done. Total time:"+formatTime(totaltime));
}





function clearASOCache( path ) {
  if (!FLfile.exists( path )) {
    fl.trace( path + "does not exist" );
    return;
  }
  FLfile.remove( path );
}
function formatTime(num){
    var h=Math.floor(num/3600000);
    num=num%3600000;
    var m=Math.floor(num/60000);
    if(m<10){
        m="0"+m;
    }
    num=num%60000;
    var s=Math.floor(num/1000);
    if(s<10){
        s="0"+s;
    }
    num=num%1000;
    return h+":"+m+":"+s+"."+num;
}
function exportswf(flapath,swfpath){
    var stime=new Date().getTime();
    var fla=fl.openDocument(flapath,true);
    if(swfpath==undefined){
        swfpath=flapath.substr(0,flapath.lastIndexOf("."))+".swf";
    }
    // call the method. In case there's
    // an error, trace it to the output window
    try {
        //replaceClassText("mx.flash.UIMovieClip","gm.flash.UIMovieClip");
        updateProfile(flapath);
    }catch(error){ 
        fl.trace(error); 
    }

    fla.exportSWF(swfpath,true);
    fla.close(false);
    var etime=new Date().getTime();
    return etime-stime;
}
function checkFolder(folder,list){
    fl.trace("folder="+folder);
    var flas=FLfile.listFolder(folder+"*.fla","files");
    for(var i=0;i<flas.length;i++){
        //fl.trace(flas[i]);

        var flatime=Number("0x"+FLfile.getModificationDate(folder+flas[i]));
        var swfname=flas[i].substr(0,flas[i].lastIndexOf("."))+".swf";
        var swftime=Number("0x"+FLfile.getModificationDate(folder+swfname));
        fl.trace(swfname+" "+flatime+" vs "+swftime);
        //$\{forceBuild}
        if(swftime<(flatime-100) || ("${forceBuild}" == "true")){
            list.push(folder+flas[i]);
            fl.trace(flas[i]);
        }
    }

    var flds=FLfile.listFolder(folder,"directories");
    for(var i=0;i<flds.length;i++){
        //fl.trace(i+" "+flds[i]+" of "+flds.length);
        checkFolder(folder+flds[i]+"/",list); 
    }
}
function updateProfile(flapath) {
    var xml, from, to, delta;
    // export the profile and read it in
    var pPath = flapath+".Profile.xml"; 
    fl.getDocumentDOM().exportPublishProfile(pPath);
    xml = FLfile.read(pPath);
    //fl.trace(xml);
    // override DebuggingPermitted to 0
    from = xml.indexOf("<DebuggingPermitted>");
    to = xml.indexOf("</DebuggingPermitted>");
    delta = xml.substring(from, to);
    xml = xml.split(delta).join("<DebuggingPermitted>0") 

    // write the modified profile and import it
    FLfile.write(pPath, xml);
    fl.getDocumentDOM().importPublishProfile(pPath);

    // save changes
    fl.saveDocument(fl.getDocumentDOM(), flapath);

    // delete the publish profile xml (no longer needed)
    FLfile.remove(pPath); 
} 
0 голосов
/ 31 августа 2010

Я использую плагин Amethyst для Visual Studio. Он не только создаст несколько проектов, но и сможет определить зависимости и построить только то, что необходимо.

0 голосов
/ 28 апреля 2010

У меня есть почти более 500 файлов FLA, и в настоящее время я публикую их через ANT + JSFL. Проблема, с которой я здесь сталкиваюсь, заключается в том, что FlashIDE аварийно завершает свою работу в определенный момент, и точка не фиксируется. Но он определенно падает после публикации части из общего количества файлов. Хотел бы послушать, если кто-нибудь обнаружит какой-либо вид сбоя при публикации через ANT и JSFL.

0 голосов
/ 30 марта 2010

Я использую ant прямо сейчас для проекта, который должен компилировать более 10-20 отдельных компонентов в свои соответствующие SWF-файлы ... также использую его для развертывания на промежуточном и рабочем сервере. Это довольно сложно настроить, но как только это будет действительно легко, с относительно быстрым временем компиляции. Кроме того, вы можете полностью настроить цели ant-компиляции ... например, вам может понадобиться скомпилировать только 3 из 10 swfs 90% времени, поэтому вы должны настроить цель сборки именно для этого. На мой взгляд, это определенно стоит того. Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...