我们有一个核心的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为何尝试汇编重播和重播测试代码?
[我们有一个核心的android应用程序模块(称为app)和一个动态功能模块(称为replay)。即使这是DFM,我们也会在安装时将其包括在内。在我们DFM的AndroidManifest.xml中:&...
:core
的测试,则可以从控制台运行gradle :app:connectedAndroidTest
,它应该绕过DFM。