Ошибка компиляции Android Aidl: не удалось найти импорт для класса

(Я знаю, что есть несколько вопросов о stackoverflow и в других местах (например, google group) о добавлении parcelable для NetworkInfo, но это не об этом.)

моя работа находится под $(AOSP_ROOT)/ device / и включает в себя несколько AIDL по файлы. один из них такой:

package com.example;

parcelable SomeRequest;

и еще один aidl похож,

package com.example;

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

и я получу ошибки компиляции, такие как,

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

мне интересно, что это порядок обработки aidl файлы. Мой Андроид.МК выглядит так,

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

эта ошибка сборки вводится после того, как я переместил файлы AIDL из src/ folder в AIDL/ folder (по какой-то причине я должен это сделать). Он работал раньше, но теперь, даже если я переместил его обратно в src / folder, он больше не работает. Я попытался очистить $(AOSP_ROOT)/out/device / target, но это не помогает.

идеи?

4 ответов


наконец-то я решил.

если вы копаете в /build/core/base_rules.mk, вы найдете, что LOCAL_AIDL_INCLUDES на самом деле это папки, которые будут включены на этапе компиляции AIDL в дополнение к папкам по умолчанию, таким как framework или так.

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

в этом конкретном случае, чего вы хотите на самом деле,

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

поэтому я огляделся - решение состоит в том, чтобы поместить файлы AIDL только в их собственный каталог под названием aidl, который, я думаю, некоторые другие предложили.

оказывается, что Android Studio выглядит там ,но не совсем знает, что делать.файлы aidl помещаются в каталог src.

Я не понимаю. Я просто не понимаю. AIDL imports отлично работал в Eclipse. Android Studio не готова к производству. Это большой шаг назад.

У меня был проблема с компилятором AIDL для поиска импорта, и я думаю, что должен быть лучший способ, чем изменение base_rules.МК, которым управляет платформа.

Arg!


хорошо, поэтому я боролся в течение нескольких дней, пытаясь выяснить эту же проблему. Clean/Rebuilds не работал для меня. В конце концов, я понял очень простую ошибку, которую я делал в Android Studio, - когда я щелкнул правой кнопкой мыши и создал новый "AIDL", я не нажимал в соответствующей папке в качестве исходных классов моделей.

например, моя модель была в пакете java под названием com.образец.модель, но я не щелкал правой кнопкой мыши в этой папке, когда создавал свой AIDL. Итак, когда Android Студия генерирует папку AIDL для меня, она будет ссылаться на неправильную папку, и я закончу с ошибкой компиляции. Я хочу, чтобы документация android дала понять, что нам нужно щелкнуть правой кнопкой мыши в соответствующей папке перед созданием файлов AIDL. Я знаю, это звучит глупо, но я надеюсь, что этот ответ относится к некоторым из вас!


просто нужно имя .файл aidl должен быть таким же, как и.java файл!