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: