Android Ice Cream Sandwich : 홈런쳐 및 앱드로워 Life, with Android

갤럭시 넥서스를 개통하고 Android 4.0 ICS를 처음 본 순간...
한마디로 벙쪘다 -_ -ㄷㄷㄷ 나름 그간 안드로이드 파워유저 (쉬운 말로 구글빠-_-) 라고 자부해 왔는데,
이건 뭐... ㄷㄷ 뭐가 이리 많이 바뀌었는지;;
갤넥도 영국에 1차로 발매하고, 한국은 보름쯤 뒤에 발매되었지만 ICS의 실 사용에 대한 정보는 찾아보기가
그리 쉽지 않은 터라 (Geek느님들의 개발정보라면 xda에 널리고 깔렸지만;;;) 실제 사용해 보면서
딱 몸으로 느껴지는 변화점이나 사용팁들을 시리즈로 좀 정리해두면 도움이 되겠다 싶어서
죽어있는 블로그 굳이 다시 끄집어내서 쓰는 포스팅. 그 첫번째.



Android 4.0 Ice Cream Sandwich의 홈런쳐/앱드로워 리뷰


홈런쳐 모양은 기본적으로 이전 버전들과 유사하다.


1. 어플리케이션 아이콘을 배치할 수 있는 격자는 4x4.
2. 하단 Dock 에 배치 가능한 아이콘은 5개.

크게 달라진 점이라면,

1. 상단에 Google 검색창이 통합.
안없어진다 ㄷㄷㄷ 마치 "검색은 딴거 쓰지 말어잉~ ^-^" 하는듯ㄷㄷㄷ
물론, 웹 검색만 되는 게 아니라, 메시지, 주소록, 어플리케이션 등등 폰의 로컬 콘텐츠에서도 검색이 가능하다.
검색창 클릭한 뒤 [설정->검색 가능한 항목] 에서 검색 범위 지정이 가능.
2. 홈화면표시기 (Indicator)가 Dock과 홈화면격자 사이에 배치.


3. 어플리케이션 폴더 기능 추가.
개인적으로 기본 런쳐에 가장 추가되길 바랬던 기능.
아이콘을 다른 아이콘 위에 Drag-drop으로 떨구면 자동으로 어플리케이션 폴더가 생성된다.
처음엔 이름 없는 폴더가 생성되고, 폴더를 연 다음 하단의 여백을 터치하면 이름을 지정할 수 있다.
하나의 폴더에 넣을 수 있는 아이콘은 격자 사이즈와 같은 4x4=16개가 최대.

이외에 자잘한 애니메이션 효과들이 추가되었다. 아이콘을 드래그하는 동안 격자 경계선을 표시해준다거나,
1번 홈화면에서 더이상 왼쪽으로 넘기려 할 때 슬쩍 나타나는 3D 효과 등등.

* 이전에 런쳐프로를 사용하면서 잘 써먹었던 위젯/아이콘 크기 임의조절 기능은 들어가있지 않다.




런쳐는 편의적인 기능 추가와 자잘한 위치변화 정도인데 비해,
앱 드로워 (어플서랍) 는 꽤나 변화를 많이 준 모습이다.


1. 스크롤 방향 변화.
이전 버전까지의 [연속적인 세로방향 스크롤] 방식을 버리고, [스크린단위 가로방향 스크롤] 을 채택했다.
개인적으로 세로방향이 더 좋았으나, 바뀐 위젯 추가 방식(아래서 설명)을 위해서 어쩔 수 없는 선택이었겠다 싶다.
상단의 [애플리케이션] [위젯] 탭을 클릭하면 바로 전환이 일어나고, [애플리케이션] 탭의 마지막 스크린에서
오른쪽으로 드래그해도 [위젯] 탭으로 이동한다. (반대도 마찬가지)
2. 위젯 추가 방식의 변화
ICS에서는 홈화면의 빈공간을 길게 눌러서 (롱탭) 할 수 있는 거라고는 배경화면 변경 뿐이다.
위젯은 [위젯] 탭에서, 추가하고 싶은 위젯을 롱탭 하면 홈화면으로 전환이 일어나면서 빈 공간에 Drag-drop으로
배치한다. (앱 드로워에서 홈화면으로 어플리케이션 아이콘을 빼내는 방식과 같다)
이전 버전까지에서 거의 사용할 일이 없었던 앱 드로워의 사용성을 높이고, 무엇보다 위젯의 사이즈와 모양새를
미리 보고 선택할 수 있는 점이 좋은 듯. ㅎㅎ (이전 버전에서는 이게 어떻게 생겼는지 꺼내봐야 알 수 있었다)
3. 앱 드로워에 마켓 통합
[통합] 이라고 거창하게 표현하긴 했지만;;; 앱 드로워 우측상단에 마켓 바로가기가 뿅. ㅎㅎ 이거 생각보다 편하다.

