標籤:android 源碼 應用程式 local_aapt_flags
今天改匯入/匯出連絡人方面的東西,匯入/匯出連絡人的這個面板是一個DialogFragment,跟了下代碼發現其實現packages/apps/ContactsCommon中,那麼在其中添加了一些Log,進入到packages/apps/ContactsCommon/目錄下,mm,編譯產生了一個com.android.contacts.common.apk,把此程式push到系統中,添加的Log資訊卻怎麼也打不出來,開始懷疑是不是弄錯了,並不是這個地方實現的(Android源碼中還是有一些重複的代碼的),於是又整個工程搜尋了一遍,那個匯入/匯出連絡人的DialogFragment只在這裡定義了,於是就鬱悶了。。。在Android.mk中也看不出什麼問題:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, res)
LOCAL_JAVA_LIBRARIES := telephony-common
LOCAL_STATIC_JAVA_LIBRARIES := \
com.android.phone.shared \
com.android.vcard \
guava \
android-common \
android-support-v13 \
android-support-v4 \
LOCAL_PACKAGE_NAME := com.android.contacts.common
LOCAL_PROGUARD_ENABLED := disabled
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
include $(BUILD_PACKAGE)
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
=========================================================================
後來搜尋了一下com.android.contacts.common,發現在packages/apps/Dialer和packages/apps/Contacts中都有引用,
Contacts的Android.mk檔案:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
contacts_common_dir := ../ContactsCommon
src_dirs := src $(contacts_common_dir)/src
res_dirs := res $(contacts_common_dir)/res
LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))
LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs))
LOCAL_AAPT_FLAGS := \
--auto-add-overlay \
--extra-packages com.android.contacts.common
LOCAL_JAVA_LIBRARIES := telephony-common voip-common
LOCAL_STATIC_JAVA_LIBRARIES := \
com.android.phone.shared \
com.android.vcard \
android-common \
guava \
android-support-v13 \
android-support-v4 \
android-ex-variablespeed \
LOCAL_REQUIRED_MODULES := libvariablespeed
LOCAL_PACKAGE_NAME := Contacts
LOCAL_CERTIFICATE := shared
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
include $(BUILD_PACKAGE)
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
=================================================================
其中有這一段:
LOCAL_AAPT_FLAGS := \
--auto-add-overlay \
--extra-packages com.android.contacts.common
而且在Contacts的AndroidManifest.xml中也註冊了很多ContactsCommon中的類,於是我想ContactsCommon是通過這種方式整合到Contacts這個程式中去了,編譯了一下Contacts,push進系統,發現Log果然可以出來了。
在Android系統中,撥號程式(packages/apps/Dialer)和連絡人程式(packages/apps/Contacts)之間的耦合性非常的大,在撥號中可以調取連絡人資訊,在連絡人中可以進入到撥號介面(當然,還有一個簡訊程式也是互相聯通的),所以我覺得,為了更好的使這些程式誇進程訪問,就引出來了這個ContactsCommon的程式(Android4.3之前是沒有這個東西的),相當於一個中間人吧。
Android4.4 Makefile屬性:LOCAL_AAPT_FLAGS的使用