달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
반응형
728x90
반응형

안드로이드 -

프로젝트 실행과 디버깅 그리고 단말 세팅

 

 

원본출처:http://www.androidpub.com/764

 

안녕하세요 회색입니다. 이번 강좌에서는 작성된 프로젝트의 실행과 디버깅을 해보고 실제 단말 연결까지 해보도록 하겠습니다.

안드로이드 강좌 3 - 프로젝트 실행과 디버깅 그리고 단말 세팅

Activity 실행

메뉴에서 Run/Run Configurations 실행

Android Application에서 오른쪽 마우스 클릭후 New 선택 
Name: New_configuration 을 프로젝트에 맞게 변경 
Project : Browse후 해당 Project선택 
Launch Action : Run시 실행할 Activity를 선택합니다.

lecture3-1.JPG
(그림 3-1)

새로 작성한 Activity를 실행해 보기 위해서 Launch를 선택하고 List에서 새로생성한 MyActivity를 선택합니다. 
Apply 후 Run을 실행하면 Emulator가 아직 떠있지 않다면 자동으로 실행합니다. Emulator는 한번 생성해 놓으면 매번 프로그램을 실행할때 마다 다시 시작시킬필요없이 재사용될 수 있습니다.

Run을 하게 되면 자동으로 Emulator에 이전에 인스톨되어있던 프로그램을 언인스톨하고 새로 작성된 프로그램을 인스톨한 후 선택한 Activity로 실행하여 줍니다.

lecture3-2.JPG
(그림 3-2)

에뮬레이터를 처음 실행하였을 때 (그림 3-2)와 같은 화면이 나오는데 MENU라고 써져 있는 부분을 클릭하면 프로그램 화면을 볼 수 있습니다. 정상적으로 실행이 되었다면 에뮬레이터에 myactivity.xml에서 작성해주었던 "안녕하세요 모바일 플레이스 안드로이드 강좌 수강생 여러분" 라는 문구가 나타납니다.

lecture3-3.JPG
(그림 3-3)

다시 프로그램을 실행시킬 때에는 (그림 3-3)에 표시된 아이콘을 누른 후 생성한 Configuration을 선택하면 됩니다.

디버깅

소스 에디터의 왼쪽 부분을 더블 클릭하면 해당 위치에 브레이크 포인트가 설정됩니다. 브레이크 포인트가 설정된 지점에 작은 동그라미가 표시됩니다.

lecture3-4.JPG
(그림 3-4)

그럼 이제 디버깅 모드로 프로그램을 실행시켜보도록 하겠습니다. (그림 3-5)에 표시된 벌레 모양 아이콘이 디버깅을 위한 실행 버튼입니다.

lecture3-5.JPG
(그림 3-5)

다이얼로그 창이 뜨는데 확인을 누르면 이클립스가 디버그 상태로 전환됩니다. 이것을 Debug Perspective로 전환되었다고 합니다. 그리고 아까 잡아주었던 브레이크 포인트에 현재 실행이 멈추어 있는 것을 확인할 수 있습니다.

lecture3-6.JPG
(그림 3-6)

Step Into (F5) : 메서드 속으로 들어가서 실행
Step Over (F6) : 한줄 실행

등 디버깅과 관련된 명령과 아이콘의 모양은 메뉴의 Run에서 확인하실 수 있습니다.

Perspective

소스 변경화면과 디버깅 화면등의 Perspective 전환은 오른쪽 위화면에서 각각 Java와 Debug의 클릭으로 가능합니다. 

lecture3-7.JPG
(그림 3-7)

안드로이드 개발시 또하나의 유용한 Perspective가 있는데 바로 DDMS입니다. 메뉴의 Windows/Open Perspective에서 DDMS를 선택하면 열수 있습니다. (바로 보이지 않는다면 Other를 클릭하면 선택하실 수 있습니다.)

lecture3-8.JPG
(그림 3-8)

