2013-09-05 4 views
2

나는 gradle을 처음 사용하고 있으며 맛, buildtype 및 사용자 정의 원본 세트가있는 gradle android 플러그인을 사용하려고합니다. 풍미와 buildtypes로 구축 작품을 찾으십시오. 불행히도 레거시 프로젝트 디렉토리 구조가 있으므로 build 유형의 res 디렉토리를 사용자 정의해야합니다.gradle android plugin 및 buildtype 소스 세트 관련 문제

어떻게 든 buildtype에 대한 추가 자원 (기본적으로 일부 문자열 구성 값)은 빌드에 병합되지 않고 기본 트리의 자원 키를 대체하지 않습니다.

내가 첫 번째 게시물에서 자비를 인용 할 Gradle productflavors sourcesets and old project structureHow can I specify per flavor buildType sourceSets?

이 알고, 전에 질문을 받았다 ". 당신이 먼저 맛을 선언 한 후 sourceSets을 사용자 정의해야"

나는 향신료 구성이 자동으로 원본 세트를 만들고 이후에 수정해야한다는 것을 알고 있습니다. 그게 내가 build.gradle 다음 build.gradle,하지만 추가 된 "res.srcDirs"에 무시당한 것 같아요 그리고 내가 왜 알아낼 수 없다.

두 번째 게시물 (github에 대한 링크가있는 마지막 코멘트)에서 build.gradle의 소스 세트 수정이 복잡합니다. 이것에 대한 간단한 방법이 있습니까? (여기 참조 : https://github.com/shakalaca/learning_gradle_android/blob/master/07_tricks/app/build.gradle를)

이는 Gradle을 안드로이드 플러그인 내 빌드 구성입니다 :

android { 
    compileSdkVersion 18 
    buildToolsVersion "18.0.1" 

    defaultConfig { 
     minSdkVersion 9 
     targetSdkVersion 17 
    } 

    sourceSets { 

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

    productFlavors { 
     normal { 
     } 

     proguard { 
      proguardFile file("proguard-project.txt") 
     } 
    } 


    buildTypes { 

     dev { 
      packageNameSuffix ".dev" 
      debuggable true 
      signingConfig android.signingConfigs.debug 

     } 

     beta { 
      packageNameSuffix ".beta" 
      debuggable true 
      signingConfig android.signingConfigs.debug 
     } 

     live { 
      packageNameSuffix ".live" 
      debuggable true 
      signingConfig android.signingConfigs.debug 
     } 
    } 

    sourceSets.dev.res.srcDirs = ['variations/dev'] 
    sourceSets.beta.res.srcDirs = ['variations/staging'] 
    sourceSets.live.res.srcDirs = ['variations/live'] 
} 

답변

4

귀하의 build.gradle이 잘 될 당신의 변화 디렉토리를 확인 dev에/stagin/라이브 폴더 구조를해야한다 res 디렉토리와 동일해야합니다.

app/AndroidManifest.xml 
app/src/com/... 
app/res/values/strings.xml 
app/res/layout/main_activity.xml 
app/variations/dev/values/strings.xml 
app/variations/staging/values/strings.xml 
app/variations/live/values/strings.xml 

은 BTW 당신은 ​​ proguardFile를 정의하지만 스크립트의 순서 당신이 더 나은 구조를 가지고 있고 읽기 쉽게 만들 수를 변경하는 경우에는 runProguard true

+0

buildtype에 대한 잘못된 res 폴더 구조가 실제로 문제가되었습니다. 고마워요. 그리고 프로 가드 정의로 언급 해 줘서 고맙습니다. – Chilibeta

5

없습니다. 이처럼 그것을 할 수

당신이 릴리스, 베타 및 디버그 유형이 말해 당신은 다른 소스 디렉토리를 원하는 :

buildTypes { 
    release { 
     debuggable false 
     jniDebugBuild false 
     runProguard true 
     proguardFile 'proguard-android.txt' 

     // Links to signing config above. 
     signingConfig signingConfigs.release 
    } 

    debug { 
     packageNameSuffix ".debug" 
     versionNameSuffix ".debug" 

    } 
    beta { 
     // Import release code - avoid having the same code twice! 
     initWith release 
     packageNameSuffix ".beta" 
     versionNameSuffix ".beta" 
    } 
} 

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

    release { 
     res.srcDirs = ['res', 'res-release'] 
    } 

    beta { 
     res.srcDirs = ['res', 'res-beta'] 
    } 

    debug { 
     res.srcDirs = ['res', 'res-debug'] 
    } 
} 

공지 사항 buildTypessourceSets의 순서!

관련 문제