본문 바로가기

Android

[버섯] GCM 관련 기초 자료 4 - 클라이언트 앱 설치


추가 : 2012-08-10 에뮬레이터관련 테스트에 대한 문의가 있어서 내용을 좀 더 자세히 추가 했습니다.


안녕하세요 버섯돌이 유재성입니다.


당분간은 제 계정 정보로도 테스트가 가능하겠지만 반드시 자신의 정보에 맞는 값으로 설정하시기 바랍니다.


GCM 서비스를 빠른 시간안에 간단히 테스트만 하시려는 분들을 위해 이 글을 작성합니다.^^

저는 모바일 앱 개발을 해 보지 않았기에 관련 질문은 하셔도 99%는 모른다고 생각하시기 바랍니다.


본 글은 아래 구글의 GCM Demo 자료를 따라하는 글이기때문에

세부적인 내용이나 모르는 부분들은 구글의 GCM관련 글 들을 참고 하시기 바랍니다.

http://developer.android.com/guide/google/gcm/demo.html#server-setup


ant 설정이나 콘솔창 실행및 폴더 이동등은 이전 강좌를 참고 하시기 바랍니다.


Sender ID는 Google API project ID입니다.

https://code.google.com/apis/console 페이지에 로그인하신 후 상단 URL에 보시면 나옵니다.


예를들어, 제 경우에는 아래처럼 생겼습니다.



위 URL에서 436783885124가 프로젝트 ID로서 "SENDER_ID"에 설정 할 값입니다.

각자 자신의 값으로 설정해서 사용하세요.


어떤 값을 입력해야 하는지 잘 모르시겠다면 이전에 작성한 "GCM 서비스 신청" 글을 확인하시기 바랍니다.

http://blog.naver.com/dev4unet/120164239008


이클립스에서 개발 해 보신분들은 편하게 이클립스에 Import 하셔서 테스트 하시면되지만

이번 과정에서는 가이드의 절차대로 진행하겠습니다.


[**모바일 앱 설치**]

1. 클라이언트 샘플의 CommonUtilities.java 파일에서 SERVER_URL과 SENDER_ID를 수정한다.

C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\src\com\google\android\gcm\demo\app\CommonUtilities.java


[수정예시]

static final String SERVER_URL = "http://192.168.0.1:8080/gcm-demo";

static final String SENDER_ID = "436783885124 "; //반드시 자신의 값에 맞게 설정하세요.


 [주의]

  SERVER_URL은 127.0.0.1같은 주소를 적으면 스마트폰에서 접속이 안되기 때문에

  스마트폰에서 접속 가능한 IP주소를 적어 주셔야 합니다.

  따라서, 외부에서 접근 가능한 IP주소가 있으셔야 합니다.


  별도로 사용중인 외부서버나 무료 서버가 없다면 저처럼 유무선 공유기를 이용해서

  Server가 실행 될 컴퓨터와 스마트폰을 같은 공유기를 이용 하도록 하시면 됩니다.

  참고로, 제 경우 공유기에 물려있는 컴퓨터의 IP주소가 "192.168.0.1"입니다.

  세부내용은 공유기등의 자료를 찾아 보시기 바랍니다.



2. apk파일 생성을 위해 콘솔창에서 .\gcm\samples\gcm-demo-client 폴더로 이동



3. 아래 명령어를 이용해서 생성

> android update project --name GCMDemo -p . --target android-16


 위 명령어가 실패시 아래처럼 실행

> android update project --name GCMDemo -p . --target android-15


[참고] 아래처럼 'android-16'을 인식하지 못하면 'android-16'대신에 'android-15'로 빌드하면 됨.

Error: Target id 'android-16' is not valid. Use 'android.bat list targets' to get the target ids.


[예시] 실패예시

C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client>android update project --name GCMDemo -p . --target android-16

Error: Target id 'android-16' is not valid. Use 'android.bat list targets' to get the target ids.


 [예시] 에러시 아래처럼 android-15로 재 실행 (정상적인 경우 아래처럼 진행됩니다.)

C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client>android update project --name GCMDemo -p . --target android-15

Updated and renamed default.properties to project.properties

Updated local.properties

Added file C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\build.xml

Added file C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\proguard.cfg



4. ant를 이용해서 빌드 함.

> ant clean debug


[예시] 쓸데없는 내용이 길기 때문에 적절히 Skip 하세요^^

C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client>ant clean debug

Buildfile: C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\build.xml


