Android Studio에서 Gradle이란 무엇입니까?


1313

Gradle은 나에게 혼란스럽고 새로운 안드로이드 개발자에게도 혼란 스럽습니다. 누구나 Android Studio의 Gradle이 무엇이며 그 목적이 무엇인지 설명 할 수 있습니까? 왜 Android Studio에 포함되어 있습니까?



14
Gradle과 같은 빌드 도구를 원하는 이유에 대한 대답 은 Jeff Atwood 의이 게시물 을 확인하십시오 .
Adam S

829
사람이 예는, 사람이 가진 질문에 대답하는 것입니다 그들이 정말 요구하고, 그것에 대해 구글에서 링크를 많이 가지고 않습니다 여기에 질문을하면 일반 언어 와에 넣어 상황 등을 수행하는 이유, 우리는 그것을 필요 가장 많이 사용하는 사용자는 Android Studio 등에서 Android 앱을 빌드 할 때 알아야합니다. Google에서 가장 많이 찾는 링크는 "기술 연설"에 있으며 초보자에게는 혼란 스럽습니다.
Azurespot

3
@NoniA. 정확히 내 생각. 나는 여전히 약간 혼란 스럽습니다. 내가 작성한 코드를 컴파일하는 백그라운드 프로세스 만 gradle입니까? 또한 많은 다른 답변을 살펴본 후 종속성을 언급합니다. 저게 뭐야? 정말 고마워!

간결하고 멋진 설명을 볼 수 있습니다 . gradle을 소개합니다 . 매우 유용
eRaisedToX

답변:


1531

짧은 답변

Gradle은 빌드 시스템입니다.

긴 답변

Android Studio 이전에는 개발 목적으로 Eclipse를 사용하고 있었지만 Eclipse없이 Android APK를 작성하는 방법을 알지 못했습니다.

명령 행에서이 작업을 수행 할 수 있지만 SDK에서 각 도구 (dx, aapt)의 기능을 알아야합니다. 이클립스는 우리에게 자체 빌드 시스템을 제공함으로써 저수준이지만 중요하고 기본적인 세부 사항으로부터 우리를 구했습니다.

이제 res폴더가 폴더와 동일한 디렉토리에있는 이유가 궁금 src하십니까?

이것은 빌드 시스템이 그림으로 들어가는 곳입니다. 빌드 시스템은 자동으로 모든 소스 파일 ( .java또는 .xml)을 가져온 다음 적절한 도구를 적용하고 (예 : java클래스 파일을 가져와 파일로 변환 dex), 모든 파일을 하나의 압축 파일 (사랑하는 APK)로 그룹화합니다.

이 빌드 시스템은 몇 가지 규칙을 사용합니다. 하나의 예는 소스 파일 (Eclipse에서는 \src폴더) 또는 자원 파일 (Eclipse에서는 \res폴더)을 포함하는 디렉토리를 지정하는 것입니다 .

이제이 모든 작업을 자동화하려면 스크립트가 있어야합니다. 리눅스에서 쉘 스크립트를 사용하거나 Windows에서 배치 파일 구문을 사용하여 자체 빌드 시스템을 작성할 수 있습니다. 알았다?

Gradle은 다른 빌드 시스템 에서 최고의 기능을 사용하여 하나의 기능으로 결합한 또 다른 빌드 시스템 입니다. 단점으로 인해 개선되었습니다. 그것은이다 JVM 기반의 시스템을 구축 하는 수단은 안드로이드 스튜디오를 사용합니다 자바에서 자신의 스크립트를 쓸 수 있다는 것.

gradle의 한 가지 멋진 점은 플러그인 기반 시스템 이라는 것입니다 . 이것은 자신의 프로그래밍 언어가 있고 소스에서 일부 패키지 (Java의 JAR과 같은 출력)를 작성하는 작업을 자동화하려는 경우 Java 또는 Groovy (또는 Kotlin, 여기 참조 ) 에서 완전한 플러그인을 작성할 수 있으며 세계의 다른 지역에 배포하십시오.

Google은 왜 그것을 사용 했습니까?

Google은 시장에서 가장 진보 된 빌드 시스템 중 하나를 보았으며 학습 곡선을 거의 또는 전혀 사용하지 않고 Groovy 또는 다른 새로운 언어를 배우지 않고도 자신 만의 스크립트를 작성할 수 있음을 깨달았습니다. 그래서 그들은 Gradle 용 Android 플러그인을 작성했습니다.

build.gradle프로젝트에서 파일 을 보았을 것 입니다. 여기서 작업을 자동화하는 스크립트를 작성할 수 있습니다. 이 파일에서 본 코드는 Groovy 코드입니다. 쓰면 System.out.println("Hello Gradle!");콘솔에 인쇄됩니다.

빌드 스크립트에서 무엇을 할 수 있습니까?

간단한 예는 실제 빌드 프로세스가 수행되기 전에 한 디렉토리에서 다른 디렉토리로 파일을 복사해야한다는 것입니다. Gradle 빌드 스크립트가이를 수행 할 수 있습니다.


11
Gradle이 AndroidStudio 프로젝트를 한 위치에서 다른 위치로 가져올 때 문제가 발생한다고 말해야합니다. 불일치 한 버전, 누락 된 모듈, 그 외 ... 힘들어졌습니다. 결국 프로젝트 스켈레톤을 다시 만들고 이전 프로젝트에서 새 코드로 코드 부분을 잘라내어 붙여 넣었습니다. 그리고 이것은 소스와 대상 모두를 위해 Windows에 있습니다. 이제 리눅스 기반 랩으로 옮길 것입니다.
jfmessier

