2009년 12월 28일 월요일

Parcelable을 사용할때 주의점

1. read와 write 순서를 주의한다.

2. 멤버 변수로 boolean은 사용하지 않는다.

3. boolean은 byte또는 int로 변환해서 캐스팅 할수 있게 수정한다.

public class TestPacel implements Pacelable {

    boolean _Example;

    public boolean is_Example(){

        return _Example;

    }

    public void set_Example(boolean example){

        _Example = example;

    }

}

이것을 다음과 같이 변형한다.

 

public class TestPacel implements Pacelable {

    byte _Example;

    public boolean is_Example(){

        if ( _Example == 0 ) {

            return false;

        }

        return true;

    }

    public void set_Example(boolean example){

        if ( example == false ) {

                _Example = 0;

        }else{

                _Example = 1;

        }

    }

}

 

 

4. Message의 setData에 Parcel을 추가 하지 않는다.

Message msg = new Message();

msg.what = CMD_TEST

Bundle data = new Bundle();

data.putParcel("xxxx",yyyyy);

msg.setData(data);

Intent targetIntent = new Intent( blahblah_receiver);

targetIntent.putExtra("EXTRA_MSG",msg);

sendBroadcast(targetIntent);

 

이렇게 데이터 전달을 하게 되면 받는 곳에서 마샬링 에러가 뜬다.

(android 1.6까지 해당)

 

이렇게 바꾸면 문제 없다.

 

Message msg = new Message();

msg.what = CMD_TEST

Bundle data = new Bundle();

data.putParcel("xxxx",yyyyy);

Intent targetIntent = new Intent( blahblah_receiver);

targetIntent.putExtra("EXTRA_MSG",msg);

targetIntent.putExtra("EXTRA_DATA",data);

sendBroadcast(targetIntent);

 

리시버쪽에서는

public void onReceive(Context context, Intent intent) {

 

    Message msg = intent.getParcelableExtra("EXTRA_MSG");
    Bundle data = intent.getParcelableExtra("EXTRA_DATA");

    msg.setData(data);

    process(msg);

}

요런식으로 처리 하면 된다.

2009년 9월 30일 수요일

리눅스 파일 찾기

$find . -name 찾을파일

현재 폴더 아래에서 *.h 인 파일을 전부 찾으려면
$find . -name *.h

현재 폴더 아래에서 *.h 인 파일에서 CONFIG_가 들어가있는 것을 찾을려면
$find . -name *.h|xargs egrep -e CONFIG_

이러면 되더라...

2009년 9월 29일 화요일

리모트 디버깅

virtual Box 상의 이미지 또는 실기와 리모트 디버깅 하기

모두 wifi또는 lan으로 네트웍 연결이 되어 있어야 한다.

adb가 동작하는 PC와 같은 서브넷에 들어 있어야 한다.

Windows Command Prompt 상에서

SET ADBHOST=<버츄얼 박스 또는 실기 IP> 한 다음

tools>adb kill-server
tools>adb devices

하면 장치가 잡힌다.

물론 안드로이드에 adbd가 떠 있어야 한다. (당연한건가..)

2009년 9월 16일 수요일

프로세스당 메모리 할당(?)

각 프로세서당 16MB 가 최대 사용할수 있는 메모리이다.

뭔가 좀 크게 만들려면 JNI를 통해 메시지를 주고 받던가 해야 할것 같다

SD CARD 이미지 만들기

SDK_PATH/tools 폴더에 mksdcard 라는 실행 파일이 있다.

$./mksdcard 128M sdcard.img라고 해 주면 128메가 SD카드 이미지가 만들어진다.

안드로이드 SDK 1.6

어제 밤에는 없었던 안드로이드 SDK 1.6이 방금 사이트에 가보니 새로 올라 왔네요

ADT도 새로 올라왔고 뭐가 변한건지 한번 확인해 봐야 겠습니다.

이클립스용 플러그인 ADT도 업데이트 되었습니다.

이클립스에서 Install new Software 를 통해 업데이트 하면 됩니다.

업데이트 하면 기존의 AVD Manager메뉴가 약간 바뀝니다.

그리고 1.1 버전을 지원하지 않게 됩니다.

2009년 9월 11일 금요일

안드로이드 소스 빌드 for x86

x86용 안드로이드 소스 빌드를 하며 이것저것 수정 했던 기록 입니다.

참고한 글은 kandroid의 인베인님 글이며  다음과 같습니다.

http://groups.google.co.jp/group/android-porting/browse_thread/thread/66862bdb52dac936

위 링크의 글을 보며 빌딩을 하면서 다음과 같은 부분에서 헤맸습니다.

1. repo가 없다.. 어디서 받아야 하는가
 - 이부분은 kandroid의 들풀님 글에서 찾아 해결했습니다.
  $ sudo apt-get install git-core gnupg      
  $ curl http://android.git.kernel.org/repo >~/bin/repo
  $ chmod a+x ~/bin/repo

2. javac 버전관련 오류
 - 이 부분은 소스 빌드할때 java-sdk 5 만 설치해서 컴파일 하는 것으로 넘겼습니다.
 - java-sdk 6 이 같이 설치 되었을때는 /usr/lib/jvm/java-1.5.0-sun/bin에 있는 해당 파일들을
   sudo update-alternatives --config <실행파일명> 을 해서 기본으로 1.6에 맞춰져 있는 것을
   전부 1.5로 변경해 줬습니다. (실행파일들이 제법 많습니다.. 전부 변경해 주세요)

   <java6 으로 변경하기>

   $sudo update-java-alternatives --set java-6-sun <--이 방법을 쓰면 한번에 전부 변환 되더군요.

   <java5 로 변경하기>

   $sudo update-java-alternatives --set java-1.5.0-sun


3. local_manifest.xml을 수정하는 부분
 - 기본적으로 repo sync가 막 끝났을때는 local_manifest.xml이 존재 하지 않습니다
   ~$gedit ./.repo/local_manifest.xml 을 실행하여 복사해 넣으면 되는데 그냥 위 링크의 글을 복사하면
   줄넘김이 들어가기 때문에
   <project name="platform/vendor/asus/eee_701" path="vendor/asus/eee_701"/>
    이렇게 윗줄이 1줄이 되어야 합니다. (안그러면 피봅니다.)

4. make -j2 installer_img 를 하면 파일 이름을 바꿔주라는 메세지가 나옵니다.
   $cd vendor/asus/eee_701
   $mv Android.mk AndroidBoard.mk 를 하여 이름을 변경해 줍니다.

5. 그리고 external/e2fsprogs/Android.mk를 수정합니다.
  ifneq ($(TARGET_SIMULATOR),true) 되어 있는 첫 줄을
  ifeq ($(TARGET_ARCH),x86) 로 변경 해 줍니다.

  그리고 2번째 줄의 주석을 풀어 줍니다.

  ifeq ($(TARGET_ARCH),x86)

  include $(call all-subdir-makefiles)

  endif

 

6. vendor/asus/eee_701/eee_701.mk에서 generic_with_google.mk를 generic.mk로 변경

7. 이제 다시 빌드 하면 안드로이드 x86용 이미지가 만들어 집니다.

8. 하지만 아직 패치 안된 것들이 많기 때문에
   http://code.google.com/p/patch-hosting-for-android-x86-support/downloads/list
   위의 주소에서 패치들을 받아 소스에 적용해서 한번 더 만들어 주면 됩니다.