반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 받은 트랙백

글 보관함


요즘 Udacity 에서 제공하는 안드로이드 개발 온라인 강좌를 듣고 있습니다.

Developing Android Apps 을 듣고 있는데 Lesson 1에서 배운 여러 개념들을 정리해 줘서 그 설명을 한글로 바꿨습니다.


Lesson 1 - Create Project Sunshine


1과의 주요 개념들


New Concepts

  • Android Studio
  • SDK - Target and Minimum
  • Emulators vs. Real Devices
  • Gradle
  • Application
  • Activity
  • Fragment
  • Views and ViewGroups
  • Views and XML layouts
  • ListView
  • Adapter



* Android Studio
안드로이드 스튜디오는 안드로이드 개발을 위한 IDE 입니다. 앱을 개발하려면 우선 안드로이드 스튜디오에 Project 를 만들어야 합니다. 모든 프로젝트는 앱의 논리적인 구분을 위해서 하나 이상의 Module 들을 가지고 있습니다. 각 모듈 이름은 unique 해야 합니다. naming convention은 인터넷 도메인 이름을 역으로 하는 것입니다.

안드로이드 스튜디오는 여러분의 프로젝트를 이러한 방법으로 만듭니다.  https://developer.android.com/tools/projects/index.html

아래는 안드로이드 스튜디오에 있는 중요한 버튼들을 설명하고 있습니다.



1. 프로젝트의 구조 (structure)를 보여 줍니다. 이 코스에서는 Project view를 사용하고 있지만 Android view도 파일들을 organize 하는데 아주 유용합니다.
2. Run 버튼입니다. 현재 상태의 프로젝트를 저장하고 컴파일 해 apk 파일로 만듭니다. 그리고 이 apk를 컴퓨터에 연결 된 디바이스나 에뮬레이터에 실행 시킵니다.
3. Debug 버튼 입니다. Run 처럼 코드를 실행 시킵니다. 그런데 Android debugger 가 지정된 특정 지점에서 stop 하도록 만듭니다. 그리고 해당 부분의 code를 볼 수 있도록 합니다.
4. AVD manager 버튼 입니다. Android Virtual Device manager를 실행시킵니다. 에뮬레이터를 생성하거나 지우거나 수정 혹은 실행 시킵니다.
5. SDK manager 버튼 입니다. 이 SDK 매니저는 다른 안드로이드 API 들의 새로운 SDK들을 다운 받을 수 있도록 합니다.
6. Android Device Monitor 버튼입니다. 에뮬레이터나 연결된 디바이스의 많은 정보를 볼 수 있도록 합니다. 예를 들어 basic performance analysis 를 할 수 있고 file system에 무엇이 있는지를 볼 수 있습니다.



* SDK - Target and Minimum
새로운 프로젝트를 생성할 때 minimum SDK 나 Software Development Kit 를 정의해야 합니다. SDK는 안드로이드 프로젝트를 컴파일하고 생성하기 위해 다운로드 한 tool들의 모음 입니다. 새로운 API level이 릴리즈 되면 여기에 맞는 프로젝트를 만들 수 있는 새로운 SDK 가 릴리즈 됩니다. 안드로이드 스튜디오를 설치할 때 현재의 SDK 가 자동으로 다운로드 됩니다.

minimum SDK는 앱이 지원하는 최소 버전의 Android API level을 말합니다. 이 코스에서는 API level 10을 지원합니다. Gingerbread 이상의 디바이스를 지원하게 됩니다. 현재 시장의 99%의 핸드폰이 이에 속합니다.

Target SDK 는 처음에 자동으로 정의되는데 컴파일 하고 테스트 할 SDK를 말합니다. 이것은 가장 최근의 SDK여야 합니다.



* Emulators vs. Real Devices

안드로이드 스튜디오 1.0을 다운 받으면 emulated phone 이 함께 들어 있습니다. 이 emulated phone은  Launch emulator 옵션을 선택하고 원하는 emulator를 선택하면 앱이 실행되면서 이 에뮬레이터에 실행되게 됩니다.