안드로이드라는 녀석 자체가 상세한 사용설명서 따위를 제공하는 컨셉이 아니라,
이리저리 써볼 때마다 깜짝깜짝 놀라며 오오 하게 된다 ㅎㅎㅎ
그때그때 포스팅할 만한 꺼리를 발견할 때마다 깔짝깔짝 추가해 나갈 예정.

[펌] 프로그래머의 아내가 알아야 할 99가지 사항 미분류

1 딱 떨어지는 숫자는 2진수입니다.

2 한 손으로 31까지 셀 수 있음

3 만능이 아님

4 컴퓨터를 잘 하는게 아님

5 프로그래머라고 Office 시리즈에 정통한 것이 아님

6 아, 그 작업은 사무쪽 누님이 잘하실 겁니다.

7 가나 입력으로 변환한 다음에는 반드시 로마자 입력으로 돌려놓을 것

8 프로그램의 쓰레기 수집은 잘 하지만 자기 방의 쓰레기 수집은 잘 못함

9 멀티스레드 처리 작성은 할 수 있지만 멀티스레드 처리는 못함

10 Amazon 에서 사는 건 기술서이므로, 딱히 포장물 내용을 확인할 필요는 없음

 

 

11 쌓아놓은 책은 스택이므로 순번을 바꾸지 말것

12 오라일리 책은 「같은 책」이 아님

13 표지에 동물만 그려져 있는 책만 꽂혀있어도 그건 동물도감이 아님

14 프로그래밍을 안하는 날도 있음

15 프로그래밍 언어나 에디터에 대한 집착이 사라진다면 깨달음을 얻었거나 완전연소했거나 둘 중 하나

16 언어로 바람피우는 것과 인생의 바람피우기는 다른 것

17 「자식을 죽인다」는 말에 놀라지 말 것

18 일 관계로 전화를 할 때, 자식이 죽지 않으면 부모를 죽여버리라는 대화를 들어도 놀라지 말것

19 라이브러리라는 것은 도서관을 말하는 게 아님

20 「사이드 이펙트(부작용)」는 부정적인 의미로 사용하는 것이 아님

 

 

21 특히 「다이아몬드 상속」은 유산상속같은 이야기를 하는 것이 아님

22 괜히 보석 이름 같은 것을 중얼거려도 보석에 대해 잘 아는 것이 아님

23 루비와 펄 중에 뭐가 좋아? 라고 물어보면, 싱긋 웃으면서 펄이라고 대답할 것

24 「조금만 더하면」「거의 끝났어」라는 말이 나오기 시작하면 당분간 끝나지 않을 것이라고 생각할 것

25 갑자기 혼잣말을 하기 시작해도 정신이 이상해진 것이 아님

26 PC 를 보고 있는 남편에게 말을 걸어도 되는 타이밍인지 아닌지 외견으로 판단하는 것은 포기하는 것이 좋음

27 23-24시 정도가 가장 활발함

28 HP 는 항상 0에 수렴함

29 회사와 집의 구별이 그다지 없고, PC 앞에 있는가 없는가의 구별 밖에 없음

30 스스로가 정보수집과 오락의 경계선을 이해하지 못함

 

 

31 몬스터헌터는 업무

32 애니메이션 보는 것은 업무

33 일을 하는 것처럼 보이지만 실은 인터넷을 하는 것 뿐임

34 주말에도 스터디에 간다고 하는 것은 공부를 열심히 한다는 증거, 가사가 싫어서 그러는 게 아님

35 한밤에 긴급전화가 왔다면, 다음날부터의 예정은 캔슬이라고 생각합시다

36 밤중에 갑자기 사라져도 그냥 장애 대응하러 간 것임

37 오전중에 돌아오는 일이 많아져도 바람피우는 것이 아닌지 의심하지 말것

38 주말에만 사복으로 「출근」했다고 바람피우는 것이라고 의심하지 말 것

39 결혼식장에서 신랑이 사라져도 당황하지 말것. 고객이 호출한 것 뿐임

40 정시퇴근은 도시전설

 

