[Android Studio] 시작하기

Jnary·2022년 10월 10일
1

Android Studio

목록 보기
1/5
post-thumbnail

시작하기

1. 플랫폼 아키텍처


1) Linux Kernel, HAL

  • 하드웨어를 제어하는 공통기능의 계층화
  • emulator : 하드웨어 역할을 하는 소프트웨어
  • 'Android'라는 OS
  • C/C++언어로 작성

2) Native C/C++ libraries

  • HAL에 의존

3) Android Runtime

  • 안드로이드용 자바가상머신
  • Gradle : build tool, JDK등 설치
  • dependencies : 외부 라이브러리 목록 (appcompat)
  • compat : 하위호환성 문제 해결 (= support library)

4) JAVA API Framework

  • IoC : Inversion of Control 제어의 역전
  • 라이브러리 + IoC
  • SDK Library 포함

2. 빌드 프로세스


1) Application Module : 앱 만들 때 생성되는 파일들의 종류

  • Source Code : Java, Cotlin
  • Resource Files : image file
  • AIDL Files : 확장자, Service Component와 연관

2) Dependencies : 라이브러리

  • Library Modules : 압축 X
  • AAR Libraries : Android Archive 압축 파일 형태
  • JAR Libraries : Java Archive 압축 파일 형태

3) DEX File(s)

  • Application Module, Dependencies 의 binary화
  • 소스코드 확장자
  • .java -(컴파일)-> .class -(안드로이드)-> .DEX -> ART(안드로이드용 가상머신)

4) Compiled Resources : 리소스 범위 다양

5) Debug or Release Keystore : key쌍 얻기

  • 암호화 / 복호화 기술 이용
  • Private Key / Public Key
  • 복호화 시, 다른 대상과 비교 -> 동일하면 성공!

6) APK Packager

  • Key의 sign
  • 리소스 압축

7) Debug or Release APK : 배포

  • 공개키를 가진 signed APK
  • 복호화 : 배포한 관리자임을 인지

3. Android 앱 모듈의 기본 프로젝트 구조

  • build.gradle, settings.gradle : 프로젝트 전반에 build와 관련된 공통적인 제약 상황
  • app.build.gradle : 해당 모듈에 특화된 build 정보, 외부 라이브러리 접근 시 사용
  • Module 하나는 App 하나에 대응
  • res.drawble : image 파일
  • res.layout : 화면 설계도 'xml'
  • AndroidManifest.xml : Meta data, 동작방식 및 구성 정보 등의 configuration 파일(->APK)

4. 컴포넌트 기반 개발

  • 컴포넌트 : 애플리케이션을 구성하는 논리적인 단위
  • 화면 설계(java, xml) -> 이벤트 처리(핸들링)

1) Activity : 하나의 화면(의 관리자)

  • 사용자 인터페이스 화면을 가지는 하나의 작업
  • Activity 클래스 상속
    extends Activity -> Activity 상속한 것은 모두 Activity (AppCompatActivity도 Activity의 자식)
  • Activity들이 모여서 앱이 된다.

2) Service

  • 백그라운드에서 실행되는 컴포넌트 (화면 전환에 상관X)
  • 오랫동안 실행되는 작업이나 원격 프로세스를 위한 작업 (ex. 배경음악)
  • Service 클래스 상속 -> Override로 Customize

3) Broadcast reciver

  • 방송을 받고 반응하는 컴포넌트
  • BroadcastReceiver 클래스 상속
  • 방송 ex. 시스템부팅, 파일 다운로드, 배터리 부족
  • 관심 등록한 방송의 신호만 수용 -> trigger삼아서 Receiver가 약속된 동작 수행하도록

4) content provider

  • 데이터를 관리 & 다른 앱에게 데이터 제공하는 컴포넌트
  • ContentProvider 클래스 상속
  • native application (ex. 전화번호부, 갤러리 등)은 기본적으로 ContentProvider를 가짐.
  • ContentProvider는 외부에 데이터를 공유할 때 사용
  • Component<->App 작업의 독립성
    안드로이드 앱은 single entry point를 소유X (main함수처럼 시작하는 곳이 정해져있지 않다.)
    내부에 포함된 컴포넌트들 통해 여러 갈래로 실행
    다른 App이 가지고 있는 컴포넌트도 사용 가능
    -> 응집도 UP! 결합도 DOWN!
  • Intent
    의도를 적어서 안드로이드에 전달하면 안드로이드가 적절한 컴포넌트를 찾아서 활성화
    Intent 클래스의 객체
    외부 앱에서 ContentProvider를 사용하기 위해서는 ContentResolver 객체 사용

5. AndroidManifest.xml

1) 태그 종류
<태그명> 다른 태그 내포 및 내용 </태그명>
<태그명 내용 /> 다른 태그 내포X (leaf node)
여는 태그부터 닫는 태그까지가 한 element
2) 초기 코드

3) 특징

  • 태그들의 중첩구조 -> 트리구조 모델
  • xml에서 모든 값은 쌍 따옴표로 할당

6. Resource 외부화 이용한 개발

1) 코드 내부에서 :
msgTextView.setText(R.string.hello)
-> Resource 필요

public final class R {
	...
    public static final class string {
    	...
        public static final int hello = 0x7f050001;
        ...
  • 개발자가 작업하는 파일X (read only) 자동 생성
  • Resource를 대응하는 정수에 Mapping -> Source에서는 상수로 언급
  • string은 static클래스 이므로 클래스명으로 접근 -> R.string.hello
    res 폴더 내의 resources는 직접적인 경로를 포함한 파일 이름으로 언급X
    source와 resource간의 결합도를 낮추기 위한 장치

getWindow().setBackgroundDrawableResource(R.drawable.graphic);

2) XML 내부에서 :

// res/layout/activity_main.xml파일

<?xml version="1.0" encoding="utf-8"?>
<EditText xmls:android="http://schemas.android.com/apk/res/android"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:textColor="@color/opaque_red"
          android:text="@string/hello" 

다른 Resource 접근 : text = "@태그명/속성명"

// res/values/strings.xml파일
<?xml version="1.0" encoding="utf-8"?>
<resources>
	<color name="opaque_red">#f00</color>
    <string name="hello">Hello!</string>
    				//화면에 Hello! 출력
</resources>

-> 실행되는 위치에 따라 앱의 언어 변경 가능
"hello"라는 이름을 언어별로 정리해줌
text = "Hello!"보다는 resource 접근법을 활용할 것!

  • drawble : 실행 중에 보일 image 파일
  • layout : 화면 배치, 파일 1개가 resource 1개
  • mipmap : 바탕화면에 보일 icon
  • values : 파일 1개에 resource 여러개 설정
profile
숭실대학교 컴퓨터학부 21

0개의 댓글