如何在 Android Studio 中将我的 Android 测试库与我的应用程序库分开?

How do I keep my Android testing libraries separate from my application libraries in Android Studio?

我在 build.gradle 文件中设置了我的模块依赖项:

dependencies
{
   compile fileTree(dir: 'libs', include: ['*.jar'])
   compile 'com.android.support:support-v4:22.2.0'
   androidTestCompile fileTree(dir: 'libs/test', include: ['*.jar'])
}

在我的 libs 文件夹中,我拥有构建我的应用程序所需的所有库。我将 运行ning 测试所需的库放在名为 "test"

的子文件夹中

这似乎在我的代码编译时起作用,我可以制作我的模块。但是,当我尝试 运行 我的任何测试时,它找不到我试图包含的测试库。 Gradle 控制台中的错误实际上指向我没有显示任何错误的代码片段。

此外,我的测试设置正确,因为我可以通过将所需的 jars 移动到 libs 文件夹并将我的依赖项更改为

来让它们进入 运行
dependencies
{
   compile fileTree(dir: 'libs', include: ['*.jar'])
   compile 'com.android.support:support-v4:22.2.0'
}

但是如果 androidTestCompile 不工作,我真的看不出它有什么意义。如果不需要,我也宁愿不将这些 jar 文件包含在我的 apk 中。

如果有帮助,我正在使用 Android 工作室版本 1.2.2 和 Gradle 插件版本 1.2.3。

在此先感谢您的帮助。

您应该使用 sourceSets 让您的 apk 不受测试库的影响 Gradle User Guide 使用 'main' 一个用于生产代码,使用 'androidTest' 一个用于测试,gradle 然后自动添加指定的源。

   sourceSets {
        main {
            ...
        }
        androidTest {
            ...
        }
    }

见下例。

创建 tests 文件夹src 文件夹平行。 将所有测试用例创建到该文件夹​​中。 如果您在另一个路径中创建文件夹,则需要为此调用。(已添加到代码中。)

 dependencies {
    androidTestCompile files('libs/dexmaker-1.1.jar')
    androidTestCompile files('libs/org.mockito:mockito-core:3.9.5')
    androidTestompile files('espresso-1.0-SNAPSHOT-bundled.jar')
    }

defaultConfig {

    testApplicationId "xxx.xx.abc"
    testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"

}

sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']

    }

    // Move the tests to tests/java, tests/res, etc...
    instrumentTest.setRoot('tests')

    instrumentTest {

        java.srcDirs = ['tests/src']

    }

    androidTest.setRoot('tests')
    androidTest.java.srcDirs = ['tests/src']