DDMS Perspective에서는 현재 에뮬레이터 및 단말의 프로세스, 쓰레드, 힙, 파일등의 다양한 정보를 확인할 수 있습니다. 또한 에뮬레이터에서 SMS, 전화, GPS 등을 시뮬레이션할 수도 있습니다.

로그캣

저번 강좌에서 소스에 Log.d("MyTag", "Print Test Log"); 라는 코드를 넣었습니다. 이것은 개발할때 필요한 로그를 출력해주는 역할을 합니다. 디버깅 혹은 DDMS 화면 밑 부분에 LogCat이라는 영역에서 로그를 확인하실 수 있습니다. Print Test Log라고 찍힌 부분을 확인하실 수 있습니다.

lecture3-9.JPG
(그림 3-9)

그런데 로그가 너무 많이 나와서 복잡합니다. 작성한 어플리케이션에서 나오는 메시지만을 따로 확인하기 위해서 필터를 적용할 수 있습니다. Log.d함수의 첫번째 인자인 Tag부분을 이용해서 가능합니다. 녹색 + 모양을 눌러 Filter를 생성합니다.

lecture3-10.JPG
(그림 3-10)

Log Filter라는 창에서 Filter Name은 적당히 적은 후, 따로 메시지를 확인할 Tag부분을 "MyTag"로 적어서 OK를 합니다.

lecture3-11.JPG
(그림 3-11)

이제 LogCat창안에 새로운 필터 탭이 생겨서 MyTag라는 Tag를 가지는 메시지는 따로 분류해서 보여줍니다.

lecture3-12.JPG
(그림 3-12)

단말 디버깅

안드로이드 실제 단말을 통한 개발은 몇가지 설정만 해준다면 에뮬레이터를 통한 개발과 크게 다르지 않습니다.

단말 상에서 Settings를 실행 Applications/Development로 들어가서 USB debugging과 Stay awake를 체크해줍니다. 
그런 후 단말을 USB케이블을 통해서 PC연결해주면 새로운 장치를 찾았다며 드라이버를 설치하라는 화면이 나옵니다.
드라이버는 SDK가 설치된 폴더 밑에 usb_driver라는 폴더에 저장되어있습니다. (1.0 SDK Release2에서 부터 포함되서 나왔습니다.)

정상적으로 드라이버가 설치되었다면 DDMS화면의 왼쪽 윗부분 Devices화면에 Emulator가 아닌 실제 장치가 표시됩니다.

lecture3-13.JPG
(그림 3-13)

실제 단말상에서 개발시 소스 상에서 추가해줘야 하는 부분이 하나 있습니다. AndroidManifest.xml에 application 태그에서 android:debuggable="true"를 추가해주어야 합니다. 만약 설정해주지 않는다면 Wating For Debugger화면에서 더 이상 진행되지 않습니다.

lecture3-14.JPG
(그림 3-14)

debuggable tag는 개발시에 넣어두고 실제 릴리즈시에는 삭제해주는 것이 좋습니다. 이제 모든 설정이 끝났고 실제 단말에서도 에뮬레이터에서 디버깅을 하는 것과 동일하게 개발을 하실 수 있습니다.

이번 강좌에서는 안드로이드 개발과 디버깅을 위한 이클립스의 사용법과 단말 세팅까지 살펴보았습니다. 이제 이클립스에 환경과 기본적인 프로젝트 구성에 익숙해지셨을 테니 다음 강좌 부터는 본격적인 개발에 들어가 보도록 하겠습니다.

 

728x90
반응형
:
Posted by mapagilove
728x90
반응형

안드로이드 - DDMS 인식 오류, Devices 인식 못함

원본 출처: http://purepleya.blogspot.kr/2011/07/android-ddms-devices.html

증상


안드로이드 스마트폰을 PC와 연결하였으나 기기 인식을 못한다.

1. 안드로이드 폰의 "설정 > 애플리케이션 > 개발 > USB디버깅"은 당연히 체크 상태이다.
2. USB 케이블에는 아무 이상이 없다.


해결방법

