Я использую 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);
}