2013-12-17 50 views
2

我有一些resouces只的Java项目的build.gradle(S):Gradle:如何将Java项目风格依赖资源包含到Android APK中?

apply plugin: 'java' 
apply plugin: 'idea' 
apply plugin: 'eclipse' 

和目录结构:

flavor1/ 
    src/ 
    main/ 
     resources/ 
     assets/ 
      file1.png 
flavor2/ 
    src/ 
    main/ 
     resources/ 
     assets/ 
      file1.png 

和其他项目(这次的Android)用的build.gradle:

android { 
    compileSdkVersion 19 
    buildToolsVersion "19" 

    defaultConfig { 
    minSdkVersion 9 
    targetSdkVersion 19 
    } 

    productFlavors { 
    flavor1 { 
     packageName "com.mydomain.flavor1" 
    } 

    flavor2 { 
     packageName "com.mydomain.flavor2" 
    } 
    } 

    sourceSets { 
    main { 
     manifest.srcFile 'AndroidManifest.xml' 
     res.srcDirs = ['res'] 
     assets.srcDirs = ['assets'] 
     java.srcDirs = ['src/main/java'] 
    } 
    flavor1 { 
     res.srcDirs = ['res-flavor1'] 
     assets.srcDirs = ['assets-flavor1'] 
    } 
    flavor2 { 
     res.srcDirs = ['res-flavor1'] 
     assets.srcDirs = ['assets-flavor2'] 
    } 
    } 
} 

dependencies { 
    flavor1Compile project(':flavor1') 
    flavor2Compile project(':flavor2') 
} 

与目录结构:

android_project/ 
    assets/ 
    assets-flavor1/ 
    assets-flavor2/ 
    res/ 
    res-flavor1/ 
    res-flavor2/ 
    src/ 
    main/ 
     java/ 
     com/ 
      ... 

问题是来自普通Java项目的资源:flavor1和:flavor2未包含在生成的APK中。如果我将它们包括为全局依赖项:

dependencies { 
    compile project(:flavor1) 
} 

它们包含在APK罚款中。

这些普通Java项目的原因是它们既是Android项目风格的资源,也是其他项目(iOS,HTML,Java,这些在问题中没有描述)的资源,所以我不能直接在Android项目中包含它们资产。

你能帮我吗?

回答

2

您可以明确添加Java项目资源文件夹的路径吗?

flavor1 { 
    res.srcDirs = ['res-flavor1'] 
    assets.srcDirs = ['assets-flavor1', '$java-project-root/flavor1/src/main/resources/assets'] 
} 

这并不理想,但它应该工作。

+0

这是行不通的!虽然必须使用相对或绝对路径,所以我编辑了你的文章。谢谢。 – Blackhex

+0

我很高兴它为你工作。感谢编辑! – kukido

+0

嗯,不幸的是,这会导致Android Studio和IntelliJ出现错误:无法注册类型为“SOURCE”的给定路径,因为它已超出内容根目录。任何线索如何解决这个问题? – Blackhex

1

每种风格创建一个与之关联的依赖配置对象,所以你可以做:

dependencies { 
    flavor1Compile project(':flavor1') 
    flavor2Compile project(':flavor2') 
} 

这将在正确的变种打包正确的资产。

+0

我这样做,彻底查看我的问题。这适用于Java项目但不适用于Android项目,即使用项目依赖项(来源等),但资源文件不包含在结果APK中。 – Blackhex

+0

从另一个答案中,我收集到你希望它们作为资源而不是资源(不是从你的问题中清楚) –

+0

是的,我认为在Android的情况下它们是同义词 – Blackhex

相关问题