我有一个由多个相互引用(树形,而非平面)的gradle模块(plugin com.android.library)组成的项目。我大量使用AIDL,因此我会在一个模块(modA)的AIDL接口中引用另一个模块(modB)的AIDL接口。
模式A/源代码/主文件/辅助文件/模式A/文件名。辅助文件:
package modA;
interface foo {
void modAcall();
}
模块B/源代码/主文件/辅助文件/模块B/条形辅助文件:
package modB;
import modA.foo;
interface bar {
foo modBcall();
}
modB/构建版本:
dependencies {
compile project(':modA')
}
我可以在modB的AIDL文件中引用modA的parcelables,也可以在modB的java代码中引用modA的接口,但不能在modB的AIDL中引用。相反,aidl工具显示错误消息couldn't find import for class
。
我注意到. aar文件也不包含库的aidl接口的信息,只列出了可打包的接口,我想这和上面描述的问题有着相同的原因。
因为我已经把aidl文件放在一个地方了,所以我不想把它们复制到另一个子项目中,因为在这种情况下,修改必须手动复制。我也不喜欢使用符号链接的想法,因为修改modB的src目录以包含modA中的内容感觉不对。
- 有没有办法在AAR中包含AIDL接口,这样它就可以被其他模块使用了?
- 是否可以在Gradle中扩展aidl include路径以使用依赖模块的aidl文件(对于子项目,应该可以,因为aidl文件存在于文件系统中),而无需再次“编译”它们(生成的java接口/类的类文件已包含在aar/模块导入中)?
3条答案
按热度按时间to94eoyn1#
我找到了一个解决方案。Android gradle构建工具中有一个明显未公开的功能,可以将任意aidl文件包含到输出的.aar文件中。这使得在其他子项目中引用它们成为可能。
这远非理想,但至少可以用来解决我的问题。
编辑:澄清这将是在modA(库),而不是modB(根据问题,这是一个库,但不是在所有可能的情况下)。
ruoxqz4g2#
我尝试了“aidlPackageWhitelist”,它显示“aidlPackageWhitelist不受支持”,所以我尝试了下面的另一种方法,它对我很有效。
b4lqfgs43#
我的答案与@Marvin W相同,但路径参数不同
//在modA内部版本.gradle中