티스토리 툴바


달력

05

« 2012/05 »

  •  
  •  
  • 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
  • 31
  •  
  •  

안드로이드를 개발 할려고 하면, 에뮬레이터의 속도가 정말 절망적입니다.
아이폰 시뮬레이터는 정말 쾌적한 환경이라는 생각이 들죠..

이렇게 느린 이유는 안드로이드 리얼 에뮬레이터에서 돌아가는게 아니라서 그럽습니다.
아이폰 시뮬레이터는 같은 x86 호스트에서 돌아가고 있습니다. 그래서 빠르게 작동을 하죠. 하지만, 안드로이드 에뮬레이터는 x86프로세스 위에서 ARM processor를 에뮬레이터를 하고 있습니다. 이러면서 오버헤드가 생겨서 겁나게 느린겁니다.

하지만, 개발할때는 ARM processor의 에뮬레이터가 꼭 필요 한게 아니죠. 정상적으로 어플리케이션 동작만 하면 땡큐 한거죠.

Android-x86
다행히 안드로이드 OS를 x86 CPU에 포팅한 오픈소스 프로젝트가 있습니다.
  • http://www.android-x86.org/
이 프로젝에서는 여러가지의 버전별로 여러가지의 이미지를 제공합니다. 안드로이드 SDK에서 릴리스 하는 모든 이미지가 있는 것은 아니지만 사용 하는데는 별 지장이 업습니다.

아래 다운로드 URL에 가서 자신이 원하는 버전의 이미지를 받으면 됩니다.



여기서는 2.3버전을 사용했습니다. 그리고 되도록이면 eeepc를 받으세요. 다른 이미지는 VirtualBox에서 네트워크를 사용하는데 문제가 발생할 수 있어서, 별 설정이 필요 없는 eeepc를 추천합니다.

Android-X86을 VirtualBox에 설치하기
설치를 하기 전에 VirtualBox 홈페이지에 가서 VirtualBox 어플리케이션을 다운로드 받아서 설치 합니다.
  • https://www.virtualbox.org/wiki/Downloads
설치가 잘 완료 되었으면 VirtualBox 관리자에서 "새로 만들기" 버튼을 눌러서 새로운 이미지를 만들어 줍니다.

설정은 아래와 같이 진행합니다.
  • 가상머신 이름 : Android_2.3 (나중에 설정에서 사용 됩니다.)
  • 운영체제 종류
    • 운영체제 : Linux
    • 버전 : Other Linux
  • 메모리 : 1024 (원하는 용량으로 선택하세요)
  • 부팅 하드디스크
    • 새 가상 디스크 만들기
  • 파일 형식
    • VDI (VirtualBox 디스크 이미지)
  • 저장소 정보
    • 동적 할당
  • 가상 디스크 파일 위치 및 크기
    • 원하는 대로

이미지가 만들어 졌으면 네트워크 옵션을 브리지 어탭터로 수정 합니다.


그리고, 저장소에서 CD/DVD드라이버에 다운로드 받은 ISO이미지를 넣어 줍니다.

이제 부팅을 하시면 아래 화면이 나옵니다.

여기서 Installation - Install Android-x86 to harddisk를 선택합니다.

  1. Choose Partition
    • Create/Modify partitions
  2. cfdisk
    • [New] -> [Primary] -> 엔터 -> [Bootable] -> [Write] -> yes -> [Quit]
  3. Choose Partition
    • sda1  linux   VBOX HARDDISK
  4. Choose filesystem
    • ext3 -> Confirm -> Yes
  5. Do you want to install boot loader GRUB?
    • Yes
  6. Do you want to install /system directory as read-write?
    • Yes
  7. Android-x86 is installed successfully.
    • Create a fake SD card -> 수정 -> 엔터
  8.  Reboot
완료 되면, 저장소에서 iso이미지를 제거 합니다.

이렇게 설치하면 정상적으로 안드로이드가 실행 되는 것을 볼 수 있습니다.


안드로이드용 개발 해상도 지원하기
하지만, 가로가 길쭉한 해상도로 나옵니다. 안드로이드폰용 어플을 개발 하기 적절하지 않은 해상도 입니다.
가로 해상도를 지원해 보겠습니다.

VirtualBox가 설치된 폴더로 가서 cmd 창을 실행합니다.

VBoxManage setextradata "Android_2.3" "CustomVideoMode1" "480x800x16"

그리고 위와 같이 입력해 줍니다. 여기서 Android_2.3은 가상장치를 만들때 사용했던 이미지 이름 입니다.

이제 가상 머신을 작동 시키고 Debug mode를 시작합니다.

그리고 아래와 같이 입력을 합니다.
mount -o remount,rw /mnt
vi /mnt/grub/menu.lst



여기에 보시면 부팅할 때 선택하는 모드가 있습니다.
각 내용을 변경 하시면 됩니다.
여기서는 1번째 옵션을 그대로 사용하고 해상도만 추가해 보겠습니다.

kernel /android-2.3-RC1/kernel quiet root=/dev/ram0 androidboot_hardware=generic_x86 acpi_sleep=s3_bios,s3_mode DPI=240 UVESA_MODE=480x800 SRC=/android-2.3-RC1



작성을 완료 하셨다면 :wq로 저장하시고 exit를 명령을 쳐 주시고 머신을 중단하고 새로 시작합니다. 그냥..재시작로 하게 되면 값이 적용이 안 되는 경우가 있습니다.




