Android Aidl Compile Error: couldn't find import for class

Chundong Wang picture Chundong Wang · Nov 26, 2014 · Viewed 16.3k times · Source

(I know there're multiple questions on stackoverflow and elsewhere (like google group) about adding parcelable for NetworkInfo but this is not about that.)

My work is under $(AOSP_ROOT)/device/ and involves multiple aidl files. one of it is like,

package com.example;

parcelable SomeRequest;

And another aidl is like,

package com.example;

import com.example.SomeRequest;
interface SomeService {
    SomeRequest getRequest();
}

And I'll get compile errors like,

device/somedevice/sdk/libs/aidl/com/example/SomeService.aidl:9: couldn't find import for class com.example.SomeRequest

I'm wondering it is the order of processing aidl files. My Android.mk looks like,

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

This build error is introduced after I moved aidl files from src/ folder to aidl/ folder (for some reason I have to do so). It worked before but now even if I moved it back to src/ folder it doesn't work anymore. I tried to clean up $(AOSP_ROOT)/out/device/target but it's not helping.

Ideas?

Answer

Chundong Wang picture Chundong Wang · Dec 10, 2014

Finally I got it resolved.

If you dig into /build/core/base_rules.mk, you'll find that LOCAL_AIDL_INCLUDES is actually the folders to be included during AIDL compiling phase in addition to the default folders like framework or so.

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

In this specific case, what you want is actually,

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