디지털 양피지/Android2010. 6. 29. 10:09
1일차는 실습보다는 안드로이드와 스마트 폰에 대한 얘기와 환경구축을 중점적으로 교육이 진행됐다.
과정 진행이 빠르고 접해보지 못한 JAVA나 이클립스 등의 환경 때문에 따라가기도 쉽지 않은것 같다.
교육 내용을 정리하는 것도 좋지만 조금도 과정에 집중해야겠다.



1 일차 정리:
1. 개발 환경 구축
    - JDK, 이클립스, Adroid SDK 설치 하고 , 이클립스에 플러그인으로 SDK를 설치한다.애뮬레이터 AVD를 설정하여 테스트 환경을 만들 수 있다.

2. Android Application의 특징은 XML Layout 구조이며, 느슨하게 결합된 컴포넌트들로 구성되며, 각 컴포넌트와 이들이 서로 상호 작용하는 방법을 기술하는 프로젝트 매니페스트를 통해 결합된다. Activity, Broadcast Receiver, Contents Provider, Service 가 있다.


개발 디렉토리
    - Src - Source folder. 프로젝트 등록시 만들어지 패키지 안래 xxx.java 파일이 등록된다.
     - gen - Source folder. 사용자가 직접 작업하는 폴더는 아니다. Generate의 약자로 자동으로 만들어진 파일들이다. R.java가 생성된다. 이 자바 파일은 Resource File의 이용 방법이 패핑되어 있다. res 폴더에 파일, 그림, 아이콘, 등의 resource 를추가 하면 자동 매핑된다.
      - res - Resource 들이 들어있는 폴더
< Android 폴더 구조>

매니페스트 파일
매니페스트에는 앱 이름등의 중요 정보가 들어가며 컴퍼넌트들이 정리되어 있다. 그밖에도 사용되는 library와 permission 등의 정보가 저장되어 진다. 설치시나 런타임시에도 매니페스트 파일은 중요한 역활을 한다.
<매니페스트 파일: activity가 등록되어 있다.>

그림의 소스에서와 같이 Application의 이름과 패키지 명이 선언된다. 그리고, application 태그 안에는 activity, service 등과 같은 컴퍼넌트들이 등록된다. 이후 애플리케이션과 컴퍼넌트의 permission 등이 설정되어 권한을 가지는 컴퍼넌트들만 사용할 수 있도록 한다. 

퍼미션은 퍼미션 태그를 사용하여 등록하고 사용한다.
<permission android:name="AAA"> : 공개할 매니페스트 파일에 선언한다.
<uses-permission name="AAA" > : 사용할 애플리케이션에서 사용할 퍼미션의 이름을 선언하여 사용하면 된다.

퍼미션을 설정하여 컴퍼넌트를 사용하도록 할 수 있다. 네티이트 앱에는 이렇게 선언된 컴퍼넌트들이 많다.
퍼미션은 보안의 기능도 있지만 use-permission을 이용하여 설치시 다른 앱과 관련된 정보를 보여주는 기능도있다.

TIP: 이클리스 사용시 단축키
  - Ctrl+ Space: 자동완성
  - Ctrl+Shift+o : 패캐지 임포트
  - Ctrl+Shift+f: 인텐트를 맞추어 준다.

로그를 찍기 위해서는 Log class를 이용한다.
<로그캣에 찍힌 로그 확인>

DDMS 사용하기
DDMS에서 왼쪽 아래쪽에 애뮬레이터 콘틀롤에서 Telephone Action에서 전화걸기 SMS 보내기 등을 할 수 있다. Location Control에서는 GPS의 위, 경도를 보내 테스트 할 수 있도록 되어 있다. 
오른쪽 File Exploer에서는 SDCard등을 애뮬레이터 할 수 있도록 되어있다. 로그캣도 하단의 창에서 볼 수 있다.
<DDMS의 애뮬레이터 콘트롤>

매니페스트 파일은 직접 작성하지 않고 아래 탭을 이용하여 추가해주면 자동으로 작성된다.



Android App의 생명주기(교재: 73)
  - App의 Life Cycle은 Android System에서 관리한다.
  -  App의 Life Cycle 우선 순위는  App 내의 컴포넌트 중 최고높은 우선순위의 컴포넌트 우선순위를 그대로 따른다. 활성 상태의 컴포넌트는 스택의 제일 위에 위치하며 우선순위가 가장 높다.

