如何从AIDL文件中的不同项目导入另一个包的类?

时间:2015-04-15 07:42:05

标签: android aidl

我有一个在ProjectA下的包中实现的AIDL文件,我试图从ProjectB下的另一个包导入Parcelable类(Foo)。以下是我实现MyService.AIDL文件的方式:

package com.packageA.projectA
import com.packageB.projectB.Foo

interface MyService{

void getSomething(Foo foo); 
}

但是,我收到此编译错误"无法找到类com.example.projectB.Foo"的导入。如果我将packageB复制到packageA,那么我将不会收到编译错误。

有没有办法从不同项目下的包中导入parcelable类?我知道有关stackoverflow和其他地方(比如google group)的多个问题关于在同一个项目下导入parcelable,但是没有来自不同项目的问题。谢谢你的时间。

2 个答案:

答案 0 :(得分:0)

您的意思是说您为parcelable类定义了类,并且您无法在aidl中使用该类? 尝试以下解决方案。 你的src / xxx路径中有MyService.AIDL。 现在在同一路径中创建Foo.aidl(名称应该相同)并定义如下的Foo.aidl。

package com.packageB.projectB
parcelable Foo

现在从MyService.AIDL中删除import语句并重新输入(用于刷新,否则会显示相同的错误) 现在必须消除导入错误。

答案 1 :(得分:0)

我知道这很旧,但是我遇到了同样的问题,发现解决方案非常难看。

我在包中定义了两个类:

com.lni.codephg.inter

我在包中定义了另一个类

com.pcha.androidbtmanager

实际的AIDL接口在程序包中定义

com.pcha.proprietary.handler

客户端将在com.pcha.proprietary.handler包中寻找实现服务的远程服务。

那么,要完成这项工作,我的AIDL文件层次结构看起来是什么样的?

src\main\aidl\com\lni\codephg\inter
    MetricIntermediary.aidl
    MdsIntermediary.aidl
src\main\aidl\com\pcha\androidbtmanager
    PhdInformation.aidl
src\main\aidl\com\pcha\proprietary\handler
    IConnectionCallback.aidl
    IIntermediaryCallback.aidl
    IProprietaryDeviceHandler.aidl
    IStatusEventCallback.aidl

定义诸如MdsIntermediary.aidl之类的自定义类的“单线”文件如下所示:

// MdsIntermediary.aidl
package com.lni.codephg.inter;

   parcelable MetricIntermediary;

我必须承认我确实理解为什么这些单线文件必须以这种怪异的形式存在。

然后引用它们的接口AIDL文件(例如IIntermediaryCallback.aidl)如下所示

// IIntermediaryCallback.aidl
package com.pcha.proprietary.handler;

// Declare any non-default types here with import statements
import com.lni.codephg.inter.MdsIntermediary;
import com.lni.codephg.inter.MetricIntermediary;

interface IIntermediaryCallback
{
    void onMdsIntermediary(in MdsIntermediary mds);
    void onReceiveMetricIntermediaries (in List<MetricIntermediary> metricList, in 
          MdsIntermediary mds);
}

当然,我必须在上述自定义类上实现Parcelable方法。但是,尽管如此丑陋,Android Studio似乎为我做到了。因为我对Parcelable一无所知,所以我不知道它是否足够好或者是否需要进行按摩。

这很难受。希望这可以节省一些人的挫败感。