我有一个由多个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
,但这只会卸载调用它的模块,因此我必须手动卸载提供程序可能附带的每个模块
有一个共同的策略可以避免问题吗?
答案 0 :(得分:1)
我遇到了同样的问题,发现只有一种方法可以解决它。您需要在androidTest目录中创建Manifest.xml,并使用其他权限重新声明内容提供程序(例如追加" .test"后缀),还需要为" provider"添加其他属性。 xml元素:"工具:node ='替换'",使用此方法,您可以覆盖库模块测试apk的内容提供程序权限。