7

我们有一个核心 android 应用程序模块(称为app)和一个动态功能模块(称为replay)。即使这是一个 DFM,我们也会在安装时包含它。在我们 DFM 的 AndroidManifest.xml 中:

<dist:module
    dist:instant="false"
    dist:title="@string/title_replay">
    <dist:delivery>
        <dist:install-time />
    </dist:delivery>
    <dist:fusing dist:include="true" />
</dist:module>

我们可以使用 CL 中包含的 DFM 构建我们的 apk:$ ./gradlew app:assembleDebug

现在在测试时间......我们的功能模块中没有任何仪器测试replay,只有我们的app模块。所以我们可以从命令行运行仪器测试就好了:$ ./gradlew app:connectedDebugAndroidTest

然而,我们最近开始尝试在 Android Studio 中运行仪器测试。我们再次只想在app模块上运行测试:

在此处输入图像描述

现在的问题是我们收到了一堆奇怪的“Android资源链接失败”错误:

What went wrong:
Execution failed for task ':replay:processDebugAndroidTestResources'.
/Users/user/.gradle/caches/transforms-2/files-2.1/48609a786af4d1714850acbdd03ace31/jetified-beacon-ui-1.0.3/

AndroidManifest.xml:15:9-19:54: AAPT: error: resource string/hs_beacon_empty (aka com.example.feature.replay.test:string/hs_beacon_empty) not found.

我们正在为我们的几个第三方依赖项(facebook、leakcanary、beacon 等)获取这些。它们似乎都是向现有 xml 文件(strings.xml、AndroidManifest.xml)添加值的库

它看起来像是replay构建过程的一部分,AAPT 试图在我们的replay模块中查找实际上在其他库中的资源。但是,为什么 AAPT 会查看我们的replay功能模块:com.example.android.feature.replay.test:string/hs_beacon_empty

我没有完全了解 AAPT 如何为动态模块合并资源,我更不了解它是如何为仪器测试 apk 做到这一点的。

我不明白为什么这可以通过 CL 工作,所以我查看了 Android Studio 构建日志的顶部,当我运行仪器测试时我看到了

Executing tasks: [:replay:assembleDebug, :replay:assembleDebugAndroidTest, :app:assembleDebug, :app:assembleDebugAndroidTest]

所以现在更基本的问题是,为什么 Android Studio 在为应用模块运行测试时会尝试组装重放和重放测试代码?


FWIW 我正在运行 Android Studio 和 AGP 3.5 Beta 5

4

3 回答 3

7

我通过在我的动态功能模块中为 androidTest 添加应用程序依赖项来修复它

implementation project(':app')
androidTestImplementation project(':app')
于 2019-12-18T11:56:43.520 回答
2

我还没有找到这个问题的答案,但是,如果你只是想为你的 运行测试,:core你可以从控制台运行gradle :app:connectedAndroidTest,它应该绕过 DFM。

于 2019-11-15T17:24:31.993 回答
1

由于 Android Studio 也在处理动态模块的测试资源,您应该在动态模块中再次实现(作为测试库)相应的库,如下所示:

例如,如果 Android Studio 找不到 beacon-ui 库的资源。添加androidTestImplementation "com.helpscout:beacon-ui:$beaconVersion"到您的build.gradle(dynmic_module)

这可能是此问题的临时解决方法,直到此问题在下一个版本中得到修复。

于 2019-12-02T07:46:55.980 回答