【发布时间】:2019-01-26 18:16:34
【问题描述】:
我的问题与以下问题中描述的差不多:Build variants in Gradle for a Library Project in Android
也就是说,我正在制作一个具有调试和发布构建类型的库模块,并且每种构建类型都有自己的资源(例如在strings.xml 中)。但是,即使在构建调试变体时,也会始终选择发布资源。
我读到的几乎所有内容都表明这已在 Android Studio 3.0 中修复,但我在 3.3 上仍然遇到问题。我看到的一个建议是使用releaseCompile 和debugCompile。这些已被弃用,所以我使用了替代品:
debugImplementation project(path: ':myLibrary', configuration: 'debug')
releaseImplementation project(path: ':myLibrary', configuration: 'release')
这会产生这些错误:
ERROR: Unable to resolve dependency for ':app@myAppDebug/compileClasspath': Could not resolve project :myLibrary.
Affected Modules: app
ERROR: Unable to resolve dependency for ':app@myAppDebugAndroidTest/compileClasspath': Could not resolve project :myLibrary.
Affected Modules: app
ERROR: Unable to resolve dependency for ':app@myAppDebugUnitTest/compileClasspath': Could not resolve project :myLibrary.
Affected Modules: app
我已经检查了四次拼写,它与库的名称相匹配。 我之前这样做会导致上述不正确的行为:
implementation project(':myLibrary')
来自库构建文件:
android {
publishNonDefault true
...
buildTypes {
debug {}
release {
minifyEnabled false
zipAlignEnabled true
signingConfig signingConfigs.releaseConfig
//proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
...
我还有一个“qa”构建类型,我在讨论中省略了,但我没有理由相信这是相关的,因为我目前没有尝试构建该类型。有什么建议,或者我应该在问题中添加什么?
【问题讨论】:
-
发生这种情况是因为 strings.xml 是您项目中的全局资源。为了解决您的问题,我需要了解您在库中获取 strings.xml 的原因和内容。也许您正试图以一种不好的方式获得/思考。
-
我有各种
strings.xml文件,例如一个在库的main源集中,另一个在它的debug源集中。在应用程序模块中,如果在构建调试变体时在两个地方都定义了相同的资源,则将使用调试值。在我的库模块中,使用主源集中的值,而不是被调试源集中的值覆盖。这能回答你的问题吗? -
目前无法做到这一点,抱歉
-
@FredGrott 嗯,这很愚蠢!谢谢。
标签: android android-resources android-library