레이블이 Android인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Android인 게시물을 표시합니다. 모든 게시물 표시

2018년 5월 25일 금요일

우분투(리눅스)에서 넥서스7 이용하기

안드로이드 3.X 버전부터인가 저장장치의 인식 방식이 MTP로 바뀌었다.
하지만 MTP가 윈도우에서 지원하는 방식이라나 뭐라나 해서 우분투 등의 리눅스 이용자들은 안드로이드 단말기를 이용하는데 많은 어려움을 겪게 되었다.

하지만 아래의 방법을 이용하면 손 쉽게 MTP를 이용할 수 있다. 방법의 설명은 우분투 사용자를 위한 저장소를 이용한 벙법, 그리고 다른 리눅스 배포판에서 이용가능한 벙법 순으로 하겠다.

참조: http://maketecheasier.com/connect-nexus-7-to-ubuntu/2012/12/27

우분투에서 설치 >>
1. 새로운 저장소 등록
  # add-apt-repository ppa:webupd8team/unstable
2. 목록 업데이트
  # apt-get update
3. go-mtpfs 설치
  # apt-get install go-mtpfs

일반적인 리눅스에서 설치 방법 >>
  $ sudo apt-get install golang fuse git-core libmtp-dev libfuse-dev
  $ sudo adduser $USER fuse
  $ mkdir /tmp/go
  GOPATH=/tmp/go go get github.com/hanwen/go-go-mtpfs
  $ sudo mv /tmp/go/bin/go-mtpfs /usr/bin/

이용방법 >>
1. MTP 마운트에 이용할 디렉토리 생성.
  $ mkdir Android
2. go-mtpfs를 이용한 MTP 마운트
  $ go-mtpfs Android
3. 안드로이드 단말기 패턴, 비번 등 unlock
4. Android 디렉토리에서 저장소 이용

주의점 >>
단말기를 해제하기 전에 언마운트 과정이 필요하다.
  $ fusermount -u Android

안드로이드란??

출처 : "안드로이드 플랫폼 포팅과 활용" - 전용준, 김한철,이명윤, 변태영 공저

// 안드로이드 : 구글의 휴대폰용 오픈 소스 소프트웨어 플랫폼 및 주변 도구를 의미.
운영체제부터 미들웨어, 그리고 자바 언어로 개발되는 즁요 응용프로그램, 사용자 편의 인터페이스까지 모두 포괄하는 "모바일 단말을 위한 소프트웨어 스택"이다.
말그대로 플랫폼이다.

// 특징 :
1. 안드로이드 플랫폼은 리눅스 커널을 채택하였다.
리눅스 커널에는 많은 하드웨어 메이커가 직접 제공한 디바이스 드라이버들이 있다. 리눅스 커널을 채택한 것은 많은 하드웨어에 쉽게 이식할 수 있기 때문이다.
하지만 커널 이외에는 리눅스관련 소프트웨어를 사용하지 않는다. 예를들면 구글은 표준 C라이브러리 'libc'는 BSD UNIX의 것임을 분명히 밝히고 있다.

2. 응용 소프트웨어 실행환경은 자바 가상머신 환경이며 자바언어를 사용하여 구현한다.
안드로이드의 아키텍쳐는 리눅스커널상에 네이티브코드로 동작하는 라이브러리군과 'Dalvik VM'이라 부르는 독자적인 VM실행환경, 그리고 그 위에서 동작하는 애플리케이션 프레임워크로 구성되어있다.

// Dalvik 가상머신 : 임베디드 시스템 환경을 위해 설계된 자바 가상머신으로서 기존 자바 실행파일 형식과 다른 실행파일 형식(.dex)을 사용하여 실행파일의 크기와 성능을 임베디드 시스템 환경에 최적화하였다.

// JNI : Java Native Interface

// 파일 시스템

// 메모리 구조

// 기타 참고 그림





PC, Tab, Mobile 에 따라서 dpi와 pixel을 각각 고려해서 디자인 해야 하는 이유


640*400 사이즈의 이미지의 경우 각 디바이스에 출력될때 실제 사이즈가 위와 같이 다르게 출력된다.
만약 저 이미지가 버튼이라고 한다면 모바일에서는 손톱만큼 출력되는 버튼 이미지가 태블릿에서는 손바닥만하게 출력될 수도 있다는 말이다. 따라서 이미지의 경우 각디바이스의 dpi에 따라서 아래와 같이 다르게 준비하여야 한다.
(dpi란 1 inch 당 출력되는 pixel 수를 의미한다. 위의 경우 dpi는 PC < Tab < Mobile 순이 된다.)

먼저 위의 디바이스의 경우 dpi는 아래와 같다.
     PC : 1280 / 13 = 98 dpi
     Tab : 1280 / 9 = 142 dpi
     Mobile : 1280 / 5 = 256 dpi

A.png가 버튼이미지라고 가정하고, 모든 디바이스에서 가로 2.54cm 세로 2cm 만큼 사용자에게 보여져야 된다고 가정하고
각 이미지의 가로사이즈를 얼마로 준비 해야 하는지 계산해 보면 아래와 같다.
     2.54 cm = 1 inch

따라서 각 디바이스에 해당하는 이미지 가로 해상도는 아래와 같다.
     PC : 1 * 98 = 98 pixel
     Tab : 1 * 142 = 142 pixel
     Mobile : 1 * 256 = 256 pixel

GCM 시나리오 정리(본인의 주관적인 예상)


// SENDER_ID, API_KEY 얻기
https://code.google.com/apis/console/에서 발급 받는다.
  SENDERI_ID = 234123
  API_KEY = Axd342sc34E3324AS
라고 가정 한다.

// GCM 메시지 전송과정
① REGISTRATION_ID 얻기
1) 먼저, DEVICE_MAC_ADDRESS, PACKAGE_NAME을 보내서 REG_ID가 등록되어 있는지 확인한다.
2) 등록되어 있지 않다면, SENDER_ID, DEVICE_MAC_ADDRESS, PACKAGE_NAME을 보내서 REG_ID를 등록 요청하고
생성된 REG_ID를 얻어 온다.

② REGISTRATION_ID 등록
1) THIRD PARTY SERVER에 얻어온 REG_ID를 보내서 등록시킨다.

③ GCM 전송 요청
1) THIRD PARTY SERVER에서 GCM서버에 REG_ID, API_KEY와 전달할 메세지를 보낸다.

④ GCM 전송
1) 전달받은 REG_ID와 API_KEY가 일치하는 로우를 찾아내서 해당하는 DEVICE_IP에 메세지와 PACKAGE_NAME을 보낸다.
2) DEVICE에서 메세지와 PACKAGE_NAME을 전달 받고,
PACKAGE_NAME과 일치하는 패키지의 GCMIntentService클래스의 onMessage 콜백함수가 호출된다.

// DEVICE_IP 갱신
DEVICE 가 온라인 될때마다 GCM SERVER에 DEVICE_MAC_ADDRESS, DEVICE_IP 를 보내서 새롭게 갱신시킨다.

// GCM SERVER 자료 테이블 예시
PK = {DEVICE_MAC_ADDR, PACKAGE_NAME}
DEVICE_MAC_ADDR
PACKAGE_NAME
REG_ID
SENDER_ID
API_KEY 
DEVICE_IP 
 0c:71:5d:0f:ed:98
 com.a
 3243gf561xv
 234123
 Axd342sc34E3324AS
 127.235.44.34
 0c:71:5d:0f:ed:98
 com.b
 46bfsf2gg
 234123
 Axd342sc34E3324AS
 127.235.44.34