본문 바로가기
2023년 이전/Android

android.os.properties 사용기

by JeongUPark 2019. 12. 11.
반응형

App을 개발하다 보면 android 시스템의 SystemProperties에 있는 값을 사용해야 할 때가 있습니다.(System.getProperty나 System.setProperty 랑은 다릅니다.  System.get/setProperty들은 공개되어 일반 어플리케이션에서도 사용이 가능하고 지금 설명하려는 SystemProperties는 android.os.SystemProperties과는 다릅니다.)

 

사용방법은 

 

1. 플랫폼 빌드 시 같이 빌드되어지는 시스템 app일 경우 android.os.SystemProperties를 사용할 수 있습니다.

2. 1번과 유사합니다. 플랫폼 빌드시 사용되는 키를 가지고 app을 signing 하여 app을 빌드하면 사용할 수 있습니다.

3. 하지만 제조사가 아닐경우 1번 2번의 방법은 어렵기 떄문에 reflection 방식을 사용합니다.

 public static void set(String key, String val) throws IllegalArgumentException {

        try {
            Class<?> SystemProperties = Class.forName("android.os.SystemProperties");

            //Parameters Types
            @SuppressWarnings("rawtypes")
            Class[] paramTypes = { String.class, String.class };
            Method set = SystemProperties.getMethod("set", paramTypes);

            //Parameters
            Object[] params = { key, val };
            set.invoke(SystemProperties, params);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
            Log.e(TAG, "IllegalArgumentException e: "+e.toString());
        } catch (Exception e) {
            e.printStackTrace();
            Log.e(TAG, "IllegalArgumentException e: "+e.toString());
        }

    }
 public static String get(String key) {

        String ret = "";
        try {
            Class<?> SystemProperties = Class.forName("android.os.SystemProperties");

            //Parameters Types
            @SuppressWarnings("rawtypes")
            Class[] paramTypes = { String.class };
            Method get = SystemProperties.getMethod("get", paramTypes);

            //Parameters
            Object[] params = { key };
            ret = (String) get.invoke(SystemProperties, params);

        } catch (IllegalArgumentException e) {
            ret = "";
            e.printStackTrace();
            Log.e(TAG, "IllegalArgumentException e: "+e.toString());
        } catch (Exception e) {
            ret = "";
            e.printStackTrace();
            Log.e(TAG, "Exception e: "+e.toString());
        }

        return ret;

    }

get에서 만약 값이 없을 경우에는 null이 아니라 공백은 반환합니다.

반응형