1. USB 드라이버가 제대로 설치되어 있는지 확인한다.
 - 제어판 에 있는 장치관리자로 이동하여 Android Phone 가 제대로 인식되어 있는지 확인한다.
 - 제대로 인식되지 않고 느낌표(!)가 떠 있다면 드라이버를 설치해줘야 한다.
 - 드라이버는 android-sdk 폴더 > extras > google > usb_driver 폴더에 있다.

2. 드라이버도 제대로 설치되어 있는데 안되면, adb 프로세스를 재 시작 한다.
 - adb kill-server 로 프로세스를 종료시키고
 - adb devices 로 프로세스를 재 시작한다.

3. 드라이버도 설치되어있고 adb 프로세스 재 시작 해도 안되면 리부팅한다.
728x90
반응형
:
Posted by mapagilove
728x90
반응형

안드로이드 - Android 의 다해상도 지원 문제
원본출처:http://kese111.blogspot.kr/2012/12/android.html



 













안드로이드 기기별 해상도의 차이 때문에 골치썩는 분들 좀 많으신거 같습니다.

오늘은 아주아주 간단하게 Android에서 발생하는 다해상도 관련 문제들을 해결할 방법들을 정리 해보겠습니다. 


이 글에서 정리할 다해상도 지원 방법은 대충 이렇습니다.
1. 각 해상도 별 Layout 제작.
2. Weight 기반 Layout 제작.
3. 이도저도 싫으면 Runtime 시에 크기 맞추기.

1번. 각 해상도 별 Layout 제작.

이 방법은 별거 아닙니다.
Android 기본 프로젝트를 만들면 res floder에 기본으로
drawable-hdpi , drawable-ldpi, drawable-mdpi, drawable-xdpi
라고 폴더가 생성된걸 보셨을 겁니다.

저 위에 그림을 한번 다시 보시죠.
순서대로 ldpi 는 dpi 100부터~ ( 몇까지냐 구글 이놈들아 ) 인 것을 알 수 있습니다.
즉, 각 폴더의 -뒤에 오는 문자는 타겟 기기의 dpi를 뜻합니다.

같은 원칙으로 device의 inch 도 지정할 수 있습니다.  

그럼 이 원칙을 layout에 적용하면 어떻게 될까요? 
layout
layout-land
layout-normal-land-480x320
layout-normal-land-854x480
layout-port-480x320
layout-port-800x480

짜잔~ 요런 식입니다. 대충 무슨 뜻인지 감이 오시죠?
layout-불라불라-해상도로 만들면 대상 해상도를 위한 layout폴더가 만들어진 것 입니다.

정리하자면, 
layout-[land or port] - [ 화면 크기 ]- [ dpi ]-[ 해상도 ]

이렇게 되는것이죠.
한번 예를 들어볼까요? 샘숭 갤록시S3 는 어떨까요?

샘숭 갤록시S3를 위한 layout 폴더는 다음과 같습니다.
layout-large-xhdpi-1280x720 혹은 layout-xdpi-1280x720
입니다.

참고로 별도로 폴더를 생성하지 않은 경우에 리소스는 기본 폴더에서 가져옵니다.



이와 같은 방법은 resource의 수가 많을 수록, 용량이 클 수록 비효율적이 되지만 장점도 있습니다. 그것은 모든 기기에서 같은 품질을 유지할 수 있다는 것 입니다.



2. weight를 사용한 레이아웃 구성 방법

눈보라이야기 님 블로그를 참고하세요  - http://snowbora.com/422

weight라는 것은 가중치를 뜻합니다만, 쉽게 생각하면 %를 생각하면 될 것 같습니다.

귀찮으므로 다음으로 넘어가려다 한가지만 집고 가겠습니다.

weight를 최대한 세밀하게 잡으셔서 각 구성원들을 배치하는 곳에 LinearLayout  같은 별도의 컴퍼넌트를 배치해서 구성하는 것을 지양하셔야 됩니다. 개발자가 layout을 불러들이는 순간 허수로 넣은 Linearlayout도 객체를 생성하게 됩니다.

