如何告诉gradle不要压缩依赖Java项目资源或告诉它依赖Java项目资源是资产?

时间:2013-11-27 11:35:05

标签: android build gradle assets

我有一个只包含项目资源的子项目,特别是声音:

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项目资源是资产?

0 个答案:

没有答案