각 안드로이드 프로젝트는 AndroidManifest.xml 이라는 매니페스트 파일을 가지는데, 이는 해당하는 프로젝트 계측구조의 루트에 저장된다.

매니페스트는 애플리케이션을 구성하는 각각의 컴포넌트(액티비티, 서비스, 콘텐츠 공급자, 브로드캐스트 수신자)에 대한 노드를 포함하고 있으며, 인텐트 필터(Intent Filter)와 권한(Permission)을 사용해 이들이 다른 컴포넌트 및 애플리케이션과 어떻게 상호작용하는지를 결정한다. 또한, 애플리케이션 메타데이터(아이콘이나 테마 같은)를 지정하기 위한 속성을 비롯해, 보안 설정과 단위 테스트에 사용될 수 있는 추가적인 최상위 노드 역시 제공

매니태그는 프로젝트의 패키지 설정을 위한 package 속성을 갖는 manifest 루트 태그로 구성된다.

  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.android.helloworld"
          android:versionCode="1"
          android:versionName="1.0">
      [...매니페스트...]
    </manifest>

 

manifest 태그는 애플리케이션을 구성하는 애플리케이션 컴포넌트, 보안 설정, 테스트 클래스를 정의하는 노드를 가진다.

  • application   매니페스트는 오직 하나의 애플리케이션 노드만을 가질 수 있다. 애플리케이션 노드는 속성을 사용해 개발자의 애플리케이션을 위한 메타데이터(타이틀, 아이콘, 테마 등)을 지정한다. 또한 애플리케이션 노드는 애플리케이션 컴포넌트를 지정하는 데 사용되는 액티비티, 서비스, 콘텐츠 공급자, 브로드 캐스트 수신자 태그를 담는 컨테이너 역할을 한다.

    1. <application android:icon="@drawable/icon" android:label="@string/app_name">
      [...애플리케이션 노드...]
      </application>

 

  • activity   activity 태그는 애플리케이션에 의해 보여지는 모든 액티비티에 필요하며, android:name 속성으로 클래스 이름을 지정한다. 매니페스트에 정의되지 않은 액티비티를 시작하려 하면 런타임 예외가 던져질 것이다. 각 액티비티 노드는 그 액티비티를 띄울 인텐트를 지정하는 intent-filter 자식 태그를 지원한다.
  1. <activity android:name=".Helloworld"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
    </activity>

 

  • service   activity와 마찬가지로, 애플리케이션에서 사용되는 각 서비스 클래스에 대해 새로운 service 태그를 하나씩 생성한다. 서비스 태그 역시 늦은 런타임 바인딩(Late runtime binding)을 지원하기 위한 intent-filter 자식 태그를 지원한다.
  1. <service android:enabled="true" android:name=".MyService"></service>

 

  • provider   provider 태그는 애플리케이션이 가진 각각의 콘텐츠 공급자에 대해 사용된다. 콘텐츠 공급자는 애플리케이션 간의 데이터베이스 접근과 공유를 관리하기 위해 사용된다.
  1. <provider android:permission="com.android.MY_PERMISSION"
            android:name=".MyContentProvider"
            android:enabled="true"
            android:authorities="com.android.myapp.MyContentProvider">
    </provider>

 

  • receiver   receiver 태그를 추가하면 애플리케이션을 띄우지 않고서도 브로드캐스트 수신자를 등록할 수 있다. 브로드캐스트 수신자는 한번 등록되고 나면 애플리케이션에 의해 일치하는 인텐트가 방송될 때마다 실행되는 전역 이벤트 리스너(event listener)와 같다. 브로드캐스트 수신자를 매니페스트에 등록함으로써, 이 처리를 완전히 자립적으로 만들 수 있다.
  1. <receiver android:enabled="true"
            android:label="My Broadcast Receiver"
            android:name=".MyBroadcastReceiver">
    </receiver>

 

  • user-permission   보안 모델의 일부로서, uses-permission 태그는 애플리케이션이 올바르게 동작하는 데 필요하다고 생각되는 권한을 선언한다. 애플리케이션 설치 과정 중 사용자에게 제시되어 권한 부여 혹은 거절이 결정될 것이다. 권한은 많은 네이티브 안드로이드 서비스에 요구되며, 특히 비용이 수반되거나 보안에 관계된 것들(전화 걸기나 SMS 수신 또는 위치기반 서비스(LBS) 사용 같은)에는 필수적이다.
  1. <uses-permission android:name="android.permission.ACCESS_LOCATION">
    </uses-permission>

 

  • permission   어떤 애플리케이션 컴포넌트에 대한 접근을 제한할 수 있으면, 권한을 매니페스트에 정의할 필요가 있다. 이러한 권한 정의를 생성하는 데에는 permission 태그가 사용된다. 이렇게 권한을 정의하고 나면, 애플리케이션 컴포넌트는 adnroid:permission 속성을 추가해 그 권한을 요청할 수 있다. 다른 애플리케이션이 보호된 이들 컴포넌트를 사용할 수 있으려면, 먼저 자신의 매니페스트에 uses-permission 태그를 포함해야 할 것이다(그리고 그 권한을 부여 받아야 할 것이다).
    permission 태그 안에 허용할 권한의 접근수준(normal, dangerous, signature, signatureOrSystem)과 레이블 그리고 그 권한이 주어짐으로써 오는 위험성에 대한 설명을 담은 외부 리소스를 지정할 수 있다.
  1. <permission android:name="com.android.DETONATE_DEVICE"
            android:protectionLevel="dangerous"
            android:label="Self Destruct"
            android:description="@string/detonate_desciption">
    </permission>

 

  • instrumentation   계측(instrumentation) 클래스는 실행 시에 액티비티와 서비스를 테스트하기 위한 프레임워크를 제공한다. 이들 클래스는 애플리케이션과 그가 갖는 시스템 리소스와의 상호작용을 모니터하기 위한 고리를 제공한다. 애플리케이션을 위해 생성한 테스트 클래스 각각에 대해 새로운 노드 하나씩을 생성한다.
  1. <instrumentation android:label="My Test"
            android:name="MyTestClass"
            android:targetPackage="com.android.aPackage">
    </instrumentation>

 

