오픈소스 모바일 플랫폼인 안드로이드(Android)를 정리 한다.


안드로이드 개요


안드로이드(Android) : 휴대전화와 모바일 디바이스를 위한 운영체제, 미들웨어 그리고 핵심 애플리케이션을 포함한 소프트웨어 스택


안드로이드 역사


- 2005년 7월 : 안드로이드 사를 구글에서 인수

- 2007년 11월 5일

- 하드웨어, 소프트웨어, 통신 회사가 모여 만든 [OHA(Open Handset Alliance)](http://www.openhandsetalliance.com/) 결성
- OHA에서 모바일 기기용 공개 표준 개발

- 2007년 11월 12일 : 휴대전화용 안드로이드 플랫폼 발표 (무료로 공개)
- *안드로이드 SDK, 동작 샘플, 안드로이드 시스템 구조, 안드로이드 내장 SW 개발 구조 공개
- 2008년 9월 : Android SDK 1.0 발표
- 2008년 10월 21일 : 안드로이드를 오픈소스(아파치 라이선스)로 공개
- 2008년 10월 22일 : 미국 T-Mobile에서 최초의 Android 폰인 G1 출시
- 2008년 10월 22일 : [Android Market](http://market.android.com/) 정식 오픈
- *2009년 2월 19일 부터 유료 애플리케이션도 제공
- 2014년 10월 18일 : [안드로이드 5.0 롤리팝 SDK 가 공개되었습니다.](http://googledevkr.blogspot.kr/2014/10/android-50-sdk.html?m=1)


OHA - Open Handset Alliance

  • OHA (Open Handset Alliance, 개방형 휴대전화 연합)
    • 휴대전화 제조, 서비스, 칩 제조 등 전세계 65개 업체가 가입 (2009년말)
    • 휴대폰 제조 업체 : 삼성전자, LG전자, 모토롤라, HTC
    • 이동통신 업체 : 스프린트, T-모바일, NTT 도코모, KDDI
    • 칩 제조 업체 : 퀄컴, 브로드컴, 인텔, 텍사스인스트루먼트


안드로이드 마켓 플레이스

  • 안드로이드 마켓플레이스
  • 2008년 10월 22일 : Android Market 정식 오픈
    • 2009년 2월 19일 부터 유료 애플리케이션도 제공
  • SDK 다운 등은 무상
  • 판매 수익은 CP/솔루션업체와 이동통신사가 7:3으로 분배


안드로이드의 타겟 시장

  • 스마트폰
  • 넷북
  • 인터넷 전화기
  • 휴대용 기기 (이북 등)


스마트폰의 장치 및 기능



스마트폰 장치

  • 스마트폰 장치 입출력
    • 버튼
    • 화면 (Display)
      • 그래픽 : OpenGL ES 1.0
      • Touch Screen
      • Multi Touch
      • 제스쳐
    • 오디오 (재생, 녹음), 비디오 (재생, 녹화)
    • FM 라디오
    • 카메라 : 사진, 동영상
    • USB, MicroSD
    • 광학 조이스틱 (Optical Joystick)
    • 트랙볼
  • 전화(Telephony)
    • 음성 통신 (GSM)
    • 메시징 : SMS, MMS
  • 인터넷/네트워크
    • 3G, GRPS, EDGE
    • Wi-Fi
    • Bluetooth
    • 테더링(Tethering) : USB, Bluetooth, Wi-Fi
  • 스마트폰용 센서
    {| cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center" |- | width="20%" align="center" style="background-color:#eee;" |자이로 센서 | width="80%" |
  • 자이로스코프(gyroscope), gyro
  • 회전 관성을 감지하는 센서, 회전각을 감지
    |- | align="center" style="background-color:#eee;" |가속도 센서 |
  • 중력 센서, G-Sensor, Accelation
  • 가속도를 감지하는 센서, 외부의 충격량과 방향을 감지
  • 기울기(Tilt) 센서의 기능도 있음
    |- | align="center" style="background-color:#eee;" |기울기 센서 |
  • Tilt
  • 기울기를 감지
    |- | align="center" style="background-color:#eee;" |GPS |
  • 위치 기반 서비스
    |- | align="center" style="background-color:#eee;" |나침반 센서 |
  • 전자 나침반, 디지털 나침반
    |- | align="center" style="background-color:#eee;" |근접 센서 |
  • Proximity sensor
    |- | align="center" style="background-color:#eee;" |조도 센서 |
  • 주변 광센서
    |- | align="center" style="background-color:#eee;" |컴파스 | |}

Smartphone UX


Push Notification Service

Push <-> Polling


Android 개발 환경



사전 준비 사항

  • [Java](JDK.md#설치 가이드.md) 1.5 이상 설치
  • [Eclipse](Eclipse.md#Eclipse 설치.md) 3.5 이상 설치


Android 개발 환경 설정

  • Android Plugin 설치
    • 이클립스에서 "Help -> Install New Software..." 메뉴를 선택 한다.
    • "Add" 버튼을 선택 한 후 다음과 같이 등록 한다.
    • "Developer Tools"의 모든 Plugin을 설치 한다.
    • 정상적으로 설치가 되면 "Window -> Android SDK and AVD Manager" 메뉴가 보인다.
  • Android SDK 설치
    • http://developer.android.com/ 사이트에서 "SDK" 탭을 선택 한 후 "android-sdk_r3-windows.zip" 파일을 다운로드 한다.
    • 다운로드 받은 파일의 압축을 풀어 c:/appl/androidSDK/ 폴더에 저장 한다.
    • "Window -> Preferences -> Android" 메뉴를 선택 한다.
    • "SDK Location"에 "c:/appl/androidSDK/"를 지정 한다.
    • "Window -> Android SDK and AVD Manager -> Available Packages" 메뉴를 선택 한다.
    • 모든 설치 가능한 Packages를 선택 하고 하단의 "Install Selected" 버튼을 선택하여 설치 한다. (끈기를 가지고 설치가 완료될 때까지 기다리자.)
    • 오류가 나서 일부만 설치되면 한두번 더 설치를 시도해 보자.
  • Android용 Virtual Device 생성
    • "Window -> Android SDK and AVD Manager -> Virtual Devices" 메뉴에서 "New..." 버튼을 선택 한다.
    • 다음과 같이 설정한 후 "Create AVD" 버튼을 선택 한다.
      • Name : Android_Device_2.1
      • Target : Android 2.1 - API Level 7
      • SD Card
        • Size : 1024 MiB
    • "Window -> Android SDK and AVD Manager -> Virtual Devices" 메뉴에서 실행할 AVD를 선택 한 후 "Start" 버튼을 선택 하면 Virtual Device를 실행할 수 있다. (OS가 기동하는 동안 끈기 있게 기다리자.)
    • 주의: OS에서 한글 계정으로 로그인한 경우 제대로 동작하지 않을 수 있다. 사실 한글 계정은 여러곳에서 문제가 된다. Android|600px
  • Eclipse에서 안드로이드 컴파일 환경을 변경하는 방법
    • default.properties에서 "target=Google Inc.:Google APIs:8"을 변경 한다.
    • 예) 안드로이드 2.1 : target=Google Inc.:Google APIs:7
    • 예) 안드로이드 2.2 : target=Google Inc.:Google APIs:8
  • 참고 문헌

안드로이드 애뮬레이터

  • 애뮬레이트 생성 및 실행

    android create avd --name 이름 --target 버전(예, 4) -sdcard 256M
    emulator @이름

  • 애뮬레이터 키

    • 홈 : Home
    • 메뉴 : F2, Page_Up
    • 스타 : Shift_F2, Page_Down
    • 백 : Esc
    • 전화 걸기/끊기 : F3 / F4
    • 검색 : F5
    • 전원 : F7
    • 네트워크 접속 토클 : F8
    • 볼륨 업/다운 : +, Ctrl_F5 / -, Ctrl_F6
    • 카메라 : Ctrl_+, 5, Ctrl_F3
    • Portrait, Landscape 전환 : 7, 9, Ctrl_F11, Ctrl_F12
  • 한글 키보드 설치

  • ~.apk

    • /data/app/ 에 설치됨
  • Tools

    • set path=$ANDROID_SDK/tools/;$ANDROID_SDK/platforms/android-7/tools/
    • $ANDROID_SDK/tools/
      acp.exe
      adb.exe
      dmtracedump.exe
      emulator.exe
      etc1tool.exe
      fastboot.exe
      hprof-conv.exe
      mksdcard.exe
      sqlite3.exe
      zipalign.exe
    • $ANDROID_SDK/platforms/android-7/tools/
      aapt.exe
      aidl.exe
      dexdump.exe
    • AAPT (ANDROID ASSET PACKAGING TOOL)
    • ADB (ANDROID DEBUG BRIDGE) :adb devices adb 1 shell :adb shell install ~.apk :adb shell uninstall ~.apk
  • 애뮬레이터 콘솔
    telnet localhost 5554

      help|h|?         print a list of commands
      event            simulate hardware events
      geo              Geo-location commands
      gsm              GSM related commands
      kill             kill the emulator instance
      network          manage network settings
      power            power related commands
      quit|exit        quit control session
      redir            manage port redirections
      sms              SMS related commands
      avd              manager virtual device state
      window           manage emulator window
    
    try 'help ' for command-specific help


안드로이드 애뮬레이터 폴더 구조

 /data/
     /app/ : 배포된 애플리케이션 저장 폴더
         com.jopenbusiness.android.apk
     /data/ : 배포된 애플리케이션 설치 폴더
         /com.jopenbusiness.android/
             /databases/ : SQLite (sqlite3) Database file
                 alarms.db
             /files/
             /lib/
             /shared_prefs/ : SharedPreferences XML 파일 저장 위치
                 AlarmClock.xml
 /sdcard/ : 내장 SD (Secure Digital) 플래시 메모리 카드
 /sdcard/external_sd/  : 외장 SD (Secure Digital) 플래시 메모리 카드
 /system/
     /app/ : Android 내장 애플리케이션 저장 폴더
         Contacts.apk
     /etc/permissions/
     /framework/~.jar


안드로이드 애뮬레이터 오류 조치

  • 작성된 apk 파일이 배포되지 않을 경우
    • 오류 메시지
      java.io.IOException: Unable to upload file: null
    • 조치 방법
      • apk 파일의 크기가 커지면서 발생하는 문제로
      • "Window -> Preferences -> Android -> DDMS -> ADB connection time out (ms)" 메뉴의 설정된 값을 늘여 준다.


apk Decompile

  • 라이브러리 다운로드
  • Contacts.apk 파일을 Decompile 해보자.
    • Contacts.apk 파일을 Contacts 폴더에 압축을 푼다.
    • java -DASDKLoc=. -jar undx.jar -s C:/appl/androidSDK -f Contacts/classes.dex
      • gen/classes.dex.jar 파일이 생성 된다.
    • gen/classes.dex.jar 파일의 압축을 풀어 jad로 decompile 한다.
      • jad -o -r -sjava -dsrc */.class
  • XML 파일을 사람이 읽기 편한 형태로 변환 한다.
    • java -jar AXMLPrinter2.jar Contacts/AndroidManifest.xml > out/AndroidManifest.xml
  • 참고 문헌

Android update

  • Android update 방법
    • "Window -> Android SDK and AVD Manager -> Installed Packages" 메뉴를 선택한다.
    • 하단의 "Update All..." 버튼을 눌러 Android를 업데이트 한다.
  • Android update시 오류 처리 방법
    • 오류 메시지 : "A folder failed to be renamed or moved. 생략"
    • 처리 방법
      • Eclipse를 종료 한다.
      • $ANDROID_SDK/SDK Manager.exe 파일을 실행한다.
      • "Installed Packages" 메뉴를 선택한다.
      • 하단의 "Update All..." 버튼을 눌러 Android를 업데이트 한다.


ART


ART (Android Run Time)


Multi Device 지원


  • [Multi Device 지원](Mobile_Business.md#Multi Device 지원.md)


Android SDK


Android SDK


Android UI

Android - UI


Android 입출력

Android - 입출력


Honeycomb



- [API 11의 Fragment를 하위 API에서 사용하기](http://www.androidpub.com/1432908)

- 화면 구조

- Action Bar <- Option Menu
- Notification
- Fragment <- Activity를 사용하여 Layout 구성
- System Bar
- setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
- setSystemUiVisibility(View.STATUS_BAR_VISIBLE);

- TelephonyManager.getDeviceId()
- WifiInfo.getMacAddress()
- Settings.Secure.ANDROID~

- 안드로이드 개발자 랩

- [2010 안드로이드 개발자 랩](http://sitescontent.google.com/android-developer-lab-kr2010/)
- [2011 안드로이드 개발자 랩](https://sites.google.com/site/adlinkorea/)

- 참고 문헌

- http://developer.android.com/sdk/android-3.0.html
- http://developer.android.com/guide/practices/optimizing-for-3.0.html
- https://sites.google.com/site/adlinkorea
https://sites.google.com/site/iobootcamphclab/ - http://code.google.com/p/adl-protips-demo/source/checkout
- http://j.mp/adl-protips-apk
- Google Analytics for Mobile
- http://j.mp/adl-protips-ga




Android L



Android L의 특징
- 머티리얼 디자인 적용 : 종이와 잉크를 메타포로하여 입체적인 디자인을 추구
- OpenGL ES 3.1
- WebRTC : P2P
- WebGL : 3D 그래픽
- 웹 오디오
- 매니지드 프로비저닝



안드로이드L 애뮬레이터 다운로드 사이트
[안드로이드 SDK 매니저](http://developer.android.com/sdk/installing/adding-packages.html)

Hello Android


첫번째 안드로이드 애플리케이션으로 "Hello Android"를 출력하는 애플리케이션을 만들어 봅시다.

  • "File -> New -> Android Project" 메뉴를 선택하여 다음과 같이 입력한 후 "Finish" 버튼을 누른다.
    • Project name : Hello_Android
    • Build Target : Android 2.1 을 선택
    • Applicatin name : HelloAndroid
    • Package name : com.jopenbusiness.android
    • Create Activity : .HelloAndroid ![애플리케이션 생성](img/HelloAndroid 001.png)

  • 애플리케이션의 화면을 수정 합니다.
    • "Hello_Android -> res -> layout -> main.xml"을 더블 클릭 한다.
    • "Window -> Show View" 메뉴에서 아래 두개의 View를 추가 한다.
      • Outline : 화면에 표시되는 Control 또는 Widget 등을 보고 선택할 수 있다.
      • Properties : 화면에 표시되는 Control 또는 Widget 등의 속성을 수정할 수 있다.
    • main.xml의 Outline에서 "TextView:를 선택 한다.
    • Properties에서 Text size에 25px를 입력 한다. (폰트 크기 변경)
      ![레이아웃 수정](img/HelloAndroid 002.png)
    • "Hello_Android -> res -> values -> strings.xml"을 더블 클릭 한다.
    • "hello" 문자열을 선택한 후 Value에 "Hello Android!"를 입력 한다. ![Resource 수정](img/HelloAndroid 003.png)

  • 수정한 애플리케이션을 애뮬레이터를 통해 실행 한다.
    • "Hello_Android" 애플리케이션을 선택한다.
    • 오른쪽 마우스를 눌른 후 "Run As -> Android Application"을 선택 한다.
    • 애뮬레이터에서 애플리케이션이 실행되어 "Hello Android!"가 25px 폰트 사이즈로 화면에 표시되는 것을 확인할 수 있다.
      • 애뮬레이터의 처음 실행헤 시간이 조금 걸리므로 끊기 있게 기다리자.
      • 처음 이후의 실행은 애뮬레이터가 떠 있는 상태이므로 빨리 결과를 확인할 수 있다.
        ![애뮬레이터 화면](img/HelloAndroid 004.png)

안드로이드 커뮤니티



Google 커뮤니티

{| cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center" |- | width="30%" align="center" style="background-color:#eee;" |Google 모바일 | width="70%" |


안드로이드 커뮤니티

{| cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center" |- | width="30%" align="center" style="background-color:#eee;" |Korea Android | width="70%" |


스마트폰 커뮤니티

{| cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center" |- | width="30%" align="center" style="background-color:#eee;" |재미있는 재임스 | width="70%" |

  • Social Interface Design
    |- | align="center" style="background-color:#eee;" | | |- | align="center" style="background-color:#eee;" | | |- | align="center" style="background-color:#eee;" | | |- | align="center" style="background-color:#eee;" | | |}

RESTfull



옴드로이드


T옴니아2의 SD Card(2GB 이상)에 옴드로이드를 설치해 보자.

  • 설치 파일을 PC로 다운로드 합니다.
  • T옴니아2의 T Store에서 파일 탐색기를 선택하여 설치 합니다.
    • 저는 "씨쉘프리"를 설치 하였습니다.
    • 기존에 파일 탐색기를 가지고 계신분은 이 단계를 생략해도 됩니다.
  • 메인 메뉴 -> 단말설정 -> 시스템 -> 전원 관리 및 CPU성능 -> CPU 성능
    • "고속"으로 설정 합니다.
  • T옴니아2와 컴퓨터를 USB로 연결 합니다.
  • 메인 메뉴 -> 단말설정 -> 연결설정 -> USB 연결 -> 이동식 저장소
    • "My Storage"를 선택 합니다.
    • "My Storage"의 최상위 폴더에 다운로드 받은 파일을 복사 합니다.
    • 이동식 저장소를 해제 합니다.
  • 메인 메뉴 -> 단말설정 -> 연결설정 -> USB 연결 -> 이동식 저장소
    • "Storage Card"를 선택 합니다.
    • 디스크를 포맷 합니다.
      • 마우스 오른쪽버튼>포맷>기본값복원(빠른 포맷에 체크하시고)>포맷
    • 이동식 저장소를 해제 합니다.
  • 메인 메뉴 -> 단말설정 -> 메모리 관리 -> Storage Card (외장메모리) -> 포맷
  • 파일 탐색기(씨쉘프리)에서 TRE 폴더의 TRE.EXE를 실행 합니다.
    • File -> Import Registry에서 REG.REG를 선택 합니다.
    • 옴니아2 리부팅
  • 파일 탐색기(씨쉘프리)에서 My Storage/O2Beta-1G/HARET.EXE 실행
    • 실행후 어떤 버튼을 누르시거나 터치를 하셔도 안됩니다
    • "run"을 누름
    • 자동으로 재부팅이 됩니다.
    • 이제 옴드로이드의 설치가 완료 되었습니다.


SD Card에 옴드로이드가 설치 되었으므로 처음 T옴니아2를 실행하면 Windows 화면이 표시 됩니다. 옴드로이드를 사용하기 위해서는 아래 명령을 실행 하세요.


안드로이드 오류 처리



참고 문헌



- [Android/Kotlin](Android/Kotlin.md)
- Google's App Inventor

- [Google's App Inventor: Learn how it works](http://appinventor.googlelabs.com/learn/)
- [Google's App Inventor: Read more about App Inventor](http://appinventor.googlelabs.com/about/)

- [Android Git](http://android.git.kernel.org/)

- [안드로이드 개발 2.0](http://moozi.tistory.com/category/안드로이드개발)
- [201003 스마트폰 킬러앱과 Bm](http://www.slideshare.net/germweapon/201003-bm)

- [iPhone Apps Design Mistakes: Over-Blown Visuals, 2009.7](http://www.smashingmagazine.com/2009/07/21/iphone-apps-design-mistakes-overblown-visuals/)

- [appcelerator의 Titanium](http://www.appcelerator.com/) : 다양한 모바일 환경을 지원하는 플랫폼

- [안드로이드 2.0 SDK + 이클립스 3.5 개발환경 설정 방법 .., 2009.11](http://blog.naver.com/PostView.nhn?blogId=wassupnari&logNo=100094319076)
- [구글 안드로이드 (android) 완벽정리, 2010.2](http://blog.noori.kr/think/5436)
- [전자통신동향분석, 한국전자통신연구원, 2010.2](http://ettrends.etri.re.kr/)

- [차 세대 모바일 웹 애플리케이션 표준화 동향](http://etrij.etri.re.kr/Cyber/servlet/ETTRENDSContent?recno=0905001517&volumn=25&issue=1&year=2010&pubNo=121)

- [프로페셔널 책 단원별 정리_정은혜, 2010.3](http://androidilsan.springnote.com/pages/5067499)

- [커니의 안드로이드 이야기](http://androidhuman.tistory.com/) : 안드로이드와 관련된 사항이 잘 분류되어 정리되어 있습니다.
- [껍데기 안드로이드폰야그](http://neoskin.tistory.com/tag/%BE%C8%B5%E5%B7%CE%C0%CC%B5%E5)
- [퀄컴, 안드로이드용 증강현실 SDK 무료 공개, 2010.7](http://www.bloter.net/archives/34417)
- [10 안드로이드 하드웨어, 2010.3](http://gtko.springnote.com/pages/5396297)

- Android Decompile

- [APK (file format)](http://en.wikipedia.org/wiki/APK_(file_format))
- [Using UNDX to Decompile Android dex bytecode, 2010.7](http://lopiter.tistory.com/entry/Using-UNDX-to-Decompile-Android-dex-bytecode)

- [안드로이드: 슈팅게임 만들기 강좌](http://blog.naver.com/PostList.nhn?blogId=foxmann&categoryNo=16)

- 참고 파일

- [모바일 클라우드 컴퓨팅 기술 동향, NIPA, 2010.3](http://www.google.co.kr/url?sa=t&source=web&ct=res&cd=6&ved=0CBkQFjAF&url=http%3A%2F%2Fwww.kcsa.or.kr%2Fupload%2Fnew_board%2FR11269384100083.pdf&ei=xCC9S4zTBYGY6gPV_6TNBQ&usg=AFQjCNGwGcKwlrlG6LxZh8VLT2GQ857EDQ&sig2=6UpJSKIUHkyl2Qewzt-ckQ)
- [모바일 사무실 EMS, 기업의 잠재 니즈를 깨운다, 2009.10](http://www.google.co.kr/url?sa=t&source=web&ct=res&cd=4&ved=0CBMQFjAD&url=http%3A%2F%2Fwww.lgeri.com%2FuploadFiles%2Fko%2Fpdf%2Find%2FLGBI1062-17_20091013135127.pdf&ei=xCC9S4zTBYGY6gPV_6TNBQ&usg=AFQjCNG4_jhDaJ69HN2yDiVfQd3HdUj8xQ&sig2=kRbr6RK5mGRcxrCchSPMLA)
- [EMS (Enterprise Mobility Service) 도입 현황과 적용 사례, 2009](http://www.google.co.kr/url?sa=t&source=web&ct=res&cd=14&ved=0CDkQFjAN&url=http%3A%2F%2Fkimsk.textcube.com%2F20%2Fattach%2FEnterprise%2520Mobiltiy%2520Service_1.pdf&ei=SCO9S53OKYvg7AP3n9HWBQ&usg=AFQjCNHeGXCFG89ty0IqY2kWk8MTZ7FCzw&sig2=-gIqlx9PrAnuMKkOgYM6ow)
- [Android 개발 팁 50선, 2010.5](http://miksnug.pe.kr/26)
- [스마트폰 시장 트렌드 분석과 전망, 2010.Q4](http://www.w3c.or.kr/~hollobit/presentation/20101125-KOITA-smartphonetrends.pdf)

- [안드로이드 외장 메모리에 설치 가능한 어플리케이션 만들기, 2010.6](http://blog.naver.com/PostView.nhn?blogId=huewu&logNo=110087800430&parentCategoryNo=18&viewDate=¤tPage=1&listtype=0)

- [Android version history](http://en.wikipedia.org/wiki/Android_version_history)

- [Design pattern](Design pattern.md)

- UI Guide : http://developer.android.com/guide/topics/ui/actionbar.html [[Category:Android|Category:Android]]
[[Category:오픈소스|Category:오픈소스]]
분류: [Google](분류_Google.md)
공유하기