2012-12-05 165 views
3

我在我的項目中添加了一個aidl文件,以處理我在調用intent.getIntExtra(..)時遇到的「ClassNotFound」異常(因爲另一個可以調用的在相同的意圖額外對象)將aidl文件添加到Android.mk

添加以下.aidl文件(SomeInfo.aidl)

package com.someapp; 
parcelable SomeInfo; 

我加入到Android.mk:

LOCAL_AIDL_INCLUDES := src/com/someapp/SomeInfo.aidl 

但是當我建立該項目,我看不出有什麼區別。 其實,如果我添加到我的代碼

import com.someapp.SomInfo; 

編譯器不能找到它...

請幫

回答

4

你需要將它添加到LOCAL_SRC_FILES,以及像:

LOCAL_SRC_FILES := $(call all-java-files-under, src) src/com/someapp/SomeInfo.aidl 
LOCAL_AIDL_INCLUDES := src/com/someapp/SomeInfo.aidl 

或者您可以使用預定義的功能,如:

LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-Iaidl-files-under, src) 
LOCAL_AIDL_INCLUDES := $(call all-Iaidl-files-under, src) 

讓我來添加更多細節。實際上base_rules.mk是定義處理aidl文件規則的一個:http://androidxref.com/4.4.3_r1.1/xref/build/core/base_rules.mk#178。它會自動選擇所有文件AIDL擴展這樣的:

aidl_sources := $(filter %.aidl,$(LOCAL_SRC_FILES)) 

而且LOCAL_AIDL_INCLUDES列出您要添加的文件AIDL成,實際上是定義爲AIDL編譯器-I * PARAM:

$(aidl_java_sources): PRIVATE_AIDL_FLAGS := -b $(addprefix -p,$(aidl_preprocess_import)) -I$(LOCAL_PATH) -I$(LOCAL_PATH)/src $(addprefix -I,$(LOCAL_AIDL_INCLUDES)) 
+1

如果我的* .aidl文件在庫中定義,不在當前本地路徑中,就像../LibraryProject/aidl,如何解決? – codezjx

+0

我從來沒有聽說過一個'Android.mk'和'base_rules.mk' ......但我希望在我的庫模塊中有我的parcelable對象的'.aidl'文件,而不是在客戶端應用程序中。 。你可能會添加一個完整的文件例子,我必須添加它們才能使其工作?我需要在任何地方註冊嗎? – noongiya95