我正在研究一个庞大的Android库项目,该项目将产生不同的构建变体,例如调试和发布版本的库。该库本身也需要一些依赖关系,我需要将其依赖关系分别配置为 debug和release 。我使用了Android Gradle Plugin 3.0+的 avariant 依赖性管理,这对于库构建非常有效。以下是我配置项目的方式:
dependencies {
...
releaseImplementation files('libs/release/lib_x_release.jar')
releaseImplementation files('libs/release/lib_y_release.jar')
debugImplementation files('libs/debug/lib_x_debug.jar')
debugImplementation files('libs/debug/lib_y_debug.jar')
...
}
具体地说,当我运行命令
./gradlew assembleDebug
可识别变体的依赖项管理将正确帮助我获取所有 debug版本的依赖项。
当我运行命令
./gradlew assembleRelease
可识别变体的依赖项管理将正确帮助我获取所有发行版依赖项。
我有一个gradle“ 属性”可以动态设置我的testBuildType
,以便可以运行Android Instrumentation Test的发行版。参见下文:
android {
...
if (project.hasProperty('testInstrumentedRelease')) {
testBuildType 'release'
} else {
testBuildType 'debug'
}
...
}
但是,当我在命令
下运行时,这不适用于我的发行版的Android Instrumentation Test。./gradlew connectedCheck -PtestInstrumentedRelease
lib_x_release
和lib_y_release
的类均未正确拾取,并且将输出以下错误:
错误:包com.xxx不存在
包com.xxx
来自lib_x_release
和lib_y_release
。
所以,现在我的问题是,以前有人遇到过吗?
可识别变体的配置(即releaseImplementation
和debugImplementation
)也应适用于 Android Instrumentation Test ,对吗?
您如何解决此问题?
我已在此处将错误记录到Google: https://issuetracker.google.com/u/1/issues/112277358
答案 0 :(得分:1)
尝试使用以下配置,而不是使用releaseImplementation
和debugImplementation
,即使您进行 Android Instrumentation Test ,它也将始终获取正确的依赖项。
dependencies {
...
if (project.hasProperty('testInstrumentedRelease')) {
implementation files('libs/release/lib_x_release.jar')
implementation files('libs/release/lib_y_release.jar')
} else {
implementation files('libs/debug/lib_x_debug.jar')
implementation files('libs/debug/lib_y_debug.jar')
}
...
}