21
내가 이해하지 못하는 것은 gradle이 내가 만드는 모든 단일 프로젝트 또는 컴파일 할 때마다 인터넷에 연결하려고하는 이유입니다.
AaA

4
IntelliJ는 이미 다른 빌드 시스템이 없어도 Android 프로젝트를 빌드하는 방법을 알고 있다고 생각했습니다.
Arne Evertsson

17
이전 Android 스튜디오 빌드 시스템보다 gradle의 또 다른 주요 이점은 종속성 관리입니다. 이전에는 프로젝트에서 Android 라이브러리를 사용하려면 소스 코드를 다운로드하여 프로젝트에 추가 한 후 프로젝트로 컴파일해야했습니다. 대신 gradle을 사용하면 build.gradle에 단일 행을 추가 할 수 있으며 gradle은 공용 저장소에서 컴파일 된 라이브러리를 다운로드하여 프로젝트에 추가합니다. 일부 예 : blog.teamtreehouse.com/android-libraries-use-every-project 또한 lib 디렉토리에 배치하는 대신 표준 Java jar 파일에서도 작동합니다.
Stan Kurdziel

4
Gradle은 끔찍한 빌드 시스템입니다. Android Studio를 사용할 때 빌드를 관리하고 싶습니다. 왜 일부 클래스를 추가하면 Gradle이 동기화되기 전에 동기화를 수행 해야하는지 이해가되지 않습니다. 비교하여 Visual Studio를 사용하면 멋지거나 엑스 코드가 필요합니다. IDE는 안드로이드 빌드 프로세스가 때때로 또는 오래된 프로젝트의 업데이트를 통해 필요한 설정을 위해 임의의 파일을 고칠 필요없이 프로젝트와 솔루션을 빌드합니다. Gradle은 Android 환경에서 최악의 부분입니다.
csmith

162

Google이 Android에 사용하려는 새로운 빌드 도구입니다. 그것은 개미보다 더 확장 가능하고 유용하기 때문에 사용됩니다. 개발자 경험을 향상시키기위한 것입니다.

Google I / O 의 Android 개발자 팀에서 Xavier Ducrohet의 강연을 여기에서 볼 수 있습니다.

Xavier와 Tor Norbye의 Android Studio에 대한 또 다른 이야기도 있습니다 .


4
IntelliJ는 이미 다른 빌드 시스템이 없어도 Android 프로젝트를 빌드하는 방법을 알고 있다고 생각했습니다.
Arne Evertsson

1
그래서 내가 작성한 코드를 컴파일하는 백그라운드 프로세스 만 gradle입니까? 또한 많은 다른 답변을 살펴본 후 종속성을 언급합니다. 저게 뭐야? 다니엘 감사합니다!

2
@ user5562706 코드를 컴파일하지는 않지만 코드를 컴파일하는 실행 파일을 호출해야합니다. 코드를 컴파일 한 후 다른 작업을 실행하여 패키지화하고 다른 작업을 선택한 디렉토리에 복사 한 다음 어딘가에 서버에 업로드 할 수 있습니다 ... 그런 종류의 작업 Gradle 또는 모든 빌드 시스템, 할 것입니다.
Michael Berry

63

GradleAndroid Studio에서 실행되는 빌드 시스템 입니다.

다른 언어로 예를 들면 다음과 같습니다.


23
당신이 말한 때 Gradle와 비슷 make, 난 그냥 그 개념을 가지고
user3405291

3
PHP의
Yousha Aleayoub

15
알 수없는 도구의 기능과 파이프 라인의 위치를 ​​파악하는 가장 빠른 방법 중 하나는 Google에 도구 이름과 "vs"를 입력하는 것입니다. 결과는 일반적으로 "X vs Y"로 표시되며 여기서 Y는 더 익숙한 다른 도구입니다.
James Kuang

자바 스크립트에 대한 웹팩
codepig

47

다음은 GradleAndroid Studio에서 무엇이 무엇 이고 어떻게 사용하는지에 대한 자세한 설명 입니다.

Gradle 파일 탐색

  1. Android Studio에서 프로젝트를 작성할 때마다 빌드 시스템은 필요한 모든 Gradle 빌드 파일을 자동으로 생성합니다.

Gradle 빌드 파일

  1. Gradle 빌드 파일은 a Domain Specific Language or DSL를 사용하여 사용자 정의 빌드 로직을 정의하고 Gradle 용 Android 플러그인의 Android 특정 요소와 상호 작용합니다.

  2. Android Studio 프로젝트는 독립적으로 빌드, 테스트 및 디버깅 할 수있는 구성 요소 인 하나 이상의 모듈로 구성됩니다. 각 모듈에는 자체 빌드 파일이 있으므로 모든 Android Studio 프로젝트에는 2 가지 종류의 Gradle 빌드 파일이 있습니다.

  3. 최상위 빌드 파일 : 프로젝트를 구성하는 모든 모듈에 공통적 인 구성 옵션이 있습니다.

  4. 모듈 수준 빌드 파일 : 각 모듈에는 모듈 별 빌드 설정이 포함 된 자체 Gradle 빌드 파일이 있습니다. 프로젝트의 최상위 빌드 파일 대신 모듈 수준 빌드 파일을 편집하는 데 대부분의 시간을 소비합니다.

이러한 build.gradle파일 을 보려면 프로젝트 탭을 선택하여 Android Studio의 프로젝트 패널을 열고 Gradle Scripts 폴더를 확장하십시오. Gradle Scripts 폴더의 처음 두 항목은 프로젝트 레벨 및 모듈 레벨 Gradle 빌드 파일입니다.

