Android连接测试常用代码移动到库模块

时间:2017-07-19 06:50:30

标签: android gradle android-gradle

我有2个项目模块:A,B和库模块。这两个项目都使用了库。我在两个项目中都有一些连接测试(UI Automator)。那些测试有一些常用的实用程序代码,我想将它移到库中。我该怎么办?

我尝试过的。第一种方式:

  1. 将公共代码复制到库项目到src / androidTest / java / xxx 夹
  2. 添加到库build.gradle UI automator依赖项下 androidTestCompile
  3. 添加到以下项目build.gradle:
  4. dependecies {
    ...
    androidTestCompile project(path: ':library', configuration: "debug")
    ...
    }
    

    这导致项目中的构建问题,因为据我所知,在构建调试配置期间未使用src / androidTest文件夹

    第二种方式:

    1. 前两个步骤相同

    2. 添加到库build.gradle

    3. task connectedTestsJars(type: Jar, dependsOn: "assembleXXXAndroidTest") {
          classifier = 'connectedTests'
          includes = ['com/**']
          from "$buildDir/intermediates/classes/androidTest/XXX"
      }
      
      configurations {
          connectedTestArtifact
      }
      
      artifacts {
          connectedTestArtifact connectedTestsJars
      }
      
      1. 添加到项目build.gradle
      2. dependencies {
        ...
        androidTestCompile project(path: ':library', configuration: "connectedTestArtifact")
        ...
        }
        

        这样所有编译都很好。它在连接的测试运行时崩溃,因为库中缺少资源(它有很多来自两个项目的公共代码和资源) 据我所知,这是因为我只使用了库中的源代码,但我需要使用aar文件(aar添加src / androidTest内容?)。 在这种情况下,什么是任务类型?或者我应该在自定义任务中执行哪些操作来获取aar文件?其他方式?

        我知道我可以将连接测试公共代码移动到另一个(第二个)库模块并使用,但我想避免它来节省编译时间。 有没有办法保持当前的模块结构并将连接的测试公共代码移动到库模块?

1 个答案:

答案 0 :(得分:0)

我确实找到了解决方案。添加到项目的build.gradle:

android {
    sourceSets {
        androidTest {
            java.srcDirs = ['../<LIBRARY_MODULE_NAME>/src/androidTest/java', 'src/androidTest/java']
        }
    }
...
}

我确信有更好的解决方案,因为公共代码将在两个项目中进行编译。谁知道呢?

相关问题