그러므로 버튼간 간격 등은 크게 문제가 안된다면 가급적 dp등의 수치를 사용하는게 낫다고 생각됩니다.  



3. Runtime에 크기 맞추기.

Runtime에 크기를 맞추는 것은 조금 복잡할 수 있습니다.


예를 들어 위와 같은 레이아웃이 있다고 생각해봅시다.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="320px"
    android:layout_height="460px"
    android:background="#000"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:src="@drawable/uwang" />

</RelativeLayout>


이 Layout은 가로 320px 세로 460px 에 딱 맞게 제작된 레이아웃입니다.
( 320x460은 우리나라에 처음 들어온 아이퐁3gs의 해상도입니다. ^_^ )

그리고 대상 타깃은 가로 480px 세로 800px 의 Google Nexus One 입니다.
해상도를 또 수정하는 것은 여간 잔망스런 일이 아닙니다.
그래서 runtime시에 기기의 해상도에 따라 맞춰줄 수 있으면 좋겠다는 생각이 들죠.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
  
 // 아래 문장은 setContentView(R.layout.activity_main) 와 같습니다.
 LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 View v = (View) inflater.inflate(R.layout.activity_main, null);
  
 DisplayMetrics displayMetrics = new DisplayMetrics();
 WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
 // the results will be higher than using the activity context object or the getWindowManager() shortcut
 wm.getDefaultDisplay().getMetrics(displayMetrics);
 int screenWidth = displayMetrics.widthPixels;
 int screenHeight = displayMetrics.heightPixels;
 Log.v("DOIT", "screenWidth : " + screenWidth + "px , screenHeight : " + screenHeight + "px");
 ViewGroup rl = (ViewGroup) ((ViewGroup)v).getChildAt(0);
 ViewGroup.LayoutParams lp = rl.getLayoutParams();
 lp.height = screenHeight; lp.width = screenWidth;
 rl.setLayoutParams(lp);
 setContentView(v);
 
 System.out.println( "Don't use console output ");
  
}


위의 소스를 적용하면 이렇게 나옵니다. 


 




이 방법을 제대로 구현하고자 한다면,
각 컴포넌트들을 해상도 비에 따라 scaling 해주는 작업이 있어야 할 것 입니다.
나중에 제가 만들게 되면 올리기는 하겠습니다. 


자~ 이번 글에서는 다해상도를 지원하는 방법을 알아봤습니다.

방법이 모두 장단점과 문제점을 가지고 있습니다.

첫 번째 방법은,
무식해보이지만 품질 관리차원에서.
그리고 해상도별 레이아웃을 최적화 하는데는 매우 좋습니다.

예를 들어, 4인치의 레이아웃과 5인치의 레이아웃을 다르게 하는 등
더 다양한 고객 대응이 가능해 질 것 입니다.

단, 그만큼의 비용이 추가되겠죠.


두 번재 방법은,
하나의 레이아웃을 모든 화면에서 사용할 수 있으며
추가 작업이 필요 없다는 점에서는 좋습니다.

하지만, 화면을 구성하기 어렵다는 점은 여전히 맹점이죠.
예를 들어 우측으로부터 몇 dp 아래로부터 몇 dp 등을 처리하는 것은
이 weight 로 하기는 좀 까다로운 점이 있습니다.


세 번째 방법은,


두 번째 방법과 마찬가지로 하나의 레이아웃을 모든 화면에서 사용할 수 있습니다.
또한 컴퍼넌트의 배치에 제약받지 않기도 하는데,

대신 만들때 꽤나 골치가 아플 것입니다. ^~^ FIN

728x90
반응형
:
Posted by mapagilove
728x90
반응형

안드로이드 - [Java/Android] DIP to Pixel, Pixel to DIP 변환 유틸리티

 원본출처:http://theeye.pe.kr/entry/display-utility-for-convert-dip-to-pixel-on-android

