학과공부/모바일 앱 프로그래밍

안드로이드 프로젝트와 앱의 동작 원리

helpilsang 2025. 2. 22. 16:18

 

안드로이드 프로젝트

하나의 앱을 개발하기 위해 통합 개발환경(IDE)내에 구성하는 작업 공간 (workspace)

[IDE : Android studio]

 

 

안드로이드 프로젝트를 구성하는 주요 파일 및 폴더

 

[layout → 화면이라고 이해하면 됨], [manifest → 접근권한을 요청하는 정보 ex) 마이크설정, 카메라 등등...]

 

안드로이드 프로젝트 주요 파일들의 참조 관계

[Strings.xml 에서 정의된 변수들과 Activity_main.xml 에서 정의된 화면 ID등등의 정보들이 컴파일되어 R.java에 등록이되어 이것을 Main이 참조해서 가져다가 사용하여 실행한다.]

 

Activity 개념

- Activity란 안드로이드 앱에서 하나의 화면을 표현하기 위한 구성요소를 뜻함. [AP와 메모리를 관리하는 단위 / 현재는 화면을 관리하는 단위로 이해하면 편함]

- Activity 내에는 다양한 기능을 수행하기 위한 코드가 작성되는데 실행 부분[main]과 데이터 부분[activity_main, Strings]으로 구분됨

- R.java는 XML 구조로 정의된 데이터들을 실행부분에서 활용할 수 있도록 변수 형태의 ID와 주소값을포함

 

 

 

안드로이드 프로젝트의 구성1

* activity_main.xml

 - 하나의 안드로이드 앱은 실행부분과 데이터부분으로 분리되어 있엄

 - 데이터 부분 중 하나만 화면의 구조를 표현하는 레이아웃은 일반적으로 JAVA 코드에 직접 기술하지 않고 XML에서 기술     됨

 # 중요 키워드 : 데이터부분, 화면 구조, 레이아웃 (동일한 의미)

--------------------------------------------------------------------------------------------------------------------------------------------------------------

- RelativeLayout이라는 레이아웃안에 문자열 표시를 위한 View인 TextView를 배치하고 있음

- 홑 화살 괄호 ('<', '>') 로 정의된 각 구성요소중 TextVIew 의 android:text 속성에는 @string/app_name값이 지정되어있음

- @string/app_name 값이 strings.xml에서 정의된 'app_name'이라는 이름의 문자열 ID로 대체된다는 사실을 의미함

- 문자열에 대한 정보는 R.java 파일에 저장되며, 실제 문자열의 내용은 strings.xml에 저장되어있음

--------------------------------------------------------------------------------------------------------------------------------------------------------------

 

* strings.xml

- 안드로이드 앱이 사용하는 다양한 유형의 리소스 중 하나인 물자열은 관리의 편의성을 위해 XML 파일에 따로 정의됨

- 문자열이 정의되는 XML 파일은 기본적으로 strings.xml파일임.

 

 

* R.java

 - 안드로이드 앱이 사용하는 자원을 참조하기 위해 사용되는 ID가 정의된 클래스 R을 포함하고 있음

 - JAVA 프로그램이나 XML 파일에서 참조하는 리소스의 ID는 R.java 파일에서 정의됨

 - R클래스나 내부의 16진수 정의는 개발 툴 (AAPT)에 의해 자동적으로 작성

# R.java는 자동으로 AAPT에 의해서  변수들을 자동으로 등록함.

 

 - 다른 리소스 파일들을 컴파일한 후에 자동으로 리소스 ID를 이 파일에 등록하게됨

 - AAPT에 의해 자동적으로 정의되고 사용되는 정보이므로 개발자가 임의로 R.java 파일의 내용을 변경해서는 안됨.

 - R 클래스의 필드인 R.layout.main은 JAVA 파일의 setContentView가 인수로써 사용됨

 

예시

# R.java : 주소록과 같은 기능

 

 

안드로이드 프로젝트의 구성2

 

* MainActivity.java

- 안드로이드 앱의 화면을 구성하거나 사용자와 상호작용하느 Activity클래스를 상속받아 새로운 액티비티를 생성함

- 사용자가 발생시키는 이벤트에 반응하여 새로운 액티비티(화면)을 생성하거나 사용자의 요구사항을 만족하는 동적 작업을 수행함

 

