2010년 6월 24일 목요일

Launcher를 eclipse에서 빌드 하기

git에서 소스를 받으면 Launcher가 있습니다.
하지만 Eclipse에서 빌드가 되지 않습니다.

그래서 Eclipse에서 빌드하는 방법을 알아 보겠습니다.

android를 빌드 할 수 있는 Linux Host PC가 있어야 합니다.
환경 설정이 끝나면 빌드를 해 둡니다.

Eclipse에서 Launcher란 프로젝트를 생성하고 [git folder]\packages\apps\Launcher 폴더의 내용을 덮어 씁니다.

main.xml이 error가 납니다. main.xml을 삭제합니다.

이제 부터 eclipse상에서 빌드 에러 나는 부분을 하나씩 정리 하도록 하겠습니다.

수정 해야 할 path는 frameworks/base/core/java 폴더 입니다.

frameworks/base/core/java/android/app/Dialog.java:998:
frameworks/base/core/java/android/app/StatusBarManager.java:29:
frameworks/base/core/java/android/app/SearchManager.java:1282:
frameworks/base/core/java/android/view/View.java:1500:
frameworks/base/core/java/android/view/View.java:1552:
frameworks/base/core/java/android/view/View.java:1560:
frameworks/base/core/java/android/view/View.java:1568:
frameworks/base/core/java/android/view/View.java:1576:
frameworks/base/core/java/android/view/View.java:1585:
frameworks/base/core/java/android/view/View.java:1593:
frameworks/base/core/java/android/view/View.java:1696:
frameworks/base/core/java/android/view/inputmethod/InputMethodManager.java:761:
frameworks/base/core/java/android/os/Vibrator.java:29:
frameworks/base/core/java/android/widget/CursorAdapter.java:53:
frameworks/base/core/java/android/content/Context.java:1240:
frameworks/base/core/java/android/content/DialogInterface.java:97:
frameworks/base/core/java/com/android/internal/util/XmlUtils.java:35:

위에 나열된 파일의 line을 보면 @hide가 있습니다. 이부분을 삭제하고 make sdk를 통해 sdk를 만듭니다.

완료가 되면 out/hos/linux-x86/sdk/android-sdk_[lang].[user]_linux-x86.zip이 생성 됩니다.

압축을 풀면 android.com에서 받은 sdk와 동일 구조의 폴더가 생깁니다.

linux에서 빌드된 sdk를 윈도우 버전으로 만드는 방법도 있습니다.

간단하게 기존 sdk에서 [android sdk root]/platforms/android-7/android.jar와 [android sdk root]/platforms/android-7/data/layoutlib.jar를 덮어씁니다.

layoutlib.jar에는 com.android.internal.util.XmlUtils와 같은 anroid.jar에 포함되지 않는 몇몇 class들이 들어 있습니다.

여기서 부터 제가 엄청 삽질 했던 부분입니다. 처음에는 Properties에서 Add JARs...를 통해 layoutlib.jar를 했었는데 아래 에러가 납니다.



Add JARs..가 아니고 Add Library...를 합니다.

아래 그림과 같이 Add Library에서 User Library를 하고 임의의 이름을 선택 후 layoutlib.jar를 선택 합니다.





그럼 몇몇 package에서 찾지 못하던 class들이 에러가 나지 않습니다.

eclipse에서 빌드는 되는데 설치 및 실행은 현재 상태로는 안됩니다. 런처를 설치 하기 위해서는 몇가지 단계가 있어 보입니다.

이 부분은 추후 수정 하도록 하겠습니다.

2010년 6월 9일 수요일

ListView.getCheckItemIds() 에러에 대해서...

안드로이드 2.1에서 ListView.getCheckItemIds()를 사용하면 return 값이 제대로 처리되어 넘어 오지 않습니다.


위에 링크를 따라 가봐도 bug report가 되어 있는 상황이다.

그래서 다른 방법으로 check된 id를 구해 오는 방법입니다.