manifest.png ADT(Android Develope Tools)의 새 프로젝트 마법사는 새로운 프로젝트를 만들 때 자동으로 새 매니페스트 파일을 생성한다. 애플리케이션의 각 컴포넌트를 배워나감에 따라 다시 이 매니페스트로 되돌아 올 것이다.

이 글은 스프링노트에서 작성되었습니다.

  • 액티비티(Activity)  
    애플리케이션의 프레젠테이션 계층이다. 모든 화면은 Activity 클래스의 확장이 될 것이다. 액티비티는 뷰를 사용해 정보를 보여주고 사용자 액션에 반응하는 그래픽 사용자 인터페이스를 형성한다. 데스크톱 개발의 입장에서 볼 때 액티비티는 폼과 같다.
  • 서비스(Services)  
    애플리케이션의 보이지 않는 일꾼이다. 서비스 컴포넌트는 화면에 보이지 않은 채 실행되어, 여러분의 데이터 소스와 화면에 보이는 액티비티들을 업데이트하고 알림(notifications)을 생성한다. 서비스는 애플리케이션이 가진 액티비티가 활성 상태가 아니거나 화면에 보이지 않을 경우에도 계속 돼야 할 필요가 있는 정규적인 처리를 수행하는 데 사용된다.
  • 콘텐츠 공급자(Content Providers)  
    공유할 수 있는 데이터 저장소다. 콘텐츠 공급자는 애플리케이션 데이터베이스를 관리하고 공유하는 데 사용된다. 콘텐츠 공급자는 애플리케이션 경계를 가로지르는 데이터 공유에 선호되는 방법이다. 이는 다른 애플리케이션의 접근을 허용하는 개발자만의 콘텐츠 공급자를 구성할 수 있으며, 또한 다른 애플리케이션이 노출한 콘텐츠 공급자를 사용해 그들의 저장된 데이터에 접근할 수 있음을 뜻한다. 안드로이드 장치는 연락처 정보 같은 유용한 데이터베이스를 노출하는 여러 네이티브 콘텐츠 공급자를 가지고 있다.
  • 인텐트(Intent)  
    간단한 메시지 전달 프레임워크이다. 개발자는 인텐트를 사용해 메시지를 시스템 전역이나 원하는 대상 액티비티 또는 서비스에 방송하고, 어떠한 동작을 수행시키고자 하는 여러분의 의도를 전달할 수 있다. 그러면 시스템은 해당 동작을 수행할 대상(들)을 적절히 결정할 것이다.
  • 브로드캐스트 수신자(Broadcast Receivers)  
    인텐트 브로드캐스트의 소비자다. 애플리케이션은 브로드캐스트 수신자를 생성해 등록함으로써, 특정 필터 조건과 일치하는 브로드캐스트 인텐트에 귀 기울일 수 있다. 브로드캐스트 수신자는 수신되는 인텐트에 반응해 자동으로 개발자의 애플리케이션을 시작시킬 것이며, 이들은 이벤트 중심 애플리케이션에 적합하도록 만들 것이다.
  • 알림(Notifications)  
    사용자 알림 프레임워크다. 알림은 사용자의 현재 액티비티가 가진 포커스를 빼앗거나 방해함 없이 사용자에게 신호할 수 있도록 해준다. 이는 서비스나 브로드캐스트 수신자에서 사용자의 주의를 끌기 위해 선호되는 기법이다. 예컨대, 장치는 텍스트 메시지를 수신하거나 전화가 걸려올 때 불빛을 깜박이거나, 소리를 내거나, 아이콘을 표시하거나, 다이얼로그 메시지를 보여줌으로써 사용자에게 알린다.

