android – 在Gradle中跨模块/子项目使用AIDL接口

前端之家收集整理的这篇文章主要介绍了android – 在Gradle中跨模块/子项目使用AIDL接口前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个项目,包括多个gradle模块(插件com. android.library)相互引用(树,而不是平面).我强烈地使用AIDL,因此我在另一个模块(modB)的AIDL接口中引用来自一个模块(modA)的AIDL接口.

MODA / src目录/主/ AIDL / MODA / foo.aidl:

package modA; 
interface foo {
    void modAcall();
}

商业方法/ src目录/主/ AIDL /商业方法/ bar.aidl:

package modB;
import modA.foo;
interface bar {
    foo modBcall();
}

商业方法/的build.gradle:

dependencies {
    compile project(':modA')
}

我可以在modB中的AIDL文件中引用modA的parcelables,我可以在modB中的java代码中引用modA的接口,但不能在modB中的AIDL中引用.而是由aidl工具显示错误消息无法找到类的导入.

我注意到.aar文件也不包含库的aidl接口的信息,只列出了parcelables.我想这与上述问题的原因相同.

由于我已经将aidl文件放在一个地方,我不想将它们复制到另一个子项目,因为在这种情况下必须手动复制更改.我也不喜欢使用符号链接的想法,因为修改modB的src目录以包含来自modA的东西是错误的.

>有没有办法在aar中包含aidl接口,以便其他模块可以使用它?
>是否可以在Gradle中扩展aidl include路径以使用依赖模块的aidl文件(对于子项目,它应该是可能的,因为aidl文件存在于文件系统上)而不再“再编译”它们(类文件)生成的java接口/类已包含在aar / module导入中)?

解决方法

我找到了解决方案. Android gradle构建工具中有一个明显没有记录的功能,可以将任意的aidl文件包含在输出.aar文件中.这使得可以在其他子项目中引用它们.
android {
    aidlPackageWhiteList "modA/foo.aidl"
}

这远非理想,但至少可用于解决我的问题.

猜你在找的Android相关文章