[Android/Flutter 교육] 15일차

MSU·2024년 1월 16일

Android-Flutter

목록 보기
15/85

오늘부터 안드로이드 강의가 시작되었다.
배웠던 코틀린 잊지말고 안드로이드 배울때마다 계속 배운내용 생각해야겠다.
view단을 xml파일로 만드는걸 알게되었다. 추후에 다른 방법을 알려줄지도 모르지만.
res(리소스폴더)의 layout폴더에서 activity_main.xml의 내용을 수정하여 앱 메인화면에 보여줄 화면을 구성해준다.
안드로이드 스튜디오의 버전업에따라 코드작성뿐만아니라 드래그앤드롭 방식으로도 화면을 구성하게 발전한 것 같다.
예전에 pyqt 한번 접해봤을때 gui툴로 화면구성하면 코드가 매우 지저분하게 작성이 되었던걸로 기억하는데... 아직 처음 단계라 구조가 단순해서 그런진 몰라도 코드가 깔끔하게 구현되는 것 처럼 보인다.
view단에서 만든 요소를 이제 MainActivity.kt에서 findViewById함수로 가져오면 실제 메인화면에서 사용할 수 있게 연결되는 것 같다.
버튼 요소를 가져와 setOnClickListener메서드에서 onClick메서드를 오버라이딩하고 버튼을 클릭하면 텍스트뷰 요소의 내용을 바꾸는 이벤트를 처리할 수 있다.
해당 과정은 실제 현업에서 강사님이 쓰는 과정은 아니고 튜토리얼 느낌으로 받아들이면 될 것 같다.

안드로이드 특징

  • 애플리케이션 프레임워크
  • 이전 안드로이드 가상머신은 Dalvik이었으나 안드로이드5.0부터 ART로 변경됨
    Dalvik -> 실행 시 실시간으로 기계어로 번역하면서 실행됨
    ART -> 설치 시 기계어로 번역해놓고 실행 시 기계어 코드가 실행된다.
  • SQLite DB
  • OPEN GL ES 3.x 기반 3D 그래픽 지원
  • 다양한 미디어 지원
  • Android Studio IDE 제공
  • 센서 등 다양한 하드웨어 지원

안드로이드 구조

  • 리눅스 커널 : 안드로이드는 리눅스 커널을 사용함
  • HAL : 리눅스 커널과 하드웨어 기기간의 인터페이스 부분으로 단말기 제조사가 드라이버를 구현할 수 있도록 제공되는 계층
  • Android 런타임: ART와 Core Libraries로 구성, 안드로이드 애플리케이션을 구동하기 위한 가상머신.
  • Native C/C++ : 안드로이드 OS가 애플리케이션 및 기능들을 구동하기 위해 사용하는 라이브러리. 개발자가 Java나 Kotlin으로 만들어진 API를 이용하면 여기에 구현되어 있는 C코드가 동작하게 된다. C로 만들어진 라이브러리를 사용할 수 있다.
  • Java/Kotlin API : 개발자가 애플리케이션을 제작할 때 사용하는 라이브러리
  • 시스템 앱 : OS 내부에 내장되어 있는 애플리케이션으로 개발자가 애플리케이션을 개발할 때 일부 기능을 가져다 사용할 수 있다.

AndroidX 라이브러리

  • 안드로이드는 지속적인 버전 업데이트를 통해 많은 변화를 이루었다.
  • 이에 하위 버전의 OS와 상위 버전의 OS간의 차이가 심하게 나타난다.
  • 이에 상위 버전에 추가된 기능 중 일부를 하위 버전에서도 사용할 수 있도록 라이브러리가 애플리케이션에 추가되는데 이를 Support라이브러리라고 부른다.

안드로이드의 가장 큰 문제

안드로이드 9.0을 타겟으로 만든 어플리케이션에서
안드로이드 12에서 추가된 기능을 사용할 수 있는가?

이전에는 개발자가 OS버전별로 화면을 다르게 만들어야 함

지금은 안드로이드 어플리케이션 내부에 라이브러리가 포함됨
OS버전에 관계없이 화면을 비슷하게 보여줄 수 있음

그만큼 어플리케이션 용량이 커지고 메모리를 많이 필요하게 됨

안드로이드 9.0을 타겟으로 만들면 9.0 이후에 나온 버전의 기능은 일부가 내부 라이브러리에 포함되어 있어 일부 기능만 쓸 수 있다.

안드로이드 개발 시 기능을 지원하는 OS 파악이 꼭 필요
현재는 7.0 이상이면 무난하게 개발 가능
OS별로 분기하여 코드를 나눠주는 방식이 경우에 따라 필요

