스마트기기개발관련/안드로이드 개발

안드로이드 - 프로젝트 생성시 기본 폴더 구조와 설명

AlrepondTech 2020. 9. 18. 06:55
반응형

 

 

 

 

=================================

=================================

=================================

 

 

 

 

안드로이드 - 프로젝트 생성시 기본 폴더 구조와 설명

 

출처 :

http://www.appting.com/bbs/board.php?bo_table=B46&wr_id=2261&sfl=wr_subject||wr_content&stx=manager&sst=wr_hit&sod=desc&sop=and&page=1

 

 

이번에는 안드로이드 프로젝트 폴더가 어떻게 구성되어 있는지에 관한 내용입니다.

전 글에 이어 지루한 내용이지만 대충 훌터 보신다면 전체적인 안드로이드 프로젝트가

어떻게 이루어 졌는지 대한 감이 잡히실걸로 생각됩니다.

 

추가로 저도 배우는 입장이라 몇가지 모르는 부분들이 있는데요

바로 res, raw, asset의 리소스 관련 폴더를 왜 굳이 구분해 놓았는지 모르겠더군요.

컴파일되고 컴파일 안되고의 상태 차이는 설명 가능하지만, 왜 구분해 놓았는지 그 이유는

명확히 설명을 못 드리겠습니다. 추후 경험이 더 생겨서 알게되면 내용 추가하겠습니다.

 

아시는 분이 게시면 가르쳐 주시면 정말 감사하겠습니다^^

그럼 좋은 하루 되세요~

 

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

 

1. 프로젝트 Root 폴더 구성

Eclipse IDE이나 기타 툴을 사용해 새로운 안드로이드 프로젝트를 생성하면 프로젝트의 루트 폴더는 다음과 같은 파일/폴더가 생성된다.

  • AndroidManifest.xml - 해당 어플리케이션에 대한 정보와 포함하는 컴포넌트 (activity, Content Provider 등) 정보가 수록된 xml형태의 문서
  • build.xml - 어플리케이션을 컴파일하고 안드로이드 디바이스에 인스톨하는데 사용되는 Ant script (주1)
  • default.property - Ant script가 사용하는 프로퍼티 파일
  • bin 폴더 - 컴파일된 바이너리가 저장되는 폴더
  • libs 폴더 - 어플리케이션이 필요한 외부 JAR 파일을 저장하는 폴더
  • src 폴더 - 어플리케이션의 Java 원시 코드를 저장
  • res 폴더 - 어플리케이션의 레이아웃, 사용되는 이미지/문자열 등 컴파일된 자바 코드와 함깨 패키징되는  리소스를 저장. 이곳에 저장된 리소스들은 AAPT(Android Asset Packaging Tool)의 의해 컴파일되고 리소스 명세가 프로젝트폴더\gen\R.java 이라는 자동 생성 파일에 정리된다. 소스코드 상에서는 R클래스(예: R.layout.main)를 통해 쉽게 컴파일된 리소스에 접근할 수 있다. 
  • asset 폴더 - 어플리케이션 배포 시 static하게 패키지에 포함 시킬 리소스 저장. res폴더에 저장된 리소스와 다른점은 이곳에 저장된 리소스들은 컴파일 되지 않고 raw형태로 packaging되며, 소스코드 상에서 AssetManager클래스를 이용해 바이트 스트림 형식으로 읽어와서 사용 해야한다.

2. 안드로이드 프로젝트 생성시 자동으로 생성되는 요소

  • src 폴더 및의 소스 파일 - 소스 파일은 프로젝트 생성시 사용자가 재공한 main activity의 이름에 따라 프로젝트폴더\src\main_activy_이름.java 파일이 생성됨. 이 폴더에 저장된 파일은 자유롭게 편집하거나 또는 새로운 파일을 추가 할 수 있음.
  • gen 폴더 및 R.java 파일 - 프로젝트를 처음 빌드하면 프로젝트 루트 폴더 밑에 gen이라는 이름의 폴더가 생성되고, 내부에는 R.java 파일이 자동으로 생성된다. R.java 파일은 실행 코드 내부에서 리소스들을 쉽게 사용할 수 있게 해주는 R객체 인스턴스의 기본이 되는 클래스이며, 내부에는 aapt에 의해 컴파일된 리소스(\res)들을 식별하는 리소스 identifier 상수가 자동으로 저장됨으로, 절대 임의로 수정하면 안됨. (eclipse개발 환경에서는 res\ 밑에 리소스를 추가 후 프로젝트를 저장하면 자동으로 R.java 클래스가 update됨)

 

 

 

3. res 폴더 내부

프로젝트폴더\res\에는 다음과 같이 각기 다른 리소스가 폴더별로 저장 됨.

  • res\anim - animation을 지정하는 xml 형식의 문서 저장. frame by frame(프레임 별로 에니메이션 설정) 또는 tweened(에니메이션의 처음과 끝의 형태를 지정하면 자동으로 중간 단계들이 채워짐) 두 종류의 animation을 지원.
  • res\drawalbe - png, jpeg등의 이미지
  • res\layout - UI layout 관련 xml 형식의 문서
  • res\menu - menu 관련 xml 형식의 문서
  • res\raw - 컴파일 되지 않은 리소스 저장. (ex. 계정 정보를 담은 CVS파일) 자바코드에서는 Resources.openRawResource() 메소드를 사용해 리소스에 접근
  • res\values - string, 오브젝트 크기 등
  • res\xml - 어플리케이션에 포함시키고자 하는 xml 형식의 자원

 

 

 

4. 산출물 저장

프로젝트를 컴파일 후 프로젝트폴더\bin\ 폴더는 다음과 같이 구성.

  • bin\classes 폴더 - 컴파일된 자바 코드
  • bin\classes.dex - 실행가능한 컴파일된 자바 코드
  • bin\AppName.ap - res 폴더 밑의 리소스들이 zip 압축 알고리즘을 사용해 압축된 파일
  • bin\AppName-debug.apk 또는 bin\AppName-unsigned.apk - install 가능한 안드로이드 어플리케이션 (-debug가 붙은 apk파일은 특정 에뮬레이터의 전자서명 키로 전자서명된 것을 뜻함. 반면 -unsigned를 포함한 apk파일은 release 빌드이지만 정식 전자서명 키와 jarsigner를 이용해 전자서명 하여야 최종 릴리즈 가능 함)

 

Install가능한 .apk 파일은 zip 압축 알고리즘을 사용한 압축 파일로 다음과 같은 요소를 포함.

  • .dex 파일 - 컴파일된 실행 파일
  • AppName.arsc - 컴파일된 리소스 파일
  • 컴파일 필요 없는 리소스 - \res\raw 폴더 밑의 자료 등
  • AndroidManifest.xml 파일


(주1) Ant script: make와 같은 각종 shell에 dependent한 빌드 툴 대신 모든 플렛폼에서 유니버셜하게 사용가는한 xml포멧의 문서를 build script로 사용하는 build tool. Apache 프로젝트의 일환. (http://ant.apache.org/ 참고)

 

 

 

=================================

=================================

=================================

 

 

반응형