Android Gradle 플러그인(AGP)은
Android 애플리케이션을 지원하는 빌드 시스템으로,
다양한 유형의 소스를 컴파일하고 컴파일된 소스를 기기 또는 에뮬레이터에 연결하는 지원 기능이 있습니다.
개발자가 테스트, 구축, 서명 및 배포할 수 있는 APK 또는 Android App Bundle로 패키징합니다.
빌드 구성에서는 모든 앱 버전에 공통되는 부분을 재사용하면서 자체 코드 및 리소스 세트를 정의할 수 있습니다
* 빌드 시스템으로
- 소스를 컴파일하고, 그 컴파일된 소스를 기기에 연결해준다,
- 테스트, 구축, 서명 및 배포 할 수 있도록 패키징
Gradle 란?
빌드툴 ( bulid tool )
안드로이드 스튜디오는 코드 편집만 하고 실제 빌드는 Gradle이라는 빌드툴을 통해서 빌드된다.
( Gradle용 Android 플러그인은 빌드 툴킷과 함께 작동 )
즉 . Android 스튜디오가 설치되지 않은 컴퓨터(예: 지속적 통합 서버)에서 Android 앱을 빌드할 수 있습니다.
cf. 이외의 빌드 툴 => ant, maven 등..
cf. 함께 사용되는 Skill => CI / CD
빌드 프로세스
일반적인 Android 앱 모듈의 빌드 프로세스를 나타내며 다음과 같은 일반적인 단계를 따릅니다.
- 컴파일러는 소스 코드를 DEX(Dalvik Executable) 파일로 변환하고 그 외 모든 것은 컴파일된 리소스로 변환합니다. 이 DEX 파일에는 Android 기기에서 실행되는 바이트 코드가 포함됩니다.
- 패키저는 DEX 파일과 컴파일된 리소스를 결합하여 선택한 빌드 대상에 따라 APK 또는 AAB를 만듭니다. 앱을 Android 기기에 설치하거나 Google Play 같은 스토어에 배포하려면 APK 또는 AAB에 서명해야 합니다.
- 패키저는 디버그 키 저장소 또는 출시 키 저장소를 사용해 다음과 같이 APK나 AAB에 서명합니다.
- 디버그 버전의 앱(즉, 테스트 및 프로파일링 전용 앱)을 빌드 중인 경우에는 패키저가 디버그 키 저장소로 앱에 서명합니다. Android 스튜디오는 디버그 키 저장소로 새 프로젝트를 자동으로 구성합니다.
- 출시 버전의 앱(즉, 외부에 출시할 앱)을 빌드 중인 경우에는 패키저가 출시 키 저장소로 앱에 서명합니다(구성 필요). 출시 키 저장소를 생성하려면 Android 스튜디오에서 앱 서명을 참조하세요.
- 최종 APK를 생성하기 전에, 패키저는 앱이 기기에서 실행될 때 더 적은 메모리를 사용하도록 앱을 최적화하기 위해 zipalign 도구를 사용합니다.
빌드 프로세스가 끝나면 배포, 테스트 또는 외부 사용자에게 출시할 수 있는 앱의 디버그나 출시 APK 또는 AAB가 생성됩니다.
빌드 구성 파일
맞춤 빌드 구성을 생성하려면 하나 이상의 빌드 구성 파일이나 build.gradle 파일을 변경해야 합니다.
이러한 일반 텍스트 파일은 Groovy를 사용하는 빌드 로직을 설명하고 조작하기 위해
Domain Specific Language(DSL)를 사용합니다.
Groovy는 자바 가상 머신(JVM)용 동적 언어입니다.
settings.gradle 파일은
- 루트 프로젝트 디렉터리에 있으며, 프로젝트 수준 저장소 설정을 정의하고,
앱을 빌드할 때 포함해야 하는 모듈을 Gradle에 알려줍니다.
- 다중 모듈 프로젝트에서는 최종 빌드에 들어가야 하는 각 모듈을 지정해야 합니다.
( Project ) build.gradle 파일
- 루트 프로젝트 디렉터리에 있으며 plugins 블록을 사용하여
프로젝트의 모든 모듈에 적용되는 Gradle 종속 항목을 정의합니다.
- 최상위 빌드 파일에는 빌드 디렉터리를 정리하는 코드가 포함되어 있습니다.
( Module ) build.gradle 파일
- 이 파일이 위치하는 특정 모듈의 빌드 설정을 구성할 수 있습니다.
- 맞춤 패키징 옵션을 제공(예: 추가적인 빌드 유형 및 제품 버전)할 수 있으며,
main/ 앱 매니페스트 또는 최상위 build.gradle 파일에 있는 설정을 재정의할 수 있습니다.
* 빌드 구성의 첫 번째 줄은 Android 플러그인을 적용합니다
이것을 빌드하고, Android 전용 빌드 옵션을 이용 가능 하도록 하는 블록을 만듭니다.
plugins {
id 'com.android.application'
}
/**
* Android 블록은 모든 Android 옵션 구성하여 만드는 곳입니다.
*/
android {
namespace 'com.example.myapp'
/**
* 앱의 네임스페이스입니다. 주로 앱 리소스에 액세스하는 데 사용됩니다
* ( 패키지 경로 )
*/
compileSdkVersion 28
/**
compileSdkVersion은 Gradle이 앱을 컴파일하는 데 사용해야 하는
안드로이드 API 수준을 지정합니다.
이것은 앱이 이 API 수준 이하에 포함된 API 기능을 사용할 수 있다는 것을 의미한다.
*/
/**
defaultConfig 블록은 모든 빌드 변형에 대한 기본 설정 및 항목을 캡슐화하고
main/AndroidManifest.xml의 일부 특성을 빌드 시스템에서 동적으로 재정의할 수 있습니다.
다양한 버전의 앱에 대해 이러한 값을 재정의하도록
제품 플레이버를 구성할 수 있습니다.
*/
defaultConfig {
// 게시할 패키지를 고유하게 식별합니다.
applicationId 'com.example.myapp'
// 앱을 실행하는 데 필요한 최소 API 수준을 정의합니다.
minSdkVersion 15
// 앱을 테스트하는 데 사용되는 API 수준을 지정합니다.
targetSdkVersion 28
// 앱의 버전 번호를 정의합니다.
versionCode 1
// 앱에 대한 사용자 친화적인 버전 이름을 정의합니다.
versionName "1.0"
}
buildTypes {
/**
buildTypes 블록은 여러 빌드 유형을 구성할 수 있는 곳입니다.
기본적으로 빌드 시스템은 디버그와 릴리스의 두 가지 빌드 유형을 정의합니다.
디버그 빌드 유형은 기본 빌드 구성에서 명시적으로 표시되지 않지만
디버그 도구가 포함되어 있으며 디버그 키로 서명됩니다.
릴리스 빌드 유형은 Proguard 설정을 적용하고 기본적으로 서명되지 않습니다.
*/
/**
기본적으로 Android Studio는 minifyEnabled를 사용하여
코드 축소를 사용하도록 릴리스 빌드 유형을 구성하고
기본 Proguard 규칙 파일을 지정합니다.
*/
release {
// 릴리스 빌드 유형에 대해 코드 축소를 사용하도록 설정합니다.
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
flavorDimensions "tier"
productFlavors {
/**
productFlavors 블록에서는 여러 제품 플레이버를 구성할 수 있습니다.
이렇게 하면 기본 구성 블록을 자체 설정으로 재정의할 수 있는
다양한 버전의 앱을 만들 수 있습니다.
productFlavors 는 선택 사항이며 빌드 시스템은 기본적으로 생성하지 않습니다.
이 예는 무료 및 유료 제품을 만듭니다.
각 제품 Flavors는 자체 애플리케이션 ID를 지정하여
Google Play Store 또는 Android 장치에 동시에 존재할 수 있습니다.
productFlavors를 선언하는 경우 플레이버 치수도 선언하고
각 플레이버를 플레이버 차원에 할당해야 합니다.
*/
free {
dimension "tier"
applicationId 'com.example.myapp.free'
}
paid {
dimension "tier"
applicationId 'com.example.myapp.paid'
}
}
}
/**
모듈 수준 빌드 구성 파일의 dependencies 블록은 모듈 자체만
빌드하는 데 필요한 종속성을 지정합니다.
자세한 내용은 빌드 종속성 추가를 참조하십시오.
*/
dependencies {
implementation project(":lib")
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
참고 :
https://developer.android.com/studio/build?hl=ko
'Android' 카테고리의 다른 글
android EditText InputFilter (0) | 2022.10.25 |
---|---|
Android wifi state Receiver (0) | 2022.10.25 |
Android UI 파편화 관련 (0) | 2022.09.01 |
android 조이스틱 (0) | 2022.03.25 |
(스크랩 ) android animation 종류 (0) | 2022.03.02 |