2013-12-17 51 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

相關問題