프로젝트 생성

  • 매번 Empty Views Activity로 프로젝트 생성할 예정

  • Minimum SDK 버전 선택 시 help me choose로 현재 OS점유율 파악할 수 있음(2주 텀으로 실시간 업데이트 됨)선택한 버전에서 출시된 기능들은 이전 버전의 안드로이드 단말에서는 사용 불가
    요새는 안드로이드 10버전을 많이 사용한다고 함(인공지능 기능이 10버전부터 추가됨)

  • Name : 애플리케이션 이름. 아이콘 하단에 표시가 된다(아이콘 표시 하단에 표시되는 이름은 수정이 가능하다). 중복 이름으로 해도 된다.
  • Package Name : 애플리케이션 패키지 이름. 단말기 및 스토어에서 어플 구분하기 위한 이름. 절대로 중복되면 안된다. 회사 도메인(뒤집은 것) + 어플이름으로 많이 설정함 (예: kr.co.lion.appname). 수정 불가
  • Save location : 프로젝트가 저장될 경로. 한글이 포함되면 안된다.
  • Language : 개발 언어. Kotlin or Java
  • Minimum SDK : 애플리케이션 지원 최소 버전. 설정된 버전 이상의 단말기를 대상으로 서비스가 가능하다. 설정된 버전 이하의 모든 API를 사용할 수 있으며 초과 버전의 대부분의 기능을 사용할 수 있지만 일부는 사용할수 없을 수도 있으며 버전별로 분기해야 할 수도 있다.
  • Build configuration language : 프로젝트를 컴파일하고 실행파일로 만들기 위한 설정 파일 형식

settings

Android Emulator
Medium Phone 사이즈 선택
UpsideDownCake API Level 34 Android 14.0 버전 선택
에뮬레이터 실행 후 settings의 언어 설정에서 한국어 추가후 영어보다 순서를 위로 올리면 시스템 언어가 한국어로 바뀜
네비게이션 버튼 화면 아래로 이동 - 디스플레이 -> 탐색모드 -> 3버튼 클릭

단말기 테스트 세팅

  • 윈10 이후 usb 드라이버는 자동 설치됨
  • 단말기에 있는 빌드번호 확인(설정 -> 휴대전화 정보 -> 소프트웨어 정보 -> 빌드번호)
  • 빌드번호 여러번 클릭하면 개발자 옵션이 활성화 됨
  • 개발자 옵션에서 USB 디버깅 활성화
  • USB로 PC와 연결 후 안드로이드 스튜디오에 연결한 모바일 확인이 되면 연결 성공
  • 안드로이드 스튜디오의 Settings -> Tools -> Device Mirroring에서 첫번째 옵션 체크해주면 가상 디바이스처럼 PC화면에서도 조작할 수 있다.

동작 원리

안드로이드 4대 구성 요소

  • Activity : 눈에 보이는 화면을 관리하는 실행 단위
  • Service : 화면을 가지지 않은 실행 단위. 백그라운드 프로세싱
  • Broadcast Receiver : OS가 메시지를 받으면 실행되는 실행 단위
  • Content Provider : 저장된 데이터를 제공하기 위해 실행되는 실행 단위
  • 안드로이드 애플리케이션은 4대 구성 요소들을 통합 관리하는 번들 개념이다.

프로젝트 구조

  • AndroidManifest.xml : 안드로이드 애플리케이션에 관련된 설정 파일(개발자가 안드로이드 OS에 알려주고자 하는 정보를 전달하는 파일)
  • kotlin+java : 개발자가 작성하는 소스 코드
  • res : 이미지, 사운드, 데이터 등 애플리케이션에서 필요한 리소스

애플리케이션 설치

  • 제작된 애플리케이션은 apk라는 파일로 압축되어 마켓에 등록된다
  • apk 파일을 단말기에 다운로드하게 되면 자동으로 설치가 이루어진다.
  • 안드로이드 OS는 설치가 완료되면 AndroidManifest.xml 파일의 내용을 분석하게 된다.
  • 여기에서 안드로이드 4대 구성요소 중 어떤 것들이 있는지 파악하여 이를 정리하게 된다.

애플리케이션 실행

  • 안드로이드 os는 AndroidManifest.xml 에 기록되어 있는 Activity들 중에서 다음과 같은 것이 설정되어 있는 것을 찾는다.
  • 찾은 Activity의 name 속성에서 클래스를 확인한다.(.MainActivity)
  • 확인한 클래스의 객체를 생성한 다음 onCreate 메서드를 호출한다.
// MainActivity.kt

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {
    // Activity 객체가 생성되고 자동으로 호출되는 메서드
    // 이 메서드가 Activity 안에서 코드의 시작점이 된다.
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // Activity가 관리할 화면을 만든다.
        // 매개변수에는 화면을 만들기 위해서 필요한 정보가 담긴
        // xml 파일을 설정한다.
        // R -> res 폴더
        // layout -> res 폴더 안에 있는 layout 폴더
        // activity_main -> layout 폴더에 있는 activity_main.xml
        setContentView(R.layout.activity_main)
    }
}

activity_main.xml

오른쪽 상단에 Design 버튼을 누르면

오른쪽 상단에 Code 버튼을 누르면




※ 출처 : 멋쟁이사자 앱스쿨 2기, 소프트캠퍼스 
profile
안드로이드공부

0개의 댓글