최상위 Gradle 빌드 파일

모든 Android Studio 프로젝트에는 단일 최상위 Gradle 빌드 파일이 포함되어 있습니다. 이 build.gradle파일은 Gradle Scripts 폴더에 나타나는 첫 번째 항목이며 명확하게 Project로 표시됩니다.

대부분의 경우이 파일을 변경할 필요는 없지만 파일 내용과 프로젝트 내에서 수행하는 역할을 이해하는 것이 여전히 유용합니다.

모듈 수준의 Gradle 빌드 파일

프로젝트 수준의 Gradle 빌드 파일 외에도 각 모듈에는 자체 Gradle 빌드 파일이 있습니다. 다음은 기본 모듈 수준 Gradle 빌드 파일의 주석이 달린 버전입니다.

다른 Gradle 파일

build.gradle 파일 외에도 Gradle Scripts 폴더에는 다른 Gradle 파일이 포함되어 있습니다. 대부분의 경우 프로젝트와 관련하여 변경하면 자동으로 업데이트되므로 이러한 파일을 수동으로 편집 할 필요가 없습니다. 그러나 프로젝트 내에서 이러한 파일의 역할을 이해하는 것이 좋습니다.

gradle-wrapper.properties (Gradle 버전)

이 파일을 사용하면 컴퓨터에 Gradle이 설치되어 있지 않아도 다른 사람들이 코드를 작성할 수 있습니다. 이 파일은 올바른 버전의 Gradle이 설치되어 있는지 확인하고 필요한 경우 필요한 버전을 다운로드합니다.

settings.gradle

이 파일은 프로젝트를 구성하는 모든 모듈을 참조합니다.

gradle.properties (프로젝트 속성)

이 파일에는 전체 프로젝트에 대한 구성 정보가 포함되어 있습니다. 기본적으로 비어 있지만이 파일에 추가하여 프로젝트에 다양한 속성을 적용 할 수 있습니다.

local.properties (SDK 위치)

이 파일은 Android Gradle 플러그인에 Android SDK 설치를 찾을 수있는 위치를 알려줍니다.

참고 : local.properties Android SDK의 로컬 설치와 관련된 정보가 포함되어 있습니다. 이것은이 파일을 소스 제어하에 두지 말아야한다는 것을 의미합니다.

추천 독서-Tutsplus Tutorial

나는 gradle에 대한 명확한 이해를 얻었습니다.


1
참고 것을 링크 전용 답변 낙심, SO 응답 솔루션 (대 아직 시간이 지남에 따라 부패하는 경향 참조의 다른 경유지)에 대한 검색의 엔드 포인트이어야한다. 링크를 참조로 유지하면서 여기에 독립형 시놉시스를 추가하십시오.
kleopatra

30

Gradle은 프로그램의 소스 코드를 빌드하는 빌드 도구 중 하나 입니다. 따라서 Android Studio의 중요한 부분이므로 애플리케이션 개발을 시작하기 전에 설치해야합니다.

우리는 첫 번째 프로젝트를 만들 때 Android Studio가 대신하기 때문에 별도로 설치할 필요가 없습니다.


4
프로그램의 소스 코드를 작성한다는 것은 무엇을 의미합니까? 개발자의 일 아닌가요?
committedandroider

이 답변은 말 그대로 방식이 완전히 잘못되었습니다. Gradle은 Android Studio와 함께 제공되는 패키징 도구이므로 apk를 빌드해야합니다. 소스 코드는 항상 컴파일러에 의해 작성되며 다른 것은 없습니다.
AutomEng

그러나 다른 질문에서 Gradle이 안정적인 인터넷 연결이 없으면 제대로 작동하지 않는 것 같습니다.이 문제가 해결 될 때까지 Android Studio를 버려야합니까?
Michael

2
@committedandroider : 개발자의 임무 는 소스 코드 를 작성 하는 것이 아니라 작성 하는 것입니다. 시스템 developement에에서 우리의 과정을 의미하는 단어 "빌드"를 사용 포장 컴파일 마지막으로 소스 코드를 제품 (A 패키지 또는 실행 )
MestreLion

1
사람들이 내가이 채팅 서버에이 응용 프로그램을 구축 자신의 프로젝트 즉, 소스 코드를 작성하는 참조 '구축'을 사용하기 때문에 @MestreLion 롤 나는 꽤 ... 다시 혼란스러워했다
committedandroider

26

DEFINITION : Gradle을은 도구와 제작하는 프로젝트의 리소스를 관리 할 수있는 유연성이 빌드 개발자를 제공하는 구조화 된 건물의 메커니즘을 설명 할 수 smaller in size, targeting specific requirements특정 구성의 특정 장치에 대한을


기본 구성

  1. minimumSdk
  2. maximumSdk
  3. targettedSdk
  4. versionCode
  5. versionName

라이브러리 :: 이전에는 지루한 작업이었던 요구 사항에 따라 Android 라이브러리 또는 다른 타사 라이브러리를 추가 할 수 있습니다. 라이브러리가 기존 프로젝트에 적합하지 않은 경우, 개발자에게 라이브러리를 추가 할 수 있도록 프로젝트를 변경하기위한 적절한 솔루션을 찾을 수있는 로그가 개발자에게 표시됩니다. 한 줄의 의존성


내장 생성 품종

다양한 빌드 변형을 얻기 위해 빌드 유형을 빌드 플레이버와 결합

 ====================                         ====================
|     BuildTypes     |                       |   ProductFlavours  |
 --------------------  ====================== --------------------