41 「귀가한다」「귀가할 수 있다」라는 말은 별 도움이 안됨

42 10일 정도 돌아오지 않아도 당황하지 말 것

43 감금같은 걸 당해도 빚이 있어서 그러거나 한 게 아님

44 가끔씩 일찍 돌아와도 잘렸을 걱정은 하지 말 것

45 여름 휴가 언제야? 라고 묻지 말 것

46 Twitter 의 post 빈도 감소나 내용에서 상대가 얼마나 바쁜지 추측해서 위로할 것

47 화재나 행진같은 것에 트라우마를 갖고 있을 것

48 남편 급여의 직능급과 기본급과 잔업수당의 비율

49 노동기준법

50 OA 기기라고 적힌 우편물은 절대로 OA 기기가 아님

 

51 PC 나 휴대폰, iphone 에 패스워드 락이 걸려있는 것은 보안대책을 위해서. 바람을 핀다거나 야한 것을 숨기고 있는게 아니랍니다( ^ω^)

52 컴퓨터는 이미 집에 있잖아, 라고 하지 마시길. 당신이 갖고 있는 구두나 가방과 같은 것입니다.

53 한밤중에 컴퓨터로 동영상을 보면서 싱글거리고 있다면, 그것은 분명 Apple 의 신제품 발표이므로 신용카드를 몰수하는 것이 좋음

54 스티브 잡스의 프리젠테이션이 있는 다음날 아침에 갑자기 개최되는 가족회의에서 제출하는 안건에 대하여 「다른 집은 다른 집이고 우리 집은 우리 집이야!」라고 기각할 것

55 뭐가 뭔지 알수 없는 T 셔츠를 남편이 계속 가져와도 적당히 버리거나 하지 말 것

56 컴퓨터 책상에 놓여있는 피겨나 프라모델은 버리지 말 것

57 그것은 잡동사니도 부서진 물건도 아님

58 키넥트를 사려고 하는 것은 유저 인터페이스 연구 때문에

59 러브 플러스를 하는 것은 유저 인터페이스 연구 때문에

60 사용자 경험(UX)인지 뭔지 하는 주제에 CUI 를 좋아함

 

61 LCD 가 달려있는 작고 비슷하게 생긴 기계를 잔뜩 갖고 있어도 전부 다른 물건이며 각자 의미가 있습니다

62 동작검증을 하기 위해서는 신제품이 필요하며, 그것은 Amazon 에서 배달됨

63 옥션 사용방법을 숙지하고, 남편이 사온 장난감을 팔아치워 용돈으로 씁시다

64 생일 선물은 원하는 물건을 미리 말해두지 않으면 신제품 디지털 가전(Gadjet)을 받게 됨

65 깜짝 선물을 준비하고 싶다면 남편의 Amazon 위시 리스트를 조사함

66 iPhone 앱, Android 앱, Web 사이트를 만들었다는 이야기를 들으면 뭐가 뭔지 몰라도 상냥하게 대답해줄 것

67 쓸데없이 하이텐션으로 의미를 알 수 없는 소리를 지껄일 때에는 단순히 흥미 깊은 기술이 나와서 텐션이 높아진 것 뿐이므로, "잘 모르겠지만, 대단하다는 건 알겠다"라고 대답해주세요

68 갑자기 이상한 어휘가 늘었다면 니코니코 동화같은 데애서 유행하고 있는 것이라고 추측하시길

69 남편의 HN 과 본명을 이어보려고 해서는 안됨

70 남편의 블로그의 과거로그를 음독해서는 안됨

 

71 남편의 HN 으로 검색해서 흑역사를 알아서는 안됨

72 「우리 마누라가…」라고 했을 때, 그것은 프로그래머 사이에서 통용되는 전문용어입니다. 당신을 말하는 것이 아닙니다

73 오타쿠라고 하면 필요 이상으로 싫어하지만, 긱(Geek)이라고 말하면 기뻐합니다

74 침울해하고 있을 때는 「컴퓨터를 조작해서 ○○할 때 마우스를 쓰지 않고 키보드만으로 하려면 어떻게 해야해?」라고 물으면 기뻐하면서 가르쳐 줄 것입니다

75 「시뮬레이션」이라고 말하면 혼나므로 주의할 것

76 이상, 이하, 미만, 보다 위, 보다 아래를 대충 섞어쓰면 기분이 나빠짐