# 각 애플리케이션은 자신만의 컴포넌트 스택 정보를 가지고 있다.   
# 각 컴포넌트는 화면의 보일때 활성상태라 하고 보이지 않을 때를 비활성 상태라고 한다. 비활성화 상태에서는 메모리 관리시 해지의 관리 대상이 된다. (p75)

<애플리케이션의 우선 순위와 스택 정보>

B 앱을 실행하고 1, 2, 순서데로 컴포넌트를 실행하고 다시 A 앱을 실행 했을 경우 A의 스택 정보는 따로 생긴다. 3, 4의 순의로 실행 됐을 경우 우선순위는 a2가 활성화 되어 있어 가장 높다. 이상태에서 백버튼을 누를 경우 3의 a1으로 이동하게 되는 것이다. 다시 백버튼을 누르면 b2로 돌아가는 방식이다.
그림에서는 B앱에서 A앱을 실행했지만 B앱에서 A앱의 a2 컴포넌트를 사용할 경우에는 그냥 B 앱의 스택에 a2 컴포넌트 정보가 남는다. 

리소스 외부화하기(p76 ~)
   리소스는 drawable(그림들), layout(화면 구성), string(문자 등) 을 등록 할 수 있다. drawable은 3개의 폴더로 나누어 진다. "-" 는 부가 정보로 hdpi(high), mdpi(middle), ldpi(low) 로 dpi 속성에 따라 나누어져 있다. 

리소스 사용하기(p85~)
   Source :
   R.layout.main: 현재 프로젝트 내의 리소스
   android.R.layout.XXX: 안드로이드에서 미리 만들어 놓은 리소스
   R.id.name: 추가한 객체의를 사용

XML(layout 등에서 사용할 때):
@string/hello : 현재 프로젝트 string의 name 리소스
@android:string/hello: 안드로이드에서 만들어 놓은 것
@+id/name: 객체를 추가한다.

  XML에서 id를 주어 객체를 만들수 있다. @id
setContentsView에서 는 layout의 main을 받아 사용.

여러가지 언어와 하드웨어를 위한 리소스 만들기(p91)
폴더의 디렉토리 구조에 따라 언어와 하드웨어의 리소스를 선택적으로 만들어 사용한다. 이때 안드로이드에서 지정한 순서는 받드시 지켜 주어야 한다.

리스트 뷰 만들기


1. res/values 에 array.xml을 만들어 다음과 같이 소스 작성.
<array.xml 에서 resource 작성>

2. layout의 main.xml에 ListView객체를 추가해준다.
<main.xml에 ListView 객체를 추가>

3. 메인코드에는 다음과 같이 작성하고 컴파일 한다.
< Hello.java 소스 수정>
* 이제. 아래와 같이 스타일을 바꾸어 보자

1. value/style.xml을 추가하고 다음과 같이 작성.
< style.xml>
2. 매니페스트 파일 수정
<android:theme를 추가해준다>

Activity Class
Android에서 Activity는 애플리케이션이 사용자에게 내보일 수 있는 화면 하나 하나를 나타낸다.사용자에게 화면을 보여주고자 한다면 Activity를 하나씩 만들 필요가 있다. Android에서 Activity는 화면 전체를 차지하도록 설계되어 있다. 하지만, 투명, 반투명, 다이알로그 박스등으로 일부만 차지하도록 만들수 있다. 

기본 Activity 클래스는 빈 화면만을 나타내고 있으며, Layout을 이용하여 화면의 위치와 표시 방법등을 컨트롤하고, View를 만들어 데이터를 출력하고 사용자와 상호작용하는 인터페이스 컨트롤을 만들 수 있다. ViewGroup은 여러레이아웃을 통해 복수개의 뷰를 컨트롤 할 수 있도록 도와줄 것이다.

안드로이드 액티비티 좀더 자세히 살펴보기(p95)
  - 화면 구성을 위한 UI Component
  - Activity를 상속 받아 사용한다. 

