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

问题描述:

我有2个项目模块:A,B和一个库模块。两个项目都使用库。我在两个项目中都有一些连接的测试(UI Automator)。该测试具有我想移动到图书馆的通用实用程序代码。我该怎么做?Android连接测试通用代码移动到库模块

我试过了。第一种方式:

  1. 复制通用代码库项目为src/androidTest/JAVA/XXX 文件夹
  2. 添加到库中的build.gradle UI的Automator依赖 下androidTestCompile
  3. 添加到项目的build.gradle以下:

dependecies { 
... 
androidTestCompile project(path: ':library', configuration: "debug") 
... 
} 

导致建设问题,我ñ项目,因为据我所知的src/androidTest文件夹中建立调试配置

方式二中不使用:

  1. 首先2个步骤是相同

  2. 添加到库中的build.gradle


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文件(加入src/androidTest内容?)。 这种情况下的任务类型是什么?或者在我的自定义任务中应该采取什么行动来获取aar文件?另一种方式?

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

开始=>

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

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

我肯定有一个更好的解决方案,因为共同的代码将在这两个项目中compilated。谁知道呢?