android emulator kernel build

안드로이드의 예뮬레이터는 qemu를 안드로이드에 맞게 패치된 버전입니다.
안드로이드 커널도 패치된 qemu에 맞는 커널이 설치 되어있습니다.

기본 커널은 일반적인 피처들만 활성화 되어 있기 때문에 예뮬레이터 수준에서 이짓저짓을 해 볼려면 커널을 컴파일 해야 하는 경우가 있습니다.

repo를 이용하여 안드로이드 풀 소스를 다운로드 할 경우 커널은 다운로드 하지 않으므로 다음과 같이 다운로드 하셔야 합니다.

git를 이용하여 커널 소스를 다운로드, goldfish 버전으로 체크아웃을 하시면 됩니다. Continue reading

android에서 OOM Killer 회피하기

Android가 너무 자주 버전업이 되면서 내부적으로도 많은 부분이 너무 자주 바뀌는것 같아요..
주 업무가 안드로이드 단말 테스팅 툴 개발이라 이럴때마다 일 하기 싫어집니다.ㅠㅠ

2.1/2.2 버전은 화면에 UI를 그리고 있는 Activity/Service에 한해서는 OOM Killer를 피해갈 수 있었는데, 2.3 버전 부터 화면에 UI를 그리고 있어도 OS가 판단하기에 정리대상이라고 생각되면 OOM Killer에 의해서 프로세스가 킬 됩니다.

안드로이드의 OOM Killer(Out-Of-Memory Killer)는 기본적으로 Linux의 OOM Killer와 같은 컨셉입니다.

그렇다면 OOM Killer을 피해 갈 수 있는 방법은 무엇인가? Continue reading

android.uid.system 사용시 SD카드

1
2
3
4
5
6
7
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.idccc.blahblah" android:sharedUserId="android.uid.system">
  <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
    ....
  </application>
  <uses -permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>

android:sharedUserId 를 사용하여 앱에 특정 권한을 부여 했을 경우 퍼미션을 셋팅하여도 SD카드를 사용할 수 없게됩니다.

예를들어 system 권한으로 돌아가는 앱에 다음과 같은 코드가 있으면 예외를 발생 시켜요.

if(mConfig.mAppProfiling &amp;&amp; Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
	Debug.startMethodTracing("trace_" + new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()));
}

Debug.startMethodTracing() 메서드는 sd카드에 trace 파일을 생성하기 때문에 sd카드를 사용 할 수 없어 예외가 발생…

system권한에 대한 보안상의 이유로 막아 둔 듯한데 사용할 수 있는 방법이 있습니다.
Continue reading

install_failed_shared_user_incompatible

안드로이드 플랫폼과 같이 컴파일 되어야 하는 소스를 별도로 빌드 했을때 다음과 같은 문제가 발생됩니다.
정확히는 android:sharedUserId를 사용하는 앱의 sign이 안드로이드 플랫폼의 sign과 달라서 발생되는 문제예요.

froyo 기준으로 frameworks/base/services/java/com/android/server/PackageManagerService.java 파일을 열어보면 다음과 같이 확인 할 수 있어요.

private boolean verifySignaturesLP(PackageSetting pkgSetting, PackageParser.Package pkg) {
    if (pkgSetting.signatures.mSignatures != null) {
        // Already existing package. Make sure signatures match
        if (checkSignaturesLP(pkgSetting.signatures.mSignatures, pkg.mSignatures) !=
            PackageManager.SIGNATURE_MATCH) {
                Slog.e(TAG, "Package " + pkg.packageName
                        + " signatures do not match the previously installed version; ignoring!");
                mLastScanError = PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE;
                return false;
            }
    }
    // Check for shared user signatures
    if (pkgSetting.sharedUser != null &amp;&amp; pkgSetting.sharedUser.signatures.mSignatures != null) {
        if (checkSignaturesLP(pkgSetting.sharedUser.signatures.mSignatures,
                pkg.mSignatures) != PackageManager.SIGNATURE_MATCH) {
            Slog.e(TAG, "Package " + pkg.packageName
                    + " has no signatures that match those in shared user "
                    + pkgSetting.sharedUser.name + "; ignoring!");
            mLastScanError = PackageManager.INSTALL_FAILED_SHARED_USER_INCOMPATIBLE;
            return false;
        }
    }
    return true;
}

