Androidのソースツリー下でライブラリプロジェクトを作る
ソースコードツリー下で、他プロジェクトをライブラリとして利用する方法を紹介します。(res含む) Eclipseを利用していれば、Android LibraryProjectとしてisLibraryにチェックを入れるのみで利用できますが、ソースコードツリー下では以下Android.mkを利用します。
ライブラリ側
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := sample-module #モジュール名 LOCAL_SRC_FILES := $(call all-subdir-java-files) LOCAL_MODULE_TAGS := optional include $(BUILD_STATIC_JAVA_LIBRARY)
ライブラリ利用側
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) library_dir := ../../../path/to/library/project/res res_dir := $(library_dir) res LOCAL_STATIC_JAVA_LIBRARIES := \ sample-module \ LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dir)) LOCAL_PACKAGE_NAME := sample-application LOCAL_CERTIFICATE := platform LOCAL_AAPT_FLAGS := --auto-add-overlay LOCAL_PROGUARD_FLAG_FILES := proguard.flags include $(BUILD_PACKAGE)
ポイントはHighlightの箇所です。 大雑把には、LOCAL_RESOURCE_DIRに利用したいresディレクトリの位置を指定すれば利用できる感じです。 LOCAL_RESOURCE_DIRの宣言とLOCAL_AAPT_FLAGSの--auto-add-overlayオプションにより、出来上がるR.javaやresource.arscに含めたresディレクトリのxmlなどが追加されていることが確認できると思います。
resource.arscを開きたいのであれば、以下コマンドで。
aapt dump --values resources target.apk resources.arsc > values.txt
同名の名前のリソースとなるとまずいため、ライブラリ側のリソース名にはprefixをつけておきましょう。
また、LOCAL_AAPT_FLAGSはこのアプリケーションにのみAAPTのオプションを追加するときに利用します。 例えば、プリインストールアプリの中でこのアプリだけhdpiでビルドしたい場合などは、以下で対応することができます。
LOCAL_AAPT_FLAGS := -c hdpi