02. [안드로이드 앱 개발 기본 지식]

728x90

[01. 안드로이드 앱 기본 구조]

[01. 앱 실행 테스트 방법]

1) AVD 가상 기기 이용

-AVD(Android Virtual Device). = 에뮬레이터 사용하여 테스트

2) 실제 스마트폰 이용

-윈도우용 USB 드라이버 설치 -> 스마트폰에 USB 디버깅 허용 -> 앱 실행 테스트

 

[안드로이드 자체 특징]

-공개 OS인 리눅스 기반

-자바/코틀린 이용 개발 가능

[안드로이드 OS 구조]

리눅스 커널 안드로이드는 리눅스에 기반을 둔 오픈소스 SW 스택
하드웨어 추상화 레이어(HAL)  
안드로이드 런타임(ART) 앱 실행하는 역할
안드로이드 NDK(native development kit) 네이티브 안드로이드 앱 대상 라이브러리
자바 API 프레임워크 앱 개발 시 사용하는 자바 API
 

[안드로이드 버전에 관하여]

-개발자는 운영체제 버전과 API 레벨(SDK 버전) 함께 알고 있어야 함


[02. 안드로이드 앱 개발]

[02. 안드로이드 앱 기본 구조]

[02-1. 안드로이드 소개]

[안드로이드 자체 특징]

-공개 OS인 리눅스 기반

-자바/코틀린 이용 개발 가능

리눅스 커널 안드로이드는 리눅스에 기반을 둔 오픈소스 SW 스택
하드웨어 추상화 레이어(HAL)  
안드로이드 런타임(ART) 앱 실행하는 역할
안드로이드 NDK(native development kit) 네이티브 안드로이드 앱 대상 라이브러리
자바 API 프레임워크 앱 개발 시 사용하는 자바 API

[안드로이드 OS 구조]

[안드로이드 버전에 관하여]

-개발자는 운영체제 버전과 API 레벨(SDK 버전) 함께 알고 있어야 함


[02-2. 안드로이드 앱 개발]

   ➀ [컴포넌트 기반 개발]

-컴포넌트 = 애플리케이션 구성요소. 단위. 독립된 실행 단위

-하나의 애플리케이션은 여러 ㅋ머포넌트로 구성됨

[안드로이드 앱 구성 클래스 구분]

-일반 클래스 : 생명주기를 개발자 코드에서 관리함
-컴포넌트 클래스 : 생명주기를 안드로이드 시스템에서 관리함

-통상, 하나의 클래스가 하나의 컴포넌트

[안드로이드 컴포넌트 종류]

액티비티 -앱 화면 구성 컴포넌트
-[Activity 클래스 상속받아야 함]
서비스 -백그라운드 작업 컴포넌트
-[Service 클래스 상속받아야 함]
콘텐츠 프로바이더 -앱의 데이터 공유하는 컴포넌트
-[ContentProvider 클래스 상속받아야 함]
브로드캐스트 리시버 -시스템 이벤트 발생 시 실행되게 하는 컴포넌트
-[BroadcastReceiver 클래스 상속받아야 함]
 

[컴포넌트 특징]

-컴포넌트는 앱 안에서 독립된 실행 단위. 종속X

-앱 내에서 독립 실행 되므로, 앱 실행 시점이 다양함

