스터디에서 발표할 자료입니다. 스프링노트에서 작성한 것을 옮기다 보니 보기 좋진않네요. 다음번엔 좀 더 깔끔히...
ch01-Getting to Know Android
1_ Why Android?
Android Features
- Application framework enabling reuse and replacement of components
- Dalvik virtual machine optimized for mobile devices
- Integrated browser based on the open source WebKit engine
- Optimized graphics powered by a custom 2D graphics library; 3D graphics based on the OpenGL ES 1.0 specification (hardware acceleration optional)
- SQLite for structured data storage
- Media support for common audio, video, and still image formats (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
- GSM Telephony (hardware dependent)
- Bluetooth, EDGE, 3G, and WiFi (hardware dependent)
- Camera, GPS, compass, and accelerometer (hardware dependent)
- Rich development environment including a device emulator, tools for debugging, memory and performance profiling, and a plugin for the Eclipse IDE
업계와 공개된 Android Framework는 Google이라는 Service를 선순환하는 구조로 강력한 Opensource의 힘을 여실히 보여준다.
Android Architecture
2_ The Open Handset Alliance
Google and 33 other companies announced the formation of the Open Handset Alliance on November 5, 2007.
http://www.openhandsetalliance.com/oha_members.html
3_ The Android Execution Environment
Limited resources
배터리 용량, 수백mhz(퀄콤 스냅드래곤 1Ghz) cpu 제한,
Mobile mashups
Intent, IPC를 통한 쉬운 application mashup
Interchangeable applications
Android는 Intent를 통해 특정 app 를 구현하지 않고 app 상호간 교류할 수 있다.
안드로이드는 "내가 이메일을 전송하려는데 어떤 이메일 app이 가능한가?" 요청에 OS에 등록된 Intent를 호출한다.
예) Win mobile app에서 email 전송시 pocket outlook 의 interface를 구현해 주어야 한다.
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); emailIntent .setType("plain/text"); emailIntent .putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"webmaster@website.com"}); emailIntent .putExtra(android.content.Intent.EXTRA_SUBJECT, mySubject); emailIntent .putExtra(android.content.Intent.EXTRA_TEXT, myBodyText); context.startActivity(Intent.createChooser(intent, "Send mail...));
4_ Components of an Android Application
안드로이드 app을 구성하는 components 들.
Activities
사용자 혹은 OS가 실행하는 코드, 현재 화면이 activity로 다른 화면 전환시 다른 activity, activity는 사용자, 다른 activity, service와 상호작용할 수 있다. 액티비티가 실행을 멈춘 상태에서 OS가 메모리 절약을 위해 종료를 할 수 있다.
Services
OS의 서비스, 데몬 역할을 수행하며, 모바일 기기가 셧다운 되기 전까지 백그라운드에서 실행된다
예) MP3 로 노래를 듣는 동안 사용자는 다른 애플리케이션을 실행 할 수 있다.
Broadcast and Intent Receivers
다른 애플리케이션의 요청에 응답하는 역할을 수행.
Broadcast Receiver
시스템 전역에 발생하는 이벤트로 안드로이드 자신(battery low), 다른 Activity 혹은 service는 Intent Receiver를 실행해 접근을 허용한다.
Intent Receiver
다른 액티비티로 부터의 데이터, 서비스 요청에 대한 실행 코드
Content Providers
다른 액티비티, 서비스와 데이터를 공유하기 위해 작성된다. 표준 UI form이나 URI를 통해 요청된다.
예) 주소록 데이터를 요청: content://contacts/people
즉, content provider api를 이용해 content에 CRUD 메소드 사용이 가능하다.
모든 애플리케이션이 안드로이드 콤포넌트를 작성하고 개발하기 보다는 URI와 Intents를 유연하게 조합하는 것이 바람직하다.
Notification
사용자에 신호를 보내기 위한 일관되면서 간섭적이지 않은 메커니즘 제공 LED, Vibration, sound
Resource Manager
문자열, 그래픽스 와 같은 외부화externalize 되는 비 코드 리소스를 지원
5_ Android Activity Lifecycle
안 드로이드는 모바일 애플리케이션을 위한 환경이다. 제한된 환경(battery,...)에서 app에서 오버라이드한 Activity클래스의 메소드로서 아래와 같은 각각의 이벤트를 제공하게 된다. 한 Activity에서 다른 Activity를 실행하기 위해서는 startActivity() method에 Intent 인자를 사용하여 호출한다
- onCreate()
Activity가 처음으로 생성될 때. view 초기화, 영속 데이터 연결 등 초기화 관련 처리가 위치함. 이전 activity 상태를 보존하고 있는 Bundle이 전달됨.
- onStart()
화면에 보이기 전에 호출, 완료되면 화면 전면에 액티비티가 나타나며 onResume()으로 전환된다. 만약 Activity가 실행에 적절치 않으면 onStop()으로 전이된다.
- onResume()
activity가 foreground로 전환되는onStart() 혹은 onPause() 뒤에 호출되고 이 상태에서 사용자의 입력에 상호작용하게 된다.
- onPause()
activity가 foreground 상태에서 다른 activity의 실행으로 화면에서, 그리고 멈춤 상태로 변경한다. 즉, 이 activity가 battery 소모, cpu 사용등의 작동이 필요없게 된다. 또한 시스템의 사정에 의해(메모리 부족 등) 언제든 메모리에서 내려질 수 있는 상태다.
- onStop()
더 이상 activity가 foreground 상태에 있지 않는다; 다른 activity가 실행중, destory 될 상황이거나.
- onDestroy()
activity 가 동작을 마치고 framework가 finish()메서드를 호출한 경우의 상태로 시스템이 activity를 해제하기 위해 호출하기도 한다.
Activity Lifecycle example
6_ Android Service Lifecycle
http://developer.android.com/reference/android/app/Service.html
Service도 Activity와 거의 유사하지만, 몇몇 점에서 다르다.
- onCreate() 와 onStart() 다른 점 : 서비스는 클라이언트가 Context.startService(Intent) 호출시 시작하며, 이미 서비스가 존재하지 않으면 안드로이드는 onCreate() 메소드를 호출하고 onStart()가 뒤 따른다. 만약 서비스가 실행중이라면 onStart()메소드가 호출된다.
- onResume(), onPause 와 onStop()
service는 UI가 없기 때문에, onResume(), onPause(), onStop()이 필요치 않다. - onBind()
클라이언트가 서비스와 영속적 연결을 유지하고자 한다면 Context.bindService를 호출하는데 서비스가 존재하지 않으면 onCreate()를, 서비스가 있으면 onStart()를 호출한다. -
onDestroy()
서비스 종료시 호출. 서비스를 시작/바인드하는 클라이언트가 없다면 종료. 시스템이 판단으로 low memory에서 서비스를 재시작하는데 서비스에 영속 객체가 필요하다면 onStart()에 구현하는게 좋다.
Service Lifecycle example
Ex. Service : http://android15.tistory.com/107
Android Service creation and consumption
ch02-Setting Up Environment
Supported Operating Systems
- Windows XP (32-bit) or Vista (32- or 64-bit)
- Mac OS X 10.4.8 or later (x86 only)
- Linux (tested on Linux Ubuntu Dapper Drake)
공통
- JDK 설치
-
Android SDK 설치
SDK 설치후 최신 sdk components 다운로드
Windows
- {ANDROID_SDK}\tools\android update
Ubuntu / Linux
- {ANDROID_SDK}/tools/android update
* 설치시 https://... 접속 에러가 발생하면 Settins에서 Force https 를 선택하고 다시 해본다.
Eclipse 설치
-
Android Eclipse Developement Toolkit, ADT 설치
- Update site: https://dl-ssl.google.com/android/eclipse/
-
Unicode 지원 property editor
- Subversion
Eclipse 새로 설치후 Android 개발시 처음 만날수 있는 에러
Conversion to Dalvik format failed with error 1
---> Java runtime을 JDK로 대체.
Android Eclipse 개발환경 한글 문제
Eclipse에 UTF-8문자열 사용을 위해 property editor 를 사용중인 상황.
Conversion to Dalvik format failed with error 1
---> Java runtime을 JDK로 대체.
Eclipse에 UTF-8문자열 사용을 위해 property editor 를 사용중인 상황.
Android phone에서 Debugging 켜기
1_ Menu -> Settings -> Application / Developement
- USB debugging
- Stay Awake
USB 가 연결된 동안 휴대폰 스크린이 꺼지지 않는다.
2_ ADB용 USB 드라이버 설치
- 윈도우/비스타
안드로이드 폰을 PC와 연결해 새로운 장치 발견시 Android SDK/usb_driver/android_usb_windows 를 지정해 설치. - Mac OS
모든 장치가 설치되 있다. - 우분투 Dapper Drake: /etc/udev/rules.d/50-android.rules 에 추가
SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0bb4", MODE="0666" - 우분투 Gutsy Gibbon, Hardy
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666" - 우분투에서 실행 권한 설정: chmod a+rx /etc/udev/rules.d/50-android.rules
3_ 연결해 디버깅 실행
휴대폰을 연결하고 이클립스를 연결하면 새로운 장치는 스스로 인식하고 명령창에서 adb 명령을 준다
- >adb devices
- List of devices attached
- ...
Eclipse에 LogCat view 추가
Eclipse의 Java perspective에서 LogCat view를 추가해 debugging 정보를 볼 수 있다.
Eclipse에서 new android project 보기
http://developer.android.com/guide/topics/resources/index.html
|
Android Library : Google APIs 안드로이드 라이브러리 - Application Framework 부분. assets 애플리케이션에서 데이터를 직접 사용시 이용. IO Stream data. Resources (under res) • Drawable : images, bitmaps • Layout : XML files로 뷰를 배치하는 위치를 지정. • Values : constants, strings, etc. Manifest (AndroidManifest.xml) 안드로이드 앱의 빌드 패키지 설정 xml file |
AndroidManifext.xml
Android app의 빌드에 필요한 컴포넌트, 허용권한 등을 메타데이터로 구성.
-
application
하나의 어플리케이션 노드로 선언, app의 타이틀, 아이콘 등 지정. app의 activities, services, permission 등을 담는 컨테이너. -
activity
app에 사용할 모든 activity를 정의. 액티비티 실행시 runtime exception이 던져진다.
service : 사용되는 각 서비스 클래스에 대해 새로운 service태그를 하나씩 생성한다.
-
provide : 각각의 콘텐츠 공급자에 대해 사용된다. 데이터베이스 접근과 공유를 관리한다.
-
receiver : 어플리케이션을 띄우지 않고도 브로드캐스트 수신자를 등록 가능. 인텐트가 방송될 시 전역 이벤트 리스너로서 처리할 수 있다.
-
uses-permission : 다른 어플리케이션의 사용을 위한 권한을 설정. 설치 과정 중 사용자에게 제시되여 결정. 비용이 수반되는 어플 같은 경우에 접근을 제한하기 위해 사용.
-
permission : 어플리케이션에 대한 접근을 제한하기 위해 사용. normal, dangerous 등으로 허용 및 제한.
-
instrumentation : 액티비티와 서비스를 테스트 하기 위한 프레임워크를 제공. 리소스와의 상호작용을 모니터.
res
res/main.xml
assets
src
Chapter 3 - Using the Android Development Environment for Real Applications
MicroJobs: This Book’s Main Sample Application
Android and Social Networking
Android Phone은 Internet 에서 정보 보기, Youtube, facebook 등과 같은 공통의 관심사를 갖는 사용자들과의 연결성과 Mobility를 가지고 있다. 시간/장소에 구애없이 새로운 형식의 SNS 앱이 탄생 가능하다.
MJAndroid는 phone이 있는 근처 도시의 temporary job을 찾아주는 목적이다.
- 디비에 등록된 임시직에 대한 요약, 비용이 있다.
- 근처 임시직을 찾아서, 해당 일에 대해 친구와 통화하고, 고용자에게 즉시 전화를 걸 수 있다.
MJAndroid 예제 프로젝트의 주요 기능
Mapping
Android 는 MapActivity 등을 통해서 dynamic, interactive maps을 제공하고 있다. GPS를 통해 내 주변에 위치한 임시직 정보를 찾아 Map에 표시하고 이동시 GPS 위치에 따른 스크롤이 일어난다. two directions, zoom in and out, and even switch to satellite views.
Finding friends and events
Overlay 를 Map에 띄워서 찾고자 하는 job의 위치와 표시를 터치해서 해당 job에 대한 설명을 볼 수 있다. 또한 친구의 전화번호, 메신저 아이디 등을 얻기 위해 Contact Manager 에 접근할 수 있다. MicorJobs database에서 좀 더 상세한 job의 정보를 얻을 수 있다.
Instant messaging
친구에게 Instance message를 SMS 전송을 통해 채팅할 수 있다.
Talking with friends or employers
직접 친구와 고용주에게 전화할 수 있다.
Browsing the Web
웹에 올려진 상세한 job 정보를 연결해 볼 수 있다.
Downloading the MJAndroid Code
http://www.oreilly.com/catalog/9780596521479.
A Brief Tour of the MJAndroid Code
AndroidManifest
... package="com.microjobsinc.mjandroid" android:versionCode="1" android:versionName="1.0"> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><!-- location information from GPS --> <uses-permission android:name="android.permission.CALL_PHONE" /> <!-- Dialer로 전화 걸기 --> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> <!-- Test할 수 있는 GPS좌표 가능, ddms --> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <!-- 어떤 추가 기능인지 명시되어있지 않다 --> <uses-permission android:name="android.permission.INTERNET" />
Application 선언과 Activity, Intent filter 선언
<application android:icon="@drawable/icon2" android:debuggable="true"> <uses-library android:name="com.google.android.maps" /> <!-- Google maps library, 외부 라이브러리 추가 --> <activity android:name=".MicroJobs" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <!-- Action이 main entry point --> <category android:name="android.intent.category.LAUNCHER" /><!-- 가장 상위 레벨 launcher에 보여짐 --> </intent-filter> </activity> <activity android:name="MicroJobsList" android:label="@string/list_name"> <intent-filter> <action android:name="android.intent.action.VIEW" /><!-- Action이 view, edit, pick 행위를 가짐 --> <action android:name="android.intent.action.EDIT" /> <action android:name="android.intent.action.PICK" /><!-- intent로 넘겨진 activity class --> <category android:name="android.intent.category.DEFAULT" /> <!-- 가장 상위 레벨 launcher에 보여짐 --> <data android:name="vnd.android.cursor.dir/vnd.microjobs.jobs" /> <!-- database --> </intent-filter> <intent-filter> <action android:name="android.intent.action.GET_CONTENT" /> <category android:name="android.intent.category.DEFAULT" /> <data android:name="vnd.android.cursor.item/vnd.microjobs.jobs" /> </intent-filter> </activity> <activity android:name="MicroJobsDetail" android:label="@string/jobs_detail_name"> ... </activity> <activity android:name="MicroJobsEmpDetail" android:label="@string/emp_detail_name"> ... </activity> <activity android:name="AddJob" android:label="@string/add_job_name"> ... </activity> <activity android:name="EditJob" android:label="@string/edit_job_name"> ... </activity> </application>
com.microjobsinc.mjandroid
MicroJobs.java
Application이 시작하고 화면에 보여 주는 첫번째 Activity class. UI의 입력을 받아 들여 MicroJob의 다른 Activity, Service를 호출한다
MicroJobsDatabase.java
MJAndroid database 접근하기 위한 SQLiteOpenHelper class로 SQLite 를 이용해 저장 기능을 수행한다
AddJob.java and EditJob.java
사용자가 job 정보를 database에 추가, 수정할 수 있는 화면
MicroJobsDetail.java
선택한 job의 상세 내용을 표시하는 activity
MicroJobsEmpDetail.java
고용주의 이름, 주소, 명망, 이메일, 전화번호 등의 정보를 표시하는 Activity
MicroJobsList.java
등록된 임시직에 대한 목록
Google Map API key
Running the MJAndroid Code
Eclipse
project context menu -> Run As -> Android Applicatoin
Run -> Run as -> Android Application
Export Unsigned apk
Eclipse에서 프로젝트 선택후 컨텍스트 메뉴(오른쪽 마우스 클릭)에서 Android Tools -> Export Unsigned Application Package..
Ubuntu / Linux 에서 sdk 사용시
adb는 root permission이 필요하다. 만약 root권한이 아니면, avd에 write 권한을 요하는 install 등의 명령시 permission error 발생한다.
cd android-sdk-linux-linux/tools
sudo ./adb kill-server
sudo ./adb start-server
새로운 AVD(Android VirtualVirtual Device) 작성
-
$ android create avd -n <name> -t 2
- -n : 이미지의 이름이고,
- -t : SDK 릴리즈 번호. 1.5 2, 1.6 3, 2.0, 4 ...
AVD 목록
$ android list avd
AVD 가상 디바이스를 실행
- emulator -adv AVD_이름
or
- emulator @AVD이름
MJAndroid 설치
- adb install MJAndroid-1.0.0.apk

