Sea*_*ici 41 android intellij-idea shared-resource android-studio source-sets
我刚刚从 Bumblebee 升级到 Chipmunk,并且在我的检测 androidTests 中遇到了多个依赖项解析问题。
这些是我的源集的样子:
sourceSets {
test.java.srcDirs += 'src/testShared/kotlin'
test.resources.srcDirs += 'src/testShared/resources'
androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
androidTest.java.srcDirs += 'src/testShared/kotlin'
androidTest.resources.srcDirs += 'src/testShared/resources'
}
Run Code Online (Sandbox Code Playgroud)
这个想法是在单元测试和仪器测试之间共享测试数据。请记住,测试可以构建并执行,但依赖项在 IDE 中显示为红色。另外,它可能不相关,但我引用的字符串资源(位于资源模块中)在 IDE 中也是红色的。
另外,当我注释掉指向 testShared 的单元测试源集时,IDE 错误会在我的 AndroidTests 中消失
这在以前版本的 Android Studio 中不是问题。我认为该问题与基本 IntelliJ IDE 平台有关。有谁知道如何解决这个问题,或者有任何解决方法?
编辑:这是一个基本示例项目,在 Chipmunk 及以上版本中运行时演示了该问题。在bumblebee中,androidTest中没有未解决的引用错误。另外,您可能需要调整 AGP 版本,因为我使用 Dolphin beta01 构建了这个项目,但 Chipmunk 中的问题是相同的 https://drive.google.com/file/d/1ZCcEwuqM-m4E5qe94vCn52yWMON8rd5P/view?usp=分享
Sea*_*ici 18
新版本的 Android Studio IDE 和 IntelliJ 平台似乎不再支持此功能。
编辑:以这种方式共享代码不再有效。但是,还有另一种方法可以使其发挥作用:
基本上,创建一个 android 库(sharedTestCode),通过 testImplementation 和 androidTestImplementation 在您的应用程序中依赖它。在sharedTestCode build.gradle 文件中,取决于应用程序。您现在应该能够创建共享测试数据并在两种类型的测试中引用它们。
这是一个使用此设置的示例项目:
https://drive.google.com/file/d/1I2CZhTxHGRgCN9UCEjIuWUfFnGxTF_Cv/view?usp=sharing
第二次编辑:确保依赖于 :app 项目的任何模块也定义了productFlavors和flavorDimensions,与应用程序的build.gradle文件的build.gradle配置相匹配。
例如,我必须将此代码添加到我的sharedTestModule的build.gradle文件中:
flavorDimensions "environment"
productFlavors {
local {
dimension "environment"
}
gae {
dimension "environment"
}
}
Run Code Online (Sandbox Code Playgroud)
之前的回复:
我创建了一个支持线程: https://issuetracker.google.com/issues/232420188
以下是 Google 关于这种引用测试数据的旧方法的答案:
IDE 不再支持以这种方式共享代码。之前之所以有效,是因为在 pre-chipmunk 中,我们运行 Android studio 导入,并设置了 intellij 选项,为每个 Gradle 项目创建一个模块。这个选项已经从 IDEA 中删除很多年了。以这种方式导入会带来很多问题,因为 intellij 模块只能设置两个范围的依赖项和其他信息,即编译和测试。默认情况下,Android 模块实际上具有三个不同的作用域(大致对应于每个变体的 Gradle 源集):main、unitTest 和 androidTest。使用此选项将这些映射到 intellij 模块需要我们合并 unitTest 和 androidTest 的依赖项。此外,任何自定义源集也需要合并。这导致编辑器中出现许多错误的符号解析以及许多其他问题。
在chipmunk 中,我们转而为每个(大致)Gradle 源集创建一个模块。这使我们能够正确映射信息,但不幸的是,这确实会导致 IDE 不支持源集之间的信息共享。
总而言之,为了正确,每个源文件必须仅出现在一个模块中,否则 IDE 无法知道要使用哪个上下文。这有时也会导致构建方面的微妙问题。要在测试模块之间共享源代码,您应该能够将代码放入单独的项目中,并将其作为 testImplementation 和 androidTestImplementation 的依赖项使用。
要解决此问题,请将共享的测试依赖项移至单独的模块中。就是这样:
shared-test
将您的共享代码移至:shared-test
模块内。
现在,在应用程序的文件中添加对单元模块和检测测试构建配置的build.gradle
依赖项::shared-test
testImplementation(project(":shared-test"))
androidTestImplementation(project(":shared-test"))
Run Code Online (Sandbox Code Playgroud)
如果您的共享测试代码依赖于应用程序中的代码(例如,您有引用应用程序接口的 Hilt 模块),请在build.gradle
应用程序模块上的共享测试模块文件中添加依赖项:
compileOnly(project(":app"))
Run Code Online (Sandbox Code Playgroud)
在这里使用compileOnly
and很重要,否则你可能会得到s,因为类是在多个 DEX 文件中定义的。 implementation
com.android.builder.dexing.DexArchiveMergerException
GitHub 上的示例: https: //github.com/android/architecture-samples
归档时间: |
|
查看次数: |
5049 次 |
最近记录: |