我有一个由不同模块组成的Android项目(已经移植到Android Studio并使用Gradle)。有条件依赖Gradle,有可能吗?
该项目实际上用于创建两个不同的应用程序,代码几乎相同,除了一些资源。
因此资源被分成两个不同的模块。
该项目的原创作者曾在Eclipse中工作,并根据他想构建的应用程序切换依赖关系中包含的资源模块。而且他还用手动更改了AndroidManifest.xml中的包名称
我想将所有这些自动化,仍然有一个代码库,但是每个目标都有两个具有特定模块的构建目标。这对Gradle有用吗?
更新:
为了使事情变得更加困难,我的项目有一个层次是非常如下:
--+--MainProject
+--LibData
+--LibBase
+--LibResA
+--LibResB
其中:
- MainProject取决于LibBase和LibData。
- LibData取决于LibBase
- LibBase要么依赖LibResA或LibResB基于我需要建立的最终APK。
至于建议,我试着用口味实施这一通过增加在MainProject的build.gradle如下:
productFlavors {
producta {
}
productb {
}
}
然后在LibBase我已经添加了以下到它的build.gradle :
dependencies {
productaCompile project(':LibResA')
productbCompile project(':LibResB')
}
但是,当我构建项目时,LibData找不到从LibBase继承的类和资源。所以现在我坚持这个错误。对我来说,它看起来像LibBase没有被复制到LibData的中间体。这样LibData无法解析LibBase中的类,但这只是我的假设。
更新2:
我一直在调查这个问题,现在我已经改变了我的build.gradle文件看起来像这样:
主项目的build.gradle:
defaultPublishConfig "productaRelease"
publishNonDefault true
productFlavors {
producta {
applicationId "com.producta"
}
productb {
applicationId "com.productb"
}
}
dependencies {
compile project(':LibData')
}
LibData build.gradle(没有产品口味,只是依赖关系):
dependencies {
compile project(':LibBase')
}
LibBase build。gradle这个:
defaultPublishConfig "productaRelease"
publishNonDefault true
productFlavors {
producta {
}
productb {
}
}
dependencies {
productaCompile project(path: ':LibResA')
productbCompile project(path: ':LibResB')
}
这样做通常gradle clean build
,但我可以看到,包括资源总是那些LibResA就像defaultPublishConfig是在任何时候都使用的只有一个,当我得到任何错误。
如果我在Android Studio(0.8.1 atm)中打开此项目,结果是如果我尝试切换LibBase模块的构建变体并将其设置为productbRelease,则显示以下错误:Error:Module 'LibBase'选择了变体'productbRelease',但模块'LibData'取决于变体'productaRelease'。
我正在用尽想法。
您是否知道产品风味是否只能在主项目的build.gradle中指定,或者是否可以在库模块中使用? –
我发现风味只适用于根项目。 AFAIK,没有办法指定你的根项目所依赖的库的风格。这将是一个很好的功能。 –
@JeffBrateman我已经完成了Radim的建议,我已经用我所做的更新了原始问题。显然,即使我在根项目中指定了风味,但依赖于实际包含基于风味的不同资源的模块的模块仍存在问题。任何想法,如果有这个解决方法? –