AIR for Androidでパッケージしたapkファイルの構造について

AIR for AndroidではAIR Runtimeで動作するように一般的なjavaとは異なる形でパッケージングされています。ここではAIR for Androidで実際にパッケージされたapkの構造と、デバイスにインストールされた時の構造に分けて説明したいと思います。

AIR for Androidでパッケージされたapkファイルの構造

AIR for Androidではパブリッシュボタンを押すとandroidデバイスへのインストールファイル(apkファイル)を自動的に作成してくれます。

この処理はADTと呼ばれるコマンドがandroidへインストール可能なファイルへmy-app.xmlと署名ファイルと書き出されたswfファイルを使って自動的にパッケージングをおこなっています。パッケージングされたapkファイルの中身は↓のような構造になっています。

大切そうなところだけピックアップすると、

/AndroidManifest.xml

これはAIRforAndroidで自動生成されるアプリケーション定義ファイル(application.xml)を元にADTコマンドが一般的なandroidアプリで使用されるマニフェストファイルに作り直したものです。

このxmlはandroidmarketでのフィルタリングやデバイスのインストール時の機能制限などを行う際に利用されます。AIR for Androidではあらかじめandroid2.2以上のデバイスへインストールが可能なように設定されています。

また、ファイル形式がxmlとなっていますがapkにパッケージングされた時点でデバイスのパフォーマンスを節約するためにあらかじめパースされたバイナリになっています。なのでテキストエディタでみても読むことはできません。すでにapk化されたマニフェストを見たいなという場合はapktoolというツールでもとのxmlファイルにデコードが可能です。このファイルはapkにビルドされる際に圧縮の先頭に配置されています。

/assets/app.swf

これはAIR2.6SDKでパブリッシュされたswfファイルです。AIRとなっていますが実際パッケージングされるのはswfファイルです。ただ普通のWEB上で使われているswfでも動きますが、AIR2.6でビルドされていないので専用APIへのアクセスはできません。このswfを差し替えさえすればWEB上のゲームコンテンツなどをアプリとしてパッケージすることなども可能です(お勧めできませんが可能という意味です。モバイル用のチューニングは必須)

コマンドラインからビルドする場合はこちらを参照。

/assets

このディレクトリには上記のswf以外にもパブリッシュ設定上で追加したswf内で使用する画像、サウンド、バイナリなどが格納されています。このディレクトリに含めたファイルは直接ファイル名を入れることで参照できます。このディレクトリに保存されたものはデバイスの/data/appから参照するのであまりにもここに含めるファイルサイズが大きくなるときはアプリをSDカードへ保存できるようにアプリケーション定義ファイルを変更してあげたほうがいいかもしれません。

(例) var loader:Loader = new Loader(new URLRequest(“hello.png”));

(例) sound.load(“test.mp3″)

※ここで含めるファイルの中にアプリケーション定義ファイルが含まれていますが、定義ファイルは/assets/META-INF/AIR/に移動されています。

 

 

デバイス上に展開されたapkファイルの構造

apkファイルはデバイスにインストールされるとそのままapkが指定ディレクトリにコピーされるだけでなく、展開されてキャッシュディレクトリや様々な作業用ファイルが作成されます。実際に作成されたファイルやディレクトリの仕組みについて説明します。

 

デバイスにapkがインストールされるとapk本体が/data/app/applicationID.apkに配置されます。

さらに作業領域として/data/data/applicationIDが確保されます。この領域には他のアプリからアクセスができないのでセキュアなディレクトリになっています。

この作業領域は[lib][cache][files][appid]のディレクトリが作成され、このディレクトリのうちAIR for Androidでアクセス可能なディレクトリは[appid]になります。このディレクトリへはFileクラスやSharedObjectクラスから行えるようになっています。

File.applicationStorageDirectory

/data/data/air.appid/appid/LocalStore/

SharedObject

/data/data/air.appid/appid/LocaStore/#SharedObjects/appname.swf/appname.sol

 

アプリケーションの設定

デバイスに展開されたアプリケーションはデバイスの設定から移動や削除することが可能になっています。

デバイスの「設定」→「アプリケーション」→「アプリケーションの管理」→「myapp(アプリの名前)」

主に影響を及ぼすコマンドは「データを消去」「SDカードに移動」「キャッシュを消去」の3つです。AIR for Androidで作成したアプリはこのボタンを押したときどうなるの?と疑問になると思うので実際にボタンを押したときに消去される領域を確認してみました。

「データを消去」

/data/data/air.appid/cache

/data/data/air.appid/files

/data/data/air.appid/appid

の3つが消去されます。つまりインストール後に生成されたFile.applicationStorageDirectoryやSharedObjectもすべて消えてしまいます。

「キャッシュを消去」

/data/data/air.appid/cache/

以下のファイル及びディレクトリが削除されます。File/SharedObjectはそのまま残ります。AIR for Androidにおいてはあまり影響はありません。

「SDカードに移動」

/data/app/air.appid が暗号化されてSDカード(/mnt/secure/asec/,/mnt/asec/)に保存されます。(※/mnt/sdcardではありません。ここらへんの暗号化の仕組みはちょっとよくわかってません。。)

/data/data/air.appid/はそのまま端末上に残るのでインストール後に生成したファイルは意図的にSDカードへ保存しない限り、端末上に残ったままで移動できません。

 

  1. コメントはまだありません。

  1. 2011年 7月 8日
    トラックバック先 :links for 2011-07-07 « Ds log