public class TestActivity extends ListActivity {
{
private ListView mList;

protected void onCreate(Bundle savedInstanceState) {
...
mList = getListView();
...
}

protected void onPause() {
super.onPause();
List list = new ArrayList();
SparseBooleanArray a = mList.getCheckedItemPositions();
for(int i = 0; i <>
if (a.valueAt(i)) {
list.add(mList.getAdapter().getItemId((a.keyAt(i)));
}
}
}

getCheckItemIds()가 대신 getCheckedItemPositions()으로 position들을 구해서 apater에서 ids를 구해 오도록 하였다.

2010년 5월 26일 수요일

다중 모니터에서 단축키로 창 옮기기


그래픽 카드가 nVidia의 경우 nView Desktop란 프로그램에서 창을 단축키를 지정하여 창을 mouse dragging 없이 이동이 가능 하였습니다.

하지만 이번에 바꾼 노트북에는 ATI라서 이 기능을 사용하지 못하여 답답하였습니다.

듀얼 모니터 이상을 사용하시는 분들 중에 nVidia의 nView Desktop의 단축키에서 화면 이동을 사용해 보세요. 무척 편리합니다.

그래서 찾던 중 nView Desktop의 그 기능 그대로 단축 키로 창 옮기기만 구현된 프로그램이 있어서 소개 드립니다.

사실 nView의 창 옮기기만 필요한데 nView Desktop 활성화해야 합니다.

몇 년을 써본 결과 좀 무겁고 windows가 상황이 안 좋아지면 더 영향을 받았는데 이 프로그램은 nView Desktop 전체 기능을 사용하지 않고도 제가 원하는 창을 다른 모니터로 옮기기가 단축키로 가능합니다.



전 단축 키를 Ctrl + 1 으로 지정하여 사용 합니다.

2010년 5월 4일 화요일

해피빈 기부하기


"서울시각장애인복지관"콩기부 부탁드립니다.

메일 작성시 클릭한번! 정말 쉬운 콩기부!


꼭!!! 클릭한 후 메일을 보내시면 메일 한번 보내면 한 개 적립!

한 달 동안 내 아이디에 콩적립 10개 가능.

적립된 콩은 네이버메인화면 우측 상단에 해피빈 클릭한 후 기부가능


해피빈 검색창에 서울시각장애인복지관 입력 후 검색 클릭



클릭 하시고 들어오신 후 기부해주세요.




보유한 콩을 보시면 현재보유 콩이 나오구요.

가지고 계신 콩을 모두기부하셔도 되고 원하시는 만큼 기부하셔도 됩니다.


[android]odroid에 Gallay 3D 올리기...

odroid 2.1 버전에 Gallary 3D이 포함되어 있지 않습니다.

odroid에 Gallary 3D를 올려 보겠습니다.

git로부터 다운 받은 소스 트리에서 package\apps\Gallary3D란 폴더가 있습니다.

Eclipse에서 Gallary3D를 Create project from existing source로 불러 오면 overlaps the location of another project 에러 메세지가 나오면서 안됩니다.

import로 불러 오려니 .project나 .classpath가 없어서 그것 역시 안됩니다.

그래서 일단 Gallary로 new project 하고 거기에 git에 받은 폴더를 덮어 쓰시면 됩니다.



packages\apps\에 Launcher 소스도 있습니다. 오늘부터 이 소소를 분석 해봐야 겠네요.

2010년 5월 3일 월요일

[android] Home example 배경 화면 유지 하기

example 중에 Home example을 보면 Launcher의 대략적인 구조를 알 수 있습니다.
그래서 Home을 보고 이것 저것 바꿔 가면서 공부 중인데 화면이 회전 되면 배경이 지원지는 문제가 발생 합니다. 그래서 portrait에서 landscape 전화 시 배경화면이 유지도록 수정 해 보겠습니다.


portrait에서 landscape 전화 시 배경이 지워짐.


기본 개념은 wallpaper을 얻어와 서 자신의 window의 background로 설정 하는 것입니다.

private void setDefaultWallpaper() {
if (!mWallpaperChecked) {
Drawable wallpaper = peekWallpaper();
if (wallpaper == null) {
try {
clearWallpaper();
} catch (IOException e) {
Log.e(LOG_TAG, "Failed to clear wallpaper " + e);
}
} else {
getWindow().setBackgroundDrawable(new ClippedDrawable(wallpaper));
}
mWallpaperChecked = true;
}
}

이유는 모르겠지만 화면이 회전이 되면 다시 setBackgroundDrawable()을 해줘야 합니다.

화면 회전 시 Activity의 lifecycle의 onPause() -> onResume이 발생합니다.

그래서 onResume() 함수를 override 후 아래와 같이 setBackgroundDrawable()을 해 주면 됩니다.

@Override
protected void onResume() {
super.onResume();
getWindow().setBackgroundDrawable(new ClippedDrawable(getWallpaper()));
bindRecents();
}



아주 간단하게 수정이 되었지만 이 부분을 찾는 데 많이 삽질 했습니다.
덕분에 Activity, Window, View의 큰 그림을 이해하게 되었네요.

2010년 5월 1일 토요일

[android] Eclipse에서 android 및 java source code browsing하기기

위와 관련해서 인터넷을 검색해 보면 git로 소스를 받고 frameworks/base/java를 sdk를 받은 폴더에 sources를 만들고 java밑에 있는 파일을 sources에 복사 하면 된다고 나와 있습니다.
이전에 1.6버전일 때는 저 역시 이렇게 하면 됐던걸로 기억하고 있습니다.
하지만 2.1 sdk를 받고 eclipse에서 모든 update를 한 후에는 위에 방법으로 보여 지지 않습니다.
최신 버전으로 업데이트를 받고 나면 platform 폴더에 버전 별로 폴더가 생깁니다.



android-7 폴더에 sources를 만들고 거기에 git에서 받은 frameworks/base/core/java/android와 frameworks/base/java/com을 복사 하시면 됩니다.

그리고 반드시 환경 변수PATH에 android sdk 경로를 추가 해 주셔야 합니다.

그리고 이제 java 소스를 볼 수 있는 방법 입니다.
java를 설치 하고 나면 일반적으로 C:\Program Files\Java\jdk1.6.0_20\src.zip 파일 있습니다.
압축을 풀고 src/java폴더를 [android sdk]\platforms\android-7\sources에 복사 하여 주시면 됩니다.

위에 그림 처럼 android/com/java가 존재 하면 됩니다.

그외에 graphics와 같은 폴더도 동일하게 복사 해서 넣어 주시면 됩니다.