У меня есть проект, который использует интерфейсы AIDL, и все отлично работает в студии Android с помощью gradle. однако я использую студию Android только для удобства IDE для разработки моих приложений для Android, мне действительно нужно использовать файлы Android для создания своих приложений с остальной частью дерева AOSP.
Когда я начал этот проект, у меня был только один небольшой вспомогательный файл в качестве доказательства концепции, и он отлично работал как в AS, так и в Android. но когда я начал добавлять дополнительные файлы помощи, он просто сломался с ошибкой:
[ 14% 1/7] Aidl: myradioservice<= vendor/apps/radioservice/myRadioService/aidl/com/foo/myradioservice/IMetadataCallback.aidl
FAILED: out/target/common/obj/APPS/myRadioService_intermediates/aidl/com/foo/myradioservice/IMetadataCallback.java
vendor/apps/radioservice/myRadioService/aidl/com/foo/myradioservice/IMetadataCallback.aidl:4: couldn't find import for class com.foo.myradioservice.MyMetaData
[ 28% 2/7] Aidl: myradioservice <= vendor/apps/radioservice/myRadioService/foo/com/foo/myradioservice/IMyRadioManager.aidl
FAILED: out/target/common/obj/APPS/myRadioService_intermediates/aidl/com/harman/myradioservice/IMyRadioManager.java
vendor/apps/radioservice/myRadioService/aidl/com/foo/myradioservice/IMyRadioManager.aidl:4: couldn't find import for class com.foo.myradioservice.IMetadataCallback
вот мои файлы помощи:
IMetadataCallback.aidl
package com.foo.myradioservice;
import com.foo.myradioservice.MyMetaData;
interface IMetadataCallback {
void onMetadataChange(out MyMetaData metadata);
}
IMyManager.aidl
package com.foo.myradioservice;
import com.foo.myradioservice.IMetadataCallback;
interface IMyManager {
void tune(int channelNumber);
void registerMetadataListener(IMetadataCallback cb);
void unregisterMetadataListener(IMetadataCallback cb);
}
MyMetadata.aidl
package com.foo.myradioservice;
parcelable MyMetaData;
(У меня также есть файл MyMetadata.java, который реализует Parcelable в исходном каталоге java.)
и вот мой файл для создания Android
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PACKAGE_NAME := myRadioService
LOCAL_AIDL_INCLUDES := $(call all-Iaidl-files-under, aidl)
LOCAL_SRC_FILES := $(call all-java-files-under, java) $(call all-Iaidl-files-under, aidl)
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4
LOCAL_AAPT_FLAGS := --auto-add-overlay
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_RESOURCE_DIR += frameworks/support/v7/appcompat/res
LOCAL_JAVA_LIBRARIES := android.car
LOCAL_PROGUARD_ENABLED := disabled
LOCAL_DEX_PREOPT := false
include $(BUILD_PACKAGE)
Вещи, которые я пробовал:
да, я прочитал это, и да, у меня есть этот вспомогательный файл. это было в нижней части моего блока кода, я разделил и пометил содержимое каждого вспомогательного файла с именами файлов
LOCAL_AIDL_INCLUDES: = $ (call all-Iaidl-files-under, aidl) Это будет включать только файлы помощи, а не ваш файл MyMetadata.aidl.
В документации AIDL от Google сказано: «Если вы используете собственный процесс сборки, не добавляйте файл .aidl в свою сборку. Подобно файлу заголовка на языке C, этот файл .aidl не компилируется. . " но я попытался жестко запрограммировать абсолютный путь, и он все еще не компилируется, те же ошибки
Вы когда-нибудь это решали? Я получаю ту же ошибку.
извините, обезьяна, я не помню, в чем было решение. Я полагаю, что решил это, но я больше не на этой работе, и я больше не могу смотреть на код, чтобы увидеть, что изменилось




Был наткнулся на это тоже, но смог найти обходной путь.
TL; DR просто убедитесь, что все ваши вспомогательные имена файлов начинаются с буквы «I».
Похоже, что основная система сборки будет выбирать только вспомогательные файлы, имена которых начинаются с буквы «I».
Например, в ситуации исходного автора были скомпилированы его IMetadataCallback.aidl и IMyManager.aidl, но не MyMetadata.aidl. Я обнаружил то же самое со своим проектом.
Я предполагаю, что система сборки была спроектирована таким образом, чтобы гарантировать, что все вспомогательные файлы были названы правильно, но впоследствии она не была обновлена для полной поддержки настраиваемых разделяемых типов, которые определены непосредственно в вспомогательных файлах, начиная с Android 10.
у тебя есть
MyMetaData.aidl? вы читали это?