77 프로그래머는 「절대로」「뭔가 이상해졌어」「아무것도 안했어」같은 말에 과잉으로 반응합니다. 홧병, 쇼크사, 자살의 위험성이 있으므로 이런 말을 사용할 때에는 세심한 주의가 필요합니다

78 부부싸움할 때 최대의 무기는 화이트 보드

79 어쩌다 아내의 방식에 불만을 표시하면 「그건 사양(仕?)이예요」라고 대답함

80 남편이 이건 사양이라고 말하면 그 사양은 변경되었습니다 라고 대답할 것

 

81 싸워서 꼭지가 돌아버렸을 때에는, 네트워크 회선을 끊어버리는 것이 가장 손쉽고 효과적으로 분노를 표현하는 방법입니다.

82 가능하면 아내와의 대화를 자동화시키고 싶어 함

83 아내에게는 사양 변경이 붙는 법

84 홈 서버를 가리키면서 쓰지도 않는데 왜 항상 전원이 켜져 있는 거야 라고 묻지 말 것

85 연락수단은 전화<<<<<(넘을 수 없는 벽)<<<<메일<<<<<<<IRC, Skype, etc

86 Google Calender 에서 상대의 스터디 스케쥴을 파악할 것

87 집안 예정은 남편이 지정한 그룹웨어로 공유할 것. 구두(口頭)로의 통지만으로는 위험

88 남편이 해야할 것은 데스마치(죽음의 행진)이 아닌 여유가 있을 때 기억시켜두지 않으면 답이 없음

89 가정 내의 중요한 스케쥴을 끼워넣고 싶을 때에는 마감 근처의 주말은 피합시다. 어차피 집에 못 돌아옵니다

90 남편이 전문분야인 화제에는 신중하게 접근할 것

 

91 친구 관계의 잡담을 할 때에는 상관관계도를 그려주면 이해가 빨라집니다

92 단순히 이야기를 들어주기 바랄 때에서는 그렇게 명시할 것

93 동의해주기 바랄 때에 분석되어 정론을 들어도 화내지 마시기 바랍니다

94 요건은 항목별로 적어서 전하지 않으면 프로그래머 스스로가 버그를 냄

95 밤생활이 불만이면 Redbull 을 내밀어봄

96 정기적으로 자식들에게 이게 아빠야 하면서 사진을 보여주세요

97 남편이 「프로그래머의 아내가 알아야 할 97가지」같은 걸 트윗해도 신경쓰지 말 것

98 읽어보라고 한 97가지의 절반 이상이 뭔 소리인지 몰라도 어쩔 수 없음

99 이러니저러니 해도 아내를 사랑함. 하지만「쪽팔려서 말 못해」라고 생각해서 말로 표현하지 않을뿐.


출처는 요기


'호옹이' 원본 Take a rest

요즘 자꾸 물어보는 사람이 많아서.. -ㅅ-)


Android Source Tree Mobile Dev

bionic

 

- BSD libc 개선 (bionic libc)

bootable

 

bootloader & disk installer

build

 

1. Android Build script & linker directive

    (core/prelink-linux-arm.map)

   - .so file 어떻게 구성하는지

   - android application 동작할  사용되는 각종 library(.so)들이 로딩되는

번지를 미리 지정한 파일 

   이유: shared library static library처럼 쓰기 위한 것 로딩속도를 빠르게 하기 위함       

    참고) dll  start address 없다

            static으로 하면 빠르다.

   kissuu) android 이유없이 죽을때가 있음.

      --> map file 상의 size를 넘어갔을경우     

                        

  2. generic board 대한 configuration

    (1) build/target/board/generic/AndroidBoard.mk

    - root filesystem 구성을 어떻게 해야하는가?? 대한 directive 파일

    - android 최종 결과물 구성서 자동으로 포함하고 싶은 binary들에 대한 install등을 결정

    - custom init.rc 혹은 init.%hardware%.rc 파일들의 install

 

    (2) build/target/board/generic/BoardConfig.mk

    - Android의 Makefile에 기본적으로 포함되는 최상위 Makefile

    주로 HAL enable/disable 관련이 깊음

    - Android.mk 파일에 영향을 주고 Android.mk 파일에서 define 제어할  있도록 설정하는 파일

   (ex> 

    ▪ BoardConfig.mk 의 BOARD_USES_GENERIC_AUDIO := true

    ▪ frameworks/base/libs/audioflinger/Android.mk 

            ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)

              LOCAL_CFLAGS += -DGENERIC_AUDIO

            endif

    ▪ frameworks/base/libs/audioflinger/AudioHardwareInterface.cpp

            #ifdef GENERIC_AUDIO

                hw = new AudioHardwareGeneric();

            #else