멋찐 가로 해상도가 보이죠?
아.. 마우스가 움직이지 않으시죠? 이럴때는 머신 -> 마우스 통합 비활성화 를 선택하시면 마우스 커서가 보입니다.

개발환경 설정하기
안드로이드에서 Alt-F1을 누릅니다.
여기서 커맨드 창이 나오면
netcfg

를 쳐 봅니다.
여기서 eth0 옆에 나오는 IP를 보시면 됩니다.
여기서는 192.168.10.43이 나왔습니다.



보고 나서는 ALT-F7을 눌러서 원래 화면으로 돌아 갑니다.


윈도우에서 android platform-tools 디렉토리로 이동해서
커맨드 창을 열고 netcfg에서 나온 IP와 함께 아래와 같이 입력 합니다.
adb connect 192.168.10.43




이렇게 설정하고 나면 이클립스에서 안드로이드 개발을 하실때 VirtualBox에 어플이 실행 됩니다.

이제 이클립스를 띄워 보시면,
디바이스 창에 에뮬레이터가 보일 겁니다..



열심히 프로그램을 짜주시면 됩니다~ ^^*

저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하

dpi (Dots Per Inch )

1인치(2.54 센티미터)에 들어 있는 픽셀의 수. 안드로이드에서는 160을 기본으로 한다.

참고 : http://en.wikipedia.org/wiki/Dots_per_inch



dp 또는 dip (Density-independent Pixels)

화면의 크기를 기준으로 표시. 어떤 화면의 크기에서도 동일한 크기를 표시 하게 된다.
스크린의 픽셀과  dp가 160인 경우에는 1dp는 1pixel과 같다. 그러나 dpi가 240인 경우에는 1dp는 1.5pixel이 된다.

계산 공식은 아래와 같다

dp = pixel / (density / 160)

내 화면의 dp를 구하기 위해서는 아래와 같이 WindowManager를 쓰면 된다.

DisplayMetrics outMetrics = new DisplayMetrics();    getWindowManager().getDefaultDisplay().getMetrics(outMetrics);

int sum = outMetrics.densityDpi;




sp (Scale-independent Pixels)

dp의 비슷하다. 다만 사용자가 선택한 글꼴 크기에 의해 크기가 조절된다.




pt

1/72 인치 기반의 물리적 화면 사이즈, 인쇄에서 쓰이던 크기, 안드로이드 화면에서는 잘 사용되지 않는다.



px (Pixels)

스크린의 실제 픽셀 단위를 사용. 실제 크기나 밀도와 상관 없음




mm (Millimeters)

화면의 물리적 사이즈 기반으로 밀리미터를 사용



in (Inches)

화면의 물리적 사이즈 기반으로 인치를 사용




비교표



저해상도 화면 고해상도 화면에 같은 크기
물리적 넓이 1.5 인치 1.5 인치
dpi (Dots Per Inch) 160 240
px (Pixels) 240 360
밀도 (기본값 160) 1.0 1.5
dip 또는 dp (Density-independent Pixels) 240 240
sip 또는 sp
(Scale-independent pixels)
사용자 폰트 설정 사이즈 따름 동일
px (Pixels) 40픽셀을 1인치에 표시 40픽셀을 0.66인치에 표시
mm (Millimeters) 1 밀리미티 1밀리미티
in (Inches) 1 인치 1인치

참고로 아래는 DPI의 치수를 편하게 계산해 주는 사이트 입니다.

http://members.ping.de/~sven/dpi.html  
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
TAG Android, dip, dp, DPI, SP
Posted by 신규하
2011/10/04 16:58

오디오 볼륨 조정하기.. Programming/Android2011/10/04 16:58

안드로이드 앱을 짜다 보면, 미디어의 불륨을 조정해야 할 때가 있습니다.
그런데 불륨 조정을 누르면 당황스럽게 벨소리 볼륨이 조정이 됩니다.

그걸 다른걸로 조정하고 싶을 경우에는 아래와 같이 onCreate에 setVolumeControlStream을 넣어 주시면 됩니다.

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setVolumeControlStream(AudioManager.STREAM_MUSIC); // 하드웨어 볼륨이 미디어 볼륨을 조절
    }
설정할 수 있는 키는 아래와 같습니다.
  • AudioManager.STREAM_ALARM : 알람 볼륨.
  • AudioManager.STREAM_DTMF : DTMF 톤 볼륨.
  • AudioManager.STREAM_MUSIC : 미디어 볼륨입.
  • AudioManager.STREAM_NOTIFICATION : 알림 볼륨.
  • AudioManager.STREAM_RING : 벨소리 볼륨.
  • AudioManager.STREAM_SYSTEM : 시스템 볼륨.
  • AudioManager.SYSTEM_VOICE_CALL : 음성 통화 볼륨.

또 다른 방법으로는 아래와 같이 키를 가로채서도 동작이 가능 합니다.
    private AudioManager audio;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        audio = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    }
   
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_VOLUME_UP:
            audio.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                    AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
            return true;
        case KeyEvent.KEYCODE_VOLUME_DOWN:
            audio.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                    AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
            return true;
        }
        super.onKeyDown(keyCode, event);
        return true;
    }

저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
TAG Android, Audio
Posted by 신규하