2011/12/24

Titanium の R.java と special platform files (Androidのみ)

だいぶ前に TITANIUM BBS(JP UNOFFICIAL) で投稿があった Titanium Mobile のアーキテクチャ(ROOT/platform/ ディレクトリの処理) の件がわかったのでまとめておきます。

Android アプリケーションのビルドは、Google の公式のドキュメントでは A Detailed Look at the Build Process にあるようなデータフローになっています。Titanium のビルドシステムはこのフローを土台にしていますが、 R.java の取り扱い方が若干特殊になっています。というのも、 Titanium では、 R.java に含めるべきリソースと含めないリソースが存在するからです。前者は主にスプラッシュスクリーンやアイコン用の画像で、 Android アプリとして必須のもので、特に Android OS から利用できるようにするため、 R.java に含めなくてはなりません。それに対して、 Titanium の JavaScript からしか参照されないリソースは、 R.java に含める必要がありません。ということで、 Titanium において、ユーザ定義のリソースは、プロジェクト直下の Resouces/android/ 内に保存しておくと、出来上がった apk の所定の場所にコピーされるのみの処理がされます。


普通はこれで十分なのですが、用途によっては、Titanium のユーザが R.java にリソースを追加したい場合があります(実際これで四苦八苦してましたw)。

そこで登場するのが "special platform files" と呼ばれるものですが、例によって、これについてのドキュメントはありません。android 用の build.py の中に登場します。
special_resources_dir = os.path.join(self.top_dir,'platform','android')
if os.path.exists(special_resources_dir):
debug("found special platform files dir = %s" % special_resources_dir)
ignore_files = ignoreFiles
ignore_files.extend(['AndroidManifest.xml']) # don't want to overwrite build/android/AndroidManifest.xml yet
self.copy_project_platform_folder(ignoreDirs, ignore_files)
要するに、プロジェクト直下の
/platform/android/res/
以下にリソースとなるファイルを置いておくと、 Titanium が R.java を生成する際に使う
/build/android/res/
以下にコピーされます。

注意点としては R.java 生成のお約束として、リソースファイルはユーザが作成したディレクトリに入れておかないといけないことです。 /platform/android/ res/直下にファイルを置くと、Android ツールの aapt がエラーをなり、 Titanium のビルドが停止します。

これで、心置きなくR.javaにリソースを追加できます。


0 件のコメント:

コメントを投稿