Android Aidl编译错误:找不到类的导入

Chu*_*ang 10 android aidl

(我知道有关stackoverflow和其他地方(比如google group)关于为NetworkInfo添加parcelable的问题,但这与此无关.)

我的工作在$(AOSP_ROOT)/ device /下,涉及多个aidl文件.其中一个是,

package com.example;

parcelable SomeRequest;
Run Code Online (Sandbox Code Playgroud)

而另一个援助就是,

package com.example;

import com.example.SomeRequest;
interface SomeService {
    SomeRequest getRequest();
}
Run Code Online (Sandbox Code Playgroud)

我会得到编译错误,如,

device/somedevice/sdk/libs/aidl/com/example/SomeService.aidl:9: couldn't find import for class com.example.SomeRequest
Run Code Online (Sandbox Code Playgroud)

我想知道这是处理aidl文件的顺序.我的Android.mk看起来像,

LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-Iaidl-files-under, aidl)
LOCAL_AIDL_INCLUDES := $(call all-Iaidl-files-under, aidl)
Run Code Online (Sandbox Code Playgroud)

在我将aidl文件从src /文件夹移动到aidl /文件夹之后引入了这个构建错误(出于某种原因我必须这样做).它以前工作过但现在即使我把它移回src /文件夹它也不再起作用了.我试图清理$(AOSP_ROOT)/ out/device/target但它没有帮助.

想法?

Chu*_*ang 10

最后我解决了.

如果你深入研究/build/core/base_rules.mk,LOCAL_AIDL_INCLUDES除了框架等默认文件夹之外,你会发现实际上是在AIDL编译阶段要包含的文件夹.

$(aidl_java_sources): PRIVATE_AIDL_FLAGS := -b $(addprefix -p,$(aidl_preprocess_import)) -I$(LOCAL_PATH) -I$(LOCAL_PATH)/src $(addprefix -I,$(LOCAL_AIDL_INCLUDES))
Run Code Online (Sandbox Code Playgroud)

在这个特定的情况下,你想要的是,

LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-Iaidl-files-under, aidl)
LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/aidl
Run Code Online (Sandbox Code Playgroud)

  • 如果我的*.aidl文件在库中定义,不在当前本地路径中,就像../LibraryProject/aidl,如何解决? (2认同)

Cod*_*die 5

所以我环顾四周 - 解决方案是将 AIDL 文件仅放入它们自己的名为 aidl 的目录中,我认为其他一些人已经建议这样做。

事实证明,Android Studio 看起来在那里,但不太知道如何处理放在 src 目录中的 .aidl 文件。

我不明白。我只是不明白。AIDL 导入在 Eclipse 中完美运行。Android Studio 尚未做好生产准备。这是一个重大的倒退。

我也无法让 AIDL 编译器找到导入,我认为必须有比修改平台管理的 base_rules.mk 更好的方法。

啊!