|  Debug,Production  |      ||       ||      | Paid,Free,Demo,Mock|
 ====================       ||       ||       ==================== 
                            ||       ||
                            VV       VV
 =================================================================
|           DebugPaid, DebugFree, DebugDemo, DebugMock            |
|  ProductionPaid, ProductionFree, ProductionDemo, ProductionMock |
 =================================================================

축소 크기

Gradle은 통합 라이브러리에서 사용되지 않은 리소스와 사용되지 않은 리소스를 제거하여 생성 된 빌드의 크기를 줄이는 데 도움이됩니다.


권한 관리

요구 사항에 따라 특정 시나리오에서 특정 권한을 추가하여 특정 빌드에 대한 특정 권한을 지정할 수 있습니다


특정 장치 용 내장

특정 밀도 및 특정 api 수준을 포함하는 특정 장치의 빌드 생성을 관리 할 수 ​​있습니다. 이를 통해 여러 유형의 기기에서 요구 사항에 따라 앱 스토어에서 제품을 배포 할 수 있습니다.


좋은 참조

보겔 라 튜토리얼


25

Gradle에 대한 모든 정보가 있습니다. Gradle Plugin 사용 설명서

새로운 빌드 시스템의 목표

새로운 빌드 시스템의 목표는 다음과 같습니다.

  • 코드와 리소스를 쉽게 재사용 할 수 있도록합니다
  • 다중 apk 배포 또는 다양한 응용 프로그램을 위해 여러 응용 프로그램 변형을 쉽게 만들 수 있습니다.
  • 빌드 프로세스를 쉽게 구성, 확장 및 사용자 정의
  • 좋은 IDE 통합

왜 그래들?

Gradle은 고급 빌드 시스템 일뿐만 아니라 플러그인을 통해 사용자 정의 빌드 로직을 생성 할 수있는 고급 빌드 툴킷입니다.

Gradle을 선택하게 한 기능 중 일부는 다음과 같습니다.

  • 빌드 로직을 설명하고 조작하기위한 DSL (Domain Specific Language)
  • 빌드 파일은 Groovy 기반이며 DSL을 통해 선언 요소를 혼합하고 코드를 사용하여 DSL 요소를 조작하여 사용자 정의 논리를 제공 할 수 있습니다.
  • Maven 및 / 또는 Ivy를 통한 내장 종속성 관리
  • 매우 유연합니다. 모범 사례를 사용할 수는 있지만 자체 작업 방식을 강요하지는 않습니다.
  • 플러그인은 빌드 파일을 사용하기 위해 자체 DSL 및 자체 API를 노출 할 수 있습니다.
  • IDE 통합을 가능하게하는 우수한 툴링 API

25

나는 도움말 작성이 자습서를 참조 하나 ,

Gradle 은 범용적이고 선언적인 빌드 도구입니다. 빌드 스크립트에서 구현하려는 거의 모든 것을 빌드하는 데 사용할 수 있기 때문에 일반적인 용도입니다. 빌드 파일에서 많은 코드를 보지 않기 때문에 선언적이며 읽기 쉽고 유지 관리가 쉽지 않습니다. 따라서 Gradle은 규칙에 대한 아이디어와 단순하고 선언적인 빌드를 제공하지만 도구를 적용하고 개발자가 확장 할 수 있도록합니다. 또한 기본 동작과 다른 후크를 사용자 정의하여 타사 기능을 쉽게 추가 할 수 있습니다.

Gradle은 두 도구의 좋은 부분을 결합하고 추가 기능을 제공하고 Groovy를 DSL (Domain Specific Language)로 사용합니다. 빌드 수명주기 및 사용 편의성과 같은 Maven 기능을 통해 Ant 도구의 강력 함과 유연성을 제공합니다.

왜 그래들? 왜 지금?

빌드 도구의 응답은 비표준 확장 메커니즘을 통해 스크립팅 기능을 추가하는 것입니다. 스크립팅 코드를 XML과 혼합하거나 빌드 로직에서 외부 스크립트를 호출하게됩니다. 시간이 지남에 따라 점점 더 많은 사용자 정의 코드를 추가해야한다고 상상하기 쉽습니다. 결과적으로, 실수로 복잡성을 초래할 수 있으며, 유지 보수성이 유리합니다.

릴리스 버전의 프로젝트를 빌드 할 때 파일을 특정 위치로 복사한다고 가정 해 봅시다. 버전을 식별하려면 프로젝트를 설명하는 메타 데이터에서 문자열을 확인하십시오. 특정 번호 매기기 구성표 (예 : 1.0-RELEASE)와 일치하면 파일을 지점 A에서 지점 B로 복사합니다. 외부 관점에서 보면 사소한 작업처럼 들릴 수 있습니다. 많은 전통적인 도구의 빌드 언어 인 XML에 의존해야한다면이 간단한 논리를 표현하는 것이 상당히 어려워집니다.

Java 빌드 도구의 진화

Java 빌드 로직은 XML로 설명해야합니다. XML은 계층 적 데이터를 설명하는 데는 좋지만 프로그램 흐름과 조건부 논리를 표현하는 데는 부족합니다. 빌드 스크립트가 복잡 해짐에 따라 빌딩 코드를 유지 관리하는 것은 악몽이됩니다.

Ant에서는 JAR 대상이 컴파일 대상에 종속되도록합니다. Ant는 프로젝트를 구성하는 방법에 대한 지침을 제공하지 않습니다. 유연성을 극대화 할 수 있지만 Ant는 각 빌드 스크립트를 고유하고 이해하기 어렵게 만듭니다. 프로젝트에 필요한 외부 라이브러리는 일반적으로 중앙 위치에서 라이브러리를 가져 오는 자동 메커니즘이 없으므로 버전 제어에 체크인됩니다.