sign이 달라서 발생되는 문제이기 때문에 플랫폼 certificate로 sign을 하면 됩니다-

Continue reading

Eclipse에서 GUI 환경 프로그래밍.

WindowBuilder 라는 플러그인을 사용하여 편하고 쉽게 GUI 환경 프로그래밍을 할수 있습니다.

우연히 알게된 플러그인인데 너무 좋은것 같습니다.
eclipse에서 개발되고(?) 있는 Visual Editor, Graphical Editor Framework 를 써봤는데 이게 더 멋진거 같아요.-ㅁ-
Swing는 물론 SWT 개발까지 가능하네요.:)

RandomAccessFile의 readLine()으로 한글 출력하기.

회사에서 할짓 없어서 공부합니다 요즘;;
리눅스의 /bin/tail -f <file> 를 자바로 구현 해볼려고 RandomAccessFile의 메서드를 하나씩 격어보고 있는데..
RandomAccessFile의 readLine()로 파일을 한줄씩 읽어들일경우 한글이 다 깨지는 현상이 발생 합니다.

이것을 해결해 주기 위해서는

new String(result.getBytes(“8859_1″), “EUC-KR”)

사용하여서 문자셋을 셋팅해주면 되더군요;;

이것때문에 하루종일 삽질.-ㅁ-
초보는 힘들어.ㅠㅠ

WordPress 1.5 – Strayhorn

WordPress로 이사왓는지 1주일이 조금 넘었는데 WordPress가 버젼업을 해버려서 템플릿도 새로 만들었습니다;;
1.2에서는 테마 기능이 없었는데 1.5로 넘어오면서 테마기능이 생겨버려서 1.2의 템플릿을 1.5용 테마로;;

1.2에 비해 1.5는 어드민 페이지가 대폭 개선 된거 같습니다.
대쉬보드라는 카데고리가 새로 생성되었고 Write에는 Post외에 static page를 만들수 있게 된거 같습니다.
그 외에는 Presentation이라고 theme를 컨트롤 할수 있는 카데고리가 생성되어 있습니다.

1.2 -> 1.5 로 업그레이드 방법은 codex.wordpress.org를 참고 하시면 됩니다.

아- 뿌듯하다?

3년만에 b2에서 WordPress로 업그레이드..
삼일동안에 걸쳐 WordPress를 설치하고, 스킨까지 완성.!
b2에서 파생된 놈이라서 b2처럼 간단 할줄 알았는데.. 쫌 복잡하더라?

그리고 이전에는 스크롤바 색이나 body를 하나로 통일 하기 위해서만 사용하던 css..
근데 이놈이 상당히 매력있는 녀석이더군.^-^

한글 관련 자료도 하나도 없어서 혼자 삽질해서 만들어 놓고 나니까 정말 뿌듯하다? ^^

그리고 배경으로 원톤 그라이데이션을 사용한 것 보고, 투톤 그라데이션을 알려준 동생 고마워.ㅎㅎㅎ

즐겨찾기 달다.!

새해가 밝았습니다. 모두들 복 많이 받으시고 매일매일 해피하세요.^-^

설날이라도 똑 같은 일상중인 나.-_-;; 할일 없어서 즐겨찾기를 달았다.! 즐겨 찾기 달 때 참 애매한 것이 정렬방법.. 알파벳순으로 할까 하다가 결국은 최초 방문날짜로 정렬했다.^^

내가 사교적이지 못한 것도 아닌데 마음에 드는 여러 블로그들을 한, 두 번씩은 방문을 하다가 이상하게 그 횟수가 더 늘어나는 블로그는 잘 없는 것 같다.-_-a 솔직히 말하면 즐겨찾기에 추가된 블로그들도 내 블로그에 오셔서 남겨주신 코멘트를 보고, 답변 코멘트를 달고 제가 그분의 블로그를 방문하는 그런..-_-;; 그래도 지금 즐겨찾기에 있으신 분은 한번씩 생각날 때 꼭! 방문 하는 블로그들이다. 그리고 즐겨찾기를 추가함으로써 등록된 블로그에 내가 먼저 방문하고, 많은 블로거 친구분들이 생겼으면 한다;;;;

즐겨찾기도 모듈형태로(Hack) 만들었으며 그 기능이 완성(?) 되면 공개할게요~ 현재는 제가 수동으로 DB에 정보를 입력해야 하는방식;;;