20130602-Linux 명령어 사용하기

 

Content_TopTitle_OS

 

  1. 시스템 정보 출력 명령어

    • man

      • 리눅스에서 사용되는 명령어에 대한 도움말 제공
      • 002
      • 003
    • cal & date
      • 원하는 연도의 달력 정보를 보여주거나 현재 시각을 보여
      • 004
    • who & whoami & finger & last
      • 현재 시스템을 사용 중이거나 마지막에 로그인한 사용자를 보여
      • 005
    • arch & hostname & uname
      • 머신 아키텍처, 운영체제, 커널 정보들을 보여
      • 006
    • free & vmstat
      • 현재 메모리 사용 상태에 대한 정보를 보여
      • 007
    • du & df
      • 디스크 사용 상태에 대한 정보를 보여줌
      • 008
      • 009
  2. 프로세스 관리 명령어

    1. ps -> 상세 실행 명령어 > ps –ef
      • 현재 시스템에서 실행중인 프로세스에 관한 정보를 보여줌
      • 010
    2. Top
      • CPU의 사용 현황을 보여줌
      • 011
    3. pstree
      • 현재 시스템에서 실행중인 프로세스들을 트리 구조로 출력
      • 012
    4. kill & killall
      • 실행중인 프로세스를 종료시킴
      • 실습 과정 ) 프로세스 정보를 먼저 찾음
      • Ps aux|grep firefox
        • 013
      • Kill 명령어를 사용하여 종료 후 종료되었는가 확인
      • kill -9 5367
      • grep aux|grep firefox
        • 014
  3. 디렉터리 명령어

    1. ls (list)
      • 현재 위치한 디렉토리 내에 있는 파일과 디렉토리의 내용을 보여줌
      • 015
    2. pwd (print working directory)
      • 시스템 내에서 작업을 수행하는 현재 위치의 디렉토리를 알려주는 명령어
      • 016
    3. mkdir (make directory)
      • 새로운 디렉토리를 만들어주는 명령어
      • 017
    4. rmdir (remove directory)
      • 특정 디렉토리를 삭제하는 명령어로서 내부에 아무런 파일이나 디렉토리가 없어야 함
      • 018
    5. cd (change working directory)
      • 현재의 작업 디렉토리에서 다른 디렉토리로 이동하기 위한 명령어
      • 019
  4. 파일 명령어

    1. Cat
      • 파일의 내용을 화면에 출력하는 명령어
      • 020
    2. More
      • 연속적으로 화면의 내용이 출력될 경우 페이지 단위로 출력하는 명령어
      • 021
    3. head & tail
      • 파일의 앞부분 10줄 혹은 뒷부분 10줄을 출력하는 명령어
      • 022
    4. cp (copy)
      • 파일이나 디렉토리를 다른 이름으로 복사하거나 다른 디렉토리로 복사하는 명령어
      • 023
    5. rm (remove file)
      • 시스템 내의 특정 파일을 삭제하는 명령어
      • 024
    6. chmod (change mode)
      • 특정 파일이나 디렉토리에 대한 접근 권한을 변경하는 명령어
      • 025
    7. ln (link) && 하드 링크 (hard link)
      • 하나의 특정한 파일(디렉토리)을 다른 파일(디렉토리) 이름으로도 사용하도록 하는 명령어
      • 026
    8. 심볼릭 링크 (symbolic link)
      • 다른 파일을 가리키는 링크 정보를 갖는 파일을 생성
      • 027
    9. mv (move file)
      • 파일/디렉토리의 이름을 변경하거나 위치를 이동시키는 명령어
      • 028

Android - 시간 및 날짜와 관련된 위젯을 이용한 "날짜/시간 예약을 흉내 낸 앱" 만들기 (샘플)

이 게시물은 대학 수업 과정을 들으며 혼자 연습한 뒤에 공유하는 게시물입니다.

따라서 완성도가 떨어질 수 있으니, 욕하지 마세요 ㅠ..ㅠ

 

