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

问题描述 投票:4回答:2

我有一个在项目A下的包中实现的AIDL文件,我正试图从项目B下的另一个包中导入一个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,则不会出现编译错误。

是否可以从不同项目下的包中导入可打包类?我知道关于stackoverflow和其他地方(例如google group)的多个问题,涉及在同一项目下导入parcelable,但没有来自不同项目的问题。谢谢您的时间。

android aidl
2个回答
0
投票

您的意思是说您为可包裹类定义了该类,但您无法在辅助工具中使用该类?请尝试以下解决方案。您的src / xxx路径中有MyService.AIDL。现在,在同一路径中创建Foo.aidl(名称应该相同),然后按以下方式定义该Foo.aidl。

package com.packageB.projectB
parcelable Foo

现在从MyService.AIDL中删除导入语句,然后重新输入它(以刷新它,否则将显示相同的错误)现在必须消除导入错误。


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一无所知,所以我不知道它是否足够好或者是否需要进行消息传递。

这非常痛苦。希望这可以节省一些人的挫败感。

© www.soinside.com 2019 - 2024. All rights reserved.