2015-01-15 2 views
16

"abi"로 "스플릿"을 사용하고 싶지만 릴리즈 빌드에만 사용하고 싶습니다. 이것이 가능한가? ext 변수와 변수를 "def"로 사용해보십시오. 기본적으로 false로 설정되어 있습니다. 이 변수는 releaseWithLog (및 릴리스)의 buildTypes에서 true로 설정됩니다.Android Gradle - 출시 전용으로 분할을 사용하고 있습니까?

하지만 Gradle이 어떻게 작동하는지 알지 못합니다. "debug", "releaseWithLog"및 "release"에 테스트 메시지를 추가하고 빌드를 실행하면 모든 메시지가 출력되므로, 이것이 나를 확인합니다. 그 변수는 "splitsEnabled"가 true로 설정되어 있지만 디버그 용으로 빌드됩니다. 그리고 디버그에는 값 "false"가 필요합니다. 따라서 디버그 용 분할을 사용하지 마십시오. 필드 안드로이드 Studio에서 Gradle을 작업에 대한 :

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 19 
    buildToolsVersion '20.0.0' 
    ext { 
     splitsEnabled = false 
    } 
    defaultConfig { 
    ... 
    } 
    buildTypes { 
     debug { 
      ... 
     } 
     releaseWithLog { 
      ... 
      splitsEnabled = true 
     } 
     release.initWith(releaseWithLog) 
     release { 
      ... 
     } 
    } 
    ... 
    splits { 
     abi { 
      println(splitsEnabled) 
      enable splitsEnabled 
      reset() 
      include 'x86', 'armeabi-v7a', 'armeabi' 
      exclude 'x86_64', 'mips64', 'arm64-v8a', 'mips' 
      universalApk true 
     } 
    } 
    ... 
+0

는'buildTypes', 나는 분할이 유형 단위로 할 수없는 것으로 생각하지만, 내가 잘못 입증 될 수있을 것입니다. 그러나'enable splitsEnabled'는 빌드 타입이 선택되기 전에 잘 실행된다는 것을 명심하십시오. 'build.gradle'에있는 문장들은 대부분 객체 모델을 구축하고 있습니다. 이것은 해석 된 스크립트가 아닙니다. 객체 모델이 빌드 된 후에 만 ​​Gradle은 실행중인 작업에 필요한 빌드 유형을 파악하기 시작합니다. – CommonsWare

+0

나는 또한 관심이 있어요 - 빌드 시간을 절약하고 디버그에서 하나의 스플릿을 만드는 것을 좋아할 것입니다. –

+0

이 문제를 해결하기 위해 ABI 빌드를 수행하는 옛 방식으로 되돌아갔습니다! https://twitter.com/silentnuke/status/619501266646003713 –

답변

5

당신은 Gradle을에 명령 행 인수, 또는 "스크립트 매개 변수"로 쉽게 해결할 수 있습니다.

gradle -PdbgBld installDebug 

내 build.gradle 파일은 다음 분할을 명령했습니다 : 이제

splits { 
    abi { 
     enable !project.hasProperty('dbgBld') 
     reset() 
     include 'armeabi', 'armeabi-v7a', 'x86', 'mips' 
     universalApk true 
    } 
} 

은 내가 사용하는 자료를 구축하기 위해 디버그 예를 들어, 빌드를 위해 나는 'dbgBld'기호를 정의하는 -P를 사용하고 사용 : 스플릿 필드가 true로 해결 가능하게하고 내가 5 개 APK 파일을 얻을 수 있도록
gradle assembleRelease 

'dbgBld'기호

은 정의되어 있지 않습니다. 디버깅을 위해 빌드 할 때, -PdbgBld는 이미 Android Studio 구성에 저장되어 있으며 디버깅을 위해 하나의 "팻"APK 만 얻습니다. 결과적으로 디버그 빌드가 훨씬 빨라졌습니다. splits`가의 피어가`때문에 그렉

+0

이게 정말 유용합니다. – speedynomads

+0

Android Studio 실행/디버그 실행 설정에서이를 설정할 수있는 방법이 있습니까? – romulof

+0

@ Orb 이제 Android Studio 실행/디버그 실행 구성에서 "그레이드 인식 Make"명령을 실행합니다. 이 옵션에 대한 옵션을 어디에서 편집해야할지 모르겠지만 실제 Release 빌드를 작성하려면 'gradle assembleRelease'를 실행해야합니다. 난 그냥 조건을 반전하고 'gradle -PreleaseBld assembleRelease'가지고 그에 따라 build.gradle 수정하려면 releaseBld 상수와 같은 것을 정의합니다. – gregko