2004 년 7 월에 릴리스 된 Maven 1은이 프로세스를 완화하려고 시도했습니다. 종속성 관리는 물론 표준화 된 프로젝트 및 디렉토리 구조를 제공했습니다. 불행히도, 커스텀 로직은 구현하기 어렵다

Gradle 은 해당 세대의 빌드 도구에 적합하며 최신 빌드 도구의 많은 요구 사항을 충족시킵니다 (그림 1). 표현 방식의 DSL, 컨피규레이션 접근 방식, 강력한 종속성 관리 기능을 제공합니다. XML을 포기하고 올바른 언어로 Groovy를 도입하여 빌드 로직을 정의합니다. 설득력 있지 않습니까?

Gradle은 다른 빌드 도구의 최고의 기능을 결합합니다.

여기에 이미지 설명을 입력하십시오

Gradle의 매력적인 기능 세트

여기에 이미지 설명을 입력하십시오

Ant 또는 Maven 대신 Gradle을 사용하여 Java 프로젝트를 빌드하는 이유는 무엇입니까?

Android 용 기본 빌드 도구 (및 JVM의 새로운 빌드 도구)는 복잡한 다국어 빌드를 쉽게 스크립팅 할 수 있도록 설계되었습니다. Ant 또는 Maven을 사용하는 경우 변경해야합니까?

빌드 스크립트 내에서 Gradle의 강력한 기능을 잠금 해제하는 열쇠는 아래 이미지와 같이 도메인 모델을 발견하고 적용하는 데 있습니다. 여기에 이미지 설명을 입력하십시오

Gradle은 엔터프라이즈 빌드와 관련된 모든 요구 사항을 알 수 없습니다. Gradle은 수명주기 단계에 후크를 노출시켜 빌드 스크립트의 실행 동작을 모니터링하고 구성 할 수 있습니다.

Gradle은 Groovy에서 구현 된 DSL을 노출시켜 모델의 어휘를 설정합니다. 복잡한 문제 영역을 다룰 때,이 경우 소프트웨어를 구축하고 공통 언어를 사용하여 논리를 표현할 수있는 강력한 도구가 될 수 있습니다.

또 다른 예는 빌드 도구로 해결되는 매우 일반적인 문제인 외부 라이브러리에 대한 종속성을 표현할 수있는 방법입니다. 기본 Gradle은 빌드 스크립트에 대한 두 가지 구성 블록을 제공하며,이를 통해 검색하려는 종속성 및 리포지토리를 정의 할 수 있습니다. 표준 DSL 요소가 필요에 맞지 않으면 Gradle의 확장 메커니즘을 통해 자신의 어휘를 도입 할 수도 있습니다.

다른 빌드 툴과 통합

Gradle은 아래 이미지와 같이 이전의 Ant, Maven 및 Ivy와 잘 어울립니다.

여기에 이미지 설명을 입력하십시오

빌드에서 배포까지 프로젝트 자동화

여기에 이미지 설명을 입력하십시오

이미지 : 배포 파이프 라인의 단계

  • 코드 컴파일

  • 실행 단위 및 통합 테스트

  • 정적 코드 분석 수행 및 테스트 범위 생성

  • 배포판 만들기

  • 대상 환경 프로비저닝

  • 결과물 배포

  • 연기 및 자동화 된 기능 테스트 수행

나는 도움말 작성이 자습서를 참조 하나 ,


1
또한 컴퓨터의 명령 줄 또는 Android Studio가 설치되지 않은 컴퓨터 (예 : 연속 통합 서버)에서 Android 앱을 빌드 할 수 있습니다.
jettimadhuChowdary

23

Gradle은 빌드 시스템 입니다. 빌드 시스템 은 프로그램 컴파일 프로세스를 자동화하도록 설계된 소프트웨어 도구입니다. 빌드 시스템은 다양한 형태로 제공되며 다양한 소프트웨어 빌드 작업에 사용됩니다. 그들의 주요 목표는 효율적으로 실행 파일을 만드는 것입니다.

또 다른 관련 용어는 소프트웨어 빌드 작성을 자동화하는 프로세스 및 컴퓨터 소스 코드를 이진 코드로 컴파일, 이진 코드 패키징 및 자동화 된 테스트 실행과 같은 관련 프로세스 인 빌드 자동화입니다.

다른 언어에 대한 유사한 빌드 시스템은 거의 없습니다 ( 여기에서 전체 목록 참조 ).

  1. Apache Ant 및 Apache Maven-Java
  2. sbt (Simple Build Tool)-스칼라 용 (플레이 프레임 워크 등)
  3. AAP-Python 기반 빌드 도구
  4. 갈퀴 (아파치 빌더)-루비
  5. 클로저를위한 라이닝 겐

17

설득력이 떨어질 위험에 처한 이유는 이것이 Android Studio / Gradle 경험이 왜 그렇게 나쁜지에 대한 문제라고 생각합니다.

전형적인 Clojure 경험 :

  • project.clj에 나열된 종속성을 가진 프로젝트를 다운로드하십시오.
  • Leiningen은 Clojars와 Maven 덕분에 종속성을 얻습니다.
  • 프로젝트가 컴파일됩니다.

일반적인 Android Studio / Gradle 경험 :

  • "이클립스 프로젝트 가져 오기".
  • 확인 프로젝트를 가져 왔습니다.
  • Gradle이 고맙습니다 ... 기다리고 ... 기다리고 ... 기다리고 ... Gradle이 끝났습니다.
  • 컴파일 ... X가 무엇인지 모르고 / Y 라이브러리를 찾을 수 없기 때문에 컴파일 할 수 없습니다.

