2013-06-18 4 views
6

일부 사용자는 Android Studio Gradle I/O를 보았을 수도 있기 때문에 Xavier Ducrohet은 자신의 빠른 연설에서 Android Gradle 빌드 시스템 사용 방법을 언급했습니다. 제 문제는 설명서와 프레젠테이션에 빠른 시작 정보가 부족하다는 것입니다. 적어도 나를 위해서. 내 다음 코드에서는 내가 gradle 안드로이드 플러그인 시스템 및 메신저의 사용법을 해결하기 위해 노력한 몇 가지 단계를 잘못하고 어떤 권리를 가지고 확신합니다. (나는 개미를 많이 사용하지 않았다.)Android Studio Gradle First Steps

어쩌면 나는 지금까지 한 것을 단계별로 살펴볼 것이다. 디버그 빌드의 기본 설정 구성 첫째 메신저에서

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

에서 이 단계에서는 sourceSet을 정의했습니다. 이것은 내가 나의 첫 번째 질문을 가지고있는 곳이다. 나는이 개 프로젝트에 사용할 동일한 코드를 가지고 있다면, 그것은 가능합니다/또는 그것은 같은 더 sourcesets을 정의 할 수 있어야 ->

sourceSets { 

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

... 기본 SRC 폴더에 따라? 또는 sourceSets에 대한 정의가 Xavier Ducrohet과 같은 다른 res 폴더의 집합을 정의하여 첫 번째 sourceSets 선언 에서처럼 수행되어야합니까? (또한이 방법으로 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 plugin의 다른 단계보다 더 명확하게 설명되었습니다. 제외하고 미리 정의 된 릴리스 또는 백그라운드에서 작동하는 디버그 설정을 알지 못한다는 것을 제외하고는 ... 어쨌든 그것을 명확히해야합니까 ... 적어도 namesaffixes, 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는 다른 풍미 빌드에 대해 다른 키를 사용하려는 경우 buildtype에서 키를 정의하지 말아야한다고했습니다 (대신 풍미로 선언 됨). 내가 그걸 정확하게 이해하는지 모르겠다.

어쨌든 ... 여기서 내가하려고했던 것은 다른 시스템 (예 : 다른 시스템)에 대한 버전 관리, 독점적 인 패키지 이름 및 예제에서 볼 수있는 원본 소스 설정과 같은 다양한 설정으로 빌드해야하는 다른 맛을 정의하는 것입니다. 확실하지 않은 것은 무엇인지, buildtype은 맛에 의존하는 것인가 ... 모든 빌드 유형에 모든 맛을 더할 뿐인가? 그리고 ... 소스 세트를 설정하는 것이 좋습니까 (소스 세트를 더 설정할 수있는 경우)?

+0

나는 비슷한 것을 시도했다. Wich 명령은 당신의 릴리스 apk에 서명하기 위해 실행합니까,'gradle build'? 내'build/apk' 폴더에 서명되지 않은 apk 파일 만 있습니다. –

+0

훌륭한 질문입니다, gradle 문서는 단지 끔찍합니다. – Piotr

+0

sourceSets.debugRelease.setRoot ("src/release")를 의도적으로 세 번 반복합니까? –

답변

1

buildtype은 맛에 따라 어떻게 달라질까요 ... 모든 맛을 각 빌드 유형에 곱하면됩니까?

예, Gradle은 빌드 유형과 제품의 맛을 모든 조합으로 생성합니다. Gradle Plugin User Guide에 따라 각 빌드 유형 및 제품 풍미 조합을 변형 빌드이라고합니다.

소스 세트를 설정하는 것이 좋습니까 (소스 세트를 더 설정할 수있는 경우)?

확실! Product Flavors (및 Build Variant)는 Sourcesets and Dependencies documentation에 따라 src/myFlavorName의 소스 세트를 자동으로 포함합니다.