2013-06-18 7 views
6

Как некоторые, возможно, наблюдали за ходом Android Studio Gradle, Xavier Ducrohet упомянул в своей быстрой речи, как использовать систему сборки градиента android. Моя проблема заключается в том, что в документации и презентации отсутствует информация о быстром запуске. или, по крайней мере, для меня. В моем следующем коде я попытался решить проблему использования системы плагина android plugin и я уверен, что у меня есть некоторые шаги и неправильные. (я не использовал муравьев или maven)Android Studio Gradle Первые шаги

Возможно, я продолжу его шаг за шагом с тем, что я сделал до сих пор.

android { 
    compileSdkVersion 17 
    buildToolsVersion "17.0.0" 

    defaultConfig { 
     minSdkVersion 7 
     targetSdkVersion 16 

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

Сначала им настройки параметров по умолчанию для отладочных (или каждой сборки, которая использует по умолчанию 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, как в моем первом объявлении setsSets, путем определения набора различных, например, res-папок, как упоминал Ксавьер Дюкроэт? (Также неясно, могу ли я сделать это только для файлов res таким образом или также для кодовых папок java src, таких как java.srcDirs = ['com.project.maingradle', 'com.otherproject.changedsourcefilesforthisproject'].

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 
     } 
    } 

Этот шаг был более четко объяснен, чем любой другой шаг для плагина android. За исключением того, что я не знаю, есть ли предустановленная версия отладки или отладки, работающая в фоновом режиме ... мне все равно нужно прояснить ее ... по крайней мере, я так думаю, из-за использования namesuffixes, proguard или объявления ключ к этой сборке (signedConfig).

Вкусы:

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 
     } 
    } 
} 

Лично я думаю, что ароматы являются наиболее интересной частью. Ксавьер Дюкроэт сказал, что вы не должны определять ключ в buildtype (вместо этого заявленный в ароматах), если вы хотите использовать разные ключи для разных сборников аромата? Я не знаю, правильно ли я это понял.

В любом случае ... то, что я пытаюсь сделать здесь, определяет различные варианты, которые должны быть созданы с различными настройками, такими как: sdk versioning для разных систем, эксклюзивное packagename и установка зависимости набора источников, как вы видите в примере. что я не уверен в том, как строители зависят от вкусов ... они просто умножают каждый вкус на каждый тип сборки? И ... нормально ли установить sourceSet (если можно установить больше sourceSets), как это в аромате?

+0

Я пробовал что-то подобное. Команда Wich запускается для подписания вашего релиза apk, 'gradle build'? Я вижу файл unsigned apk в моей папке 'build/apk'. –

+0

Отличный вопрос, градиентные документы просто ужасные – Piotr

+0

Повторяет sourceSets.debugRelease.setRoot ("src/release") три раза преднамеренно? –

ответ

1

Как строители зависят от вкусов ... они просто умножают каждый вкус на каждый тип сборки?

Да, Gradle будет генерировать каждую комбинацию типов сборки и вкусов продукта. Согласно Gradle Plugin User Guide, каждый тип сборки и комбинация вкусовых качеств продукта обозначаются как вариант сборки.

Можно ли установить sourceSet (если возможно установить больше исходных наборов), как это в аромате?

Уверенный! Ароматизаторы продукта (и варианты сборки) также автоматически включают в себя свои собственные источники с src/myFlavorName, согласно Sourcesets and Dependencies documentation.