안드로이드에서는 기본적으로 화면 해상도에 의존적이지 않는 화면 구성을 하여야만 합니다. 하지만 동적으로 UI를 구축한다거나 또는 복잡한 레이아웃에서는 그것이 쉽지가 않죠. 그경우엔 픽셀 단위의 글을 자유자재로 DIP으로 혹은 그 반대로 변환할 수 있어야 합니다. 다음은 간단히 사용할 수 있는 예제입니다.


public class DisplayUtil
{
 
private static final float DEFAULT_HDIP_DENSITY_SCALE = 1.5f;
 
/**
   * 픽셀단위를 현재 디스플레이 화면에 비례한 크기로 반환합니다.
   *
   * @param pixel 픽셀
   * @return 변환된 값 (DP)
   */

 
public static int DPFromPixel(int pixel)
 
{
   
Context context = BaseApplication.getContext();
   
float scale = context.getResources().getDisplayMetrics().density;
   
   
return (int)(pixel / DEFAULT_HDIP_DENSITY_SCALE * scale);
 
}
 
 
/**
   * 현재 디스플레이 화면에 비례한 DP단위를 픽셀 크기로 반환합니다.
   *
   * @param  DP 픽셀
   * @return 변환된 값 (pixel)
   */

 
public static int PixelFromDP(int DP)
 
{
   
Context context = BaseApplication.getContext();
   
float scale = context.getResources().getDisplayMetrics().density;
   
   
return (int)(DP / scale * DEFAULT_HDIP_DENSITY_SCALE);
 
}
}
728x90
반응형
:
Posted by mapagilove
728x90
반응형
Eclipse에서 처음 보는 에러를 발견.
프로젝트가 아예 단말로 설치도 되지 않아서 난감했다.
FindBugs plug-in을 설치한 직후라서, 그게 원인인가 고민도 했지만, 바로 구글링 시도.
아래와 같은 답변을 찾았다!

Delete your debug certificate under ~/.android/debug.keystore (on Linux and Mac OS X); the directory is something like %USERPROFILE%/.android on Windows.


The Eclipse plugin should then generate a new certificate when you next try to build a debug package. You may need to clean and then build to generate the certificate.


즉, 개인 홈 디렉토리의 .android 디렉토리에 위치한 debug.keystore 파일을 제거하면 된다.
아마도 에러 문구의 "Debug Certificate expired"는 debug.keysotre의 유효기간이 만료 되었다는 의미인듯.
728x90
반응형
:
Posted by mapagilove
2013. 3. 28. 13:19

안드로이드 - TCP/IP예제 안드로이드 이야기2013. 3. 28. 13:19

728x90
반응형

안드로이드 - TCP/IP예제

원본 출처:http://jinsemin119.tistory.com/172


안녕하세요. 이원영 과장님의 글 읽어보니 참 좋은 글이네요.
이 글을 애초에 볼 수 있었다면 그 수많은 시행착오를 거치지 않을 수 있었을텐데 ^^

밑에 첨부한 소스는 실제 모은행에서 인터넷뱅킹과 eCRM 시스템에서 사용되는 TCP/IP 
Socket 통신 프로그램입니다.
제가 직접 구현하였으며 그동안 수많은 시행착오를 거치면서 정제되었습니다.
스레드풀링 방식으로 세번째에 해당하는 모델이고요 미약하나마 N/W 장애나 
프로세스 상태로 인해 커넥션이 단절되었을 경우에 대한 Recovery 기능도 있습니다.

Peak Point Control 은 다음 네가지 부분에서 적절히 처리됩니다.
1. Established 되어있는 Socket Connection 을 항상 일정갯수 유지 (30개)
2. notify 를 받으려고 wait 하고 있는 스레드 갯수를 한정 (20개)
3. wait 하고 있는 스레드 시간 제약 (20초)
4. 호스트와의 타임아웃은 30초

- 소스역할
Connection.java - 호스트와 통신부분(send & receive 및 에러처리시 자원반환부분 중요)
BankObject.java - 생성된 소켓객체
BankQueue.java - 커넥션풀링을 할수 있게 소켓객체들을 담아놓은 큐
728x90
반응형
:
Posted by mapagilove
반응형