Activity의 Life Cycle (p97)
< 액티비티의 생명주기 >

  - Activity는 가 호출이 되면 onCreate(), onRestoreInstanceState(), onStart(), onResume() 의 순(콜 순서)으로 불리우고 활성 상태가 된다.
  - 가시 상태로 변경 될때 onSaveInstanceState(), onPause()가 호출 된다.
     (가시상태: 화면에 떠있지만 User 반응 없는 상태)
  - onStart, onResume은 Create 될때도 불리우지만 onRestart 후 불리기도 하니 상황에 따라 잘 사용한다.
  - onCreate, onResourceInstanceState, onSaveInstanceState는 매개 변수로 Bundle을 받아 데이터를 처리할 수 있어 저장된 데이터에 대한 처리를 해줄 수 있다.


4장. 사용자 인터페이스 만들기

기본적인 안드로이드 UI 디자인(p109)
   95년 나온 GoF의 Design Pattern이 가장 유명하다. 이런 디자인 패턴은 유지보수성 재사용성에 초점을 맞추고 있으며, OOP 상에서 발생하는 문제에대한 해결책을 제시해 준다. GoF의 Composite Pattern은 계층 구조를 만들어 사용한다. 대표적인 사용예는 DOM 파싱 방식이다.

< Composite Pattern>

(패턴에 관한 자세한 내용은 다음 사이트를 활용한다. 유용한 사이트다.

SAX 파싱: 태그를 읽었을때 함수를 호출하여 파싱 하는 방식.
DOM 파싱: 각 태그를 객체로 만들어 파싱하는 방식.

View Architecture
 - 뷰의 아키텍쳐도 Composite Pattern을 활용하여 계층구조로 작성되어있다.
 - fill_parent에서 parent는 이런 컴퍼넌트의 상위 객체를 나타낸다.
 - 뷰의 구조는 안드로이드 사이트 참조
 
< 뷰의 상속 구조>


안드로이드 위젯도구 상자(p112)
xml파일을 수정하여 아래와 같은 위젯들을 생성하여 사용할 수 있다.
* TextView
* Spinner : 콤보박스가 한줄 나와서 누르면 리스트로 나오는 형식의 뷰
* EditText
  - 글을 입력할 수 있는 필드
  - 한줄, 여러줄 일때 모두 사용한다.
  - android:maxLines="4" 로 지정할 수 있다.
* AutoCompleteTextView/MultiAutoCompleteTextView
   - 자동 완성 기능이 필요할 때 사용
* Button/ImageButton
   - 이미지가 들어간 버튼. 눌렸을때, 포커스 있을때 등의 이미지를 상황에 따라 바꿀 수 있다.
* 그밖에도 RadioGroup, CheckBox ,DatePicker, TimePicker, ProgressBar, SeekBar 등이 있다.
 # ArrayAdapter 는 List 형식에 모두 사용되어진다.

<Layout 예제>
레이아웃을 이용하여 EditText, MultiAutoCompleteTextView를 작성하여 보자.

1. 새로운 프로젝트를 만들고 layout/main.xml에 view들을 추가해준다.

<main.xml>
 1.1 LinearLayout의 orientation을 vertical 로 주어 뷰가 아래로 배열되도록 한다.
 1. 2 TextView를 추가 한다. 
      - text값을 길게 주고 테스트한다. 이때 링크 값도 넣어 web도 테스트 하도록 한다.
      - autoLink를 web으로 주면 자동으로  링크가 걸린다.
      - lines를 넣으면 표시되는 라인을 고정 시킬수도 있다.
1.3 EditText를 추가 한다.
     - lines 역시 Editor에서 표시되는 라인수다.
     - gravity는 텍스트의 정렬방식을 나타낸다.
1.4 MultiAutocompleteTextView를 추가한다.
     - id를 주어 코드에서 불러서 사용할 수 있도록 한다.

2. MultiAutoCompleteTextView를 사용하기 위해서 java 코드를 수정한다.
<LayoutMain.java>
2.1 MultiAutoCompleteTextView를 사용하기 위해 코드 작성
    - 자동으로 채워줄 string을 작성한다.
    - ArrayAdapter를 선언하여 MultiAutoCompleteTextView 에 넣어 줄수 있도록 한다.
    - setTokenizer를 통하여 auto 기능을 자동으로 업데이트 해줄수 있도록 한다.
3. 컴파일 후 돌리면 된다. 

2일차 과정종료.
실습도 이론도 바쁘게 적다보니 시간이 훌쩍 가버렸다.
p.s: 앗~ 오늘 생일인데 미역국도 못 먹었군..ㅡㅡ;




Posted by 빨간 양말