노블의 개발이야기

[Android] Android O - Privacy 본문

Android

[Android] Android O - Privacy

더플러스 2017. 8. 9. 13:56

Android O는 플랫폼에 다음과 같은 개인정보 관련 사항을 변경합니다.

ANDROID_ID

이제 플랫폼이 식별자(ANDROID_ID)를 다르게 처리합니다.

Android O의 버전(API Level 26)에 OTA 이전에 설치된 앱의 경우

  • OTA 이후에 앱을 제거했다가 다시 설치하지 않는 한 ANDROID_ID의 값이 그대로 유지됩니다.
    • Android O 이전 기기에 앱을 설치 후 Android O로 업데이트 되면 ANDROID_ID가 유지되나 재설치하면 다른 값으로 변경됩니다.
    • 개발자는 Key/Value Backup을 사용하여 기존 값과 새 값을 연결하여 OTA 이후에 제거하는 과정에서 값을 보존할 수 있습니다.

Key/Value Backup

  • Android 2.2(API 8)부터 앱 데이터를 클라우드에 백업 할 수 있는 방법으로 Key/Value Backup 기능을 제공합니다.
  • Key/Value Backup 기능은 Android Backup Service에 업로드하여 보존합니다.
  • 데이터 양은 사용자 당 5MB로 제한되며 백업 데이터를 저장하는데 비용이 부과되지 않습니다.

Android O를 실행하는 기기에 설치된 앱의 경우

  • ANDROID_ID의 값은 이제 사용자뿐 아니라 앱 서명 키별로 범위가 지정됩니다.
    • Android O 에서는 ANDROID_ID를 생성하기 위해 패키지 이름과 앱 서명을 사용하게 됩니다. 따라서 동일한 기기에서 실행 중인 다른 서명 키가 있는 앱은 ANDROID_ID가 다릅니다.
  • ANDROID_ID의 값은 앱 서명 키, 사용자 및 기기의 각 조합에 대해 고유합니다.
    • Android O 기기에서 설치되고 재설치하면 ANDROID_ID는 그대로 유지됩니다.
    • 패키지 이름과 서명이 동일하게 유지되는 한 ANDROID_ID의 값은 동일하게 유지됩니다.
  • 동일한 기기에서 실행 중인 다른 서명 키가 있는 앱은 (사용자가 동일하더라도) 더 이상 동일한 Android ID를 보지 못합니다.

시스템 업데이트로 인해 패키지 서명 키가 바뀌더라도 ANDROID_ID의 값은 변경되지 않습니다.

net.hostname

net.hostname 시스템 속성을 쿼리하면 null 결과가 발생합니다.

public static String getHostNameFromBuildClass() {
    try {
        Method getString =Build.class.getDeclaredMethod("getString", String.class);
        getString.setAccessible(true);
        return getString.invoke(null, "net.hostname").toString();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
    return null;
}

public static String getHostNameFromSystemProperties() {
    // String str = SystemProperties.get("net.hostname");
    try {
        Class<?> clz = Class.forName("android.os.SystemProperties");
        Method get = clz.getMethod("get", String.class);
        return (String) get.invoke(clz, "net.hostname");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
    return null;
}

...
Log.d(TAG, "Host Name From Build.class: " + getHostNameFromBuildClass());
Log.d(TAG, "Host Name From SystemProperties: " + getHostNameFromSystemProperties());

Android 7.0 API 24 :

  • Host Name From Build.class: android-7b3144b3f9dafa97
  • Host Name From SystemProperties: android-7b3144b3f9dafa97

Android O Preview :

  • Host Name From Build.class: unknown
  • Host Name From SystemProperties:
Comments