我想在我的Gradle构建(版本1.0)中添加集成测试.它们应该与我的正常测试分开运行,因为它们需要将webapp部署到localhost(它们测试该webapp).测试应该能够使用我的主要源集中定义的类.我该如何实现这一目标?
我有一个旧的eclipse项目我已经进入android studio并设置使用flavour.它似乎工作正常,直到我开始尝试在我的口味之间使用不同的java文件.
我的项目设置如下:
ProjectRoot
+- acitonbarsherlock
+- facebook
+- myLib1
+- myProject
+- src
+- commonFiles
+- flavor1
+- flavor2
+- res
+- flavor1
+- flavor2
Run Code Online (Sandbox Code Playgroud)
myProject gradle文件android闭包的内部看起来像这样:
android {
compileSdkVersion 17
buildToolsVersion "18.0.1"
signingConfigs {
...
}
productFlavors {
flavor2 {
}
flavor1 {
}
}
sourceSets{
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src/commonFiles/java']
resources.srcDirs = ['src/commonFiles/java']
aidl.srcDirs = ['src/commonFiles/java']
renderscript.srcDirs = ['src/commonFiles/java']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
flavor2 {
manifest.srcFile 'AndroidManifest-flavor2.xml'
res.srcDirs = ['res-flavor2', 'res']
java.srcDirs …Run Code Online (Sandbox Code Playgroud) 我刚刚从 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=分享
android intellij-idea shared-resource android-studio source-sets
我正在将我的应用程序转换为使用gradle,我正在尝试使用buildTypes.我有一个Constants类,我希望为我的发布版本修改.所以我有一个文件在src/main/java/my/package/name/Constants.java和src/release/java/my/package/name/Constants.java.
当我尝试构建它时,gradle告诉我Constants在我的发布版本类型中文件的构建失败,错误是它是一个重复的类.
我也尝试在我build.gradle这样添加一个不同的sourceSet :
sourceSets {
main {
java.srcDirs = ['src/main/java'];
//...
}
release {
java.srcDirs = ['src/release/java'];
}
}
Run Code Online (Sandbox Code Playgroud)
但这仍然给我同样的错误.所以我想知道,我在这里做错了什么?
升级到 Android Studio Chipmunk 后,我的测试失败了,因为我无法访问在 build.gradle 中定义的共享文件夹内的文件,如下所示。
sourceSets {
androidTest.java.srcDirs += "src/sharedTest/java"
test.java.srcDirs += "src/sharedTest/java" }
Run Code Online (Sandbox Code Playgroud)
它显示弹出警告,并显示消息“检测到重复的内容根”。模块 [unitTest] 的路径 [sharedTest] 已从模块 [androidTest] 中删除。任何人都可以解决这个问题吗?
我在Gradle项目中创建了自定义源集,以保留所有生成的代码:
sourceSets {
generated {
java {
srcDir 'src/generated/java'
}
resources {
srcDir 'src/generated/resources'
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想要在编译可用此源集合的代码编译的结果,运行时间main和test源集.
在Gradle中以正确的语义方式做什么?
更新:
如此处所示:如何向Gradle添加新的源集?对我来说不起作用,我java.lang.ClassNotFoundException在启动应用程序时仍然会得到(虽然编译和单元测试运行正常).这是我尝试过的:
sourceSets {
main {
compileClasspath += sourceSets.generated.output
runtimeClasspath += sourceSets.generated.output
}
test {
compileClasspath += sourceSets.generated.output
runtimeClasspath += sourceSets.generated.output
}
}
Run Code Online (Sandbox Code Playgroud) 是否可以在不同的源集中使用Kotlin包函数和包属性?当我试图这样做时,我已经NoSuchMethodError抛出了.
例
我有一个带有Kotlin代码的Gradle项目和两个源集,main以及test.在main,我在其中一个文件中有以下代码:
package ru.ifmo.ctddev.igushkin.dkvs
...
public val payloadSplitter: String = " ### "
Run Code Online (Sandbox Code Playgroud)
在test我尝试使用payloadSplitter以下代码访问:
package ru.ifmo.ctddev.igushkin.dkvs
...
public class MessageTests {
...
test fun testParsing() {
...
checkParseAndToString("p1b 345 ${payloadSplitter} set a b c")
}
...
}
Run Code Online (Sandbox Code Playgroud)
正好在payloadSplitter访问的第一行,在运行时我得到
java.lang.NoSuchMethodError: ru.ifmo.ctddev.igushkin.dkvs.DkvsPackage.getPayloadSplitter()Ljava/lang/String;
Run Code Online (Sandbox Code Playgroud)
其他全局变量和函数也无法test使用相同的错误.
UPD科特林队解释这个问题,并公布了修复这里.
假设我有一个build.gradle:
dependencies {
compile 'com.group:some-app:1.0.1'
compile 'com.group:some-app:1.0.1:sources'
}
sourceSets {
main {
other {
srcDir 'src/main/other'
}
}
}
Run Code Online (Sandbox Code Playgroud)
其中some-app-1.0.1-sources.jar包含源文件 - 不是Java文件,而是可以生成Java的文件.
如何将这些文件包含在内sourceSets?
Gradle:如何获取默认资源输出目录?
println sourceSets.main.resources.outputDir
Run Code Online (Sandbox Code Playgroud)
错误:
Needs to set a non-null value before it can be retrieved
Run Code Online (Sandbox Code Playgroud) 我的 /assets/files 文件夹中有 8000 多个名为(1.txt、2.txt、3.txt 等)的文件。但是,我的调试版本不需要所有这些。我只需要其中的前 30 个。事实上,如果我将所有这些文件留在资产文件夹中,构建时间会很长。
我了解到有一个源集概念,但它仅适用于 Android Studio 上的 Java 和 Kotlin。
如何从 Flutter 的调试版本中排除那些超出的文件?