* AndroidManifest.xml

대표적인 역할

 - 안드로이드 앱 컴포넌트의 선언

 - 안드로이드 앱의 실행을 위한 소유권한정의

 - 안드로이드 앱이 필요로 하는 최소한의 API 레벨 정의

 - 안드로이드 앱이 필요로하는 하드웨어와 소프트웨어 기능정의

 - 안드로이드 앱이 필요로 하는 API 라이브러리 정의

 

안드로이드 주요 컴포넌트

 - 액티비티 : 하나의 스마트폰 화면을 관리하는 컴포넌트

 - 서비스 : 스마트폰 화면 별도로 백그라운드에서 독립적으로 동작하는 컴포넌트

 - 방송 수신자 : 안드로이드 플랫폼에서 발생하는 다양한 이벤트를 수신하고 처리하는 컴포넌트

 - 콘텐츠 제공자 : 데이터를 체계적으로 관리하고 앱이 활요될 수 있도록 인터페이스를 제공하는 컴포넌트

 

 

 

 

 

 

안드로이드 앱의 동작 원리 [시험문제 나옴]

실행하기 위한 과정

 - 안드로이드 앱은 JAVA 언어를 이용하여 작성됨

 - 개발자가 작성된 JAVA코드는 JAVA 컴파일러에 의해 JAVA 바이트코드로 컴파일됨
 - JAVA환경에서는 JAVA 바이트코드를 JAVA 가상머신 (virtual machine)을 통해 실행하지만
   안드로이드는 ART/Dalvik 이라고 하는 별도의 가상머신에서 JAVA 바이트 코드를 실행함.

   => 안드로이드용 JVM 은 자바보다 컴팩트하게 만들어서 2/3 정도의 메모리를 사용하게 최적화된 JVM이다

- 안드로이드 SDK가 제공하는 DEX 변환기를 이용하여 JAVA 바이트 코드를 DALVIK의 실행포맷인 .dex 파일
   ( Dalvik 바이트 코드) 로 변환하게됨

-  변환된 .dex 파일과 리소스 파일들은 설치할 수 있는 .apk 파일로 만들어짐

 

안드로이드 프로젝트의 실행과정

 

- 배포 및 설치를 위한 .apk 파일의 생성은 AAPT(Android Asset Packaging Tool)라는 개발도구로 이용하고, 이 과정을 패키징이라고함

- 패키징 과정이 끝나 만들어진 .apk 파일을 플랫폼에 설치하면 런타임에서 실행될 수 있음

 

 

앱의 배포과정 (순서)

1. 안드로이드 앱은 .apk 파일 확장자로 패키징되어 배포됨

2. 안드로이드 프로젝트에 대한 코드 컴파일 작업이 수행되면, JAVA 프로그램의 .class 파일이 생성되고,

  .class파일을 이용하여 안드로이드 실행환경(Dalvik, ART)에 적합한 .dex파일이 생성

3. 컴파일된 리소스 파일 (XML)은 resources.arsc라는 파일로 생성되고, 안드로이드 앱의 설정 환경을
    정의하는 AndroidManifest.xml  파일이 생성됨

 4. 최종적으로 컴파일 되지 않은 리소스 파일(이미지, 아이콘 파일등)들과 .dex파일, resources.arsc 파일
    AndroidManifest.xml파일이 함께 패키징되어 .apk 파일이 생성됨

 

 [ADB : Android Debug Bridge]

 

5. 서명 key를 이용하여 .apk 파일에 서명작업을 하여 .apk 파일이 타인에 의해서 위변조되는것을 방지함 (Signing 단계)

6. 서명 key는 디버그 목적으로 앱을 빌드할 때 사용하년 Debug key와 배포목적으로 빌드할 때 사용하는 Release Key로 구분됨
7. 이러한 서명작업에서 사용한 키값은 안드로이드 앱의 업데이터에서 개발자의 식별에 사용됨

8. 마지막으로 다양한 앱을 공유하거나 거래할 수 있는 마켓인 Google play에 업로드를 수행함

 

'학과공부 > 모바일 앱 프로그래밍' 카테고리의 다른 글

모바일...하...뭔..  (0) 2025.04.03
위젯  (0) 2025.03.21
TextView, ImageView  (2) 2025.03.08