★ 구동할 최소 안드로이드 SDK 사양

        android:minSdkVersion="11"
        android:targetSdkVersion="16"

 

  • 시간 및 날짜와 관련된 위젯을 이용한 “날짜/시간 예약을 흉내 낸 앱” 만들기 (샘플)

    • Design
      • 002
    • src
      • MainActivity.java
      • package com.example.reservation;
        
        import android.app.Activity;
        
        import android.os.Bundle;
        
        import android.os.SystemClock;
        
        import android.view.Menu;
        
        import android.view.View;
        
        import android.view.View.OnClickListener;
        
        import android.view.ViewGroup;
        
        import android.widget.Button;
        
        import android.widget.Chronometer;
        
        import android.widget.DatePicker;
        
        import android.widget.RadioButton;
        
        import android.widget.RadioGroup;
        
        import android.widget.RadioGroup.OnCheckedChangeListener;
        
        import android.widget.TextView;
        
        import android.widget.TimePicker;
        
        import android.widget.Toast;
        
        public class MainActivity extends Activity implements OnClickListener, OnCheckedChangeListener {
        
            
        
            private Button buttonReservationStart;
        
            private Button buttonReservationComplete;
        
            private RadioGroup radioGroup;
        
            
        
            private DatePicker datePicker;
        
            private TimePicker timePicker;
        
            
        
            private Chronometer chronometerReservationTime;
        
            
        
            private TextView reservationDateTimeText;
        
            
        
            private TextView textReservationStatus;
        
            
        
            @Override
        
            protected void onCreate(Bundle savedInstanceState) {
        
                super.onCreate(savedInstanceState);
        
                setContentView(R.layout.activity_main);
        
                
        
                buttonReservationStart = (Button)findViewById(R.id.buttonReservationStart);
        
                buttonReservationStart.setOnClickListener(this);
        
                
        
                buttonReservationComplete = (Button)findViewById(R.id.buttonReservationCompleted);
        
                buttonReservationComplete.setOnClickListener(this);
        
                
        
                datePicker = (DatePicker)findViewById(R.id.datePicker);
        
                timePicker = (TimePicker)findViewById(R.id.timePicker);
        
                
        
                chronometerReservationTime = (Chronometer)findViewById(R.id.chronometerReservationTime);
        
                
        
                reservationDateTimeText = (TextView) findViewById(R.id.textReservatedDateTime);
        
                textReservationStatus = (TextView) findViewById(R.id.textReservationStatus);
        
                
        
                radioGroup = (RadioGroup)findViewById(R.id.radioGroup);
        
                radioGroup.setOnCheckedChangeListener(this);
        
                
        
                initViewObjects(false);
        
            }
        
            @Override
        
            public boolean onCreateOptionsMenu(Menu menu) {
        
                // Inflate the menu; this adds items to the action bar if it is present.
        
                getMenuInflater().inflate(R.menu.main, menu);
        
                return true;
        
            }
        
            
        
            /**
        
             * @see android.view.View.OnClickListener#onClick(android.view.View)    
        
             * @author        : minam.cho
        
             * @methodName    : onClick
        
             * @param v    
        
             */
        
            public void onClick(View v) {
        
                if(v instanceof Button) { // 클릭한 주체가 버튼이라면
        
                    Button clickButtonObj = (Button) v;
        
                    
        
                    //현재 어떤 버튼이 클릭되었는지 확인
        
                    if(R.id.buttonReservationStart == clickButtonObj.getId()) { //[1] 예약 시작 버튼일 경우
        
                        textReservationStatus.setText(getResources().getString(R.string.reservationStatusReservating));
        
                        
        
                        initViewObjects(true);
        
                        
        
                        Toast.makeText(MainActivity.this, "Start reservation from now!!", Toast.LENGTH_SHORT).show();
        
                        chronometerReservationTime.setBase(SystemClock.elapsedRealtime());
        
                        chronometerReservationTime.start();
        
                        
        
                        reservationDateTimeText.setVisibility(View.INVISIBLE);
        
                        reservationDateTimeText.setText(getResources().getString(R.string.none));
        
                        
        
                        if(radioGroup.getCheckedRadioButtonId() == R.id.radioChooseCalendar) {
        
                            datePicker.setVisibility(View.VISIBLE);
        
                            timePicker.setVisibility(View.INVISIBLE);
        
                        } else if(radioGroup.getCheckedRadioButtonId() == R.id.radioChooseTime){
        
                            datePicker.setVisibility(View.INVISIBLE);
        
                            timePicker.setVisibility(View.VISIBLE);
        
                        }
        
                        
        
                    } else if(R.id.buttonReservationCompleted == clickButtonObj.getId()) { //[2] 예약 완료 버튼일 경우
        
                        textReservationStatus.setText(R.string.setReservationCompleted);
        
                        
        
                        String reservationCompleted = String.format(getResources().getString(R.string.reservationCompleted));
        
                        
        
                        initViewObjects(false);
        
                        
        
                        Toast.makeText(MainActivity.this, "Reservation completed!!", Toast.LENGTH_SHORT).show();
        
                        int day = datePicker.getDayOfMonth();
        
                        int month = datePicker.getMonth() + 1;
        
                        int year = datePicker.getYear();
        
                        int hour = timePicker.getCurrentHour();
        
                        int minute = timePicker.getCurrentMinute();
        
                        reservationDateTimeText.setVisibility(View.VISIBLE);
        
                        reservationDateTimeText.setText("예약날짜: "+year+""+month+""+day+"일("+hour+":"+minute+")"+reservationCompleted);
        
                        
        
                        chronometerReservationTime.stop();
        
                    }
        
                }
        
            }
        
            @Override
        
            public void onCheckedChanged(RadioGroup rg, int arg1) {
        
                RadioButton radButton = (RadioButton) findViewById(rg.getCheckedRadioButtonId());
        
                
        
                if(radButton.getId() == R.id.radioChooseCalendar) {
        
                    datePicker.setVisibility(View.VISIBLE);
        
                    timePicker.setVisibility(View.INVISIBLE);
        
                } else if(radButton.getId() == R.id.radioChooseTime){
        
                    datePicker.setVisibility(View.INVISIBLE);
        
                    timePicker.setVisibility(View.VISIBLE);
        
                }
        
            }
        
            
        
            private void initViewObjects(boolean makeDisable) {
        
                ViewGroup itemGroup = (ViewGroup)findViewById(R.id.itemGroup);
        
                
        
                for(int i=0; i < itemGroup.getChildCount(); i++) {
        
                    View v = (View)itemGroup.getChildAt(i);
        
                    
        
                    v.setEnabled(makeDisable);
        
                }
        
            }
        
        }
        
    • res/layout
      • activity_main.xml
      • <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        
            xmlns:tools="http://schemas.android.com/tools"
        
            android:layout_width="match_parent"
        
            android:layout_height="match_parent"
        
            android:paddingBottom="@dimen/activity_vertical_margin"
        
            android:paddingLeft="@dimen/activity_horizontal_margin"
        
            android:paddingRight="@dimen/activity_horizontal_margin"
        
            android:paddingTop="@dimen/activity_vertical_margin"
        
            tools:context=".MainActivity" >
        
            <LinearLayout
        
                android:layout_width="wrap_content"
        
                android:layout_height="wrap_content"
        
                android:layout_alignParentBottom="true"
        
                android:layout_alignParentLeft="true"
        
                android:layout_alignParentRight="true"
        
                android:layout_alignParentTop="true"
        
                android:gravity="fill_vertical|center_horizontal"
        
                android:orientation="vertical" >
        
                <LinearLayout
        
                    android:layout_width="match_parent"
        
                    android:layout_height="wrap_content" >
        
                    <TextView
        
                        android:id="@+id/txtCurrentTime"
        
                        android:layout_width="wrap_content"
        
                        android:layout_height="wrap_content"
        
                        android:text="@string/currentTime" />
        
                    <DigitalClock
        
                        android:id="@+id/digitalClock1"
        
                        android:layout_width="wrap_content"
        
                        android:layout_height="wrap_content"
        
                        android:text="" />
        
                </LinearLayout>
        
                <LinearLayout
        
                    android:layout_width="match_parent"
        
                    android:layout_height="wrap_content" >
        
                    <TextView
        
                        android:id="@+id/textReservationStatus"
        
                        android:layout_width="wrap_content"
        
                        android:layout_height="wrap_content"
        
                        android:text="@string/reservationStatusWaiting"
        
                        android:textAppearance="?android:attr/textAppearanceMedium" />
        
                </LinearLayout>
        
                <LinearLayout
        
                    android:layout_width="match_parent"
        
                    android:layout_height="wrap_content"
        
                    android:gravity="center" >
        
                    <TextView
        
                        android:id="@+id/textView1"
        
                        android:layout_width="wrap_content"
        
                        android:layout_height="wrap_content"
        
                        android:text="@string/reservatedDuringTime"
        
                        android:textAppearance="?android:attr/textAppearanceLarge" />
        
                    <Chronometer
        
                        android:id="@+id/chronometerReservationTime"
        
                        android:layout_width="wrap_content"
        
                        android:layout_height="wrap_content"
        
                        android:text="@string/chronoText" />
        
                    <TextView
        
                        android:id="@+id/textView2"
        
                        android:layout_width="wrap_content"
        
                        android:layout_height="wrap_content"
        
                        android:text="@string/duringTime"
        
                        android:textAppearance="?android:attr/textAppearanceSmall" />
        
                </LinearLayout>
        
                <Button
        
                    android:id="@+id/buttonReservationStart"
        
                    android:layout_width="match_parent"
        
                    android:layout_height="wrap_content"
        
                    android:layout_marginLeft="0dp"
        
                    android:gravity="center_vertical|center_horizontal"
        
                    android:text="@string/reservationStart" />
        
                <LinearLayout
        
                    android:id="@+id/itemGroup"
        
                    android:layout_width="match_parent"
        
                    android:layout_height="0dp"
        
                    android:orientation="vertical" 
        
                    android:layout_weight="1">
        
                    <RadioGroup
        
                        android:id="@+id/radioGroup"
        
                        android:layout_width="match_parent"
        
                        android:layout_height="wrap_content" >
        
                        <RadioButton
        
                            android:id="@+id/radioChooseCalendar"
        
                            android:layout_width="wrap_content"
        
                            android:layout_height="wrap_content"
        
                            android:checked="true"
        
                            android:text="@string/setDate" />
        
                        <RadioButton
        
                            android:id="@+id/radioChooseTime"
        
                            android:layout_width="wrap_content"
        
                            android:layout_height="wrap_content"
        
                            android:layout_weight="1"
        
                            android:text="@string/setTime" />
        
                    </RadioGroup>
        
                    <DatePicker
        
                        android:id="@+id/datePicker"
        
                        android:layout_width="match_parent"
        
                        android:layout_height="match_parent" />
        
                    <TimePicker
        
                        android:id="@+id/timePicker"
        
                        android:layout_width="match_parent"
        
                        android:layout_height="match_parent"
        
                        android:visibility="invisible" />
        
                </LinearLayout>
        
                <LinearLayout
        
                    android:layout_width="match_parent"
        
                    android:layout_height="wrap_content"
        
                    android:background="#FDF5E6"
        
                    android:textAlignment="center" >
        
                    <Button
        
                        android:id="@+id/buttonReservationCompleted"
        
                        android:layout_width="wrap_content"
        
                        android:layout_height="wrap_content"
        
                        android:text="@string/setReservationCompleted" />
        
                    <TextView
        
                        android:id="@+id/textReservatedDateTime"
        
                        android:layout_width="wrap_content"
        
                        android:layout_height="wrap_content"
        
                        android:text="@string/none"
        
                        android:visibility="invisible" />
        
                </LinearLayout>
        
            </LinearLayout>
        
        </RelativeLayout>
    • res/values
      • strings.xml
      • <?xml version="1.0" encoding="utf-8"?>
        
        <resources>
        
            <string name="app_name">Reservation</string>
        
            <string name="action_settings">Settings</string>
        
            <string name="hello_world">Hello world!</string>
        
            <string name="title">예약을 해 봅시다</string>
        
            <string name="currentTime">현재 시간: </string>
        
            <string name="reservatedDuringTime">예약에 걸린 시간: </string>
        
            <string name="reservationStatusTitle">예약 진행 상태: </string>
        
            <string name="reservationStatusWaiting">대기 중</string>
        
            <string name="reservationStatusReservating">예약 중</string>
        
            <string name="reservationStart">예약 시작</string>
        
            <string name="reservationCompleted">예약됨</string>
        
            <string name="chronoText">%s</string>
        
            <string name="duringTime"></string>
        
            <string name="setDate">날짜 설정(DatePicker)</string>
        
            <string name="setTime">시간 설정(TimePicker)</string>
        
            <string name="setReservationCompleted">예약 완료</string>
        
            <string name="none">-</string>
        
        </resources>

