为何Android Studio组装我们的dyanimc功能模块测试apk?

问题描述 投票:4回答:1

我们有一个核心的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模块上运行测试:enter image description here

现在的问题是,我们收到一堆奇怪的“ 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

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

android android-testing dynamic-feature
1个回答
0
投票
我还没有找到解决这个问题的答案,但是,如果您只想运行:core的测试,则可以从控制台运行gradle :app:connectedAndroidTest,它应该绕过DFM。
© www.soinside.com 2019 - 2024. All rights reserved.