Et puis, comme Archimède a dit: «donne-moi un
lancel
levier assez long et je soulèverai le monde». Nous trouvons le point de levier et les temps de toute shifts.At autre monde, nous devons tout simplement s'asseoir sur le Merry-go-round et aller dans les portefeuille mademoiselle adjani gris lancel ilieux de re-visiter la question sous différents angles. Mais la bonne chose est que chaque fois que vous revenez de votre entourage peut remarquer quelque chose de nouveau, conduisant à un point d'inflexion de la change.And ce n'est pas le seul endroit où vous noterez les changements. Comme l'endroit où les changements ventes privées lancel 2011 sont observés sera visible sur l'extérieur, c'est là que vous aurez la preuve que vous avez changé - quand vous êtes en train de faire les nouveaux comportements qui conduisent à l'amélioration des résultats que vous voulez dans la première interjeta chose au sujet de la relation de coaching est qu'il est un peu comme la façon dont Morpheus décrit la Matrice à Neo. Personne ne peut vraiment vous dire ce que signifie être dans un partenariat de coaching, c'est comme, vous devez le voir pour vous-même comme vous ne vente privee sac lancel 2011 savez pas ce que c'est que de parachute ou remporter une médaille olympique si vous n'avez jamais have.But vous pouvez toujours être curieux ... Assurez-vous que vous êtes à l'affût des indices qui signifie que votre relation amoureuse est à venir. Ou chercher des preuves que votre relation actuelle est de sac mademoiselle adjani lancel ieux en mieux, si vous êtes déjà dans one.Due au RAS (système d'activation réticulaire) dans notre cerveau, nous sommes branchés à rechercher et acquérir ce que nous recherchons. C'est le même mécanisme dans votre cerveau qui trouve bosses dans les voitures partout, mais seulement après ventes privees de sac à main que vous avez acquis un trou dans votre voiture. Réglez vos attentes pour trouver des vente privée 2011 lancel reuves de couples heureux. Si l'idée simple de chercher des relations heureuse cause de vous rendre dans un Trainwreck, vous avez très certainement un peu d'énergie résistant qui doit être adoucie. Avant que vous pouvez attirer loi solide de relations d'attraction, vous devez d'abord vous débarrasser de ce client energy.A résister à moi, quand j'ai demandé qu'elle recherche des signes autour d'elle deslancel vente privée
couples heureux, est immédiatement tombé dans une crise parce qu'elle n'a pas été l'un des entre eux. http://www.ventepriveelancel.com/The ferragamo coats are hot in winter. These ferragamo outlet coats are elegant and beautiful. You can shop them at ferragamo outlet online shops.
오늘 자료 발표하신 것 잘 들었고요, 스터디 모임도 좋았습니다. 감사합니다.
스터디가 필요할까 싶을 정도로 잘하시는 분들이라 긴장됩니다.
도움이 되도록 열심히 하겠습니다.