이것이 Gradle의 잘못인지 확실하지 않습니다. 그러나 "Eclipse 프로젝트에서 가져 오기"는 상당히 색다른 것으로 보입니다. Gradle의 모든 정교함과 빌드 시스템의 장점에 대해 Android Studio는 Eclipse에서 빌드 종속성이나 빌드 프로세스를 가져 오는 것만으로는 아닙니다.

완전한 종속성 그래프를 가져 오지 못한 경우 알려주지 않습니다. Android Studio는 문제 해결 방법에 대한 유용한 도움말이나 팁을 제공하지 않습니다. Eclipse 폴더에서 수동으로 찾을 수있는 위치는 알려주지 않습니다. 어떤 라이브러리가 누락 된 것 같지는 않습니다. 또는 Maven 등을 검색하도록 도와주십시오.

2016 년에는 Leiningen / Clojars, node의 npm, Python의 pip 또는 Debian apkg (그리고 다른 언어 및 시스템의 유사한 패키지 관리자가 많이 있습니다)과 같은 것들이 모두 아름답게 작동합니다 ... 종종 의존성이 사라졌습니다.

안드로이드 제외. Android Studio는 이제 여전히 누락 된 의존성 지옥을 경험하는 것처럼 보이는 유일한 장소입니다.

이것이 Google의 잘못이라고 생각합니다. 그들은 강력한 변환 프로세스를 생성하지 않고 Eclipse에서 Android Studio / Gradle로 신중하게 전환하기로 결정했을 때 Android 생태계 (및 수천 개의 기존 Android 프로젝트 / 온라인 자습서)를 중단했습니다. 이클립스에서 프로젝트를 수행하는 사람들은 프로젝트를 AS에 적용하지 않습니다 (아마도 고통스럽기 때문에). AS에서 이러한 프로젝트를 사용하려는 사람들도 같은 문제를 겪고 있습니다.

어쨌든 Gradle 이이 강력한 빌드 시스템이라면 왜 SDK 관리자에서 여전히 많은 다른 종속성을 관리하고 있습니까? 예를 들어, ndk가 필요한 프로젝트가 Gradle 파일에 이것을 지정하여 필요할 때 자동으로 설치되고 내장되도록 할 수없는 이유는 무엇입니까? NDK가 왜 특별한가요? 대상 플랫폼과 유사합니까? 프로젝트를 단순히 확인하지 않고 IDE에서 명시 적으로 설치하는 이유는 무엇입니까?


4
Gradle이 끔찍한 빌드 시스템이라는 것에 전적으로 동의합니다. Android Studio를 X-Code 또는 Visual Studio보다 훨씬 더 나쁜 요소입니다. 나는 이것들이 무대 뒤에서 시스템을 "빌드"해야한다는 것을 알고 있지만, 실제로 내부를 알고 / 관리 / 조언 할 필요는 없다. 반면에 Gradle은 모든 Android Studio 업데이트에서 중단되는 것처럼 보이며 클래스를 추가해도 시스템이 다운됩니다. 다른 IDE는 그렇게하지 않습니다.
csmith 2009 년

14

Gradle 플러그인을 통해 맞춤형 빌드 로직을 생성 할 수있는 고급 빌드 툴킷 및 고급 빌드 시스템입니다!

장점 :

  • Dsl-그루비를 기반으로하는 도메인 별 언어
  • DAG-방향성 비순환 그래프
  • 증분 빌드
  • 확장 가능한 도메인 모델
  • Gradle은 항상 최신 상태입니다
  • 작업이 실행되기 전에 Gradle은 작업 입력 및 출력의 스냅 샷을 만듭니다.
  • 스냅 샷이 변경되었거나 존재하지 않는 경우 Gralde가이 작업을 다시 실행합니다.

매니페스트 항목

DSL을 통해 다음 매니페스트 항목을 구성 할 수 있습니다.

변형 빌드

기본적으로 Android 플러그인은 프로젝트를 자동으로 설정하여 디버그 및 릴리스 버전의 애플리케이션을 빌드합니다.

의존성

  1. 지역 의존성 :

JAR 파일과 같이 모듈이 의존하는 로컬 파일 시스템에 바이너리 아카이브가있는 경우 해당 모듈의 빌드 파일에서 이러한 종속성을 선언 할 수 있습니다.

  1. 원격 종속성 :

먼저 리포지토리를 목록에 추가 한 다음 Maven 또는 Ivy가 아티팩트를 선언하는 방식으로 종속성을 선언해야합니다.


13

Gradle은 개미가 Java에 해당하는 Groovy JVM 언어입니다. 기본적으로 Groovy의 빌드 도구입니다. Ant와는 달리 전체 Groovy 언어를 기반으로합니다. 예를 들어 Gradle 스크립트에 Groovy 스크립트 코드를 작성하여 특정 도메인 언어에 의존하지 않고 무언가를 수행 할 수 있습니다.

IntelliJ의 특정 통합을 모르지만 Groovy를 "확장"하여 특정 "빌드"언어 프리미티브를 작성할 수 있고 Groovy 언어의 일부가되었습니다. (Groovy의 메타 프로그래밍은 그 자체로 전체 토론입니다.) IntelliJ / Google은 Gradle을 사용하여 매우 높은 수준의 빌드 언어를 만들 수 있지만 확장 가능한 개방형 표준을 기반으로하는 언어 빌드입니다.


2
그것은 "Groovys 빌드 도구"아니다 - 그것은 누구의 DSL 그루비의 상단에 구축하는 다목적 빌드 도구입니다
martyglaubitz

