我有一个只包含项目资源的子项目,特别是声音:
assets/
src/
main/
resources/
assets/
sound.mp3
...
build.gradle
它的build.gradle只有:
apply plugin: 'java'
另一个子项目是Android应用程序,它取决于资产子项目:
apply plugin: 'android'
dependencies {
compile project(':assets')
}
android {
compileSdkVersion 19
buildToolsVersion "19"
defaultConfig {
minSdkVersion 9
targetSdkVersion 19
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
res.srcDirs = ['res']
assets.srcDirs = ['assets']
java.srcDirs = ['src/main/java']
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
应用程序编译正常,文件合并到生成的APK中的资源文件夹但是当我尝试播放该声音时,我得到:
java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed
因为依赖项目资源被压缩了。
明确禁用mp3文件的压缩不起作用,因为它可能仅适用于android子项目资产:
aaptOptions {
noCompress 'mp3', 'wav', 'ogg', 'png'
}
当我在android项目资产中包含该文件时,它可以正常播放,但之后我无法在多个项目中共享此文件。
我无法将资产项目设为“android-library”,因为一些常规Java项目依赖于它。 (或者我可以有一个包含两个build.gradle文件的物理目录,并将它们作为不同的依赖项包含在不同的子项目中吗?)
所以这给我带来了标题问题:
如何告诉gradle不要压缩依赖Java项目资源或告诉它依赖Java项目资源是资产?