태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

메니페스트 에디터 활용 - 구성요소, 권한 추가 및 외부 라이브러리 사용

2010.01.11 12:36

이번 강좌에서는 이클립스의 안드로이드 플러그인 (ADT)에서 제공하는 메니페스트 에디터를 통해 어플리케이션의 구성요소 (액티비티, 서비스, 브로드캐스트 리시버, 컨텐트 프로바이더)를 추가하는 방법과 어플리케이션에서 사용할 권한을 추가하는 방법, 그리고 구글맵 서비스 등을 사용하기 위해 외부 라이브러리 사용하도록 정의하는 방법에 대하여 알아보도록 하겠습니다.

어플리케이션 구성요소 추가

어플리케이션 구성요소의 추가는 메니페스트 에디터의 Application 탭 - Application Nodes에서 수행합니다.

메니페스트 에디터의 Application 탭. 좌측 하단의 Application Nodes 에서 어플리케이션 구성요소의 추가/삭제가 가능합니다.


여기에서는 어플리케이션의 대표적 구성요소인 액티비티를 추가해보도록 하겠습니다.
Add... 버튼을 누르면, 아래와 같은 화면이 나옵니다.


추가할 수 있는 여러 가지 항목이 표시됩니다. Activity 를 선택한 후, OK 버튼을 누릅니다.


위와 같이 Application Nodes에 새로운 액티비티가 추가됨과 동시에, 해당 액티비티의 속성(Attributes)를 지정하는 화면이 오른쪽에 표시됩니다. 아직은 메니페스트 파일에 새로운 액티비티의 "뼈대"만 추가했을 뿐, 실제로 이 액티비티의 클래스조차 생성이 되어 있지 않은 상태입니다. 

이 액티비티의 클래스를 추가해주기 위해 속성 화면의 Name* 을 클릭합니다.


위와 같이 새로운 클래스를 추가하는 화면이 표시됩니다. 
이름에 적절한 이름을 선택해주신 후, Finish 버튼을 누르면 새로운 액티비티가 생성됩니다.



인텐트 필터 추가하기

위에서 새로운 액티비티를 생성하였지만, 저 상태에서는 호출할 대상을 명확하게 지정한 인텐트인 명시적 인텐트 (Explicit Intent)만이 해당 액티비티를 호출 할 수 있습니다. 하지만, 지금은 액티비티에 인텐트 필터가 추가되어 있지 않기에 다른 어플리케이션에서 이 액티비티를 호출할 수 있는 인텐트인 암시적 인텐트(Implicit Intent)를 받을 수 없습니다.

암시적 인텐트를 받을 수 있도록 하기 위해서는 액티비티에 인텐트 필터를 추가하여야 합니다. 여기에서는 com.androidhuman.action.TEST_ACTION 이라는 액션(Action)을 갖는 인텐트를 받을 수 있는 인텐트 필터를  추가해보도록 하겠습니다. 이 과정은 액티비티 뿐만 아니라 브로드캐스트 리시버, 서비스에도 동일하게 적용됩니다.

Application Nodes 화면에서 인텐트 필터를 추가할 구성요소를 선택한 후, Add.. 버튼을 누릅니다.


아래와 같이 해당 구성요소의 하위 요소로 추가할 항목들이 표시됩니다. Intent Filter를 선택합니다.


인텐트 필터가 추가되었습니다. 이제 해당 인텐트 필터라 처리할 액션(Action)을 지정해주어야 합니다.
인텐트 필터를 선택한 상태에서 다시 Add... 버튼을 누릅니다.


아래와 같이 액션(Action), 카테고리(Category), 데이터(Data)의 구성요소를 추가할 수 있습니다. 우선, 액션을 선택합니다.


액션이 추가되고, 오른쪽에 액션의 이름을 지정하는 속성 창이 표시됩니다. 여기에 우리가 처리할 액션의 이름인 com.androidhuman.action.TEST_ACTION을 넣어줍니다.


아직 한 단계가 더 남았습니다. 암시적 인텐트를 처리하려면 액션 뿐만 아니라 CATEGORY_DEFAULT(android.intent.category.DEFAULT) 카테고리도 정의되어 있어야 합니다. 이 카테고리가 정의되어 있지 않다면 암시적 인텐트를 받을 수 없습니다. Intent Filter를 선택한 후, 액션을 추가하는 과정과 동일하게 이번에는 Category를 추가합니다.


이것으로, 우리가 새로 만든 액티비티가 com.androidhuman.action.TEST_ACTION이라는 액션을 가진 인텐트를 받을 수 있게 되었습니다. 다른 컴포넌트, 혹은 다른 어플리케이션에서 이 액티비티를 호출하기 위해서는 아래와 같이 해주면 됩니다.

	    Intent intent = new Intent("com.androidhuman.action.TEST_ACTION");
	    startActivity(intent);


