반응형

디렉토리 구조

 파일, 폴더

 설명

 asets 폴더

 리소스 폴더이다.

 최초는 비어 있는데, 이 안에 비디오, 오디오 등의 파일을 저장한다.

 bin 폴더

 컴파일된 결과 파일이 저장된다.

 gen/R.java

 프로젝트 내의 각종 개체에 접근할 수 있는 ID를 정의한다.

 툴이 자동으로 관리하므로 직접 편집해서는 안된다.

 res

 문자열, 이미지 등 애플레케이션에서 사용할 리소스 파일

 src

 애플리케이션 소스코드 

 AndroidManifest.xml

 프로젝트의 버전이나 이름, 구성 등에 대한 정보를 가진다.

 default.properties

 프로젝트의 빌드 타겟이 명시되어 있다.

 proguard.cgf

 프로젝트의 빌드 타겟이 명시되어 있다.

 .classpath

 소스 파일의 위치, 출력 폴더, 공통 라이브러리 위치 등에 대한 정보가 기록되어 있다.

 .project

 빌드 순서와 방법 등이 명시되어 있다.

 리소스, 프리 컴파일, 자바 컴파일, APK 생성 순으로 빌드됨을 알 수 있다.

 

 

 

 

리소스 디렉토리

리소스 디렉토리는 이미지를 넣는 drawable 디렉토리와

레이아웃 XML 파일을 넣는 layout디렉토리 등으로 이루어져 있다.

 

기본 프로젝트에 자동으로 생성되지 않은 raw, xml 디렉토리 등은 직접 생성하면 된다.

 

어떤 모드에서라도 동일하게 보여지고 싶다면 res/layout/ 디렉토리에 작성해야 하며,

모드별로 각각 다르게 보여주고 싶다면, res/layout-port/, res/layout-land/에 작성한다.

 

 리소스

설명 

 res/drawable-hdpi

 hdpi에서 보여질 이미지

 res/drawable-ldpi

 ldpi에서 보여질 이미지

 res/drawable-mdpi

 mdpi에서 보여질 이미지

 res/drawable-xhdpi

 xhdpi에서 보여질 이미지

 res/drawable-nodpi

 밀도(density)에 상관없이 보여질 이미지

 res/layout/

 사용자 인터페이스 레이아웃을 정의하는 XML 파일

 res/layout-port/

 사용자 인터페이스 레이아웃을 정의하는 XML 파일(세로 모드)

 res/layout-land/

 사용자 인터페이스 레이아웃을 정의하는 XML 파일(가로 모드)

 res/menu/

 메뉴를 정의하는 XML 파일

 res/values/

 문자열 등의 각종 값을 정의하는 파일

 res/xml/

 XML 형태로 저장된 다양한 파일

 res/raw/

 기타 파일(mp3, mp4 등)

 

자세한 부분은

http://developer.android.com/guide/practices/ui_guidelines/index.html

여기서 참조한다.

 

 

 

매니페스트 구조

 <uses-permission />

 애플리케이션이 필요로 하는 권한

 <permission />

 외부 액티비티나 서비스가 필요로 하는 권한

 <instrumentation />

 액티비티가 실행되는 등의 주요 이벤트가 발생했을 때,

 애플리케이션의 어떤 부분을 호출할지를 지정(기록, 모니터링 등)

 <uses-library />

 추가로 필요로 하는 라이브러리 지정(구글 맵스)

 <uses-sdk />

 애플리케이션이 필요로 하는 안드로이드 버전

 <application />

 애플리케이션과 관련된 정보


반응형
,
반응형


안드로이드는 기본적으로 리눅스 커널 위에 탑재된 안드로이드 런타임인 DVM(Dalvik Virtual Machine, 달빅 가상 머신)에서 동작한다. 이를 그림으로 간단히 표현하면 다음과 같다.



