instrumentTest源集可以拥有自己的资产吗?

时间:2014-02-23 15:23:56

标签: android gradle android-testing

我需要使用instrumentTest构建来拥有它自己的资产。

来源集结构

├── build.gradle
├── libs
└── src
    ├── instrumentTest
    │   ├── assets
    │   └── java
    └── main
        ├── AndroidManifest.xml
        ├── assets
        ├── java
        └── res

我尝试过什么

apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 19
    buildToolsVersion '19.0.2'

    // There were no soureSets in my project in the first place
    // I have added sourceSets for instrumentTest, but that made no difference
    sourceSets {
        instrumentTest {
            java.srcDir 'src/instrumentTest/java'
            assets.srcDir 'src/instrumentTest/assets'
        }
    }

    buildTypes {
        debug {
            runProguard false
        }

        release {
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

运行

./gradlew connectedCheck

失败
java.io.FileNotFoundException: busybox
at android.content.res.AssetManager.openAsset(Native Method)

在第

final InputStream is = context.getAssets().open("busybox");

1 个答案:

答案 0 :(得分:1)

instrumentTest资产打包作为检测测试的一部分,而不是被测试的应用程序 - 您可能正在使用目标应用程序的上下文而不是检测上下文,这就是它无法找到资产的原因。

您可以在任何InstrumentationTestCase中使用getInstrumentation()。getContext()来获取检测上下文。

您应该能够通过getInstrumentation()获取AssetManager来读取您的instrumentTest资产.getContext()。getAssets()。