AIRアプリの起動を200%高速にする方法
先に結果の秒数はこんな感じです。
①GalaxyS3の場合…7秒3 → 3秒8=192%高速化(ちなみに空アプリは3秒7) ②IS03の場合…17秒3 → 8秒1=214%高速化(ちなみに空アプリは5秒7)
そしてそのアプリのAndroid版。(いつものしまむらくん。数日中に起動高速化版(Ver1.4.3)が、反映されるはず。。)
https://play.google.com/store/apps/details?id=air.retroweb.flappysimamura.production
iOS版も審査通る気がするけど、確認中(なのでまだ未反映)
https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=825465264
で、やったことは単純で、.swcでnewしてたAsset一式を、.swfにしてAIR for Android設定の含めるファイル内にいれて、バイナリロードからのnewにしただけ。引数のurlは、.swfのファイル名だけで読めるので楽ちん。これでアプリ起動が遅いAIRアプリが、200%高速に。
function LoadByte(url:String, callBack:Function):void { var urlLoader:URLLoader = new URLLoader(); var req:URLRequest = new URLRequest(url); urlLoader.dataFormat = URLLoaderDataFormat.BINARY; urlLoader.addEventListener(Event.COMPLETE, onCompleteUrlLoader); urlLoader.load(req); urlLoader.addEventListener(IOErrorEvent.IO_ERROR, function(e):void{ trace("265_IOエラーです。"+url); trace("e.text = " + e.text); }); function onCompleteUrlLoader():void { var ba:ByteArray = urlLoader.data; var lc:LoaderContext = new LoaderContext(); //if(Com.IsAir()) lc.allowLoadBytesCodeExecution = true; var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteLoader); loader.loadBytes(ba, lc); function onCompleteLoader():void { var apd:ApplicationDomain = loader.contentLoaderInfo.applicationDomain; callBack(apd); } } }
ロードしたswfから、リンケージしたクラスを抽出するときは、下記メソッド。
function getClass(d:ApplicationDomain, s:String):Class{ return d.getDefinition(s) as Class; }