안드로이드의 주요 컴포넌트를 각 영역별로 정리하면 다음과 같다.


  • 애플리케이션(APPLICATIONS): 자바로 개발된 애플리케이션이 위치하는 영역이며, 이메일 클라이언트, SMS 프로그램, 달력, 지도, 브라우저, 주소록 등의 애플리케이션이 탑재되어 있다. 또한 우리가 자바로 개발한 애플리케이션이 탑재되는 영역이 바로 여기이다.

  • 애플리케이션 프레임워크(APPLICATION FRAMEWORK): 애플리케이션 프레임워크는 애플리케이션을 개발하기 위해 필요한 각종 API를 제공하는 영역이다. 이 영역에 있는 각종 API를 사용하면 화면에 버튼이나 텍스트 등을 표현하거나 주소록 같은 다른 애플리케이션의 데이터를 사용할 수도 있다. 또한 이미지, 문자열 등의 여러 데이터를 접근하거나 애플리케이션의 생명주기(lifecycle)를 관리하는 API도 이 영역에서 제공한다.

  • 라이브러리(LIBRARIES): 안드로이드에서 사용할 수 있는 다양한 C/C++ 라이브러리를 제공하는 영역이다. 이 영역의 라이브러리는 모두 애플리케이션 프레임워크를 통해 개발자가 사용할 수 있게 하고 있다. BSD(버클리 소프트웨어 배포판)를 기반으로 한 표준 C 시스템 라이브러리가 임베디드 리눅스 기반의 디바이스에 맞게 수정되어 있으며, PacketVideo의 OpenCore를 기반으로 한 미디어 라이브러리는 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 등의 파일들을 지원한다. 서피스 매니저(surface manager)는 2D, 3D 그래픽를 지원하며, WebKit은 브라우저 기능을 지원한다. 그리고 임베디드용으로 개발된 데이터베이스 엔진인 SQLite(에스큐엘라이트)를 제공하고 있다.

  • 안드로이드 런타임(ANDROID RUNTIME): 안드로이드는 자바 기반으로 동작하지만 JVM(자바 가상 머신, Java Virtual Machine)을 그대로 사용하지 않고 DVM(달빅 가상 머신, Dalvik Virtual Machine)을 사용하고 있다. 그래서 작성된 소스 코드(.java)는 자바 컴파일러에 의해 클래스 파일(.class)로 컴파일되며, 클래스 파일은 DX 컴파일러에 달빅 바이트 코드로 변환되며 달빅 실행파일(.dex, Dalvik Executable)과 최적화된 달빅 실행파일(.odex, Optimized Dalvik Executable)로 저장된다. 이 파일들은 안드로이드 기기에서 실행되기 그리고 달빅은 메모리가 작은 소형 기기에서도 효율적으로 동작할 수 있도록 최적화되어 있다. 참고로 안드로이드 4.4(킷캣) 이전에는 Dalvik 기반이었지만 4.4에서는 ART가 새롭게 도입되었으며 안드로이드 5.0(롤리팝)부터는 ART 기반으로 변경되었다.

  • 리눅스 커널(LINUX KERNEL): 안드로이드는 리눅스 커널 3.0.1(안드로이드 4.0)을 기반으로 하며, 이를 통해 보안, 메모리 관리, 프로세스 관리, 네트워크 스택과 각종 드라이버를 제공한다.

TIP & TECH 달빅(Dalvik)
안드로이드는 자바 코드로 작성하기 때문에 자바 가상 머신(JVM, Java Virtual Machine) 상에서 동작한다고 생각할 수 있지만 실제로는 달빅 가상 머신(DVM, Dalvik Virtual Machine) 상에서 동작한다. 달빅은 자바 코드를 최적화시켜 소형 기기에서도 잘 작동할 수 있도록 해주며 자바 바이트 코드를 변환해서 확장자가 dex(Dalvik Executable)인 바이트 코드를 생성한다. 또한 달빅은 JIT(Just In Time) 컴파일 방식을 사용하기 때문에 앱을 실행할 때마다 바이트 코드를 머신 코드로 변경하며 이 과정에서 추가적인 메모리를 필요로 한다.안드로이드 4.4(킷캣)까지만 사용되었으며 5.0(롤리팝)부터는 ART로 변경되었다.

TIP & TECH ART(Android Run Time)
안드로이드 5.5(롤리팝)부터 기본으로 채택되었으며 다음과 같은 장점을 가지며 하위호환성을 위해 달빅과 동일한 바이트코드를 사용한다.

  • AOT(Ahead-of-time) 컴파일
  • 가비지컬렉션 기능 향상
  • 디버깅 지원 기능 향상

ART에서 채택한 AOT 컴파일은 앱이 실행될 때 바이트 코드를 변환하는 대신에 앱이 설치될 때 DEX 바이트 코드를 머신 코드로 변환하는 작업을 한다. 그래서 설치 시간이 길어지지만 실행시간은 짧아지는 장점이 있다.

반응형
,
반응형

add 와 replace 중요성의 차이점은 replace 가 기존의 조각을 제거하고 새로운 조각을 추가하는 것입니다. 즉, 다시 버튼을 누르면 대체 된 프래그먼트가 호출되고 onCreateView가 호출됩니다. add 는 기존의 조각을 유지하고 기존의 조각이 활성화 될 것이라는 의미의 새 조각을 추가하는 반면 '뒤로'단추를 누르면 onCreateView가 기존 조각 (새 조각 전에 있던 단편 조각이 추가됨). 프래그먼트의 라이프 사이클 이벤트 onPause와 관련하여, onResume, onCreateView 및 기타 라이프 사이클 이벤트는 replace 될 경우 호출되지만 add 경우에는 호출되지 않습니다.



add()
 와 replace() 기본적인 차이점은 다음과 같이 설명 할 수 있습니다.

  • add() 는 일부 루트 요소에 단편을 단순히 추가하는 데 사용됩니다.
  • replace() 비슷하게 동작하지만 이전에는 이전 조각을 제거한 후 다음 조각을 추가합니다.

addToBackStack() 을 add() 또는 replace() 와 함께 사용하면 정확한 차이를 확인할 수 있습니다.

add() ... onCreateView가 호출되지 않았을 때 back button을 누르면, replace() 경우에는 back 버튼을 누르면 ... oncreateView가 매번 호출됩니다.


출처 : https://code.i-harness.com/ko/q/11c55df

반응형
,