我目前有一系列组件,包括 java、aidl、assets、resources、jni,以及 manifests 和 proguard 文件来支持这些组件。
我想提供具有这些组件的许多不同组合的 AAR 文件。
我希望能够在组装时调试每个组件中的代码(我认为这意味着制作一个包含所有组件源文件的项目,因为 AAR 爆炸不会执行发布/调试变体。)
我想为 NDK 部分使用实验性 gradle 插件。
我的第一个 hack 看起来像:
model {
android {
// ... stuff
sources {
main {
def mySourceSet = ["../../sourceTree/client",
"../../sourceTree/instrumentation",
"../../sourceTree/engine"]
java {
source {
srcDirs = mySourceSet } } }
aidl {
source {
srcDirs = mySourceSet } } }
resources {
source {
srcDirs = mySourceSet } } }
assets {
source {
srcDirs = mySourceSet } } }
manifest {
source {
srcDirs = mySourceSet } } }
jniLibs {
source {
srcDirs = mySourceSet } } }
jni {
source {
srcDirs = mySourceSet } } }
}
}
}
}
java 类可以按照我的意愿进行组合。aidl 文件可以按照我的意愿进行组合。
其他一切都不在那里(清单没有合并,资源/资产选择了 java 类,并且仍然使用以前构建系统中的旧 .so。)
进入不同的规则,看起来 mySourceSet 需要重复才能为非 java/aidl 文件做正确的事情,以获得正确的格式来提取(或排除它们)。我一直在尝试(几乎没有成功)看看我可以用 += 表示法做什么,如果我可以将它们移动到 sourceTree 中的 gradle 设置/配置片段,包括它,并让它修改 srcDirs。
我想要这样的东西之一工作:
model { android { sources { main { aidl { source { srcDirs += "../../sourceTree/instrumentation" } } } } } }
model.android.sources.main.aidl.source << { srcDirs += "../../sourceTree/instrumentation" }
model.android << { sources { main { aidl { source { srcDirs += "../../sourceTree/instrumentation" } } } } }
但他们因各种“你不能那样做”错误而失败。
有没有办法在 android { model {}} 块之外设置 srcDirs ?
关于如何正确合并资产/资源/清单的任何提示,给出它应该查看的顶级目录列表?