2013-06-18 53 views
6

由於有些人可能已經觀看了Android Studio Gradle I/O,Xavier Ducrohet在其快速演講中提到了如何使用Android gradle build system。我的問題是,文檔和演示文稿缺乏快速入門的信息。或者至少對我來說。在我下面的代碼中,我試圖解決gradle android插件系統的用法,並且我確定我有一些錯誤的步驟和一些權利。 (我還沒有使用螞蟻或maven很多)Android Studio Gradle First Steps

也許我會通過它一步一步與我到目前爲止所做的一切。

android { 
    compileSdkVersion 17 
    buildToolsVersion "17.0.0" 

    defaultConfig { 
     minSdkVersion 7 
     targetSdkVersion 16 

     signingStoreLocation = "debug.keystore" 
     signingStorePassword = "***************" 
     signingKeyAlias = "***************" 
     signingKeyPassword = "**************" 
    } 

起初IM配置調試版本的默認設置(或使用默認settings..that每次構建意味着沒有buildtypes或香料?)

sourceSets:

sourceSets { 

     main { 
      manifest.srcFile 'AndroidManifest.xml' 
      java.srcDirs = ['com.project.maingradle', 'com.otherproject.changedsourcefilesforthisproject'] 
      res.srcDirs = ['res', 'resfromotherprojectusingpartsofsamecode'] 
      assets.srcDirs = ['assets'] 
     } 
    } 

在這一步我定義了sourceSets。這是我得到第一個問題的地方。如果我有我要使用兩個項目相同的代碼,是有可能/或要那樣定義諸如更sourcesets - >

sourceSets { 

     main {...} 
     srcsetforanotherproject {...} 
    } 

...取決於基本的src文件夾?還是應該像在我的第一個sourceSets聲明中那樣定義sourceSets的定義,通過定義一組不同的文件夾,比如Xavier Ducrohet提到的? (它也不清楚我是否只能以這種方式對res文件夾執行此操作,或者對於java.srcDirs = ['com.project.maingradle','com.otherproject.changedsourcefilesforthisproject']這樣的java src代碼文件夾也可以。「

signingConfigs:

signingConfigs { 
     debugRelease { 
      storeFile file("debug.keystore") 
     } 

     release { 
      storeFile file("release.keystore") 
     } 

     testflight { 
      storeFile file("testflight.keystore") 
     } 
    } 

在這一步我已經定義使用不同版本不同的鍵應該是好的...

buildTypes:

buildTypes { 

     debugRelease.initWith(buildTypes.release) 
     testflight.initWith(buildTypes.release) 

     sourceSets.debugRelease.setRoot("src/release") 
     sourceSets.debugRelease.setRoot("src/release") 
     sourceSets.debugRelease.setRoot("src/release") 

     debugRelease { 
      packageNameSuffix ".debugRelease" 
      versionNameSuffix "-DEBUG" 
      debuggable true 
      signingConfig signingConfigs.debug 
     } 

     testflight { 
      packageNameSuffix ".testflight" 
      versionNameSuffix "-TESTFLIGHT" 
      signingConfig signingConfigs.testflight 
     } 

     release { 
      packageNameSuffix ".release" 
      versionNameSuffix "-RELEASE" 
      runProguard true 
      proguardFile getDefaultProguardFile('proguard-android.txt') 
      signingConfig signingConfigs.release 
     } 
    } 

此步驟比gradle android插件的任何其他步驟都更清楚地解釋。除了我不知道是否有預定義的版本或調試設置在後臺工作...我是否需要澄清它...至少我認爲是這樣,因爲使用名稱後綴,proguard或聲明這個版本的關鍵(signingConfig)。

口味:

flavorGroups "abi", "version" 

    productFlavors { 

     arm { 
      flavorGroup "abi" 
     } 

     standardproject1 { 
      flavorGroup "version" 
      minSdkVersion 7 
      targetSdkVersion 14 
      packageName "com.project.maingradle.normal" 
      sourceSet sourceSets.main 
     } 

     standardproject2 { 
      flavorGroup "version" 
      minSdkVersion 6 
      targetSdkVersion 14 
      packageName "com.otherproject.normal" 
      sourceSet sourceSets.main 
     } 

     testflightproject1 { 
      flavorGroup "version" 
      minSdkVersion 7 
      targetSdkVersion 14 
      packageName "com.project.maingradle.testflight" 
      sourceSet sourceSets.main 
     } 

     testflightproject2 { 
      flavorGroup "version" 
      minSdkVersion 6 
      targetSdkVersion 14 
      packageName "com.otherproject.testflight" 
      sourceSet sourceSets.main 
     } 
    } 
} 

我個人認爲口味的最有趣的部分。 Xavier Ducrohet表示,如果你想爲不同的風格構建使用不同的鍵,你不應該在構建類型中定義一個鍵(而應該在風格中聲明)?我不知道我是否理解正確。

無論如何......我在這裏試圖做的是定義不同的風格,應該使用不同的設置來構建,如不同系統的sdk版本控制,獨佔程序包名稱和設置依賴源代碼集,就像您在示例中看到的那樣。我不確定的是,這些構建類型如何依賴於口味......它們是否只是將每種類型的每種口味都增加到每種構建類型?並且...可以設置一個sourceSet(如果可以設置更多的sourceSets),像這樣的味道?

+0

我試過類似的東西。你命令是否運行簽名你的發佈apk,'gradle build'?我只在我的'build/apk'文件夾中看到未簽名的apk文件。 –

+0

優秀的問題,gradle文檔只是很糟糕 – Piotr

+0

重複sourceSets.debugRelease.setRoot(「src/release」)三次故意? –

回答

1

如何構建類型取決於口味......他們只是將每種口味繁殖到每種構建類型?

是的,Gradle會生成構建類型和產品風格的每種組合。根據Gradle Plugin User Guide,每種構建類型和產品風味組合被稱爲構建變體

可以設置sourceSet(如果可以設置更多的sourceSets),像這樣的味道?

當然!根據Sourcesets and Dependencies documentation,產品風味(和構建變體)也自動包含自己的來源src/myFlavorName