2014-02-05 70 views
3

我已將我的項目從IDEA遷移到Android Studio以使用Gradle。 我已經成功地構建了應用程序(還沒有看過測試),現在想包括產品口味(我的理由移動)。使用Gradle從IDEA遷移到Android Studio

我現在可以在「Build Variants」菜單中選擇四種構建變體之一,並使用新設置構建一個新的應用程序,這樣看起來一切正常。

但是,我在哪裏對源文件進行更改(使用原始目錄結構)還是需要更改它?什麼是最好的方法? (我沒有結構/ src/xxx/res,只是src/org/bla/bla)

主要的改變是像字符串文件和圖形這樣的資源。 謝謝!

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.7.+' 
    } 
} 
apply plugin: 'android' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile 'com.google.android.gms:play-services:4.1.+' 
    compile 'org.apache.commons:commons-lang3:3.2.+' 
    compile 'org.apache.httpcomponents:httpmime:4.1.+' 
    compile 'com.android.support:appcompat-v7:+' 
} 

android { 

    compileSdkVersion 19 
    buildToolsVersion "19.0.1" 

    defaultConfig { 
     minSdkVersion 8 
     targetSdkVersion 19 
     versionCode 1 
     //versionName "0.5" 
    } 

    productFlavors { 
     iDomsPortalDev { 
      packageName 'org.idoms.iDomsAndroid.iDomsPortalDev' 
     } 
     iDomsPortal { 
      packageName 'org.idoms.iDomsAndroid.iDomsPortal' 
     } 
    } 

    buildTypes { 
     debug { 
      packageNameSuffix ".debug" 
      //versionNameSuffix "-debug" 
     } 
     release { 
      packageNameSuffix ".release" 
      //versionNameSuffix "-release" 
     } 
    } 

    sourceSets { 
     main { 
      manifest.srcFile 'AndroidManifest.xml' 
      java.srcDirs = ['src'] 
      resources.srcDirs = ['src'] 
      aidl.srcDirs = ['src'] 
      renderscript.srcDirs = ['src'] 
      res.srcDirs = ['res'] 
      assets.srcDirs = ['assets'] 
     } 

     // Move the tests to tests/java, tests/res, etc... 
     instrumentTest.setRoot('tests') 

     // Move the build types to build-types/<type> 
     // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... 
     // This moves them out of them default location under src/<type>/... which would 
     // conflict with src/ being used by the main source set. 
     // Adding new build types or product flavors should be accompanied 
     // by a similar customization. 

     debug.setRoot('build-types/debug') 
     release.setRoot('build-types/release') 
     iDomsPortal.setRoot('product-flavors/iDomsPortal') 
     iDomsPortalDev.setRoot('product-flavors/iDomsPortalDev') 

} 
println "main: " + android.sourceSets.main.res.srcDirs 

    android.applicationVariants.all { variant -> 
     println variant.name + ": " + android.sourceSets[variant.name].res.srcDirs 
    } 

    android.productFlavors.all { flavor -> 
     println flavor.name + ": " + android.sourceSets[flavor.name].res.srcDirs 
    } 

    android.buildTypes.all { buildType -> 
     println buildType.name + ": " + android.sourceSets[buildType.name].res.srcDirs 
    } 

[!編輯:更新後的數據上面,並把代碼打印更改後的輸出,現在,它的工作原理]

回答

1

我想你問,你把特定的風味reources;如果您要求更改主要來源和資源的位置,則在sourceSets.main下映射的目錄結構中。

您可以腳本的此位添加到您的的build.gradle文件的頂層(如android塊之後)打印出來的目錄在那裏將尋找資源:

println "main: " + android.sourceSets.main.res.srcDirs 

android.applicationVariants.all { variant -> 
    println variant.name + ": " + android.sourceSets[variant.name].res.srcDirs 
} 

android.productFlavors.all { flavor -> 
    println flavor.name + ": " + android.sourceSets[flavor.name].res.srcDirs 
} 

android.buildTypes.all { buildType -> 
    println buildType.name + ": " + android.sourceSets[buildType.name].res.srcDirs 
} 

這輸出特定於風味的資源目錄以及構建變體(flavor +構建類型目錄)。

當我在你的構建文件運行它們,我得到:

main: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/res] 
app1: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app1/res] 
app2: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app2/res] 
debug: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/build-types/debug/res] 
release: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/build-types/release/res] 
app1Debug: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app1Debug/res] 
app1Release: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app1Release/res] 
app2Debug: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app2Debug/res] 
app2Release: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app2Release/res] 

主要目錄預計 - 這就是在sourceSets.main明確設置。 調試版本類型我們根據sourceSets塊末尾的語句重新映射到構建類型目錄。對於app1app2風格,它正在尋找 src/app1 src/app2,這可能不是你想要的。我建議移動整個根目錄爲您的口味,類似於你如何爲構建類型。我會改變該塊在年底:

// Move the build types to build-types/<type> 
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... 
// This moves them out of them default location under src/<type>/... which would 
// conflict with src/ being used by the main source set. 
// Adding new build types or product flavors should be accompanied 
// by a similar customization. 
debug.setRoot('build-types/debug') 
release.setRoot('build-types/release') 
app1.setRoot('product-flavors/app1') 
app2.setRoot('product-flavors/app2') 

至於變種,app1Debug等人,你也許不必擔心他們,除非你正在做的太過具體,你的東西真的需要在詳細的基礎上重寫。無論如何,現在當我運行並查看診斷輸出時,我看到:

main: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/res] 
app1: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/product-flavors/app1/res] 
app2: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/product-flavors/app2/res] 
debug: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/build-types/debug/res] 
release: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/build-types/release/res] 
app1Debug: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app1Debug/res] 
app1Release: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app1Release/res] 
app2Debug: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app2Debug/res] 
app2Release: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app2Release/res] 
+0

這看起來確實不錯。我將你的建議用於我的項目並更新了build.gradle。但是,它似乎並未在控制檯中進行帳戶中的更改。我更新了上面的build.gradle的列表,併發布了輸出(注意,這不是來自我的應用程序,所以真實姓名現在在那裏,而不是app1 app2) –

+0

沒關係。當然,我應該在更改根後插入註釋!很好的答案!太感謝了! –