2017-07-19 56 views
1

我有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 
} 
  • 添加到項目的build.gradle

  • dependencies { 
    ... 
    androidTestCompile project(path: ':library', configuration: "connectedTestArtifact") 
    ... 
    } 
    

    這樣,所有的編譯罰款。它在連接的測試運行時期間崩潰,因爲缺少來自庫的資源(它有很多來自兩個項目的通用代碼和資源) 據我所知,這是因爲我只使用庫中的源,但我需要使用aar文件(加入src/androidTest內容?)。 這種情況下的任務類型是什麼?或者在我的自定義任務中應該採取什麼行動來獲取aar文件?另一種方式?

    我知道我可以將連接的測試通用代碼移動到另一個(第二個)庫模塊並使用,但我想避免它節省編譯時間。 有什麼辦法保持當前模塊結構並將連接的測試通用代碼移動到庫模塊?

    回答

    0

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

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

    我肯定有一個更好的解決方案,因爲共同的代碼將在這兩個項目中compilated。誰知道呢?