我有一个使用AIDL接口的项目,并且在带有gradle的android studio中一切正常。但是,我只是为了方便IDE使用android studio来开发我的android应用程序,实际上我必须使用Android make文件来与其余AOSP树一起构建我的应用程序。
当我开始这个项目时,我只有一个小的辅助文件作为概念证明,并且在AS和android make中都构建良好。但是,当我开始添加更多的辅助文件时,它却因错误而中断:
[ 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文件,该文件在java源目录中实现了Parcelable。)
这是我的android make文件
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)
我尝试过的事情:
答案 0 :(得分:0)
也偶然发现了这一点,但设法找到了解决方法。
TL;DR 只需确保所有的 aidl 文件名都以字母“I”开头。
看起来核心构建系统只会选择名称以字母“I”开头的 aidl 文件。
比如在原作者的情况下,编译了他的IMetadataCallback.aidl和IMyManager.aidl,而没有编译他的MyMetadata.aidl。我发现我的项目也是如此。
我猜测构建系统的设计是为了确保所有的 aidl 文件都被正确命名,但之后没有更新以完全支持从 Android 10 开始在 aidl 文件中直接定义的自定义 Parcelable 类型。