読者です 読者をやめる 読者になる 読者になる

RetroWeb ~iPhoneとAndroidでハイブリッドゲームアプリ開発~

AIR for iOS+AndroidでSmartPhone Game ハイブリッドアプリ開発

最近作ったアプリ
100億本の抜け毛 100億匹のモナー DQ3闘技場アプリ モナーペット(進化)

AIRアプリの起動を200%高速にする方法

Adobe AIR AIR for Android AIR for iOS ゲーム開発 同人ゲーム

先に結果の秒数はこんな感じです。

①GalaxyS3の場合…7338=192%高速化(ちなみに空アプリは37)
②IS03の場合…17381=214%高速化(ちなみに空アプリは57)

そしてそのアプリの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;
}