혼자 공부하면서 정리하고 싶은 부분을 작성한 글입니다 👀
함께 공부하는 사람에게는 도움이 되었으면 좋겠고,
혹시 제가 잘못 이해한 부분이 있다면 알려주시면 감사하겠습니다 💌
모바일 기기를 제어하는 리눅스 기반의 운영체제
1. 누구나 참여할 수 있는 오픈소스
개발자나 단말기를 생산하는 사람들은 기기의 호환성에 맞게 자유롭게 수정 가능
2. 다양한 생태계 존재
Android TV, Wear OS, Android Auto, Android Things 등
3. 풍부한 리소스와 검증된 라이브러리
구글 기반 서비스들과 쉽게 연동 가능
4. 특정 운영체제나 장비가 필요 없음
자바에서 일어나는 문제 해결을 위해 만들어진, JVM에서 동작하는 정적 타입 프로그래밍 언어
1. 간결성
ex. getter와 setter를 작성하는 Java의 class ➡ Kotlin에서 data class로 간결하게 표현
2. 더 안전한 코드 작성
ex. Null Safety, 컴파일 시점에 미리 알려주기 때문에 NullPointException 방지
3. 자바와 100% 호환 가능
앱과 관련된 기본적인 설정 - 앱의 4대 구성요소(Activity, Service, Broadcast Receiver, Content Provider)와 권한들을 명시함
앱 내 동작을 정의하는 코드들
android test : 안드로이드 프레임워크를 가지고 테스트
test : 유닛 테스트
앱 내 사용하는 자원들의 집합 (사진, 아이콘, 색상, 문자 등)
미리 알고 가자 🙋🏻♀️
- Gradle : 빌드 프로세스 자동화 툴
➡ 코드를 작성하고 컴파일, 테스트, 서명 및 배포, apk, bundle 패키징하는 작업까지 모두 이루어져야 앱을 사용할 수 있는데 이 과정을 자동화한 것!
- 모듈 : 소스 파일 및 빌드 설정으로 구성된 모음
프로젝트에는 하나 이상의 모듈이 포함 될 수 있으며, 하나의 모듈이 다른 모듈을 종속 항목으로 사용할 수 있다. 각 모듈은 개별적으로 빌드, 테스트 및 디버그 할 수 있다.
📱 안드로이드 스튜디오 대표적인 모듈
- Application : 처음으로 프로젝트를 만들고 생성되는 app 모듈 ➡ APK 파일 생성
- Android Library : 안드로이드 프로젝트에서 지원되는 모든 파일 형식을 포함할 수 있음, Application 모듈의 종속 항목으로 추가 할 수 있음 ➡ AAR 파일 생성
- Java or Kotlin library : 순수 Java 혹은 Kotlin으로만 이루어진 모듈, 안드로이드 프레임워크로부터 독립적인 기능을 구현할 때 사용 ➡ JAR 파일 생성
모든 하위 프로젝트 모듈에 공통적인 구성 옵션을 추가할 수 있는 최상위 빌드 파일
// Top-level build file where you can add configuration options common to all sub-projects/modules.
// 모든 하위 프로젝트 모듈에 공통적인 구성 옵션을 추가할 수 있는 최상위 빌드 파일입니다.
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.1.3'
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.20'
}
}
// 새로 빌드할 때 기존 파일들을 어떻게 할지
task clean(type: Delete) {
// 모든 파일을 삭제하고 다시 빌드
delete rootProject.buildDir
}
bulid.gradle (Project: xxx) 파일보다 조금 더 높은 스코프에 있음
bulid.gradle (Project: xxx) 의 플러그인을 어디서 가져올지 설정
plugins
반드시 필요한 플러그인들 선언
compileSdk
어떤 안드로이드 SDK 버전으로 앱을 컴파일 할 것인지 (앱 개발 당시의 최신 API를 컴파일 SDK로 지정할 것을 권장)
defaultConfig
빌드 타입과는 무관하게 모두 적용되는 속성들
minSdk
앱을 사용할 수 있는 최소한의 API 레벨
targetSdk
앱이 기기에서 동작할 때 사용하는 API 레벨 (앱이 개발 당시 테스트 된 API 레벨)
앱 개발 당시의 최신 API를 targetSdk로 지정할 것을 권장
buildTypes
release 모드(출시용), debug 모드(개발용)이 있다.
dependencies
앱에 종속시킬 라이브러리들 선언
// 반드시 필요한 플러그인들 선언
plugins {
id 'com.android.application'
id 'kotlin-android'
}
android {
// 어떤 안드로이드 SDK 버전으로 앱을 컴파일 할 것인지
// 앱 개발 당시의 최신 API를 컴파일 SDK로 지정할 것을 권장
compileSdk 31
// 빌드 타입과는 무관하게 모두 적용되는 속성들
defaultConfig {
applicationId "com.xxx.xxx"
minSdk 23 // 앱을 사용할 수 있는 최소한의 API 레벨
targetSdk 31 // 앱이 기기에서 동작할 때 사용하는 API 레벨 (앱이 개발 당시 테스트 된 API 레벨) 앱 개발 당시의 최신 API를 targetSdk로 지정할 것을 권
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
// release 모드(출시용), debug 모드(개발용)이 있다.
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
// 컴파일할 때 필요한 옵션들
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
// jvmTarget이 몇 버전인지
kotlinOptions {
jvmTarget = '1.8'
}
}
// 아래 라이브러리들이 우리의 앱에 종속되어 있다
dependencies {
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
...
}
📖 참고
https://youtu.be/BIubAKowCyw
https://youtu.be/kQEBMV9swzQ