2013년 7월 30일 화요일

Android Camera device 를 사용한 app 개발 일기

app 개발에 대해서는 아무것도 모르는 채로 시작했다고 해도 과언이 아니다.

다만, 업무상 android framework 소스를 봐왔었다는 자신감으로 생각없이 막 시작했었다.

시작할 때의 마음가짐은 'app 개발 하는데 대충 웹질하면서 긁어 붙이면 금방 만들겠지.' 였다.

그렇지만 아직 alpha 버전도 못만들어내고 있는 걸로 봐서 너무 자만했나보다.

문제는 아직도 저런 마인드가 좀 남아있다는 것;;;

한 달 가량 개발을 하면서 프로그래밍 실력이 모자라다는 것을 반복해서 깨닫고 있다.

어떻게 class 를 나눌지 어떤 일 단위로 activity 로 쪼갤지 계속해서 헷갈린다.

여튼, 본격적인 개발 일기로 정리를 해야겠다.

3명이서 만들자고 시작했고, 이번 app 의 경우 내가 메인 개발자이다.

처음 한 일

github 만들기
가입하고 사람들한테 권한 주면 완료. 자세한 설정은 동료형님이 해줬다. 평소에 git을 써오던 터라 금방 한 듯 ㅎㅎㅎ

trello 만들기
역시 가입하고 사람들 초대하면 끝. 내가 했다.
알아내야 할 것,to do, doing, done,complete 정도로 관리하고 있다. 조금 엉망이 되어가는 느낌이지만 뭐...

app 개발 환경 만들기
linux 사용하고 있던 거에 android developer site 가서 이클립스만 받았음. 다른 애들은 원래 깔려있었는데 요즘보니 걍 원클릭으로 다 받아지는듯? 게다가 그냥 프로젝트 만들자마자 돌리면 hello world 뜬다. ㅎㅎㅎ 가상머신 쓰기 싫어서 그냥 가지고 있는 실제 기계에 올려서 테스트하기 시작.

app 개발 내용
아마 이 내용이 쭉 이어질 것 같다.

# 버튼 만드는 법 웹에서 긁어오면서 이해했다. 버튼 하나 넣는데도 은근히 귀찮은 작업.
# 다른 activity로 string array list 전달하는 방법. 괜히 putExtra로 고생할 뻔했지만 더 편한게 있었음. 키워드는 putStringArrayListExtra
# intent 날려서 camera app 을 구동시켜 output 얻어오기. camera에 대하여 일체 신경쓰지 않고 mp4 ,3gp 파일을 얻어올 수 있다. 시간제한, 용량제한 가능하고.. 근데 결론적으로 현시점에서는 안쓰게 되었다. 이거는 웹에 예제가 많긴 한데 모르면 괜히 헤맨다. 키워드는 android.media.action.VIDEO_CAPTURE

 to be continue




2013년 7월 17일 수요일

git stash 작업 tip

 stash 활용

오늘 얻은 내용정리

"현재 작업과 상관없는 급한 일을 처리해야할 때"

git stash
vi ... 급한일
git commit -a -m "급한 작업내용"
git stash pop
vi ... 원래 하던 일

stash apply, drop, pop,list 등 사용가능

stash 했던 내용과 현재 내용과 diff  보는 법

git stash show -p stash@{0}

뒤에 stash@{0} 은 stash list 로 확인하여 해당하는 stash 와 비교가 가능하다.


2013년 5월 6일 월요일

git 유용한 명령어들

git diff 가지고 패치하기


$git diff --no-prefix > patchfile
$cd path/to/top/                 
$patch -p0 < patchfile           

$git diff  > patchfile
$patch -p1< patchfile

commit 취소하기

$git reset HEAD^

$git reset HEAD^2

$git reset --hard HEAD^ (작업내용 날리면서 원복)

git reset 한 것 되돌리기


$ git branch <new branch> HEAD@{1}
$ git branch mybranch HEAD@{1}

지운 branch  되살리기


Deleted branch temp (was 4160aa).
$ git branch <new branch> <commit>
$ git branch mybranch 4160aa

2013년 4월 1일 월요일

ld : cannot find lz

Complie Android in Ubuntu 64

error message :

ld : cannot find lz

solution:

apt-get install lib32z-dev

or

apt-get install lib32z1-dev

2013년 3월 19일 화요일

Android app 이 3D 화면을 출력하는 과정 (surface flinger 와 EGL, GRALLOC)

app 이 surface flinger 에게 그릴 공간을 달라고 한다.

surface flinger 가 gralloc 에게 메모리를 달라고 한다.

gralloc(제조사가 만든다. 대부분 코드 비공개)이 메모리를 할당한다.

surface flinger 는 받은 메모리를 surface 로 만든다.
(struct surface 에 정보를 채우고 메모리 연결)

app 은 surface 를 받아왔다고 EGL 에게 알린다.

EGL(제조사가 만든다. 대부분 코드 비공개) 은 OpenGL ES 가 surface 에 달린 메모리를 사용할 있도록 한다.

이 때 부터 app 은 정상적으로 OpenGL API 를 사용할 수 있다.

app 이 여러 OpenGL API 를 통해서 surface 에 그림을 그리고 EGL 에게 다그렸다고 알린다.
실제 그림 그린 메모리가 반영된다.

그리고 나면 surface flinger 가 메모리(surface)를 가져다가 다른 app 들의 surface 와 합쳐서
화면에 출력한다.



2013년 3월 6일 수요일

bash 에서 return 값 확인하기

bash shell script 를 사용할 때 여러 개의 script 를 연결하다가 보면

"특정 script가 실패했을 때" 라는 조건을 걸고 싶을 때가 있다.

일반적으로는 내가 만든 script 가 내부적으로 실행했던 script 가 실패하면,

내가 만든 scrpit 까지 동작이 멈춰버린다.

이 때 return 값을 check 하게 하니 내부적을 실행한 scrpit 가 실패해도

내 scrpit 가 계속 진행한다.
(예시: VAL=`test.sh; echo $?` 하면 test.sh 가 실패해도 계속 진행한다.)

bash 에서 return 값을 check 하는 방법은

$?

를 보면 된다.

2013년 2월 19일 화요일

ubuntu 에 jdk 간편하게 설치하기

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer

$ sudo add-apt-repository ppa:ferramroberto/java
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk sun-java6-plugin