-pre-clean:


clean:

-set-mode-check:

-set-debug-files:

-set-debug-mode:

-debug-obfuscation-check:


-setup:

 [echo] Gathering info for GCMDemo...

[setup] Android SDK Tools Revision 16

[setup] Project Target: Android 4.0.3

[setup] API level: 15

[setup]

[setup] ------------------

[setup] Resolving library dependencies:

[setup] No library dependencies.

[setup]

[setup] ------------------

[setup]

[setup] WARNING: Attribute minSdkVersion in AndroidManifest.xml (8) is lower than the project target API level (15)


-build-setup:

 [echo] Creating output directories if needed...

[mkdir] Created dir: C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\bin

[mkdir] Created dir: C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\bin\res

[mkdir] Created dir: C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\gen

[mkdir] Created dir: C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\bin\classes


-pre-build:


-code-gen:

 [echo] ----------

 [echo] Handling aidl files...

 [aidl] No AIDL files to compile.

 [echo] ----------

 [echo] Handling RenderScript files...

[renderscript] No RenderScript files to compile.

 [echo] ----------

 [echo] Handling Resources...

 [aapt] Generating resource IDs...


-pre-compile:


-compile:

[javac] Compiling 6 source files to C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\bin\classes


-post-compile:


-obfuscate:


-dex:

  [dex] Converting compiled files and external libraries into C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\bin\classes.dex...


-crunch:

   [crunch] Crunching PNG Files in source dir: C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\res

                      ... 생략 ...

   [crunch] Crunched 16 PNG files to update cache


-package-resources:

 [aapt] Creating full resource package...


-package:

[apkbuilder] Current build type is different than previous build: forced apkbuilder run.

[apkbuilder] Creating GCMDemo-debug-unaligned.apk and signing it with a debug key...


-do-debug:

 [zipalign] Running zip align on final apk...

 [echo] Debug Package: C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\bin\GCMDemo-debug.apk


debug:

[propertyfile] Creating new property file: C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\bin\build.prop

[propertyfile] Updating property file: C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\bin\build.prop

[propertyfile] Updating property file: C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\bin\build.prop

[propertyfile] Updating property file: C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\bin\build.prop


BUILD SUCCESSFUL

Total time: 5 seconds



5. 안드로이드 에뮬레이터를 실행 함.

    에뮬레이터에서도 GCM 메시시 등록과 수신이 가능합니다만

    저는 에뮬레이터는 이용하지 않기 때문에 저처럼 폰에서만 테스트 하실 분들은 생략하셔도 됩니다.^^;;

    아래의 "my_avd"부분은 자신이 설정한 AVD (Android Virtual Device) 이름으로 수정하셔야 합니다.


    > emulator -avd my_avd


[참고]

   에뮬레이터에서 테스트 하기 위한 환경 설정 방법은 잘 모르니 관련 내용은 다음 URL을 참고 하세요.

   http://developer.android.com/tools/devices/index.html


[주의]

Make sure there is a Google account added to the emulator.

  It doesn't have to be any account (like the senderId) in particular.

If the emulator is running Android 4.0.4 or later

  this step is optional as GCM does not require an account from this version on.


  에뮬레이터로 실행시 안드로이드 4.0.4버전부터는 GCM테스트를 위해 계정을 추가할 필요는 없으며,

  그 아래 버전(예:2.3.3)에서는 반드시 구글 게정을 추가해야 테스트가 가능합니다.

   가상 장치에 구글 계정을 설치하는 방법은 에뮬 실행 후 "Settings > Accounts & sync"에 가셔서 설정하시면 됩니다.


   가장 중요한건 가상장치를 만드실때 Target을 안드로이드로 하지 마시고 반드시 Google APIs를 선택하시기 바랍니다.

   


   잘 모르시는 분들은 위 처럼 반드시 "Google APIs"를 선택 하셔야하며 4.0.4부터는 구글 계정이 필요 없습니다.

  그냥 속편하게 가상장치 만드실때 타겟을 "Google APIs (Google Inc.) - API Level 16"을 선택하시면 됩니다.^^



6. 에뮬레이터나 스마트폰에 테스트용 앱을 설치 함.

> ant installd


[참고]

