我有一个项目,由多个gradle模块(插件com.android.library)相互引用(树,而不是平面)。我强烈使用AIDL,因此我从另一个模块(modB)的AIDL接口中的一个模块(modA)引用AIDL接口。
MODA / SRC /主/ AIDL / MODA / foo.aidl:
package modA;
interface foo {
void modAcall();
}
MODB / SRC /主/ AIDL / MODB / bar.aidl:
package modB;
import modA.foo;
interface bar {
foo modBcall();
}
MODB /的build.gradle:
dependencies {
compile project(':modA')
}
我可以在modB中的AIDL文件中引用modA的parcelables,我可以在modB中的java代码中引用modA的接口,但不能在modB中的AIDL中引用modA的接口。而是由aidl工具显示错误消息couldn't find import for class
。
我注意到.aar文件也不包含库的aidl接口的信息,只列出了parcelables。我想这与上述问题的原因相同。
由于我已经将aidl文件放在一个地方,我不想将它们复制到另一个子项目,因为在这种情况下必须手动复制更改。我也不喜欢使用符号链接的想法,因为修改modB的src目录以包含来自modA的东西是错误的。
答案 0 :(得分:6)
我找到了解决方案。 Android gradle构建工具中有一个明显没有记录的功能,可以将任意的aidl文件包含在输出.aar文件中。这使得可以在其他子项目中引用它们。
android {
aidlPackageWhiteList "modA/foo.aidl"
}
这远非理想,但至少可用于解决我的问题。
答案 1 :(得分:0)
我尝试使用“ aidlPackageWhiteList”,它显示“不支持aidlPackageWhiteList”,所以我在下面尝试了另一种方法,对我有用。
// in modB build.gradle
android {
sourceSets {
main {
aidl.srcDirs += '../src/main/aidl' // locate your modA aidl directory
}
}
}