10

Gradle은 종속성을 관리하고 사용자 정의 빌드 로직을 정의 할 수있는 Android 용 고급 빌드 툴킷입니다. 기능은 같다

  • 빌드 프로세스를 사용자 정의, 구성 및 확장하십시오.

  • 동일한 프로젝트를 사용하여 다른 기능으로 앱에 대해 여러 개의 APK를 만듭니다.

  • 코드와 리소스를 재사용하십시오.

보내다


9

Gradle은 Android 프로젝트뿐만 아니라 다양한 환경에 통합 할 수있는 자동화 된 빌드 툴킷입니다.

gradle로 할 수있는 일이 몇 가지 있습니다.

  • Gradle에는 Android Studio 프로젝트에 대한 기본 구성이 있으므로 새 프로젝트에 최소 구성이 필요합니다.

  • 의존성 선언. 로컬 또는 원격 서버에서 호스팅되는 종속성 jar 파일 또는 라이브러리 파일을 선언 할 수 있습니다.

  • Gradle은 프로젝트 소스에서 테스트 디렉토리와 테스트 APK를 자동으로 생성합니다.

  • keyPassword및과 같은 필요한 정보를 모두 keyAliasGradle 빌드 파일에 추가하면 Gradle을 사용하여 서명 된 APK를 생성 할 수 있습니다.

  • Gradle은 다른 패키지로 여러 개의 APK를 생성하고 단일 모듈에서 구성을 빌드 할 수 있습니다.


8

Android Studio에서 Gradle은 종속성을 관리하고 사용자 지정 빌드 논리를 제공하여 Android 패키지 (apk 파일)를 작성하는 데 사용되는 사용자 지정 빌드 도구입니다.

APK 파일 (Android 애플리케이션 패키지)은 특수 형식의 zip 파일이며

  • 바이트 코드
  • 리소스 (이미지, UI, xml 등)
  • 매니페스트 파일

APK 파일은 ADB (Android Debug Bridge)를 사용하여 서명되고 장치로 푸시됩니다.


6

Gradle은 빌드 도구 사용자 정의이며 APK 빌드 또는 응용 프로그램 패키지 키트로 사용됩니다.


4

에 의해 @ 브라이언 가드너 :

Gradle은 프로그래밍 프로젝트를위한 광범위한 빌드 도구 및 종속성 관리자입니다. Groovy를 기반으로하는 도메인 특정 언어가 있습니다. Gradle은 또한 Java, Android 및 Scala를 포함한 여러 유형의 프로젝트에 대해 컨벤션 별 빌드 지원을 제공합니다.

Gradle의 특징 :

  1. 의존성 관리
  2. Gradle에서 Ant 사용
  3. 그레들 플러그인
  4. 자바 플러그인
  5. 안드로이드 플러그인
  6. 다중 프로젝트 빌드

3

Gradle은 여러 소스, 프로젝트, 라이브러리 등에서 수만 줄의 코드가 포함 된 복잡한 Android 프로젝트 빌드를 자동화 할 수있게합니다. 다양한 구성 사양에 따라 여러 개의 최적화 된 APK를 조건부로 생성 할 수 있습니다. 관심있는 다른 답변은 Gradle 의이 측면에 대한 자세한 내용을 제공합니다.

이 경우 99 %에서, Gradle을 개발 안드로이드를 처음 사용하는 경우, 무엇을 중지 건물에서 프로젝트를. 안드로이드 빌드 프로세스를 효과적으로 난독 화하고 경험이 부족한 개발자가 사용할 수 없게 만드는 복잡하고 복잡한 시스템입니다. 같은 :

  • 안드로이드 APK 구조와 생태계
  • 안드로이드 스튜디오
  • 자바 클래스 패스와 의존성
  • 그루비
  • Gradle 빌드 스크립트
  • 다른 많은 복잡하고 흥미로운 기술

이 모든 것들은 안드로이드 개발자들에게는 흥미롭고 유용하지만, 쉽게 접근 할 수 없으며 진입 장벽이 있습니다. OP 가이 질문을하도록 영감을 준 것은 Gradle에 의해 간단한 앱을 빌드하고 지속적으로 방해하려고 너무 오래 보낸 후 필사적으로 네오 피트 개발자를 때리는 좌절의 느낌이라고 생각합니다. 이러한 모든 기술에 사용할 수있는 엄청나게 많은 양의 기술 문서로 인해 문제가 심각하게 악화됩니다. 또한 많은 개발 요구에 Gradle은 과도합니다.

대안은 android SDK에서 사용 가능한 도구를 자동화하여 프로젝트를 빌드하는 쉘 스크립트를 작성하는 것입니다. 이 접근 방식의 장점은 빌드 프로세스와 안드로이드 생태계를 연구하고 이해하는 가장 좋은 방법 일 것입니다. 그러나이 접근법은 안드로이드를 시험해 본 경험이없는 멍청한 놈보다 심도없는 기술 헤드에 더 적합합니다.

그것의 부재로 눈에 띄는 것은 (그러한 것이 있으면 알려주십시오) 엔트리 레벨의 경량 IDE로 기능 세트가 축소되어 동시에 빌드 프로세스를 단순화하면서 동시에 프로세스를 단순화하는 동시에 Netbeans 또는 Eclipse가 아닙니다. Gradle을 사용하십시오 (개미에 문제가 있음). 몇 가지 일반적인 구성을 준수하는 APK를 쉽게 생성하고 그러한 방식으로 결정하면 전체 Android Studio 프로젝트로 발전 할 수있는 프로젝트 구조를 사용해야합니다.