안드로이드 시작하기 Chapter 1 - 4 (설치+이클립스 연동)


목차

1. 안드로이드 SDK 다운로드

2. 자바 JDK(1.5 or Higher Version) 다운로드

3. 이클립스 3.5(3.4 or Higher Version) 다운로드

4. 이클립스와 안드로이드 연동하기

5. Hello World 작성하기.


1. 안드로이드 SDK 다운로드

현재 안드로이드 SDK 의 최신버전은 2.2 입니다.

웹 페이지 주소http://developer.android.com/sdk/index.html 에서 다운받으실 수 있습니다.

개발하고자 하는 운영체제(Platform)에 맞게 다운받으시면 됩니다.



안드로이드 SDK의 실지적인 개발 관련 핵심 부분은 이후에 이클립스에서 개발SDK를 다운받게 되며, 이곳에서는

안드로이드의 에뮬레이터와 부가적인 Tool 등을 받게 됩니다.


2. 자바 JDK(1.5 or Higher Version) 다운로드

안드로이드는 자바 1.5 이상에서 문제없이 동작합니다.

따라서, 아래의 주소를 통하여 1.5 이상버전의 자바를 다운받아 설치(복사)합니다.

주소http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html


3. 이클립스 3.5(3.4 or Higher Version) 다운로드