가끔 아래처럼 검은 화면이나 로딩 화면에서 에뮬레이터가 멈출 경우가 있습니다.



이럴 경우 안드로이드 스튜디오의 에러메세지를 확인하세요. 아래와 같을 겁니다.

/Android/sdk/tools/emulator -avd _Nexus_5_API_21_x86 -netspeed full -netdelay none
emulator: The memory needed by this VM exceeds the driver limit.
HAX is not working and emulator runs in emulation mode

이것은 여러분의 컴퓨터 사양이 디폴트 에뮬레이터를 실행할 만큼 충분히 빠르지 않다는 겁니다. 걱정 마세요. Katherine's instructions  를 참조하세요. 새로운 에뮬레이터를 만들고 그 에뮬레이터가 사용하는 RAM의 양을 줄이시면 됩니다.
이 작업을 하려면 아래 configuration screen에서와 같이 하시면 됩니다.



에뮬레이터의 기능은 훌륭하지만 좀 느립니다. 가능하면 실제 폰을 사용해 테스트 하시기를 권장합니다. developer mode 를 unloc 하려면 이 video 를 참조하세요. 아마 성능이 많이 빨라 지고 훨씬 부드럽게 작동하게 될 겁니다.

에뮬레이터 사용하실 준비가 다 됐다면 Genymotion을 설치 해 보세요. 하는 방법은 여기 를 참조하세요.




* Gradle


Gradle 은 빌드 시스템으로 패키지를 up 하고 안드로이드 앱을 컴파일 합니다. 안드로이드 스튜디오는 자동으로 Gradle 파일들을 생성합니다. build.gradle 은 앱과 모듈 그리고 settings.gradle은 앱에 대한 세팅 파일들 입니다. 자동으로 생성되니 이 파일들을 별도로 생성하실 필요는 없습니다. 이 Gradle은 terminal (link) 에서 실행할 수 있습니다. 그리고 프로젝트 내에서 run 버튼을 누르면 자동으로 Gradle script가 실행됩니다. 안드로이드 스튜디오의 build process에 대해 자세히 알고 싶으시면 이곳 을 참조하세요.