이 글은 스프링노트에서 작성되었습니다.

츌처 : http://www.devmento.co.kr/devmain/news/news_detail.jsp?dataSeq=ABAAAA11356


구글 안드로이드 2.0이 모습을 드러냈습니다. 다음달 모토로라와 버라이즌이 출시되는 ‘드로이드’에 탑재될 것으로 알려진 안드로이드 2.0 의 소프트웨어 개발킷(SDK)이 공개되고 새로운 기능들이 발표되었습니다.

[변경된 애플리케이션 기능]

다중 계정 지원

multiple-accounts
구글의 안드로이드 폰은 처음 사용을 시작할 때 구글 계정을 하나 입력해서 사용합니다. 입력된 구글 계정을 통해 이메일과 전화번호부 그리고 일정 관리 데이터들을 클라우드 서버에 자동으로 저장하고 가져오기 위해서 입니다. 안드로이드 2.0에서는 여러 개의 구글 계정을 동시에 사용할 수 있을 뿐 아니라 MS Exchange 계정도 추가해서 사용할 수 있습니다.

또한 개발자는 Gmail이나 Exchange가 아닌 다른 클라우드 서버와 연동할 수 있도록 기능을 추가할 수 있게 되었습니다. 예를 들어 네이버, 다음 등의 이메일과 연락처관리 시스템도 쉽게 안드로이드폰과 연동해서 사용할 수 있게 됩니다.

통합된 이메일 박스

email-inbox

여러 개의 계정을 동시에 휴대폰에 넣어서 관리할 수 있는 만큼 이메일도 동시에 여러 출처로부터 받아서 보여줄 수 있게 바뀌었습니다. 그리고 Exchange도 기본으로 지원하게 되었습니다.

많은 사용자가 업무용, 개인용 등을 구분하여 여러 개의 이메일을 사용하고 있기 때문에 편리하게 구분해서 사용할 수 있습니다.

SMS, MMS 검색

