뷰에 대한 이해
액티비티 = 1개의 화면
AndroidManifest.xml은 앱의 전체적인 정보(액티비티 등)을 정의해 놓는 것
Android 화면 구성
App > Activity > View(컨트롤, 위젯/UI 구성요소)
뷰와 뷰 그룹(Layout)
여러개의 뷰를 담을 수 있다.
Button은 TextView의 속성을 다 갖고 있다.
(컨트롤이 할 수 있는 것을 위젯이라고도 부른다.)
Gradle 빌드 시스템의 이해
모듈이란 무엇인가.
Eclipse의 경우엔 어플을 만들땐 workspace를 나눠서 개별 Project를 만들어서 사용하였다.
Android studio에서의 프로젝트는 이클립스의 workspace와 같고 이클립스의 프로젝트는 모듈과 동일하다.
그래서 새로 만들때는 new module을 추가해서 새로운 것을 추가하면 된다.
(하나의 워크스페이스에서 모듈을 만드는 의미는 환경을 동일하게 유지할 때 사용된다.)
Gradle Script
빌드와 컴파일의 개념 차이
고급언어 -> 바이너리 언어(기계어) : 컴파일
바이너리 언어 + 리소스, 이미지, 레이아웃 -> 하나의 바이너리 파일로 만듬(like APK) : 빌드
빌드 시스템 종류 :
Ant (xml로 사용, 자바, 유연성이 높음)
Maven (라이브러리를 자동으로 생성해서 관리, 유연성이 떨어짐)
Gradle (Ant, Maven의 장점을 섞은 것)
Gradle은 Groovy 언어로 만든것 (Groovy는 자바 + 파이썬, 동적인 객체 지향 언어 (<-> Ant, Maven은 XML))
proguard-rules : 난독화
settings.gradle 은 빌드를 할 때 포함시킬 모듈을 적어놓는것, 하나만 하려면 하나만 남기면 된다.
build.gradle파일에서,
applicationId은 AndroidManifest file의 내용이다. (defaultConfig의 항목은 Manifest 내용을 중심으로 구성됨)
APK(Android Package) 생성 과정
APK 생성 단계
1. 컴파일
2. 패키징 단계 : 포장
3. 서명 단계
Android Project => 컴파일, 패키징 => APK => 서명 => AVD,단말기에 배포
1. 컴파일 단계
[App, resource] - aapt*(android asset packaging tool) -> [R.java]
[Application src코드](MainActivity.java, ...)
[Java Interfaces] (각종 Library들)
[Javac 컴파일러]를 이용해서 위 3가지 R.java, src code, java interface를 합쳐서 .class파일들을 만들어낸다.
[.class] - [dex tool]을 이용 ->[.dex files]
(dex는 실행파일을 의미한다.(달빅에서 동작할 수 있는 것) 윈도우의 exe와 동일하다.
*appt : resource(이미지, Manifest.xml, Layout.xml)을 자바에서 참조할 수 있도록 도와주는 툴 / R.java의 결과물로 나온다.
2. 패키징 단계
[Application Resource] - [aapt] -> [R.java], [Complied Resources] : appt는 resource을 자바가 참조가능하게 만들기도 하면서 리소스들을 컴파일하는 기능도 있다.
[dex.files], [complied resource by appt], [other resource]은 apkbuilder라는 툴을 이용하여 APK로 만든다.
3. 서명
[APK] -[ jar Signer] -> [signed APK] : jar signer을 이용해서 서명을 한다.
[signed APK] - [zip align] -> 압축된 apk : zip align을 이용하여 배포 전에 압축을 하게 된다. 이래야지 구글 스토어에 올릴 수 있다.
자바 코드를 이용한 화면 구성
5가지 화면 구성
1. Linear layout 2. Releative layout 3. frame layout 4. table layout 5. scrollview layout
이 5가지를 xml을 이용하지 않고 자바 코드로 화면을 구성할 수 있다.
(통신의 여부에 따른 화면 구성일 경우 자바 코드로 구성하는게 더 간편하다)
setContentView() 동작원리 및 첫화면 바꾸기
LinearLayout도 ViewGroup을 상속받은 것이기 때문에 다른 View객체들을 포함할 수 있다.
layout의 oriental default값은 horizontal이다.
setContentView는 R.layout.activity_main을 메모리에 올려 놓는다. (메모리 로딩 = 메모리에 올라가있다 = 객체화를 했다 / 메모리에 있는 것을 Application이 가져다 쓰는데 이러한 일련의 과정을 인플레이션이라고 한다)
layout의 이름에 Activity가 들어가면 오류가 뜬다.
상대 레이아웃
xml 파일 상에서 먼저 기술되어 있는 뷰를 아래의 뷰가 참조하는 구조로 코딩을 해야한다.
순서가 바뀌면 오류가 나온다.
(예시 : A, 1, 2순서로 xml에 선언했는데 1번이 2번을 참조해서 상대적인 위치를 참조하게 된다면 오류가 발생한다.)
(tip releativeLayout에선 oriental을 쓸 수 없다)
(@+id/thisisid 추가할 때는 + 참조할때는 @id/thisisid)
layout_toRightOf : 대상의 오른쪽에 배치
layout_alignBaseline : 대상과 베이스 라인을 동일하게 만든다.(LinearLayout은 다르게 명시된다)
layout_alignParentBottom : 부모의 밑에 붙는다.
layout_alignTop : 대상과 윗 부분을 정렬하는 것
layout_above : 대상의 윗 부분에 정렬한다.
layout_below : 대상의 아랫 부분에 정렬한다.
상대 레이아웃 속성
부모 컨테이너의 상대적 위치를 이용하는 속성
layout_alignParent[Top/Bottom/Left/Right] : 왼쪽 상단, 왼쪽 하단, 왼쪽, 오른쪽
layout_center[Horizontal/Vertical] : 가로/세로 가운데 배치
layout_centerinParent : 정 가운데 배치
레이아웃은 상대적인 조합이라서 어떻게든 원하는 곳에 배치할 수 있다.
ex. 오른쪽 아래, layout_alignParentRight = "true" layout_alignParentBottom="true"
그리고 layout_layout_above="@id/target"을 하더라도 target에 의존성을 갖게 되는 것이 아니라 해당 위치값만 갖고 오는 것이다.
layout_align[Right/Left] : 기본 정렬이 왼쪽 정렬인데 오른 정렬로 바꿀 수 있다. (layout_above를 하면 해당 대상의 오른쪽위에 올 수 있다.)
안드로이드에서 사용하는 크기의 단위 및 ID 추가
안드로이드에서 사용하는 단위
px : pixel단위
dp : (=dip destiny independant pixel) 밀도 독립적인 픽셀, 해상도와 관계없이 나타내는 단위.
160dip : 1인치당 160개의 점
1dp => 1px
ex) 320dip => 1inch 당 320개, 1dp= > 1pd
sp (=sip, scale independant pixcel) : 축적 독립적 단위, 글꼴에 해당하는 픽셀. 가변 글꼴에 대서 달랴진다.
(cf. in, mm, em의 단위도 있다)
id를 생성할 때
생성할 명 - @+id/id명
사용할 때 - @id/id명
'소프트웨어 > Android' 카테고리의 다른 글
[android] BufferedReader에 대해서 (0) | 2016.07.29 |
---|---|
[android] StringBuffer에 대해서 (0) | 2016.07.29 |
[android] rest api 연습하기 (0) | 2016.07.29 |
[android] onCreate에서 external storage에 폴더 만들기 (0) | 2016.07.25 |
[android] android.view.inflateexception binary xml file line (0) | 2016.07.25 |