권한 추가

안드로이드에서 특정 기능이나 데이터베이스에 접근하려면 그에 해당하는 권한이 필요합니다. 인터넷을 사용, 주소록 접근 등등이 예가 될 수 있죠. 

권한 추가는 Permissions 탭에서 할 수 있습니다. 메니페스트 에디터의 Permissions 탭을 클릭합니다.


어플리케이션에서 사용할 권한을 추가하기 위해 Add.. 버튼을 클릭합니다.


Uses Permission으 클릭한 후, OK 버튼을 누르면 오른쪽에 어떤 권한을 사용할 지 선택할 수 있는 속성 창이 표시됩니다. 여기에서 자신의 어플리케이션에서 필요한 권한을 골라 선택하면 됩니다. 아래에서는 주소록의 데이터를 읽을 수 있는 권한인 READ_CONTACTS 권한을 사용하도록 설정하였습니다.



외부 라이브러리 사용

구글맵 라이브러리 등 안드로이드 표준 라이브러리 외에 다른 라이브러리를 사용한다면, 그 라이브러리를 사용한다는 것도 메니페스트 파일에 정의해 주어야 합니다. 

라이브러리 사용 선언은 Application 탭 - Application Nodes 화면에서 할 수 있습니다. Add.. 버튼을 눌러줍니다.


위의 Create a new element at the top leve, in Application을 선택한 후, Uses Library를 선택하면 아래와 같이 Application Nodes에 Uses Library 항목이 추가되면서 속성 창이 오른쪽에 표시됩니다. 아래에서는 구글맵 라이브러리를 사용하도록 설정하였습니다.




저작자 표시 비영리 변경 금지
신고

커니 어플리케이션 구성/AndroidManifest.xml , , , , , , , , , , , ,

  1. Blog Icon
    황똘

    강좌 잘보고있습니다.팁이라면 반응이 느릴땐 ctrl+s를 사용하면 반응이 팍팍 저장 단축키죠 ^

  2. 저도 매우 유용하게 사용하고 있는 단축키 중 하나입니다 :)

  3. Blog Icon
    idzer0

    아주 쉽게 설명 되어 있어서 왠만한 책 보는 것보다 이해가 더 빠릅니다...감사합니다...

  4. Blog Icon
    손님

    커니님 자세한 설명 항상 감사합니다.
    예전에 쓸 때는 메니페스트 추가할때 위의 그림처럼 드롭다운리스트가 나와서 선택해줬는데요
    이제는 http://www.androidpub.com/787269 여기 그림처럼 브라우저로 나옵니다.
    어떻게 해주어야 되는지요..
    아무리 찾아봐도 나오질 않아서 질문드립니다.

  5. 어느순간 바뀌어버린것 같더군요.. 저도 자세한 이유는 모르겠습니다 ^^;

  6. Blog Icon
    루돌푸

    permission에 관해서 질문좀 드릴께요
    Contact 쪽에있는 데이터베이스를 사용하려면 use-permission을 해줘야 하잖아요?
    그럼 유저가 만든 DB 즉 컨텐트프로바이더를 하나 만들어서 정보를 공유할때
    Contact처럼 permission을 두어 접근을 제한하고 싶은대요 좀처럼 잘 되지 않더라고요
    제가 만든 컨텐트 프로바이더 Manifest파일에 permissiom을

    <permission android:name="kr.co.wikibook.permission.READ_DB"
    android:protectionLevel="dangerous"</permission>

    이런식으로 두었는데 다른 어플리케이션에서 use-permission을 하지 않아도 접근이 가능하더라고요..
    왜그런걸까요??

  7. http://developer.android.com/reference/android/R.styleable.html#AndroidManifestPermission_protectionLevel

    를 참고하세요. 컨텐트 프로바이더의 경우 grand-uri-permission 부분도 고려하시면 좋습니다.아래 문서를 참고하세요.

    http://developer.android.com/guide/topics/security/security.html

  8. 커니님의 강좌에 늘 감사하고 있습니다.
    다름이 아니고 책과 블로그를 보며 열심히 따라하고 있는데,
    구글맵 추가하는 부분(외부 라이브러리 사용)에서 메니페스트에 User library를 선택하고 OK를 눌렀습니다.
    그 후 Attributes 창의 Name 부분에 com.google.android.maps를 선택해야 하는데
    android.test.runner 밖에 선택할 수 있는 게없네요.
    아무리 다시봐도 어디서 틀렸는지를 모르겠습니다.ㅠ

  9. 프로젝트 타겟이 Google APIs로 되어있는지 확인해보세요~

  10. 좋은글 출처를 표시하고 블로그에 담아갑니다. ^^