테크 지식
[커뮤니티] #3 App의 구조와 동작 원리
안녕하세요~ 글올린지 얼마나 됬다고 또 쓰는지 원,,;;,,
제목은 거창하게 썼지만 간단합니다 ㅎㅎ
머리아프게 안드로이드의 구조에 대해서 자세하게 설명하고 싶지만 사실 그런게 어플을 만들때 뭔 도움이 되겠습니까?
안드로이드의 구조에 대해서는 자세하게 배우지 않는 이상 어렵습니다 동작원리가...java와 C에 대해 약간은 알아야 이해가 될것같아
왕초보를 기준으로 하고 있는 이 강좌에서는 자세하게 다루진 않겠습니다(퀴즈로 알아보죠 ㅎㅎ)
실제 어플을 만들때 도움이 되는 것만 찝어서 공부하는게 더 이득입니다 ㅎㅎ
그럼 잡설 그만하고 본격적으로 들어가 보겠습니다
잠깐, 퀴즈Q
안드로이드는 오로지 자바로만 되어있다?
정답은 아닙니다 안드로이드에서 사용하는 라이브 러리(lib)들은 C언어로 되어 있습니다
왜냐하면 이 부분은 속도가 중요한대 자바는 가상머신위에서 동작하는거라 C에 비해 속도의 손실이 있어 라이브러리같은건 C를 사용합니다
또한 리눅스 커널을 기반으로 하는대 이 커널도 C가 많죠 ㅎㅎ
안드로이드를 만들기 위해서는 전문 언어를 배워야 한다?
이것도 아닙니다
뭐 게임 만들려고 하기 위해서는 언어를 배워야 하겠지만 왠만한 어플은 독학으로 안배워도 가능합니다
예를들자면 드림나래 어플리케이션 개발자이신 "소피아네"님도 야매로 배우셨다는거죠 ㅎㅎ
이정도 알고계신다면 어플 만드는대 큰 지장은 없으실겁니다
저번 강좌를 보시거나 어플을 뜯어본적이 있다면 알곘지만 어플은 zip포멧을 가지며 확장자는 apk를 사용합니다
또한 어플내에는 여러 폴더가 있는대요 한번 분석해 보겠습니다
/Android (libs) | 타켓으로 지정한 안드로이드 플렛폼의 기본 라이브러리가 들어가 있으며 jar확장자로 존재함 | ★☆☆ |
/assets | 처음엔 비어있으며 동영상파일, zip파일등 어플에서 처리하는 파일들을 저장함 | ★★☆ |
/gen | ADT가 자동으로 만들어내는 파일이며 R.java등이 존재하고 절대 건들면 안되는 곳 | ★☆☆ |
/res | 리소스 파일이 있으며 xml, png등이 존재함 / 자동으로 ID값이 부여되어 가장 많이 쓰는곳 | ★★★ |
/src | 자바 소스가 들어있는 폴더이며 패키지 명과 동일한 폴더가 만들어짐 | ★★★ |
AndroidManifest.xml | 어플에 대한 정보가 기록되어 있으며 사용권한, 패키지 이름들을 정의함 | ★★☆ |
이러한 폴더들이 존재합니다
별을 주었는대요 별이 가장 많을수록 사용도가 높은 폴더입니다
그중 res폴더의 경우 많이 쓰이는 대요
이 폴더에 대해서 더 자세히 들여다 봅시다
anim | 각종 애니메이션 효과가 내장되어 있습니다 대표적으로는 frameworks-res.apk에서 확인이 가능합니다 |
drawable | background, shape등을 지정한 xml이 들어가는 곳이며 또한 모든 해상도에서 사용하는 이미지가 들어갑니다 |
drawable-(해상도) | 각 해상도에 맞게 크기가 변환된 같은이름의 이미지 파일이 들어갑니다 |
layout | 화면구성 xml파일들이 들어가 있습니다(land, port등은 가로, 세로화면일때 어떻게 표시할건지를 지정합니다 |
menu | 메뉴버튼을 눌렀을때 나타나는 메뉴에 대한 xml이 들어가 있습니다 |
raw | 미디어 파일(ogg, mp3)들이 들어갑니다 |
values | 언어(string)가 들어가며 또한 dimens, styles가 들어갑니다 public.xml은 어플이 만들어진후 생성됩니다 |
xml | 설정파일들이 들어가 있습니다 대표적인 예로는 Settings.apk에서 확인이 가능합니다 |
그렇다면 어플은 어떻게 만들어 지고 빌드될까요?
1. IDE와 자바를 이용해 어플을 만듭니다
↓
2. javac를 이용해 만든 어플을 컴파일 합니다
↓
3. 달빅 바이트 코드를 이용하여 변환하고 압축합니다
↓
안드로이드커널과 달빅 가상머신(VM)을 이용하여 어플을 실행합니다
위와 같은 순서로 어플이 만들어 집니다
좀더 자세하게 살펴보겟습니다
이클립스와 ADT는 빌드과정을 자동으로 진행합니다 이때 이클립스의 자동 빌드를 체크해 두면 소스가 변경될때마다 /gen/R.java를 자동으로 업데이트 해줍니다
R.java는 /src에 있는 자바 파일에서 리소스(res)를 참조할수 있는 ID값을 부여해 주는 역할을 합니다
자바코드와 리소스파일들, 그리고 매니페스트가 빌드되어 어플로 만들어 지는대 이때 R.java도 포함되어 빌드됩니다
이렇게 합쳐진 어플은 안드로이드의 달빅 VM에서 실행할수 있도록 DEX로 변환되는대요
패키징과 사인까지 끝난 어플은 설치하여 실행이 가능한 상태가 됩니다
[미르의 팁]
-R.java에 대해 알고 싶어요!
이 파일은 우리 프로그래머들이 신경쓰지 않아도 자동으로 생성되고, 업데이트 되는 파일 입니다
만 짧은 지식으로 설명해 보겠습니다
R.java란 res파일들을 접근하고 제어할수 있도록 안내표시를 하는 ID값을 부여해 주는대요
어플을 분해해서 smali을 확인해 보면 신기하게도 이미지 주소등의 값이 없습니다
왜 없을까요?
그 이유는 R.java가 길잡이 역할을 한다 생각하시면 편합니다
res에 어떤 파일이 새로 생겼다면 이클립스와 ADT는 R.java파일에 이 파일에 대해 접근할수 있는 id값을 부여합니다
그리고 src/java파일에서 아까 추가한 파일에 대해 접근하고 싶다면 R.java파일에게 물어보는 겁니다
"저 파일에 대해 접근할수 있는 코드(ID)를 줘"
자 이정도면 어플의 구조와 동작원리에 대해 약간은 아실수 있을거라 생각됩니다
최대한 쉽게 풀어 쓴다했는대 좀 어려운 부분도 있을것 같군요...
다음편부터는 이제 본격적으로 어플을 만들어 보는시간을 가져보겠습니다