temporaryなめも帳

だらだらと備忘録とか。誰かの為になることをねがって。

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