Tag Archives: 개발 Tip

PreferenceActivity에서 사용자 지정 SharedPreferences 사용하기

안드로이드 개발자라면 PreferenceActivity가 얼마나 편리한지 다들 알고 계시리라 생각합니다.  PreferenceActivity (HONEYCOMB 이상은 PreferenceFragment) 에는 컨텍스트의 기본 SharedPreferences가 제공되는데, 가끔은 다른 이름이나 다른 모드로 사용해야 할 때가 있습니다.

이럴 경우 사용하는 방법이 있습니다.  PreferenceActivity에 직접적으로 특정 SharedPreferences를 지정할 수 있는 방법이 없기 때문에, 아래와 같은 코드를 사용하면 됩니다:

public class MyPreferencesActivity extends PreferenceActivity {
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    PreferenceManager prefMgr = getPreferenceManager();
    prefMgr.setSharedPreferencesName("my_preferences");
    prefMgr.setSharedPreferencesMode(MODE_WORLD_READABLE);

    addPreferencesFromResource(R.xml.preferences);
  }
}

DDMS File Explorer를 사용해서 SharedPrefereces 이름을 확인해 보시기 바랍니다.

[번역] 진저브레드 NDK 짱!

저희는 Java로 개발된 안드로이드 어플리케이션에서 사용될 수 있음과 동시에 C나 C++로 공용 라이브러리를 빌드할 수 있는 개발도구인 초기 버전의 Native Development Kit를 2009년 7월에 출시했습니다.  그 후 지속적으로 네이티브 코드에 대한 지원을 향상시켜 왔습니다.  OpenGL ES 지원, 디버깅 기능, 다중 ABI 지원, 네이티브 코드의 비트맵 접근 등이 NDK 업그레이드마다 추가되었습니다.  그 결과는 상당히 고무적이었습니다.  3D 게임과 같은 성능이 중요한 어플리케이션 카테고리에서 엄청난 성능 향상을 체감할 수 있었습니다.

이런 종류의 어플리케이션을 Dalvik을 통해 실행하는 것은 보통 비현실적입니다.  실행속도에 대한 요구사항이 있기 때문이기도 하지만, 일반적으로 더 큰 이유는 대부분이 이미 C나 C++로 개발된 엔진에 기초하고 있기 때문입니다.   우측 그래프를 보시면 아시겠지만, NDK 만족도와 어플리케이션의 만족도는 아주 밀접한 관계가 있습니다.  이 함수의 최대값에는 제한이 없는 것을 보실 수 있습니다.  무한한 가능성이 있는 것입니다.

최신 버전의 NDK를 통해 여러분의 어플리케이션 만족도를 큰 폭으로 향상시키려고 합니다.  NDK r5에서는 네이티브 코드에 더 많은 작업을 할 수 있도록 해 주는 새로운 API들을 소개할 것입니다.  사실, 이 새로운 도구를 통해 진저브레이드 혹은 그 이후 버전을 지원하는 어플리케이션을 순수하게 C++로만 구현할 수 있게 되었습니다.   한 줄의 Java 코드 없이 전체 안드로이드 어플리케이션을 만들 수 있게 된 것입니다.

물론, 일반적인 안드로이드 API에 접근하려면 Dalvik이 필요하며, 네이티브 어플리케이션에는 VM이 백그라운드에서 운영됩니다.  NDK 인터페이스가 제공하는 것보다 많은 것이 필요하면, 언제나 JNI를 통해 Dalvik 메서드를 호출 할 수 있습니다.  하지만, 여러분이 순수하게 C++로만 작업하고자 한다면, NDK r5는 여러분이 메인 함수를 다음과 같이 작성할 수 있게 해 줄 것입니다:

void android_main(struct android_app* state) {
    // Make sure glue isn't stripped.
    app_dummy();

    // loop waiting for stuff to do.
    while (1) {
        // Read all pending events.
        int ident;
        int events;
        struct android_poll_source* source;

        // Read events and draw a frame of animation.
        if ((ident = ALooper_pollAll(0, NULL, &events,
                (void**)&source)) >= 0) {
            // Process this event.
            if (source != NULL) {
                source->process(state, source);
            }
        }
        // draw a frame of animation
        bringTheAwesome();
    }
}

(전체 작업 예제를 보시려면, NDK/samples/native-activity나 NativeActivity documentation를 참고하시기 바랍니다.)

최신 NDK는 순수한 네이티브 어플리케이션에 추가적으로 네이티브 코드에서 (OpenGL ES을 관리하는 Khronos가 관리하는 공개 표준인 OpenSL ES API) 음원을 실행할 수 있고, 일반적인 어플리케이션 이벤트(생명 주기, 터치, 키 이벤트, 센서)를 관리하고, 윈도우(윈도우 픽셀 버퍼에 직접 접근 포함)를 직접 제어하고, EGL 컨텍스트를 관리하고, APK 파일에서 자원을 직접 읽을 수 있게 해줍니다.  최신 NDK는 또한 안드로이드에서 STL 의존적인 어플리케이션을 쉽게 가져올 수 있도록 STLport를 미리 구현해 놨습니다.  마지막으로, r5는 RTTI, C++ 예외, wchar_t의 하위버전 호환지원을 추가하고 디버깅 도구를 향상시켰습니다.  이 릴리즈는 만족도 그래프를 큰 폭의 긍정적인 방향으로 바꿀 것이라 확신합니다.

저희는 실제로 멋진 어플리케이션을 개발하는 개발자들의 요청 때문에 NDK 유틸리티를 늘리기 위해 열심히 일했습니다.   이 릴리즈는 특히 게임 개발자들을 위해 디자인 되었습니다.  진저브레드와 NDK r5는 아주 최소한의 수정으로 C와 C++로 작성된 게임을 쉽게 안드로이드로 가져올 수 있게 만들어 줍니다.  r5에서 노출된 API들은 또한 미디어 어플리케이션에도 많은 혜택을 줄 것입니다.  네이티브 음원 버퍼에 접근하고 윈도우에 직접 쓸 수 있는 것은 어플리케이션이 자체적인 음원과 비디오 코덱을 구현하여 최대한의 성능을 발휘할 수 있게 해 줍니다.   NDK의 최초 버전이 출시된 후 지난해 저희가 받은 요청이 이번 버전에 구현되어 있습니다.

저희는 이번 릴리즈가 정말 멋지다고 생각하며, 여러분도 그렇게 느끼시길 기대합니다.


원문링크