안드로이드를 개발할 때, 불필요한 플러그인(JAVA EE 혹은 Flex 등)이 많이 포함된 이클립스 보다는 순정의 이클립스로 개발하는 것을 추천해 드립니다. 안드로이드 SDK 와의 연동에 문제가 생길 수도 있으며, 개발 시에 충돌이 생길 수 있기 때문입니다.

필자는 따라서, 개발할 때는 항상 Flex (FLEX SDK 3)용, 순수 JSP (JAVA EE) 등을 개발할 때 사용하는 것을 모두 각각 사용합니다.

이클립스는 아래의 주소에서 다운받을 수 있습니다.

주소http://www.eclipse.org/downloads/

3.5(Galileo)받기

(http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/SR2/eclipse-java-galileo-SR2-win32.zip)

최근에는 Windows 7의 등장으로 인해 64Bit 로의 접근이 용이해져 많은 사용자들이 64bit 를 사용하고 있는 추세입니다. 그래서 필자 또한 Windows 7 64Bit를 사용하고 있는데요. 이에 맞춰서 이클립스 또한 64Bit용 버전을 따로 제공하고 있습니다.

각 운영체제 (Platform)에 맞는 것을 다운받아 사용하시면 됩니다.

1. 이클립스와 안드로이드 연동하기