cts

 

   - Compatability Test Suite 약자

  Android platform development kit JAVA 호환성 테스트

dalvik

 

   - dalvik vm source

development

 

개발시 필요한 utility & app

external

 

Android 고유 library 아닌 linux혹은 기존에 작성된 라이브러리/binary들의 소스를 넣어놓은 디렉토리

여기서 작성된 library  shared library(.so) binary들은 모두 system/lib, system/bin  각각 install

- framework test  app/lib 여기에 작업

frameworks

 

 /policies

- PhoneWindowManager 소스가 들어있음

- Android 전체 시스템을 background에서 제어하는 최상위 application인 PhoneWindowManager

- PhoneWindowManager KeyGuard관련 화면 전체 제어(ex> rotation) event관리

(ex> home key관련)

    /base

- Android Framework source

/libs: Android base library(C++서부터)

   /audioflinger   : Android audio service & HAL source

   /surfaceflinger : Android video service & HAL

   /ui            

    Application Framework에서 JNI를 통해서 호출되는 Android framework client  part

    HAL(Input device 경우)  - EventHub.cpp

   /utils

    wrapping class, 압축관련 유틸리티등...

   /binder 

    Android Binder & Anonymous shared memory

/cmds

   binder관련인 service manager소스와 여러가지 command

/media

   media관련 client & service library

 

hardware

 

 HAL source & include

 일반적으로 android에서 사용하는 hardware관련 소스들을 포함

 반드시  디렉토리에만 위치하는 것은 아니다

 (vendor 디렉토리에 존재하는 경우도 많음)

 

   - libhardware

   board hardware dependcy 높은 하드웨어 모듈 들

   일반적으로 안드로이드 폰에 탑재가 되지 않고, cpu 혹은

   제조사의 모듈에 dependent 한 부분들

   안드로이드 소스를 이용해서 컴파일 하지 않는 경우가 많고

   모듈단위로 직접 컴파일 해서 안드로이드 root fs

   install하는 경우가 많다.

   

   - libhardware_legacy

   일반적으로 안드로이드 폰에 거의 반드시 있어야 하는

   hardware 모듈안드로이드 컴파일시 같이 컴파일 된다.

   - wifi/wifi.c

 

out

 

android compile 결과물 디렉토리

packages

 

  android 기본 application source

  주의해야할 점은 모든 app가 컴파일 되지는 않는다.

  모든 app 컴파일 되기 위해서는

  board관련 디렉토리의 Android 기본 board mk 파일을

  수정해야한다.

  ex> build/target/product/generic.mk

                           generic_with_google.mk

                          

 vi ntc100.mk

 =========================================================

 $(call inherit-product, build/target/product/generic.mk)

 PRODUCT_MANUFACTURER := aesop

 PRODUCT_NAME := ntc100

 PRODUCT_DEVICE := ntc100

 PRODUCT_BOARD := ntc100

 =========================================================

prebuilt

 

toolchain & 필요한 binary

system (read-only)

 

android 기본 binary 소스(ex> init)

 /core/init :  android init source

 /core/vold :  external storage 제어 모듈 

     Android 2.1까지

     vold.conf 파일 참조

 /vold      : vold2, android 2.2서부터 사용    

         vold.fstab

vendor

vendor specific code

  ex> HAL

  ex> product list관리

 


Android Linux kernel source build (for NexusOne) Mobile Dev

*Prerequisites :
Android Platform source code를 local에 다운로드하고 플랫폼 소스코드 아래의 prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/ 경로를 PATH로 추가.
(커널 빌드시에는 eabi format으로 compile해주는 cross-compile toolchain이 필요함)
1. 
git clone git://android.git.kernel.org/kernel/msm.git ./kernel_msm
-> MSM kernel source 를 ./kernel_msm 에 다운로드
2. 
make ARCH=arm clean
make ARCH=arm mahimahi_defconfig
-> Clean 후, NexusOne 에 맞는 config 실행 (.config 파일을 실제 기기에서 adb pull로 추출하여 사용해도 된다. 폰에서의 파일 위치는 /proc/config.gz)
3.
make -j8 ARCH=arm CROSS_COMPILE=arm-eabi-
-> job 8개, arm 아키텍쳐, 크로스 컴파일러의 prefix는 "arm-eabi-" 로 설정.

1 2 3 4 5 6 7 8 9 10