- 5.번 과정에 의해서 에뮬레이터가 실행된 상태에서 스마트폰도 컴퓨터에 연결되어 있다면

  에뮬레이터와 스마트폰 중 어떤 곳에 설치해야 할지 모르기때문에 아래와 같은 에러가 발생 함.

  (제 경우에는 스마트폰에 설치하려고 에뮬레이터를 종료 했습니다.)



   [실패 예시] 에뮬레이터가 실행 중인데 폰도 USB로 연결된 경우

C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client>ant installd

Buildfile: C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\build.xml


-set-mode-check:


-set-debug-files:


install:

 [echo] Installing C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\bin\GCMDemo-debug.apk onto default emulator or device...

 [exec] error: more than one device and emulator


BUILD FAILED

C:\android\android-sdks\android-sdk\tools\ant\build.xml:1124: The following error occurred while executing this line:

C:\android\android-sdks\android-sdk\tools\ant\build.xml:1138: exec returned: 1


Total time: 0 seconds



[예시] 에뮬레이터 종료 후 스마트폰만 연결했을 때(USB모드는 충전 상태로 하고 외부 프로그램 허용 상태가 되어야 함.)

C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client>ant installd

Buildfile: C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\build.xml


-set-mode-check:


-set-debug-files:


install:

 [echo] Installing C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\bin\GCMDemo-debug.apk onto default emulator or device...

 [exec]     pkg: /data/local/tmp/GCMDemo-debug.apk

 [exec] 1132 KB/s (47549 bytes in 0.041s)

 [exec] Success


installd:


BUILD SUCCESSFUL

Total time: 3 seconds




[예시] 에뮬레이터만 실행한 경우

C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client>ant installd

Buildfile: C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\build.xml


-set-mode-check:


-set-debug-files:


install:

 [echo] Installing C:\Users\MrYoo\android-sdks\extras\google\gcm\samples\gcm-demo-client\bin\GCMDemo-debug.apk onto default emulator or device...

 [exec]     pkg: /data/local/tmp/GCMDemo-debug.apk

 [exec] Success

 [exec] 52 KB/s (47549 bytes in 0.888s)


installd:


BUILD SUCCESSFUL

Total time: 4 seconds



7. 설치된 "GCM Demo" 앱을 실행합니다.

   최초 실행시 아래와 같은 화면이 출력됩니다.



   첫줄을 보시면 "From GCM: device successfully registered!"라는 문구가 보일 것 입니다.

   앱이 실행되면 해당 단말을 등록하는 절차가 진행되며 위 처럼 성공하게 서버로부터 메시지 수신이 가능합니다.

   위는 AVD(Android Virtual Device)에서 2.3.3 환경으로 만들었으며 구글 계정을 추가했을때의 화면입니다.

   2.3.3에서는 구글 계정이 없으면 GCM을 등록할 수 없습니다.

   (5.번 항목의 [주의] 부분 참고)





   AVD에서 4.1 환경으로 만들었을 때에는 특별히 구글 계정을 추가할 필요 없이

   곧바로 실행하면 위처럼 GCM 등록및 수신이 모두 가능합니다.

   가상 환경을 이용하실 분들은 적절히 판단하시고 저 처럼 잘 모르겠다 싶으면 그냥 4.1 환경으로 이용하세요.


   위처럼 앱이 최초 실행되면 GCM 서비스에 단말을 등록하고 1.번에서 설정한 SERVER_URL로 등록ID를 알려줍니다.

   따라서, 서버의 콘솔 로그를 보시면 아래처럼 단말이 등록되었다는 정보가 출력 될 것입니다.

   




제 전문 분야가 아닌데다 짜투리 시간에 급하게 작성하는 것이라서 잘 못된 부분이 있을 수 있습니다.

틈틈이 내용을 수정이나 보완하고 있으니 가끔씩 원본 출처에서 변경 내용을 확인 하시기 바랍니다.


[저작권 관련]

이 부분을 함께 이동하는 경우에 한해서 다른 곳으로의 이동을 허락하며

거의 모든 내용은 http://blog.naver.com/dev4unet 블로그에도 함께 포스팅되므로
잘 못된 내용의 수정이나 전달 사항이 있으면 위 블로그에 메모를 남겨주시기 바랍니다.

참고로, 해당 글에 대해서 타인과 공유될 수 없는 쪽지와 메일등으로는 질문을 받지 않습니다.

 

본 게시글의 원본출처는 http://yoo7577.dev4u.net 이며,

원활한 공유및 내용 수정이 필요할 때 잘 못된 내용의 전파를 최대한 막기 위함이니

게시물의 일부 또는 전체의 직접적인 수정을 금지합니다.