(터미널에서 Gradle 실행하기 비디오 : 1 , 2



TIP : Gradle과 관련해 문제가 생기면 Sync Project with Gradle Files 버튼을 누르면 해결되기도 합니다. 그리고 프로젝트를 clean 하고 rebuilding 하는 경우에도 해결 되는 경우가 있습니다.




* Application


여러분은 안드로이드 앱을 사용해 보셨을 겁니다. 대강 안드로이드 앱이 무엇인지 아실 겁니다. 그런데 개발자의 입장에서 이 안드로이드 앱은 어떨까요? 안드로이드 앱은 사용자에게 인터페이스를 제공하기 위한 클래스들의 조합입니다. UI 콤포넌트들은 Activity 클래스들 안에서 정의 됩니다. 화면에 나타나지 않는 작업들은 아래와 같은 다른 안드로이드 클래스들에 의해 처리됩니다.


    - Content Providers (Lesson 4) - Manage app data.
    - Services (Lesson 6) - Run background tasks with no UI, such as downloading information or playing music.
    - Broadcast Receivers (Lesson 6) - Listen for and respond to system announcements, such as the screen being turned on or losing network connectivity.



* Activity


Activity는 안드로이드의 핵심 클래스로서 인터페이스를 담당하는 앱의 콤포넌트입니다. 안드로이드 스튜디오에서 앱을 생성하면 앱이 실행될 때 처음 시작 될 초기화 된 activity 클래스가 생성됩니다. 이 activity의 디폴트 이름은 MainActivity 입니다. 하나의 activity는 대개 앱의 한 화면을 이루게 되며 사용자가 이용할 어떤 서비스를 제공합니다.



* Fragment


Activity는 한개 이상의 Fragment를 가질 수 있습니다. Fragment는 activity의 modular section들 입니다. 대개 UI를 구성하기 위해 사용됩니다. 두개의 activity들이 같은 fragment를 가질 수 있습니다. 그리고 Fragment들은 Activity에 추가되거나 제거될 수 있습니다. blank fragment를 가지고 있는 activity를 우리가 다룰 Sunshine 앱에서 사용할 겁니다. PlaceholderFragment는 activity의 inner class로서 자동으로 생성됩니다. Fragment가 반드시 inner class가 되어야 하는 것은 아닙니다.



* Views and ViewGroups


view는 유저 인터페이스 컴포넌트의 가장 기본이 되는 building block 입니다. fragment는 자신의 layout을 정의하기 위해 여러개의 view들의 조합으로 구성 될 겁니다. 버튼, text, 그리고 다른 widget들은 view의 subclass 들 입니다. 그리고 좀 더 큰 layout을 만들기 위해 ViewGroups에 combine될 수 있습니다. 일반적인 ViewGroups은 다음과 같은 것들로 구성됩니다.

    LinearLayout - For horizontal or vertical collections of elements.
    RelativeLayout - For laying out elements relative to one another.
    FrameLayout - For a single view.

view들은 다른 view들 안에 있게 되므로 모든 layout에서 이 view들은 tree 구조를 가지게 됩니다.



* Views and XML Layouts


유저 인터페이스를 만들기 위해 XML을 사용해서 layout을 만듭니다. layout은 view들과 view group들의 모음으로 구성되고 그 구성요소들간의 관계들이 정의됩니다. 우리의 layout은 app/src/main/res/layout directory 에 저장될 겁니다. 이 xml layout을 java view 객체로 다루기 위해서는 이 layout을 inflate 해야 합니다. layout이 inflate 한 후에 Activity나 Fragment 와 같이 연결 되어야 합니다. 이 inflating 프로세스와 연결 프로세스는 이 layout이 Activity용이냐 아니면 Fragment 용이냐에 따라 약간 다르게 진행됩니다.

Activity 용의 경우
setContentView 메소드를 onCreate 에서 호출 함으로서 layout을 inflate 하고 또 그들을 연결합니다.
setContentView(R.layout.activity_main);

Fragment 용의
Fragment 클래스에서 LayoutInflater라는 파라미터를 가지고 있는 inflate 메소드를 사용해 객체를 만듭니다. onCreateView 메소드 안에서 작업합니다.
View rootView = inflater.inflate(R.layout.fragment_main, container, false);

root view 나 다른 모든 view들을 포함하고 있는 view element는 LayoutInflater의 inflate 메소드에 의해 return 됩니다. 그리고 나서 이 roogView를 onCreateView에 return 하게 됩니다.


<



* ListView


ListView 는 View의 subclass로서 여러개의 single layout을 카피해서 보여 줌으로서 list를 표현하기 위해 사용됩니다. 우리는 Sunshine 앱의 날씨 정보를 보여주기 위해 이 ListView를 사용할 겁니다. 날씨 정보의 각 row는 list_item_forcast.xml layout에 의해 정의 됩니다. 이 list view는 여러개의 list_item_forcast.xml 을 가질 겁니다. 날씨 데이터를 위한 각 row 별로 하나씩 가질 겁니다.
이 ListView를 populate 시키기 위해 Adapter를 사용합니다.



* Adapter


Adapter는 data source를 view에 translate 시켜 ListView에 보여지게 합니다. 우리의 경우 ArrayAdapter를 사용해서 데이터 소스를 배열로 받아서 이를 ListView에 보낼 겁니다. 이와 관련해서 알고싶으시면 이 비디오를 참조하세요.

이제 안드로이드 스튜디오를 사용해서 막 워밍업을 끝냈습니다. 유용한 팁이나 문제해결 방법을 알고 싶으시면 이 웹캐스트를 참조하세요.

Associated handout here.


반응형

Comment

  1. 장가영 2016.08.05 06:48

    안녕하세요!!
    저도 유다시티에서 Developing Android Apps들어요!!
    근데 궁금한게 있어서요ㅠㅠㅠ Github을 설치해서 프로젝트랑 연결해야 하는데
    도저히 방법을 모르겠어서요... Github을 설치하긴 했는데 그 이후에 어떻게
    프로젝트와 연결이 가능한지 알려주실 수 있을까요??!!