Android:AIDL拒绝从定义parcelable的aidl文件生成代码

时间:2017-07-11 20:12:18

标签: android aidl

我正在尝试使用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" ?我在这做错了什么..

4 个答案:

答案 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