02-1 안드로이드 소개
안드로이드 운영체제의 구조
pg. 52

- 리눅스 커널 안드로이드는 리눅스에 기반을 둔 오픈소스 소프트웨어 스택
- 하드웨어 추상화 레이어 하드웨어의 추상화 게층으로, 상위의 자바 API 프레임워크에서 하드웨어 기능을 이용할 수 있게 표준 인터페이스 제공
- 안도르이드 런타임 ART, 앱을 실행하는 역할, 안드로이드 앱이 빌드되는 DEX 파일을 해석해서 실행
- 네이티브 C/C++ 라이브러리 안드로이드 앱 대부분은 자바 프레임워크로 개발하지만 네이티브 C/C++ 라이브러리를 이용할 수도 있음 -> 안드로이드 NDK
- 자바 API 프레임 워크 앱을 개발할 때 사용하는 자바 API
02-2 안드로이드 앱 개발의 특징
컴포넌트를 기반으로 한 개발
pg. 56
컴포넌트
- 애플리케이션의 구성 요소 (구성하는 단위)
- 안드로이드에서는 클래스로 컴포넌트 개발, 하나의 클래스가 하나의 컴포넌트
컴포넌트 개발의 특징
- 컴포넌트는 앱 안에서 독립된 실행 단위
- 앱 실행 시점이 다양 -> 안드로이드 앱에는 메인 함수(딴일 시작점) 개념이 없음
- 애플리케이션 라이브러리를 사용할 수 있음
클래스 - 컴포넌트
- 애플리케이션을 구성하는 모든 클래스가 컴포넌트는 아님
- 앱은 여러 클래스로 구성
- 컴포넌트 클래스와 일반 클래스로 구분 - 런타임 때 생명주기를 누가 관리하는가에 따라 차이
- 일반 클래스 - 생명주기 관리를 개발자 코드에서 함
- 컴포넌트 클래스 - 생명주기를 안드로이드 시스템에서 관리
안드로이드 컴포넌트 종류
- 액티비티 화면을 구성하는 컴포넌트, 앱이 실행되면 액티비티에서 출력한 내용이 안드로이드 폰에 나옴
- 서비스 백그라운드 작업을 하는 컴포넌트, 화면 출력 기능 없음
- 콘텐츠 프로바이더 앱의 데이터 공유, 하나의 앱이 자신의 데이터를 다른 앱에 공유하려면 콘텐츠 프로바이더를 만들어야 함
- 브로드캐스트 리시버 시스템 이벤트가 발생할 때 실행되게 하는 컴포넌트 (ex) 부팅 완료, 배터리 방전
리소스를 활용한 개발
pg. 61
리소스
- 안드로이드 앱 개발의 특징 - 리소스를 많이 활용
- 리소스란? 코드에서 정적인 값을 분리한 것
- 개발 생산성과 유지보수성 향상
문자열을 리소스로 등록
<string name="mytxt">
애국가
</string>
문자열 리소스 사용 예
textView.text = resources.getString(R.string.mytxt)
02-3 앱 구성 파일 분석
프로젝트의 폴더 구성 알아보기
pg. 63

앱 환경 설정 파일
메인 액티비티 파일
레이아웃 XML 파일
빌드 설정 파일
- 프로젝트를 만들면 app이라는 모듈이 자동 생성
- 모듈 하나가 앱 하나, 프로젝트는 여러 모듈을 묶어서 관리
모듈의 폴더 구성 알아보기
pg. 64
그래들 빌드 설정 파일
- 그래들 안드로이드 앱의 빌드 도구, 앱을 빌드하는 데 필요한 설정 등록
- build.gradle(Project) 프로젝트 수준
- build.gradle(Module) 모듈 수준, 모듈은 앱을 의미 -> 대부분의 빌드 설정은 모듈 수준의 그래들 파일에 작성
/ 플러그인 선언 /
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
android {
/ 컴파일 버전 설정 /
compileSdk 31
defaultConfig {
// 앱의 식별자 설정, 고유한 문자열로 지정
applicationId "com.example.androidlab"
// SDK 버전 설정
minSdk 21
targetSdk 31
// 앱의 버전 설정
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
// 컴파일 옵션
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
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'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
메인 환경 파일
- 매니페스트 파일 안드로이드 앱의 메인 환경 파일
- XML의 속성 값이 @으로 시작하면 리소스를 의미함
- 안드로이드 컴포넌트(애플리케이션의 구성 요소)는 시스템에서 생명주기 관리
- 시스템은 매니페스트 파일에 있는 대로 앱 실행
- 컴포넌트는 매니페스트 파일에 등록해야 시스템이 인지
<?xml version="1.0" encoding="utf-8"?>
<!--네임 스페이스 선언 -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.androidlab">
<!-- 애플리케이션과 관련된 정보들 (앱 아이콘, 앱 이름, 테마 등) -->
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AndroidLab">
<!-- 액티비티 선언 -->
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<!-- 앱 아이콘을 클릭했을 떄 실행되는 액티비티라는 의미 -->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
리소스 폴더
- 각 리소스 폴더에 다시 하위 폴더 정의할 수 없음
- 리소스 파일명은 자바의 이름 규칙 위배할 수 없음
- 리소스 파일명에는 알파벳 대문자 이용할 수 없음
메인 액티비티 파일
- 매니페스트 파일의 설정값에 따라 폰에 앱을 설치한 후 앱의 아이콘을 터치하면 MainActivity.kt 파일이 실행
- MainActivity 클래스가 실행되면 onCreate() 함수가 자동으로 호출
- setContentView() 함수는 매개변수에 지정한 내용을 액티비티 화면에 출력
- 본 코드에서는 R.layout.activity_main 로 지정했으므로 src/main/res/layout/activity_main.xml 파일에 구성한 내용을 화면에 출력
// 'AppCompatActivity' 를 상속받아 'MainActivity'라는 클래스 정의
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// setContentView() 함수는 매개변수에 지정한 내용을 액티비티 화면에 출력
setContentView(R.layout.activity_main)
}
}반응형
'Android > 깡샘의 안드로이드' 카테고리의 다른 글
| [깡샘의 안드로이드] 06 뷰를 이용한 화면 구성 (0) | 2022.04.25 |
|---|---|
| [깡샘의 안드로이드] 01 개발 환경 준비하기 (0) | 2022.04.24 |
댓글