我正在尝试使用aidls构建一个库。
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES := $(call all-java-files-under, java) \
java/com/testapp/Istudent.aidl \
java/com/testapp/Itest.aidl \
LOCAL_PREBUILT_JAVA_LIBRARY := framework.jar
include $(BUILD_JAVA_LIBRARY)
我试图在Itest中引用Istudent。
Istudent.aidl
package com.testapp;
parcelable Istudent;
Istudent.java
public class Istudent implements Parcelable{}
Itest.aidl
package com.testapp;
import com.testapp.Istudent;
interface IAP2InterfaceBase {}
但我收到的错误是E 07-11 20:05:37 71066 71066 aidl.cpp:580]拒绝从定义parcelable的aidl文件生成代码
请让我知道我们的意思"拒绝从aidl文件中生成代码来定义parcelable" ?我在这做错了什么..
答案 0 :(得分:2)
错误原因可以理解为agl的源代码:
https://github.com/debian-pkg-android-tools/android-platform-system-tools-aidl/blob/master/aidl.cpp行:536
if (!interface) {
LOG(ERROR) << "refusing to generate code from aidl file defining "
"parcelable";
return AidlError::FOUND_PARCELABLE;
}
声明你的parcelable类的aidl文件不应该包含在构建中,如https://developer.android.com/guide/components/aidl.html中提到的那样在&#39;传递IPC上的对象&#39;。下面从网站上复制的片段。
最后,创建一个声明你的parcelable类的.aidl文件(as 显示为Rect.aidl文件,如下所示。如果您使用的是自定义构建 进程,不要将.aidl文件添加到您的构建中。类似于标题 在C语言中,这个.aidl文件没有被编译。
答案 1 :(得分:-1)
在你的android.mk文件中替换
LOCAL_SRC_FILES := $(call all-java-files-under, java) \
java/com/testapp/Istudent.aidl \
java/com/testapp/Itest.aidl \
与-----------
LOCAL_SRC_FILES := $(call all-java-files-under, java) $(call all-Iaidl-files-under, java)
LOCAL_AIDL_INCLUDES := $(call all-Iaidl-files-under, java)
答案 2 :(得分:-1)
我遇到了同样的问题。 $(调用all-java-files-under,java)命令将查找名称以&#34; I&#34;开头的所有aidl文件。 (I * .aidl),但不应包括parcelable类。两种解决方案:
(1)更改parcelable类名,不要以&#34; I&#34;开始:
func1
(2)将Istudent.aidl从LOCAL_SRC_FILES移至LOCAL_AIDL_INCLUDES
cy_child
答案 3 :(得分:-1)
不知道您是否已解决此问题。我遇到了同样的问题,通过将Android SDK构建工具降级到早期版本来解决它,24以下的构建工具版本应该正常工作,我使用的是版本23.0.3