4.1 이클립스용 안드로이드 플러그인 다운받기

아래의 주소로 이동하여 이클립스용 안드로이드 ADT 플러그인을 다운받을 수 있습니다.

(http://developer.android.com/sdk/eclipse-adt.html)

설치한 이클립스의 버전에 따라서, 위의 화면과 같이 설명된 설치방법을 확인하면서 진행하시면 됩니다.

필자는 3.5 버전을 기준으로 설명을 진행하겠습니다.

1. 이클립스를 실행하여 상단 메뉴의 Help -> Install New Software.로 들어갑니다.


2. Install 마법사에서 Add… 를 클릭합니다.

3. Add Site 창에서 이클립스 3.5에 맞는 플러그인 이름(사용자 지정)과 경로를 지정합니다.

경로: https://dl-ssl.google.com/android/eclipse/

4. 경로를 입력하고 OK 를 클릭하면 아래와 같은 설치가능 목록이 나타나게 됩니다.

모두 선택하고 Next 를 클릭합니다.

5. Next 를 클릭하면 약관에 동의하라는 창이 뜨게 되고, 이후에 설치를 진행합니다.


6. 가끔 위의 주소로 설치되지 않는 경우가 있는데, 플러그인 설치 안내 페이지에도 나와있듯이, Https 의 s를 제외하고 Http 로 수정하여 설치하면 됩니다.

(Note: If you have trouble acquiring the plugin, you can try using "http" in the URL, instead of "https" (https is preferred for security reasons).

7. 설치 중에 보안 경고가 나오게 되는데, 계속 진행하면 됩니다.

8. 설치가 끝나면 다시 시작합니다.

9. 설치가 성공적으로 완료되면, 상단의 툴바에 아래와 같은 아이콘이 보이게 되면, 성공적으로 설치가 된 것입니다. 하지만 모든 과정이 끝난 것이 아니고 안드로이드 SDK 를 플러그인을 통하여 설치해야 합니다.

  • 다음 장 예고

4. 이클립스와 안드로이드 연동하기

5. Hello World 작성하기.

안드로이드 시작하기 - 이클립스 연동 + 안드로이드 SDK 설치


목차

1. 안드로이드 SDK 다운로드

2. 자바 JDK(1.5 or Higher Version) 다운로드

3. 이클립스 3.5(3.4 or Higher Version) 다운로드

4. 이클립스와 안드로이드 연동하기

5. Hello World 작성하기.


4.2 이클립스용 안드로이드 SDK 설치하기

1. 이클립스의 Window -> Preferences -> Android 클릭

목차 1에서 다운받은 안드로이드 SDK 의 경로를 지정하고, Apply -> OK 를 지정합니다.


2. 이클립스 툴바의 Open the Android SDK and AVD Manager 를 클릭합니다.

3. Android SDK and AVD Manager 창이 뜨는데 아래와 같습니다.

1. Virtual Device: 가상의 휴대폰(즉, 에뮬레이터)

2. Installed Packages: 설치된 안드로이드 패키지

3. Available Packages: 사용 가능한 패지지 목록

위의 항목에서 3번을 클릭합니다.

4. 아래의 화면에서 오른쪽에 보이는 항목들은 실제로 다운받아 설치할 수 있는 SDK 와 부가적인 패키지들입니다. 모두 선택하여, 우측하단의 Install Selected를 클릭합니다. 현재까지의 과정 중 가장 오랫동안 진행될 작업입니다. 설치과정 중에 특별한 오류가 발생되지 않는다면, 모두 설치하면 되고, 설치 중 문제가 발생한다면, 최신버전인 SDK Platform Android 2.2, API 8, revision 2 만 받아도 문제없으며, 또한 하위 버전은 SDK Platform Android 2.1, API 7, revision 2 만 받아도 문제없습니다.

5. 아래와 같이 선택하고, 모두 동의를 한 후에 패키지 다운 및 설치를 진행합니다.

6. 설치가 완료되면 ADB 재시작을 권하는 창이 뜹니다. YES 하시면 됩니다.


7. 설치가 완료되고 ADB 를 재시작 하면 아래와 같이 Console 에 오류가 나타나게 되지만, 문제되지 않습니다.

[2010-11-26 11:04:12 - DeviceMonitor]Adb connection Error:현재 연결은 원격 호스트에 의해 강제로 끊겼습니다

[2010-11-26 11:04:13 - DeviceMonitor]Connection attempts: 1

이제 Install Packages 를 확인하면, 설치된 패키지 항목을 볼 수 있습니다.


4.3 Virtual Device 생성하기

1. Android SDK and AVD Manager 에서 첫 번째 항목 Virtual Devices 에 장치를 추가하는데, 오른쪽의 New…를 클릭합니다.

2. 아래 화면과 같이 Name, target 을 지정하여 Create AVD를 클릭해 봅니다.

* 만약 target 에 아무런 항목이 나타나지 않거나 비활성화된 상태라면 Available packages 에서 SDK 를 재설치 하셔야 합니다.


3. 설치된 AVD는 Android SDK and AVD Manager 에서 확인할 수 있으며, AVD는 Start를 클릭하여 실행할 수 있습니다.

4. 실행 시 옵션을 설정하고 Launch 를 클릭하면 아래와 같이 진행됩니다.

5. 구동 시에 시간이 조금 걸립니다. 그렇다고 해서 안 되는 것이 아니니 기다리시면 됩니다.

6. 실행된 화면은 아래와 같이 확인할 수 있습니다.

1.6.1 짜자잔!!!!!!!!!!!!!!!

* 아래의 내용은 http://www.androidpub.com/41231 에서 참고한 내용입니다.

Start 를 했을 때 emulator:ERROR:bad Config: virtual device directory lacks Config.ini 오류가 발생할 경우가 있습니다.

위의 오류는 OS 의 한글계정을 사용할 때 발생되는데요, 해결방법은 아래의 명령어를 통하여, 수동으로 한글이 없는 경로에 새로운 AVD를 CREATE 하여야 합니다.

1. Command 창에서 최초에 받은 SDK경로/tools 폴더로 이동합니다.

2. 명령어 $android create avd –n [가상장치이름] –p [경로]

3. Android SDK AVD Manager 로 가면 가상 장치가 생성되어 있습니다.

  • 다음 장 예고

5. Hello World 작성하기.

안드로이드 시작하기 - Hello World !!!


목차

1. 안드로이드 SDK 다운로드

2. 자바 JDK(1.5 or Higher Version) 다운로드

3. 이클립스 3.5(3.4 or Higher Version) 다운로드

4. 이클립스와 안드로이드 연동하기

5. Hello World 작성하기.


5. Hello World 작성하기.

대부분의 개발자들은 책이나 대학교/학원 등에서 많이 했을 것입니다.

우스개 소리로 모든 언어의 시작은 Hello World 라는 것이죠.

간단합니다. 언어의 출력 특성에 맞게, 그 곳에 Hello World 라는 글자를 띄워주는 일이죠.

아주 기초적인 내용이기 때문에, 쉽게 따라 할 수 있습니다.

5.1 프로젝트 만들기


>> Package Explorer 혹은 Navigator 에서 마우스 오른쪽 -> New -> Project ... 를 클릭합니다.

나열된 프로젝트 목록 중, Android Project를 선택하고, 다음(Next)를 클릭합니다.

①Project Name을 지정합니다. 필자는 HelloWorld로 했어요.

② Contents 항목 중 Create new project in workspace를 선택합니다.

Create project from existing source는 외부의 소스를 통해 프로젝트를 생성합니다.

Use default location은 현재 프로젝트 작업 공간의 경로를 사용함을 의미합니다.

③ 안드로이드 플랫폼을 선택합니다. 생성하고자 하는 프로젝트가 안드로이드 운영체제의 어떤 버전에서

작동이 되도록 할 것인지 지정합니다.

④ Application Name을 지정합니다. 1번의 Project Name과 동일하게 지정하거나, 사용자 임의로 지정.

⑤ Package name을 지정합니다. 기본 자바 패키지 생성법과 동일한 방법으로 패키지를 입력합니다.

⑥ Create Activity의 이름을 지정합니다.

안드로이드의 개념 중 Activity가 있습니다. 자세한 내용은 www.google.com 을 참고하세요.

⑦ Min SDK Version을 지정합니다.

- 최소 구현될 안드로이드 플랫폼의 API Version을 지정합니다. 하위 플랫폼과의 호환성을 고려하여

구현할 경우에는 버전을 낮게 맞추시기 바랍니다.

동일한 프로젝트를 생성하는데, 테스트 용 프로젝트를 생성합니다.

테스트용 프로젝트를 생성하면, 동일한 프로젝트가 테스트로서 생성이 됩니다.

생성된 프로젝트의 구조입니다. 처음 보신 분들은 뭔가 생소..(저 역시도 아직은 생소 ㅡ.,ㅡ)하겠지만요…

간략하게 설명을 드리자면 아래와 같습니다.

① 실제로 자바 소스를 작성하는 클래스 입니다.

② gen 은 빌드시에 자동으로 컴파일된 파일들이 작성되는 곳입니다. 사용자가 수정하면 안됩니다.

③ Android 2.1-update1 은 현재 개발하고자 하는 플랫폼의 라이브러리가 등록된 곳입니다.

④ res 는 resource 의 약자로서 이미지, 개체 레이아웃, 문자열 등이 저장되고 지정된 파일의 저장소입니다.

- drawable: 이미지 파일들이 저장되는 곳입니다. 해상도별로 3개의 기본 icon.png 가 있습니다.

- layout: 개체들의 레이아웃을 정의하는 곳입니다.

- values/string.xml: 프로젝트에서 사용될 문자열을 정의합니다.

⑤ 프로젝트의 버전, 이름이나 구성 등에 대한 정보를 가지고 있습니다.

⑥ 프로젝트의 빌드 타킷(플랫폼의 버전)이 명시되어 있습니다.

그리고 assets 폴더(4번 항목 위)가 있는데, 이 폴더는 최초엔 빈 항목이 있지만,

추후에 오디오, 비디오 등을 저장하는 저장소입니다.


5.2 Hello World 작성하기.

안드로이드의 화면을 구성할 때는 res/layout을 이용하며, 문자열 값은 res/values/string.xml을 통하여

출력을 합니다. 물론! 패키지의 JAVA 소스를 통해서도 바로 객체를 만들고 구성하고, 담을 수 있습니다.

위의 화면에서 실질적으로 자바 클래스 HelloWorld는 상위 Activity 클래스를 상속받고 onCreate메소드를 오버라이드 하였습니다.

오버라이드 아시죠?, 하여간, 오버라이드 받은 onCreate 라는 메소드는 이전에 프로젝트를 생성할 때, Activity 로 등록하면 자동으로 생성하여 줍니다.

어쨌거나 이 오버라이드 한 HelloWorld클래스는 void android.app.Activity.setContentView 의 layout을 가지고 있고, setContentView(Activity클래스void android.app.Activity.setContentView(int layoutResID)) 에 layout.main을 담고 있습니다.

즉, 이 main 이란 녀석을 살펴보면 (위의 이미지 젤 오른쪽) LinearLayout 이라는 레이아웃 구성요소(Vertical 특성)를 가지고 있으며, 2개의 객체를 담고 있습니다.

2개의 객체 중 하나의 객체는 단순한 글자를 표현하는 TextView와, 하나는 버튼을 생성하는 Button 객체인데요,

이 객체의 text 속성을 살펴보면 @string/hello, @string/close 라는 것으로 명명되어 있습니다.

이것은 다른 곳(즉, values/string.xml을 참고)의 값을 Call by Reference 개념으로 참조하여 표현하겠다는 뜻입니다.

이렇게 값을 가져오는데, 해당 값을 보려고 하면 string.xml에 선언된 String형의 글을 보면 됩니다.

String.xml 요소에는 <resources></resources내부에 선언되어 있습니다.

물론, 현재에는 string 형식만 선언되어 있으나, color 라던가, string-array 등도 선언하고 사용할 수 있습니다.

다시, string 을 보게되면<string name="hello">Hello World, HelloWorld!</string라고 되어있는데요,

이 부분에 name을 hello로 지정하고, 값은 Hello World, HelloWorld!라고 지정했습니다.

이 내용이 main.xml 의 각 객체의 text 부분에서 사용하고 있습니다.

이제 출력된 화면을 보면 아래와 같습니다.

짜라잔, 어떻게, 대충 이해가 가시나요? ^^

원래 프로그래밍은 해봐야 더 이해가 잘 가는 법이니까, 한번 해 보세요.

화 이 팅 !!!!

Ps. 안드로이드 앱이나 아이폰 앱이나 개발하시는 모든 분들 고생 많으세요!

Ps. 대한민국 개발자들 아자!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

|  1  |  2  |