将一个AIDL文件添加到Android.mk

3

我正在将一个aidl文件添加到我的项目中,以应对我在调用intent.getIntExtra(..)时遇到的“ClassNotFound”异常(因为同一个intent extras中有另一个可包含对象)

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

package com.someapp;
parcelable SomeInfo;

我在 Android.mk 文件中添加了以下内容:
LOCAL_AIDL_INCLUDES := src/com/someapp/SomeInfo.aidl

但是当我构建项目时,看不出任何区别。实际上,如果我在我的代码中添加
import com.someapp.SomInfo;

编译器找不到它...
请帮忙。
1个回答

6
您需要将其添加到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))

你正在添加aidl文件的LOCAL_AIDL_INCLUDES列表实际上被定义为AIDL编译器的-I*参数:

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

2
如果我的*.aidl文件定义在库中,而不在当前的本地路径中,就像../LibraryProject/aidl一样,该如何解决? - codezjx
我从未听说过 Android.mkbase_rules.mk ... 但我想将我的可包含对象的 .aidl 文件放在库模块中而不是客户端应用程序中... 你能否提供这些文件的完整示例以及我需要添加它们的位置,以使其正常工作? 我需要在任何地方注册它们吗? - mbo
这个“all-Iaidl-files-under”函数返回相对于$(LOCAL_PATH)的路径。您可以直接从根项目指定库路径。也就是说,LOCAL_AIDL_INCLUDES := LibraryProject/aidl。 - Chris Li

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接