1

일반적으로 Gradle은 두 가지 중요한 프로세스를 구현하기 위해 Android Studio에서 제공하는 도구입니다.

  1. 프로젝트 구축
  2. AndroidManifest.xml, res 폴더 및 이진 코드를 APK라는 특수 형식의 zip 파일로 패키지

1

검색 결과 웹에서 추천 스 니펫 Android | 짓다. gradle. Gradle은 빌드, 테스트, 배포 등을 자동화하는 데 사용되는 빌드 시스템 (오픈 소스)입니다. 예를 들어, 한 디렉토리에서 다른 디렉토리로 일부 파일을 복사하는 간단한 작업은 실제 빌드 전에 Gradle 빌드 스크립트로 수행 할 수 있습니다. 프로세스가 발생합니다.


1

Android Studio에서 Gradle은 Android 애플리케이션 프로젝트를 빌드하는 데 사용되므로 빌드 시스템의 역할을 수행합니다. Android Studio 이전에는 Eclipse에서 명령 행 도구를 사용하여 애플리케이션을 컴파일하고 빌드했지만 GUI 기반 단계에서 곧 ANT를 사용하여 Android 애플리케이션을 빌드하고 실행하는 데 사용했습니다. 모든 안드로이드 애플리케이션 개발 툴은 리소스, 자바 소스 코드, 외부 라이브러리를 컴파일하고 최종 APK로 결합해야합니다.

Gradle 은 코드 컴파일, 테스트, 배포 및 코드를 .dex 파일로 변환하여 장치에서 앱을 실행하는 빌드 시스템입니다.

Android Studio에는 Gradle 시스템이 사전 설치되어 있으므로 프로젝트를 빌드하기 위해 추가 런타임 소프트웨어를 설치할 필요가 없습니다. 클릭 할 때마다운영android studio 버튼 gradle 작업이 자동으로 트리거되어 프로젝트 빌드가 시작되고 gradle이 작업을 완료 한 후 앱이 AVD 또는 연결된 장치에서 실행되기 시작합니다.

Gradle과 같은 빌드 시스템은 컴파일러, 링커 등이 아니지만 컴파일 작업, 파일 연결, 테스트 사례 실행 및 결국 Android 애플리케이션의 apk 파일에 코드 번들링을 제어하고 감독합니다.

모든 안드로이드 스튜디오 프로젝트마다 두 개의 build.gradle 파일이 있습니다. 하나는 애플리케이션 용 이고 다른 하나는 프로젝트 레벨 (모듈 레벨) 빌드 파일입니다.

빌드 프로세스에서 컴파일러는 소스 코드, 리소스, 외부 라이브러리 JAR 파일 및 AndroidManifest.xml (응용 프로그램에 대한 메타 데이터 가 포함됨 )을 가져와 bytecode 를 포함하는 .dex (Dalvik Executable files) 파일 로 변환합니다 . 이 바이트 코드는 모든 안드로이드 기기에서 앱을 실행하도록 지원됩니다. 그런 다음 APK 관리자는 .dex 파일과 다른 모든 리소스를 단일 apk 파일로 결합 합니다. APK Packager는 각각의 디버그 또는 릴리스 키 저장소를 사용하여 디버그 또는 릴리스 apk에 서명 합니다.

디버그 apk 는 일반적으로 테스트 목적으로 사용되거나 개발 단계에서만 사용된다고 말할 수 있습니다. 앱이 원하는 기능으로 완성되고 외부 사용을 위해 애플리케이션을 게시 할 준비가 되면 릴리스 키 저장소를 사용하여 서명 된 릴리스 apk가 필요합니다 .

이제 gradle 파일에 약간의 빛을 비추십시오.

setting.gradle setting.gradle (Gradle setting) 파일은 앱에서 사용되는 모든 모듈을 지정하는 데 사용됩니다.

build.gradle (프로젝트 레벨) 최상위 레벨 (모듈) build.gradle 파일은 프로젝트 레벨의 빌드 구성을 정의하는 프로젝트 레벨 빌드 파일입니다. 이 파일은 Android 애플리케이션 프로젝트의 모든 모듈에 구성을 적용합니다.

build.gradle (응용 프로그램 수준) 애플리케이션 레벨 build.gradle 파일은 안드로이드 프로젝트의 각 모듈에 있습니다. 이 파일에는 특정 응용 프로그램 모듈에 대한 패키지 이름이 applicationID, 버전 이름 (apk 버전), 버전 코드, 최소 및 대상 SDK가 포함됩니다. jar 파일이 아닌 외부 라이브러리를 포함하는 경우 응용 프로그램의 종속성으로 프로젝트에 포함하려면 앱 레벨 gradle 파일에서 라이브러리를 언급해야합니다.

참고 : 특정 애플리케이션이 스마트 폰, 태블릿 또는 TV와 같은 개별 모듈 용으로 개발 된 경우 별도의 gradle 파일을 모두 만들어야합니다. 명령 행 도구를 통해 gradle 시스템을 시작할 수도 있습니다 . 다음 명령이 사용됩니다.

./gradlew 빌드-(빌드 프로젝트)
./gradlew 클린 빌드-(빌드 프로젝트 완료 스크래치)
./gradlew 클린 빌드-(테스트 실행)
./gradlew 래퍼-(사용 가능한 모든 작업을 보려면)


0

Gradle = Groovy + Cradle Hans Dockter 포럼 의견

혼란은 "Build"또는 Android Studio에서 무언가라고 불릴 때 약간 불필요합니다.

우리는 개발 커뮤니티에서 일을 어렵게 만들고 싶습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.