-> 컴포넌트 생명주기를 안드로이드 시스템에서 관리.
-> 기존 자바 : (두 클래스 객체의 코드를 결합하여 객체 생성 -> 실행 )
-> 안드로이드 : (두 클래스 컴포넌트 독립 실행단위.
          안드로이드 시스템에 다른 클래스 실행 의뢰
       -> 이유 : 컴포넌트 생명주기를 시스템에서 관리하기 때문.

-앱 라이브러리 사용 O. 다른 앱을 이용해서 라이브러리처럼 활용하여 연동 O


   ➁ [리소스 활용한 개발]

-리소스 : 코드에서 정적인 값 분리해놓은 항상 같은 값. XML 파일로 작성

-사용자 이벤트에 따른 동적 값이 아닌, 항상 똑같은 값에 대해서는 분리 개발이 효율 높음

-따라서, 항상 똑같은 요소에 대해, 코드에 담지 않고, 리소스로 등록하여 반복 사용

   -ex. 문자열/색상/크기/레이아웃/이미지/메뉴 등


[02-3. 앱 구성 파일 분석 ]

[프로젝트 폴더 구성]

-프로젝트 만들면 app 모듈 자동 생성됨.

모듈 = 앱 단위.

프로젝트 = 여러 모듈 묶어 관리.

[모듈 폴더 구성]

build.gradle 빌드 설정 파일
AndroidManifest.xml 앱 메인 환경 파일
res 리소스 폴더
acticity_main.xml 레이아웃 XML 파일
MainActivity.kt 메인 액티비티 파일

 ▷[그레이들 빌드 설정 파일] : build.gradle 파일

-Gradle : 안드로이드 앱 빌드 도구.

프로젝트 수준 파일
-모듈 수준 파일

-앱 빌드에 필요한 설정을 이 파일 내부에 등록

    中. 모듈 수준 Gradle 파일 열어보면 몇 가지 설정 자동 등록되어 있음

plugins { // 플러그인 선언
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}


android {
compileSdk 32 //컴파일 버전 설정


defaultConfig {
applicationId "com.yong.androidlab" // 앱 식별자 설정 (고유 문자열 지정)
minSdk 21 //이 앱 설치 가능한 SDK의 최소 버전 설정
targetSdk 32 //개발 적용하는 SDK 버전 설정
versionCode 1 //앱의 버전 설정 (이후 업데이터 될 때마다 버전 올려서 배포)
versionName "1.0“


testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}


buildTypes {
release {
minifyEnabled false
proguardFiles
getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
// 개발 언어의 버전 t jfwjd
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}


dependencies { // 앱에서 이용하는 라이브러리 버전 설정
-> targetSDK 설정한 SDK 이외에 추가한 라이브러리는 모두 여기에서 선 언필요
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'
}

 ▷[메인 환경 파일] : AndroidManifest.xml 파일

<?xml version="1.0" encoding="utf-8"?>
// 네임스페이스 선언


package="com.example.ch6_view">
//앱 전체 대상 설정
<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>

-앱 메인 환경 파일

-시스템에서 안드로이드 컴포넌트 생명주기 관리

-시스템은 매니페스트 파일 대로 앱을 실행

- 액티비티 : <activity> 태그로 등록
- 서비스 : <service> 태그로 등록
- 브로드캐스트 리시버 : <reciever> 태그로 등록
- 콘텐츠 프로바이더 : <provider> 태그로 등록

-결국, 매니페스트 파일에 컴포넌트를 등록해야 시스템이 인지할 수 O

 

 ▷[리소스 폴더] : res 폴더

-앱의 리소스 등록 목적 사용

drawable 이미지 리소스
layout UI 구성에 필요한 XML 리소스
mipmap 앱 아이콘 이미지
values 문자열 등의 값으로 이용되는 리소스

-res 폴더 아래에 기본 생성 폴더.

-리소스 파일이 R.java 파일에 상수 변수로 등록되고 이 변수로 코드에서 리소스 이용함

-> , 아래의 규칙을 반드시 따를 것.

res 하위 폴더명은 반드시 지정된 폴더명만 사용
각 리소스 폴더에 대해 다시 하위 폴더 정의 불가
리소스 파일명은 자바 이름규칙 위배 불가
리소스 파일명에 알파벳 대문자 이용 불가

 

 ▷[레이아웃 XML 파일] : activity_main.xml 파일

-화면 구성 레이아웃 XML 파일

 ▷[메인 액티비티 파일] : MainActivity.kt 파일

-매니페스트 파일의 설정값에 따라,

폰에 앱 설치 후 앱 아이콘 터치하면 메인 액티비티 파일 실행된다.

-화면 출력 목적의 액티비티 클래스

class MainActivity : AppCompatActivity() { //AppCompatActivity 상속받은 하위 클래스


override fun onCreate(savedInstanceState: Bundle?) { // 내부 자동 호출될 메소드(함수)
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_main) //내부의 내용을 화면에 출력하는 함수
    }
}

 

728x90