我需要使用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");
答案 0 :(得分:1)
instrumentTest资产打包作为检测测试的一部分,而不是被测试的应用程序 - 您可能正在使用目标应用程序的上下文而不是检测上下文,这就是它无法找到资产的原因。
您可以在任何InstrumentationTestCase中使用getInstrumentation()。getContext()来获取检测上下文。
您应该能够通过getInstrumentation()获取AssetManager来读取您的instrumentTest资产.getContext()。getAssets()。