이메일 사용하면서 과거에 온 메일 찾아보려고 검색 기능 많이 사용하시지요? 이제 SMS와 MMS도 이메일처럼 쉽게 검색을 할 수 있는 기능을 제공합니다.
sms
향상된 카메라 기능
기본 카메라 기능도 많이 향상되었습니다.
플래쉬 지원, 디지털 줌 지원, 화이트 밸런스,칼라 이펙트, 접사 기능 등을 지원합니다.
스크린 가상 키보드

향상된 레이아웃으로 쉽게 오타 교정이 가능하고 빠른 타이핑이 가능합니다.  멀티 터치 지원으로 빠르게 치면서 두 손가락이 겹쳐도 오타가 나지 않습니다.  내장 사전 기능이 향상되 자동으로 많이 사용하는 단어를 추가하고 전화번호부의 이름들을 추가합니다.

camera-modes

브라우저

쉽게 검색과 url 입력을 통한 이동이 가능할 수 있도록 상단 부분에 주소창이 들어갔습니다. 더블탭을 통한 더블탭을 통한 편리한 브라우징을 지원합니다. 썸네일을 표시하는 북마크 시스템이 들어갔고, HTML5를 지원합니다. 데이터베이스 API, 어플리케이션 캐쉬, 위치정보 제공과, 비디오 태그 등을 지원합니다.

browser

[새로 들어간 플랫폼 기술]

◆ 미디어 프레임워크 (비디오 재생, 녹화, 이미지 처리)

- 구조 개선으로 향상된 속도 제공

◆ 블루투스 지원

블루투스 2.1 을  안드로이드 SDK에서 지원합니다. 반드시 있어야 하나 안드로이드에 들어있지 않았던 API 블루투스가 마침내 들어갔습니다.
- Push Profile (OPP) , Phone Book Access Profile (PBAP)

◆ 계정 관리자

안드로이드는 여러 웹서비스들과 연동되는 애플리케이션을 가지고 있는데 아이디나 암호를 장치내에 안전하게 보관할 수 있는 방법이 없었습니다. 사용자를 매번 아이디와 패스워드를 입력하게  할수도 없어서 불안한 방식으로 저장할 수 밖에 없었는데 이제 좀더 안전한 방식으로 저장할 수 있게 되었습니다.

◆ 싱크 어댑터

이 계정과 연동해서 구글뿐 아니라 다른 웹서버에서도 데이터들을 싱크할 수 있는 통합 싱크 방법을 제공합니다. 내가 사용하는 서비스와 싱크할 수 있는 부분만 간단히 구현하면 나머지는 시스템에서 관리하게 됩니다.

◆ HOME, MENU, BACK, SEARCH의 버츄얼 키 지원

다양한 장치가 출현하고 다양한 방식으로 안드로이드가 사용되면서 홈,메뉴,백키 스크린 버튼을 안드로이드 프레임워크에서 지원해야 한다고 지적한 적이 있었는데 이제 공식 지원하는군요. 개발자들은 수정된 방식에 따라 키 처리 방식을 수정해야 합니다.

◆ 멀티터치 지원

최대 세개의 포인트를 추적할 수 있는 API를 제공합니다.

안드로이드는 현재 매우 빠르게 발전하고 있습니다. 처음 1.0 장치가 나왔을 때 기술적으로 부족하다고 생각했던 많은 부분들이 1년반 동안 상당부분 구현되었습니다. 이제 겨우 스마트폰을 위한 플랫폼이 완성되어 간다고 느껴집니다. 대만의 시장 조사 기관인 MIC에서는 2013년에 안드로이드 스마트폰 사용자가 3천2백만에 이를 것으로 예측했습니다. 놀라운 것은 안드로이드 운영체제를 사용한 장치 전체는 1억2천6백만대 정도가 될 것으로 예측한 것입니다. 더 많은 장치들로 빠르게 확산될 안드로이드가 2.5와 3.0에서는 어떤 기능들을 지원할지 기대가 됩니다.

+ Recent posts