支持变体的构建配置不适用于Android Instrumentation测试

时间:2018-08-06 09:27:16

标签: android android-studio gradle android-studio-3.0

我正在研究一个庞大的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_releaselib_y_release的类均未正确拾取,并且将输出以下错误:

  

错误:包com.xxx不存在

com.xxx来自lib_x_releaselib_y_release

所以,现在我的问题是,以前有人遇到过吗?

可识别变体的配置(即releaseImplementationdebugImplementation)也应适用于 Android Instrumentation Test ,对吗?

您如何解决此问题?

我已在此处将错误记录到Google: https://issuetracker.google.com/u/1/issues/112277358

1 个答案:

答案 0 :(得分:1)

尝试使用以下配置,而不是使用releaseImplementationdebugImplementation,即使您进行 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')
    }
    ...
}