在多模块android项目中测试时,提供程序错误冲突

我有一个由多个gradle模块组成的应用程序:

App -- main app module with dependencies to all submodules
|
|-- API - library module
|    |-- Constants for authority etc.
|
|-- DB-Impl - library module
|    |-- ContentProvider for the data specified in API
|
|-- Extension - library module
|    |-- Dependency on API and test-dependency on DB-Impl

这在构建和部署主apk时工作正常.所有模块在清单中使用相同的sharedUserId,并且可以从DB-Impl访问提供程序.

但是,当我尝试为不同的模块运行检测测试时,它会变得复杂.

例如:我运行DB-Impl测试,该模块在设备上单独安装.当我想部署主应用程序或尝试运行它的测试时,apk安装失败,因为它还包含提供程序,抛出INSTALL_FAILED_CONFLICTING_PROVIDER错误.

扩展模块也是如此.它需要数据库,它通常包含在主app apk中.简单地运行测试时,它们会失败,因为不会安装提供程序.所以我在DB-Impl模块上添加了一个androidTestCompile依赖项.现在这个测试apk还包括提供者定义,导致更多的错误.

我尝试在测试任务上添加任务依赖项,因此它会运行uninstallAll,但是这只会卸载调用它的模块,所以我必须手动卸载提供程序可能附带的每个模块.

有一个共同的策略可以避免是问题吗?

最佳答案 我遇到了同样的问题,发现只有一种方法可以解决它.您需要在androidTest目录中创建Manifest.xml,并使用其他权限重新声明内容提供程序(例如追加“.test”后缀),还需要为“provider”xml元素添加其他属性:“tools:node =’replace’ “,使用此方法,您可以覆盖库模块测试apk的内容提供程序权限.

点赞